├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── custom.md │ └── feature_request.md ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── next.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── src ├── components │ ├── Dropdown.jsx │ └── Editor.jsx ├── pages │ ├── _app.js │ ├── api │ │ └── translate.js │ └── index.js └── public │ ├── fonts │ ├── 3d32e753a2cefc56ce239b04cce45490.woff │ ├── 3d32e753a2cefc56ce239b04cce45490.woff2 │ ├── 5fd07762093e40beee85d22757cc6d8d.woff │ ├── 5fd07762093e40beee85d22757cc6d8d.woff2 │ ├── 7ab640c091619f9534886523d3cde66f.woff │ ├── 7ab640c091619f9534886523d3cde66f.woff2 │ ├── 855b722e0240c397005b340b1baf8780.woff │ ├── 855b722e0240c397005b340b1baf8780.woff2 │ ├── f5a1414f8fe9188766b39607d923fbb9.woff │ └── f5a1414f8fe9188766b39607d923fbb9.woff2 │ ├── libs │ └── languages.json │ └── styles │ └── globals.css └── tailwind.config.js /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/custom.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Custom issue template 3 | about: Describe this issue template's purpose here. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | Mail . 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 2.1, February 1999 3 | 4 | Copyright (C) 1991, 1999 Free Software Foundation, Inc. 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | [This is the first released version of the Lesser GPL. It also counts 10 | as the successor of the GNU Library Public License, version 2, hence 11 | the version number 2.1.] 12 | 13 | Preamble 14 | 15 | The licenses for most software are designed to take away your 16 | freedom to share and change it. By contrast, the GNU General Public 17 | Licenses are intended to guarantee your freedom to share and change 18 | free software--to make sure the software is free for all its users. 19 | 20 | This license, the Lesser General Public License, applies to some 21 | specially designated software packages--typically libraries--of the 22 | Free Software Foundation and other authors who decide to use it. You 23 | can use it too, but we suggest you first think carefully about whether 24 | this license or the ordinary General Public License is the better 25 | strategy to use in any particular case, based on the explanations below. 26 | 27 | When we speak of free software, we are referring to freedom of use, 28 | not price. Our General Public Licenses are designed to make sure that 29 | you have the freedom to distribute copies of free software (and charge 30 | for this service if you wish); that you receive source code or can get 31 | it if you want it; that you can change the software and use pieces of 32 | it in new free programs; and that you are informed that you can do 33 | these things. 34 | 35 | To protect your rights, we need to make restrictions that forbid 36 | distributors to deny you these rights or to ask you to surrender these 37 | rights. These restrictions translate to certain responsibilities for 38 | you if you distribute copies of the library or if you modify it. 39 | 40 | For example, if you distribute copies of the library, whether gratis 41 | or for a fee, you must give the recipients all the rights that we gave 42 | you. You must make sure that they, too, receive or can get the source 43 | code. If you link other code with the library, you must provide 44 | complete object files to the recipients, so that they can relink them 45 | with the library after making changes to the library and recompiling 46 | it. And you must show them these terms so they know their rights. 47 | 48 | We protect your rights with a two-step method: (1) we copyright the 49 | library, and (2) we offer you this license, which gives you legal 50 | permission to copy, distribute and/or modify the library. 51 | 52 | To protect each distributor, we want to make it very clear that 53 | there is no warranty for the free library. Also, if the library is 54 | modified by someone else and passed on, the recipients should know 55 | that what they have is not the original version, so that the original 56 | author's reputation will not be affected by problems that might be 57 | introduced by others. 58 | 59 | Finally, software patents pose a constant threat to the existence of 60 | any free program. We wish to make sure that a company cannot 61 | effectively restrict the users of a free program by obtaining a 62 | restrictive license from a patent holder. Therefore, we insist that 63 | any patent license obtained for a version of the library must be 64 | consistent with the full freedom of use specified in this license. 65 | 66 | Most GNU software, including some libraries, is covered by the 67 | ordinary GNU General Public License. This license, the GNU Lesser 68 | General Public License, applies to certain designated libraries, and 69 | is quite different from the ordinary General Public License. We use 70 | this license for certain libraries in order to permit linking those 71 | libraries into non-free programs. 72 | 73 | When a program is linked with a library, whether statically or using 74 | a shared library, the combination of the two is legally speaking a 75 | combined work, a derivative of the original library. The ordinary 76 | General Public License therefore permits such linking only if the 77 | entire combination fits its criteria of freedom. The Lesser General 78 | Public License permits more lax criteria for linking other code with 79 | the library. 80 | 81 | We call this license the "Lesser" General Public License because it 82 | does Less to protect the user's freedom than the ordinary General 83 | Public License. It also provides other free software developers Less 84 | of an advantage over competing non-free programs. These disadvantages 85 | are the reason we use the ordinary General Public License for many 86 | libraries. However, the Lesser license provides advantages in certain 87 | special circumstances. 88 | 89 | For example, on rare occasions, there may be a special need to 90 | encourage the widest possible use of a certain library, so that it becomes 91 | a de-facto standard. To achieve this, non-free programs must be 92 | allowed to use the library. A more frequent case is that a free 93 | library does the same job as widely used non-free libraries. In this 94 | case, there is little to gain by limiting the free library to free 95 | software only, so we use the Lesser General Public License. 96 | 97 | In other cases, permission to use a particular library in non-free 98 | programs enables a greater number of people to use a large body of 99 | free software. For example, permission to use the GNU C Library in 100 | non-free programs enables many more people to use the whole GNU 101 | operating system, as well as its variant, the GNU/Linux operating 102 | system. 103 | 104 | Although the Lesser General Public License is Less protective of the 105 | users' freedom, it does ensure that the user of a program that is 106 | linked with the Library has the freedom and the wherewithal to run 107 | that program using a modified version of the Library. 108 | 109 | The precise terms and conditions for copying, distribution and 110 | modification follow. Pay close attention to the difference between a 111 | "work based on the library" and a "work that uses the library". The 112 | former contains code derived from the library, whereas the latter must 113 | be combined with the library in order to run. 114 | 115 | GNU LESSER GENERAL PUBLIC LICENSE 116 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 117 | 118 | 0. This License Agreement applies to any software library or other 119 | program which contains a notice placed by the copyright holder or 120 | other authorized party saying it may be distributed under the terms of 121 | this Lesser General Public License (also called "this License"). 122 | Each licensee is addressed as "you". 123 | 124 | A "library" means a collection of software functions and/or data 125 | prepared so as to be conveniently linked with application programs 126 | (which use some of those functions and data) to form executables. 127 | 128 | The "Library", below, refers to any such software library or work 129 | which has been distributed under these terms. A "work based on the 130 | Library" means either the Library or any derivative work under 131 | copyright law: that is to say, a work containing the Library or a 132 | portion of it, either verbatim or with modifications and/or translated 133 | straightforwardly into another language. (Hereinafter, translation is 134 | included without limitation in the term "modification".) 135 | 136 | "Source code" for a work means the preferred form of the work for 137 | making modifications to it. For a library, complete source code means 138 | all the source code for all modules it contains, plus any associated 139 | interface definition files, plus the scripts used to control compilation 140 | and installation of the library. 141 | 142 | Activities other than copying, distribution and modification are not 143 | covered by this License; they are outside its scope. The act of 144 | running a program using the Library is not restricted, and output from 145 | such a program is covered only if its contents constitute a work based 146 | on the Library (independent of the use of the Library in a tool for 147 | writing it). Whether that is true depends on what the Library does 148 | and what the program that uses the Library does. 149 | 150 | 1. You may copy and distribute verbatim copies of the Library's 151 | complete source code as you receive it, in any medium, provided that 152 | you conspicuously and appropriately publish on each copy an 153 | appropriate copyright notice and disclaimer of warranty; keep intact 154 | all the notices that refer to this License and to the absence of any 155 | warranty; and distribute a copy of this License along with the 156 | Library. 157 | 158 | You may charge a fee for the physical act of transferring a copy, 159 | and you may at your option offer warranty protection in exchange for a 160 | fee. 161 | 162 | 2. You may modify your copy or copies of the Library or any portion 163 | of it, thus forming a work based on the Library, and copy and 164 | distribute such modifications or work under the terms of Section 1 165 | above, provided that you also meet all of these conditions: 166 | 167 | a) The modified work must itself be a software library. 168 | 169 | b) You must cause the files modified to carry prominent notices 170 | stating that you changed the files and the date of any change. 171 | 172 | c) You must cause the whole of the work to be licensed at no 173 | charge to all third parties under the terms of this License. 174 | 175 | d) If a facility in the modified Library refers to a function or a 176 | table of data to be supplied by an application program that uses 177 | the facility, other than as an argument passed when the facility 178 | is invoked, then you must make a good faith effort to ensure that, 179 | in the event an application does not supply such function or 180 | table, the facility still operates, and performs whatever part of 181 | its purpose remains meaningful. 182 | 183 | (For example, a function in a library to compute square roots has 184 | a purpose that is entirely well-defined independent of the 185 | application. Therefore, Subsection 2d requires that any 186 | application-supplied function or table used by this function must 187 | be optional: if the application does not supply it, the square 188 | root function must still compute square roots.) 189 | 190 | These requirements apply to the modified work as a whole. If 191 | identifiable sections of that work are not derived from the Library, 192 | and can be reasonably considered independent and separate works in 193 | themselves, then this License, and its terms, do not apply to those 194 | sections when you distribute them as separate works. But when you 195 | distribute the same sections as part of a whole which is a work based 196 | on the Library, the distribution of the whole must be on the terms of 197 | this License, whose permissions for other licensees extend to the 198 | entire whole, and thus to each and every part regardless of who wrote 199 | it. 200 | 201 | Thus, it is not the intent of this section to claim rights or contest 202 | your rights to work written entirely by you; rather, the intent is to 203 | exercise the right to control the distribution of derivative or 204 | collective works based on the Library. 205 | 206 | In addition, mere aggregation of another work not based on the Library 207 | with the Library (or with a work based on the Library) on a volume of 208 | a storage or distribution medium does not bring the other work under 209 | the scope of this License. 210 | 211 | 3. You may opt to apply the terms of the ordinary GNU General Public 212 | License instead of this License to a given copy of the Library. To do 213 | this, you must alter all the notices that refer to this License, so 214 | that they refer to the ordinary GNU General Public License, version 2, 215 | instead of to this License. (If a newer version than version 2 of the 216 | ordinary GNU General Public License has appeared, then you can specify 217 | that version instead if you wish.) Do not make any other change in 218 | these notices. 219 | 220 | Once this change is made in a given copy, it is irreversible for 221 | that copy, so the ordinary GNU General Public License applies to all 222 | subsequent copies and derivative works made from that copy. 223 | 224 | This option is useful when you wish to copy part of the code of 225 | the Library into a program that is not a library. 226 | 227 | 4. You may copy and distribute the Library (or a portion or 228 | derivative of it, under Section 2) in object code or executable form 229 | under the terms of Sections 1 and 2 above provided that you accompany 230 | it with the complete corresponding machine-readable source code, which 231 | must be distributed under the terms of Sections 1 and 2 above on a 232 | medium customarily used for software interchange. 233 | 234 | If distribution of object code is made by offering access to copy 235 | from a designated place, then offering equivalent access to copy the 236 | source code from the same place satisfies the requirement to 237 | distribute the source code, even though third parties are not 238 | compelled to copy the source along with the object code. 239 | 240 | 5. A program that contains no derivative of any portion of the 241 | Library, but is designed to work with the Library by being compiled or 242 | linked with it, is called a "work that uses the Library". Such a 243 | work, in isolation, is not a derivative work of the Library, and 244 | therefore falls outside the scope of this License. 245 | 246 | However, linking a "work that uses the Library" with the Library 247 | creates an executable that is a derivative of the Library (because it 248 | contains portions of the Library), rather than a "work that uses the 249 | library". The executable is therefore covered by this License. 250 | Section 6 states terms for distribution of such executables. 251 | 252 | When a "work that uses the Library" uses material from a header file 253 | that is part of the Library, the object code for the work may be a 254 | derivative work of the Library even though the source code is not. 255 | Whether this is true is especially significant if the work can be 256 | linked without the Library, or if the work is itself a library. The 257 | threshold for this to be true is not precisely defined by law. 258 | 259 | If such an object file uses only numerical parameters, data 260 | structure layouts and accessors, and small macros and small inline 261 | functions (ten lines or less in length), then the use of the object 262 | file is unrestricted, regardless of whether it is legally a derivative 263 | work. (Executables containing this object code plus portions of the 264 | Library will still fall under Section 6.) 265 | 266 | Otherwise, if the work is a derivative of the Library, you may 267 | distribute the object code for the work under the terms of Section 6. 268 | Any executables containing that work also fall under Section 6, 269 | whether or not they are linked directly with the Library itself. 270 | 271 | 6. As an exception to the Sections above, you may also combine or 272 | link a "work that uses the Library" with the Library to produce a 273 | work containing portions of the Library, and distribute that work 274 | under terms of your choice, provided that the terms permit 275 | modification of the work for the customer's own use and reverse 276 | engineering for debugging such modifications. 277 | 278 | You must give prominent notice with each copy of the work that the 279 | Library is used in it and that the Library and its use are covered by 280 | this License. You must supply a copy of this License. If the work 281 | during execution displays copyright notices, you must include the 282 | copyright notice for the Library among them, as well as a reference 283 | directing the user to the copy of this License. Also, you must do one 284 | of these things: 285 | 286 | a) Accompany the work with the complete corresponding 287 | machine-readable source code for the Library including whatever 288 | changes were used in the work (which must be distributed under 289 | Sections 1 and 2 above); and, if the work is an executable linked 290 | with the Library, with the complete machine-readable "work that 291 | uses the Library", as object code and/or source code, so that the 292 | user can modify the Library and then relink to produce a modified 293 | executable containing the modified Library. (It is understood 294 | that the user who changes the contents of definitions files in the 295 | Library will not necessarily be able to recompile the application 296 | to use the modified definitions.) 297 | 298 | b) Use a suitable shared library mechanism for linking with the 299 | Library. A suitable mechanism is one that (1) uses at run time a 300 | copy of the library already present on the user's computer system, 301 | rather than copying library functions into the executable, and (2) 302 | will operate properly with a modified version of the library, if 303 | the user installs one, as long as the modified version is 304 | interface-compatible with the version that the work was made with. 305 | 306 | c) Accompany the work with a written offer, valid for at 307 | least three years, to give the same user the materials 308 | specified in Subsection 6a, above, for a charge no more 309 | than the cost of performing this distribution. 310 | 311 | d) If distribution of the work is made by offering access to copy 312 | from a designated place, offer equivalent access to copy the above 313 | specified materials from the same place. 314 | 315 | e) Verify that the user has already received a copy of these 316 | materials or that you have already sent this user a copy. 317 | 318 | For an executable, the required form of the "work that uses the 319 | Library" must include any data and utility programs needed for 320 | reproducing the executable from it. However, as a special exception, 321 | the materials to be distributed need not include anything that is 322 | normally distributed (in either source or binary form) with the major 323 | components (compiler, kernel, and so on) of the operating system on 324 | which the executable runs, unless that component itself accompanies 325 | the executable. 326 | 327 | It may happen that this requirement contradicts the license 328 | restrictions of other proprietary libraries that do not normally 329 | accompany the operating system. Such a contradiction means you cannot 330 | use both them and the Library together in an executable that you 331 | distribute. 332 | 333 | 7. You may place library facilities that are a work based on the 334 | Library side-by-side in a single library together with other library 335 | facilities not covered by this License, and distribute such a combined 336 | library, provided that the separate distribution of the work based on 337 | the Library and of the other library facilities is otherwise 338 | permitted, and provided that you do these two things: 339 | 340 | a) Accompany the combined library with a copy of the same work 341 | based on the Library, uncombined with any other library 342 | facilities. This must be distributed under the terms of the 343 | Sections above. 344 | 345 | b) Give prominent notice with the combined library of the fact 346 | that part of it is a work based on the Library, and explaining 347 | where to find the accompanying uncombined form of the same work. 348 | 349 | 8. You may not copy, modify, sublicense, link with, or distribute 350 | the Library except as expressly provided under this License. Any 351 | attempt otherwise to copy, modify, sublicense, link with, or 352 | distribute the Library is void, and will automatically terminate your 353 | rights under this License. However, parties who have received copies, 354 | or rights, from you under this License will not have their licenses 355 | terminated so long as such parties remain in full compliance. 356 | 357 | 9. You are not required to accept this License, since you have not 358 | signed it. However, nothing else grants you permission to modify or 359 | distribute the Library or its derivative works. These actions are 360 | prohibited by law if you do not accept this License. Therefore, by 361 | modifying or distributing the Library (or any work based on the 362 | Library), you indicate your acceptance of this License to do so, and 363 | all its terms and conditions for copying, distributing or modifying 364 | the Library or works based on it. 365 | 366 | 10. Each time you redistribute the Library (or any work based on the 367 | Library), the recipient automatically receives a license from the 368 | original licensor to copy, distribute, link with or modify the Library 369 | subject to these terms and conditions. You may not impose any further 370 | restrictions on the recipients' exercise of the rights granted herein. 371 | You are not responsible for enforcing compliance by third parties with 372 | this License. 373 | 374 | 11. If, as a consequence of a court judgment or allegation of patent 375 | infringement or for any other reason (not limited to patent issues), 376 | conditions are imposed on you (whether by court order, agreement or 377 | otherwise) that contradict the conditions of this License, they do not 378 | excuse you from the conditions of this License. If you cannot 379 | distribute so as to satisfy simultaneously your obligations under this 380 | License and any other pertinent obligations, then as a consequence you 381 | may not distribute the Library at all. For example, if a patent 382 | license would not permit royalty-free redistribution of the Library by 383 | all those who receive copies directly or indirectly through you, then 384 | the only way you could satisfy both it and this License would be to 385 | refrain entirely from distribution of the Library. 386 | 387 | If any portion of this section is held invalid or unenforceable under any 388 | particular circumstance, the balance of the section is intended to apply, 389 | and the section as a whole is intended to apply in other circumstances. 390 | 391 | It is not the purpose of this section to induce you to infringe any 392 | patents or other property right claims or to contest validity of any 393 | such claims; this section has the sole purpose of protecting the 394 | integrity of the free software distribution system which is 395 | implemented by public license practices. Many people have made 396 | generous contributions to the wide range of software distributed 397 | through that system in reliance on consistent application of that 398 | system; it is up to the author/donor to decide if he or she is willing 399 | to distribute software through any other system and a licensee cannot 400 | impose that choice. 401 | 402 | This section is intended to make thoroughly clear what is believed to 403 | be a consequence of the rest of this License. 404 | 405 | 12. If the distribution and/or use of the Library is restricted in 406 | certain countries either by patents or by copyrighted interfaces, the 407 | original copyright holder who places the Library under this License may add 408 | an explicit geographical distribution limitation excluding those countries, 409 | so that distribution is permitted only in or among countries not thus 410 | excluded. In such case, this License incorporates the limitation as if 411 | written in the body of this License. 412 | 413 | 13. The Free Software Foundation may publish revised and/or new 414 | versions of the Lesser General Public License from time to time. 415 | Such new versions will be similar in spirit to the present version, 416 | but may differ in detail to address new problems or concerns. 417 | 418 | Each version is given a distinguishing version number. If the Library 419 | specifies a version number of this License which applies to it and 420 | "any later version", you have the option of following the terms and 421 | conditions either of that version or of any later version published by 422 | the Free Software Foundation. If the Library does not specify a 423 | license version number, you may choose any version ever published by 424 | the Free Software Foundation. 425 | 426 | 14. If you wish to incorporate parts of the Library into other free 427 | programs whose distribution conditions are incompatible with these, 428 | write to the author to ask for permission. For software which is 429 | copyrighted by the Free Software Foundation, write to the Free 430 | Software Foundation; we sometimes make exceptions for this. Our 431 | decision will be guided by the two goals of preserving the free status 432 | of all derivatives of our free software and of promoting the sharing 433 | and reuse of software generally. 434 | 435 | NO WARRANTY 436 | 437 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 438 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 439 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR 440 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY 441 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE 442 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 443 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 444 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME 445 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 446 | 447 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 448 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY 449 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU 450 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 451 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 452 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING 453 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 454 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF 455 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 456 | DAMAGES. 457 | 458 | END OF TERMS AND CONDITIONS 459 | 460 | How to Apply These Terms to Your New Libraries 461 | 462 | If you develop a new library, and you want it to be of the greatest 463 | possible use to the public, we recommend making it free software that 464 | everyone can redistribute and change. You can do so by permitting 465 | redistribution under these terms (or, alternatively, under the terms of the 466 | ordinary General Public License). 467 | 468 | To apply these terms, attach the following notices to the library. It is 469 | safest to attach them to the start of each source file to most effectively 470 | convey the exclusion of warranty; and each file should have at least the 471 | "copyright" line and a pointer to where the full notice is found. 472 | 473 | 474 | Copyright (C) 475 | 476 | This library is free software; you can redistribute it and/or 477 | modify it under the terms of the GNU Lesser General Public 478 | License as published by the Free Software Foundation; either 479 | version 2.1 of the License, or (at your option) any later version. 480 | 481 | This library is distributed in the hope that it will be useful, 482 | but WITHOUT ANY WARRANTY; without even the implied warranty of 483 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 484 | Lesser General Public License for more details. 485 | 486 | You should have received a copy of the GNU Lesser General Public 487 | License along with this library; if not, write to the Free Software 488 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 489 | USA 490 | 491 | Also add information on how to contact you by electronic and paper mail. 492 | 493 | You should also get your employer (if you work as a programmer) or your 494 | school, if any, to sign a "copyright disclaimer" for the library, if 495 | necessary. Here is a sample; alter the names: 496 | 497 | Yoyodyne, Inc., hereby disclaims all copyright interest in the 498 | library `Frob' (a library for tweaking knobs) written by James Random 499 | Hacker. 500 | 501 | , 1 April 1990 502 | Ty Coon, President of Vice 503 | 504 | That's all there is to it! 505 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # tranlsate.voiddevs.org - Translate Your Language Files
2 | #### [Demo](https://translate.voiddevs.org) - [Discord Support](https://discord.gg/PFnafbxd5u) 3 | #### Developed with ❤️ by [clqu](https://clqu.live) 4 | 5 | ## Getting Started 6 | 7 | ## 🛠 Development Server 8 | 9 | ```bash 10 | npm install --s --f && npm run dev 11 | # or 12 | yarn install && yarn dev 13 | ``` 14 | ## 🛠 Production Server 15 | ```bash 16 | npm install --s --f && npm run build && npm run start 17 | # or 18 | yarn install && yarn build && yarn start 19 | ``` 20 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 21 | You can start editing the page by modifying `src/pages/index.js`. The page auto-updates as you edit the file. 22 | 23 | 24 | ## Learn More 25 | 26 | To learn more about Next.js, take a look at the following resources: 27 | 28 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 29 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 30 | 31 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 32 | 33 | ## Deploy on Vercel 34 | 35 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new/import?s=https://github.com/clqu/json-translator&utm_source=translate.serity.me) from the clqu & Swôth. 36 | 37 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 38 | 39 | ## ⭐ Star 40 | - Don't forget to star this repo for support :) 41 | -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "allegro", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@asmagin/google-translate-api": "^8.0.2", 13 | "@monaco-editor/react": "^4.4.1", 14 | "@vitalets/google-translate-api": "^8.0.0", 15 | "axios": "^0.26.1", 16 | "file-saver": "^2.0.5", 17 | "google-translate-api": "^2.3.0", 18 | "json-fixer": "^1.6.13", 19 | "jszip": "^3.8.0", 20 | "next": "12.1.0", 21 | "react": "17.0.2", 22 | "react-dom": "17.0.2", 23 | "translate-google": "^1.5.0", 24 | "translatte": "^3.0.1", 25 | "tunnel": "^0.0.6" 26 | }, 27 | "devDependencies": { 28 | "@headlessui/react": "^1.5.0", 29 | "autoprefixer": "^10.4.2", 30 | "eslint": "8.10.0", 31 | "eslint-config-next": "12.1.0", 32 | "postcss": "^8.4.8", 33 | "tailwindcss": "^3.0.23" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /src/components/Dropdown.jsx: -------------------------------------------------------------------------------- 1 | import { Switch, Transition } from "@headlessui/react"; 2 | import { Fragment, useRef, useState, useEffect } from "react"; 3 | 4 | const Dropdown = ({ className, changeFunction, currentValue, title, items }) => { 5 | let [dropdown, setDropdown] = useState(false); 6 | let [searchFilter, setSearchFilter] = useState(false); 7 | let dropdownRef = useRef(null); 8 | useEffect(() => { 9 | const pageClickEvent = (e) => { 10 | if (dropdownRef.current !== null && !dropdownRef.current.contains(e.target)) { 11 | setDropdown(!dropdown); 12 | } 13 | }; 14 | if (dropdown) { 15 | window.addEventListener('click', pageClickEvent); 16 | } 17 | return () => { 18 | window.removeEventListener('click', pageClickEvent); 19 | } 20 | }, [dropdown]); 21 | 22 | useEffect(() => { setSearchFilter(searchFilter) }, [searchFilter]); 23 | return ( 24 | <> 25 |
26 |
setDropdown(!dropdown)} className="cursor-pointer flex justify-between items-center bg-dark w-full px-4 py-2 rounded-lg"> 27 | {title} 28 | 29 |
30 | 40 | 41 |
42 | setSearchFilter(e.target.value)} className="w-[calc(100%-1rem)] px-3 py-1.5 outline-none text-sm mx-auto mb-4 block rounded-lg bg-dark" placeholder="Search" type="text" spellCheck={false} autoComplete={false} /> 43 | {items.filter(a => { 44 | if(searchFilter) { 45 | if(a.label.toLowerCase().includes(searchFilter.toLowerCase())) return true; 46 | return false; 47 | } else { 48 | return true; 49 | } 50 | }).map((item, index) => ( 51 |
changeFunction(item.value)} key={index} className="items-center flex justify-between cursor-pointer hover:bg-zinc-500/10 dark:hover:bg-darkBg w-full px-4 py-1"> 52 | {item.label} 53 | {item.value === currentValue && ( 54 | 55 | )} 56 |
57 | ))} 58 |
59 |
60 |
61 | 62 | ); 63 | }; 64 | 65 | export default Dropdown; 66 | -------------------------------------------------------------------------------- /src/components/Editor.jsx: -------------------------------------------------------------------------------- 1 | import { Transition } from '@headlessui/react'; 2 | import dynamic from 'next/dynamic'; 3 | import { useState, Fragment } from "react"; 4 | 5 | const EditorComponent = dynamic( 6 | () => import('@monaco-editor/react'), 7 | { ssr: false } 8 | ); 9 | 10 | export default function Editor({ defaultValue, setValue }) { 11 | const [ isValid, setIsValid ] = useState(true); 12 | 13 | function handleChange(value) { 14 | try { 15 | JSON.parse(value); 16 | setValue(value); 17 | setIsValid(true); 18 | } catch { 19 | setIsValid(false); 20 | }; 21 | }; 22 | 23 | return ( 24 | <> 25 | 39 | 49 |
50 | Invalid Syntax 51 |
52 |
53 | 54 | ); 55 | }; -------------------------------------------------------------------------------- /src/pages/_app.js: -------------------------------------------------------------------------------- 1 | import '../public/styles/globals.css' 2 | 3 | function MyApp({ Component, pageProps }) { 4 | return
5 |
6 | 7 |
8 |
9 |

Developed with ❤️ by 10 | clqu 11 |

12 |
13 |
14 |
15 | 16 | } 17 | 18 | export default MyApp 19 | -------------------------------------------------------------------------------- /src/pages/api/translate.js: -------------------------------------------------------------------------------- 1 | import translate from "@vitalets/google-translate-api"; 2 | 3 | export default async function Handler(req, res) { 4 | const json = (success, message, data) => res.json({ success, message, data }); 5 | if (req.method != "POST") return json(false, "Invalid Method", null); 6 | if (!req.query.from) return json(false, "No 'from' query provided!", null); 7 | if (!req.query.to) return json(false, "No 'to' query provided!", null); 8 | try { 9 | const response = await Promise.all(req.query.to.split(",").map(async lang => { 10 | const translated = await translate(Object.values(req.body).join(`\r\n`), { from: req.query.from, to: lang }); 11 | const translatedArr = translated.text.split(`\r\n`); 12 | const objKeys = Object.keys(req.body); 13 | 14 | return translatedArr.reduce((obj, text, index) => { 15 | obj[objKeys[index]] = text.trim(); 16 | return obj; 17 | }, {}); 18 | })); 19 | 20 | res.json({ 21 | success: true, 22 | message: "Successful!", 23 | data: response.reduce((obj, texts, index) => { 24 | obj[req.query.to.split(",")[index]] = texts; 25 | return obj; 26 | }, {}) 27 | }); 28 | } catch(e) { 29 | res.json({ 30 | success: false, 31 | message: "Something went wrong...", 32 | errors: [ 33 | { code: e?.statusCode, message: e?.message } 34 | ], 35 | data: null 36 | }); 37 | } 38 | 39 | }; 40 | -------------------------------------------------------------------------------- /src/pages/index.js: -------------------------------------------------------------------------------- 1 | import { Transition } from '@headlessui/react'; 2 | import Head from 'next/head' 3 | import { Fragment, useState, useEffect } from 'react'; 4 | import Dropdown from '../components/Dropdown' 5 | import Editor from '../components/Editor' 6 | import Languages from '../public/libs/languages.json'; 7 | import axios from 'axios'; 8 | import { saveAs } from 'file-saver'; 9 | 10 | export default function Home() { 11 | let [value, setValue] = useState(`{ 12 | 13 | }`) 14 | 15 | let [file, setFile] = useState(); 16 | let [loading, setLoading] = useState(false); 17 | let [fileLanguage, setFileLanguage] = useState(); 18 | let [translateTo, setTranslateTo] = useState([]); 19 | let [translated, setTranslated] = useState(false); 20 | let [error, setError] = useState(); 21 | let [copy, setCopy] = useState(); 22 | let [copied, setCopied] = useState(false); 23 | let [loader, setLoader] = useState(); 24 | 25 | const handleFileChange = (e) => { 26 | let file = e?.target?.files[0]; 27 | if (file) { 28 | if (file.type === "application/json") { 29 | var reader = new FileReader(); 30 | reader.readAsText(file, "UTF-8"); 31 | reader.onload = function (f) { 32 | setFile(file); 33 | setValue(f?.target?.result) 34 | } 35 | 36 | } 37 | } 38 | }; 39 | 40 | const handleFileLanguage = e => { 41 | let _ = Languages.find(a => a.code === e); 42 | if(_) { 43 | setFileLanguage(_) 44 | } 45 | } 46 | const handleTranslateTo = e => { 47 | let _ = Languages.find(a => a.code === e); 48 | if(_) { 49 | if(!translateTo.find(a => a.code === e)) { 50 | setTranslateTo([...translateTo, _]) 51 | } 52 | } 53 | } 54 | 55 | 56 | 57 | 58 | 59 | const SubmitTranslation = () => { 60 | setLoading(true); 61 | setTranslated(false); 62 | setError(); 63 | setCopy(); 64 | setCopied(false); 65 | setTimeout(() => { 66 | try { 67 | if(!fileLanguage) return setError('Please select file language.'); 68 | if(!translateTo || translateTo.length <= 0) return setError('Please select translate to language.'); 69 | axios.post('https://translate.voiddevs.org/api/translate?from='+fileLanguage?.code+'&to='+translateTo?.map(a => a?.code)?.join(','), JSON.parse(value)) 70 | .then(r => { 71 | if(r) { 72 | if(r?.data) { 73 | if(r?.data?.success) { 74 | setLoader(); 75 | setTranslated(true); 76 | setCopy(JSON.stringify(r?.data?.data)); 77 | } else { 78 | setError(r?.data?.errors[0]?.message || 'Something went wrong...'); 79 | } 80 | } 81 | } 82 | 83 | }); 84 | } catch { 85 | setError('Something went wrong...'); 86 | }; 87 | }, 1000) 88 | } 89 | const DownloadFile = () => { 90 | var JSZip = require("jszip"); 91 | var zip = new JSZip(); 92 | try { 93 | let _ = JSON.parse(copy); 94 | Object.keys(_).map(e => zip.file(`${e}.json`, JSON.stringify(_[e]))); 95 | zip.generateAsync({type:"blob"}).then(function (content) { 96 | saveAs(content, "locales.zip"); 97 | }); 98 | } catch {}; 99 | } 100 | const CopyClipboard = () => { 101 | navigator.clipboard.writeText(copy); 102 | setCopied(true); 103 | } 104 | useEffect(() => { setTranslateTo(translateTo) }, [translateTo]); 105 | useEffect(() => { setFileLanguage(fileLanguage) }, [fileLanguage]); 106 | useEffect(() => { setTranslated(translated) }, [translated]); 107 | useEffect(() => { setCopy(copy) }, [copy]); 108 | useEffect(() => { setLoader(loader) }, [loader]); 109 | return ( 110 | <> 111 | 112 | Translate your JSON files! 113 | 114 | 115 | 116 | 117 | 118 | 127 |
128 |
129 | {!error ? translated ? ( 130 | <> 131 |
132 | 133 |

The file you added has been translated into {translateTo.length} languages.

134 |
135 |
DownloadFile()} className="hover:shadow-2xl hover:opacity-90 bg-gradient-to-l from-purple-800 to-violet-800 font-medium cursor-pointer px-6 py-2 rounded-lg transition-all duration-200"> 136 |

137 | Download 138 | locales.zip 139 |

140 |
141 |
CopyClipboard()} className="hover:shadow-2xl hover:opacity-90 bg-gradient-to-l from-blue-800 to-blue-600 font-medium cursor-pointer px-6 py-2 rounded-lg transition-all duration-200"> 142 |

143 | {copied ? 'Copied to Clipboard' : 'Copy Clipboard'} 144 |

145 |
146 |
147 |
148 | 149 | ) : ( 150 | <> 151 | 152 |
153 |

Translating...

154 | {translateTo.length > 1 && (

If you have selected more than one language, the process may take a long time.

)} 155 |
156 | 157 | ) : ( 158 | <> 159 | 160 |

{error || "Something went wrong..."}

161 | 162 | )} 163 | 164 |
{ 165 | setLoading(false); 166 | }} className="hover:bg-zinc-500/20 w-12 h-12 flex justify-center items-center rounded-lg transition-all duration-200 cursor-pointer absolute top-5 right-5"> 167 | 168 |
169 |
170 |
171 |
172 |
173 |
174 |

Translate your Language Files

175 | 176 |
177 |
178 |
179 |

180 | File Language 181 |

182 | { 183 | return { 184 | label: a.name, 185 | value: a.code 186 | } 187 | })} /> 188 |
189 |
190 |

191 | Upload File 192 |

193 |
194 |
195 | {file ? <>{file?.name} : <>Upload File} 196 |
197 | 198 |
199 | 200 |
201 |
202 |
203 |

204 | Translate To 205 |

206 | { 207 | return { 208 | label: a.name, 209 | value: a.code 210 | } 211 | })} /> 212 |
213 |
214 | 0 ? true : false} 216 | className="grid grid-cols-3 gap-4 mt-3" 217 | > 218 | 219 | {(translateTo || []).map((t, i) => ( 220 | 229 |
230 | {t.code} 231 |

{t.name}

232 | { 234 | setTranslateTo(translateTo.slice(0,i).concat(translateTo.slice(i + 1))) 235 | }} 236 | className="cursor-pointer transition-all duration-200 w-6 h-6 flex items-center justify-center hover:bg-red-500 rounded-md" 237 | > 238 |
239 |
240 | ))} 241 |
242 |
243 |
244 |
245 | 246 |
247 |
248 | 249 |
250 |
251 |
SubmitTranslation()} className="hover:shadow-2xl bg-gradient-to-l from-purple-800 to-violet-800 font-medium cursor-pointer px-6 py-2 rounded-lg transition-all duration-200"> 252 |

Translate

253 |
254 |
255 |
256 | 257 |
258 |
259 |
260 | 261 | 262 | ) 263 | } 264 | -------------------------------------------------------------------------------- /src/public/fonts/3d32e753a2cefc56ce239b04cce45490.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/3d32e753a2cefc56ce239b04cce45490.woff -------------------------------------------------------------------------------- /src/public/fonts/3d32e753a2cefc56ce239b04cce45490.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/3d32e753a2cefc56ce239b04cce45490.woff2 -------------------------------------------------------------------------------- /src/public/fonts/5fd07762093e40beee85d22757cc6d8d.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/5fd07762093e40beee85d22757cc6d8d.woff -------------------------------------------------------------------------------- /src/public/fonts/5fd07762093e40beee85d22757cc6d8d.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/5fd07762093e40beee85d22757cc6d8d.woff2 -------------------------------------------------------------------------------- /src/public/fonts/7ab640c091619f9534886523d3cde66f.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/7ab640c091619f9534886523d3cde66f.woff -------------------------------------------------------------------------------- /src/public/fonts/7ab640c091619f9534886523d3cde66f.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/7ab640c091619f9534886523d3cde66f.woff2 -------------------------------------------------------------------------------- /src/public/fonts/855b722e0240c397005b340b1baf8780.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/855b722e0240c397005b340b1baf8780.woff -------------------------------------------------------------------------------- /src/public/fonts/855b722e0240c397005b340b1baf8780.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/855b722e0240c397005b340b1baf8780.woff2 -------------------------------------------------------------------------------- /src/public/fonts/f5a1414f8fe9188766b39607d923fbb9.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/f5a1414f8fe9188766b39607d923fbb9.woff -------------------------------------------------------------------------------- /src/public/fonts/f5a1414f8fe9188766b39607d923fbb9.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clqu/json-translator/53c4de31c51a581ba22067d1d0d735ea17cd875b/src/public/fonts/f5a1414f8fe9188766b39607d923fbb9.woff2 -------------------------------------------------------------------------------- /src/public/libs/languages.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "code": "ab", 4 | "name": "Abkhaz", 5 | "nativeName": "аҧсуа" 6 | }, 7 | { 8 | "code": "aa", 9 | "name": "Afar", 10 | "nativeName": "Afaraf" 11 | }, 12 | { 13 | "code": "af", 14 | "name": "Afrikaans", 15 | "nativeName": "Afrikaans" 16 | }, 17 | { 18 | "code": "ak", 19 | "name": "Akan", 20 | "nativeName": "Akan" 21 | }, 22 | { 23 | "code": "sq", 24 | "name": "Albanian", 25 | "nativeName": "Shqip" 26 | }, 27 | { 28 | "code": "am", 29 | "name": "Amharic", 30 | "nativeName": "አማርኛ" 31 | }, 32 | { 33 | "code": "ar", 34 | "name": "Arabic", 35 | "nativeName": "العربية" 36 | }, 37 | { 38 | "code": "an", 39 | "name": "Aragonese", 40 | "nativeName": "Aragonés" 41 | }, 42 | { 43 | "code": "hy", 44 | "name": "Armenian", 45 | "nativeName": "Հայերեն" 46 | }, 47 | { 48 | "code": "as", 49 | "name": "Assamese", 50 | "nativeName": "অসমীয়া" 51 | }, 52 | { 53 | "code": "av", 54 | "name": "Avaric", 55 | "nativeName": "авар мацӀ, магӀарул мацӀ" 56 | }, 57 | { 58 | "code": "ae", 59 | "name": "Avestan", 60 | "nativeName": "avesta" 61 | }, 62 | { 63 | "code": "ay", 64 | "name": "Aymara", 65 | "nativeName": "aymar aru" 66 | }, 67 | { 68 | "code": "az", 69 | "name": "Azerbaijani", 70 | "nativeName": "azərbaycan dili" 71 | }, 72 | { 73 | "code": "bm", 74 | "name": "Bambara", 75 | "nativeName": "bamanankan" 76 | }, 77 | { 78 | "code": "ba", 79 | "name": "Bashkir", 80 | "nativeName": "башҡорт теле" 81 | }, 82 | { 83 | "code": "eu", 84 | "name": "Basque", 85 | "nativeName": "euskara, euskera" 86 | }, 87 | { 88 | "code": "be", 89 | "name": "Belarusian", 90 | "nativeName": "Беларуская" 91 | }, 92 | { 93 | "code": "bn", 94 | "name": "Bengali", 95 | "nativeName": "বাংলা" 96 | }, 97 | { 98 | "code": "bh", 99 | "name": "Bihari", 100 | "nativeName": "भोजपुरी" 101 | }, 102 | { 103 | "code": "bi", 104 | "name": "Bislama", 105 | "nativeName": "Bislama" 106 | }, 107 | { 108 | "code": "bs", 109 | "name": "Bosnian", 110 | "nativeName": "bosanski jezik" 111 | }, 112 | { 113 | "code": "br", 114 | "name": "Breton", 115 | "nativeName": "brezhoneg" 116 | }, 117 | { 118 | "code": "bg", 119 | "name": "Bulgarian", 120 | "nativeName": "български език" 121 | }, 122 | { 123 | "code": "my", 124 | "name": "Burmese", 125 | "nativeName": "ဗမာစာ" 126 | }, 127 | { 128 | "code": "ca", 129 | "name": "Catalan; Valencian", 130 | "nativeName": "Català" 131 | }, 132 | { 133 | "code": "ch", 134 | "name": "Chamorro", 135 | "nativeName": "Chamoru" 136 | }, 137 | { 138 | "code": "ce", 139 | "name": "Chechen", 140 | "nativeName": "нохчийн мотт" 141 | }, 142 | { 143 | "code": "ny", 144 | "name": "Chichewa; Chewa; Nyanja", 145 | "nativeName": "chiCheŵa, chinyanja" 146 | }, 147 | { 148 | "code": "zh", 149 | "name": "Chinese", 150 | "nativeName": "中文 (Zhōngwén), 汉语, 漢語" 151 | }, 152 | { 153 | "code": "cv", 154 | "name": "Chuvash", 155 | "nativeName": "чӑваш чӗлхи" 156 | }, 157 | { 158 | "code": "kw", 159 | "name": "Cornish", 160 | "nativeName": "Kernewek" 161 | }, 162 | { 163 | "code": "co", 164 | "name": "Corsican", 165 | "nativeName": "corsu, lingua corsa" 166 | }, 167 | { 168 | "code": "cr", 169 | "name": "Cree", 170 | "nativeName": "ᓀᐦᐃᔭᐍᐏᐣ" 171 | }, 172 | { 173 | "code": "hr", 174 | "name": "Croatian", 175 | "nativeName": "hrvatski" 176 | }, 177 | { 178 | "code": "cs", 179 | "name": "Czech", 180 | "nativeName": "česky, čeština" 181 | }, 182 | { 183 | "code": "da", 184 | "name": "Danish", 185 | "nativeName": "dansk" 186 | }, 187 | { 188 | "code": "dv", 189 | "name": "Divehi; Dhivehi; Maldivian;", 190 | "nativeName": "ދިވެހި" 191 | }, 192 | { 193 | "code": "nl", 194 | "name": "Dutch", 195 | "nativeName": "Nederlands, Vlaams" 196 | }, 197 | { 198 | "code": "en", 199 | "name": "English", 200 | "nativeName": "English" 201 | }, 202 | { 203 | "code": "eo", 204 | "name": "Esperanto", 205 | "nativeName": "Esperanto" 206 | }, 207 | { 208 | "code": "et", 209 | "name": "Estonian", 210 | "nativeName": "eesti, eesti keel" 211 | }, 212 | { 213 | "code": "ee", 214 | "name": "Ewe", 215 | "nativeName": "Eʋegbe" 216 | }, 217 | { 218 | "code": "fo", 219 | "name": "Faroese", 220 | "nativeName": "føroyskt" 221 | }, 222 | { 223 | "code": "fj", 224 | "name": "Fijian", 225 | "nativeName": "vosa Vakaviti" 226 | }, 227 | { 228 | "code": "fi", 229 | "name": "Finnish", 230 | "nativeName": "suomi, suomen kieli" 231 | }, 232 | { 233 | "code": "fr", 234 | "name": "French", 235 | "nativeName": "français, langue française" 236 | }, 237 | { 238 | "code": "ff", 239 | "name": "Fula; Fulah; Pulaar; Pular", 240 | "nativeName": "Fulfulde, Pulaar, Pular" 241 | }, 242 | { 243 | "code": "gl", 244 | "name": "Galician", 245 | "nativeName": "Galego" 246 | }, 247 | { 248 | "code": "ka", 249 | "name": "Georgian", 250 | "nativeName": "ქართული" 251 | }, 252 | { 253 | "code": "de", 254 | "name": "German", 255 | "nativeName": "Deutsch" 256 | }, 257 | { 258 | "code": "el", 259 | "name": "Greek, Modern", 260 | "nativeName": "Ελληνικά" 261 | }, 262 | { 263 | "code": "gn", 264 | "name": "Guaraní", 265 | "nativeName": "Avañeẽ" 266 | }, 267 | { 268 | "code": "gu", 269 | "name": "Gujarati", 270 | "nativeName": "ગુજરાતી" 271 | }, 272 | { 273 | "code": "ht", 274 | "name": "Haitian; Haitian Creole", 275 | "nativeName": "Kreyòl ayisyen" 276 | }, 277 | { 278 | "code": "ha", 279 | "name": "Hausa", 280 | "nativeName": "Hausa, هَوُسَ" 281 | }, 282 | { 283 | "code": "he", 284 | "name": "Hebrew (modern)", 285 | "nativeName": "עברית" 286 | }, 287 | { 288 | "code": "hz", 289 | "name": "Herero", 290 | "nativeName": "Otjiherero" 291 | }, 292 | { 293 | "code": "hi", 294 | "name": "Hindi", 295 | "nativeName": "हिन्दी, हिंदी" 296 | }, 297 | { 298 | "code": "ho", 299 | "name": "Hiri Motu", 300 | "nativeName": "Hiri Motu" 301 | }, 302 | { 303 | "code": "hu", 304 | "name": "Hungarian", 305 | "nativeName": "Magyar" 306 | }, 307 | { 308 | "code": "ia", 309 | "name": "Interlingua", 310 | "nativeName": "Interlingua" 311 | }, 312 | { 313 | "code": "id", 314 | "name": "Indonesian", 315 | "nativeName": "Bahasa Indonesia" 316 | }, 317 | { 318 | "code": "ie", 319 | "name": "Interlingue", 320 | "nativeName": "Originally called Occidental; then Interlingue after WWII" 321 | }, 322 | { 323 | "code": "ga", 324 | "name": "Irish", 325 | "nativeName": "Gaeilge" 326 | }, 327 | { 328 | "code": "ig", 329 | "name": "Igbo", 330 | "nativeName": "Asụsụ Igbo" 331 | }, 332 | { 333 | "code": "ik", 334 | "name": "Inupiaq", 335 | "nativeName": "Iñupiaq, Iñupiatun" 336 | }, 337 | { 338 | "code": "io", 339 | "name": "Ido", 340 | "nativeName": "Ido" 341 | }, 342 | { 343 | "code": "is", 344 | "name": "Icelandic", 345 | "nativeName": "Íslenska" 346 | }, 347 | { 348 | "code": "it", 349 | "name": "Italian", 350 | "nativeName": "Italiano" 351 | }, 352 | { 353 | "code": "iu", 354 | "name": "Inuktitut", 355 | "nativeName": "ᐃᓄᒃᑎᑐᑦ" 356 | }, 357 | { 358 | "code": "ja", 359 | "name": "Japanese", 360 | "nativeName": "日本語 (にほんご/にっぽんご)" 361 | }, 362 | { 363 | "code": "jv", 364 | "name": "Javanese", 365 | "nativeName": "basa Jawa" 366 | }, 367 | { 368 | "code": "kl", 369 | "name": "Kalaallisut, Greenlandic", 370 | "nativeName": "kalaallisut, kalaallit oqaasii" 371 | }, 372 | { 373 | "code": "kn", 374 | "name": "Kannada", 375 | "nativeName": "ಕನ್ನಡ" 376 | }, 377 | { 378 | "code": "kr", 379 | "name": "Kanuri", 380 | "nativeName": "Kanuri" 381 | }, 382 | { 383 | "code": "ks", 384 | "name": "Kashmiri", 385 | "nativeName": "कश्मीरी, كشميري‎" 386 | }, 387 | { 388 | "code": "kk", 389 | "name": "Kazakh", 390 | "nativeName": "Қазақ тілі" 391 | }, 392 | { 393 | "code": "km", 394 | "name": "Khmer", 395 | "nativeName": "ភាសាខ្មែរ" 396 | }, 397 | { 398 | "code": "ki", 399 | "name": "Kikuyu, Gikuyu", 400 | "nativeName": "Gĩkũyũ" 401 | }, 402 | { 403 | "code": "rw", 404 | "name": "Kinyarwanda", 405 | "nativeName": "Ikinyarwanda" 406 | }, 407 | { 408 | "code": "ky", 409 | "name": "Kirghiz, Kyrgyz", 410 | "nativeName": "кыргыз тили" 411 | }, 412 | { 413 | "code": "kv", 414 | "name": "Komi", 415 | "nativeName": "коми кыв" 416 | }, 417 | { 418 | "code": "kg", 419 | "name": "Kongo", 420 | "nativeName": "KiKongo" 421 | }, 422 | { 423 | "code": "ko", 424 | "name": "Korean", 425 | "nativeName": "한국어 (韓國語), 조선말 (朝鮮語)" 426 | }, 427 | { 428 | "code": "ku", 429 | "name": "Kurdish", 430 | "nativeName": "Kurdî, كوردی‎" 431 | }, 432 | { 433 | "code": "kj", 434 | "name": "Kwanyama, Kuanyama", 435 | "nativeName": "Kuanyama" 436 | }, 437 | { 438 | "code": "la", 439 | "name": "Latin", 440 | "nativeName": "latine, lingua latina" 441 | }, 442 | { 443 | "code": "lb", 444 | "name": "Luxembourgish, Letzeburgesch", 445 | "nativeName": "Lëtzebuergesch" 446 | }, 447 | { 448 | "code": "lg", 449 | "name": "Luganda", 450 | "nativeName": "Luganda" 451 | }, 452 | { 453 | "code": "li", 454 | "name": "Limburgish, Limburgan, Limburger", 455 | "nativeName": "Limburgs" 456 | }, 457 | { 458 | "code": "ln", 459 | "name": "Lingala", 460 | "nativeName": "Lingála" 461 | }, 462 | { 463 | "code": "lo", 464 | "name": "Lao", 465 | "nativeName": "ພາສາລາວ" 466 | }, 467 | { 468 | "code": "lt", 469 | "name": "Lithuanian", 470 | "nativeName": "lietuvių kalba" 471 | }, 472 | { 473 | "code": "lu", 474 | "name": "Luba-Katanga", 475 | "nativeName": "" 476 | }, 477 | { 478 | "code": "lv", 479 | "name": "Latvian", 480 | "nativeName": "latviešu valoda" 481 | }, 482 | { 483 | "code": "gv", 484 | "name": "Manx", 485 | "nativeName": "Gaelg, Gailck" 486 | }, 487 | { 488 | "code": "mk", 489 | "name": "Macedonian", 490 | "nativeName": "македонски јазик" 491 | }, 492 | { 493 | "code": "mg", 494 | "name": "Malagasy", 495 | "nativeName": "Malagasy fiteny" 496 | }, 497 | { 498 | "code": "ms", 499 | "name": "Malay", 500 | "nativeName": "bahasa Melayu, بهاس ملايو‎" 501 | }, 502 | { 503 | "code": "ml", 504 | "name": "Malayalam", 505 | "nativeName": "മലയാളം" 506 | }, 507 | { 508 | "code": "mt", 509 | "name": "Maltese", 510 | "nativeName": "Malti" 511 | }, 512 | { 513 | "code": "mi", 514 | "name": "Māori", 515 | "nativeName": "te reo Māori" 516 | }, 517 | { 518 | "code": "mr", 519 | "name": "Marathi (Marāṭhī)", 520 | "nativeName": "मराठी" 521 | }, 522 | { 523 | "code": "mh", 524 | "name": "Marshallese", 525 | "nativeName": "Kajin M̧ajeļ" 526 | }, 527 | { 528 | "code": "mn", 529 | "name": "Mongolian", 530 | "nativeName": "монгол" 531 | }, 532 | { 533 | "code": "na", 534 | "name": "Nauru", 535 | "nativeName": "Ekakairũ Naoero" 536 | }, 537 | { 538 | "code": "nv", 539 | "name": "Navajo, Navaho", 540 | "nativeName": "Diné bizaad, Dinékʼehǰí" 541 | }, 542 | { 543 | "code": "nb", 544 | "name": "Norwegian Bokmål", 545 | "nativeName": "Norsk bokmål" 546 | }, 547 | { 548 | "code": "nd", 549 | "name": "North Ndebele", 550 | "nativeName": "isiNdebele" 551 | }, 552 | { 553 | "code": "ne", 554 | "name": "Nepali", 555 | "nativeName": "नेपाली" 556 | }, 557 | { 558 | "code": "ng", 559 | "name": "Ndonga", 560 | "nativeName": "Owambo" 561 | }, 562 | { 563 | "code": "nn", 564 | "name": "Norwegian Nynorsk", 565 | "nativeName": "Norsk nynorsk" 566 | }, 567 | { 568 | "code": "no", 569 | "name": "Norwegian", 570 | "nativeName": "Norsk" 571 | }, 572 | { 573 | "code": "ii", 574 | "name": "Nuosu", 575 | "nativeName": "ꆈꌠ꒿ Nuosuhxop" 576 | }, 577 | { 578 | "code": "nr", 579 | "name": "South Ndebele", 580 | "nativeName": "isiNdebele" 581 | }, 582 | { 583 | "code": "oc", 584 | "name": "Occitan", 585 | "nativeName": "Occitan" 586 | }, 587 | { 588 | "code": "oj", 589 | "name": "Ojibwe, Ojibwa", 590 | "nativeName": "ᐊᓂᔑᓈᐯᒧᐎᓐ" 591 | }, 592 | { 593 | "code": "cu", 594 | "name": "Old Church Slavonic, Church Slavic, Church Slavonic, Old Bulgarian, Old Slavonic", 595 | "nativeName": "ѩзыкъ словѣньскъ" 596 | }, 597 | { 598 | "code": "om", 599 | "name": "Oromo", 600 | "nativeName": "Afaan Oromoo" 601 | }, 602 | { 603 | "code": "or", 604 | "name": "Oriya", 605 | "nativeName": "ଓଡ଼ିଆ" 606 | }, 607 | { 608 | "code": "os", 609 | "name": "Ossetian, Ossetic", 610 | "nativeName": "ирон æвзаг" 611 | }, 612 | { 613 | "code": "pa", 614 | "name": "Panjabi, Punjabi", 615 | "nativeName": "ਪੰਜਾਬੀ, پنجابی‎" 616 | }, 617 | { 618 | "code": "pi", 619 | "name": "Pāli", 620 | "nativeName": "पाऴि" 621 | }, 622 | { 623 | "code": "fa", 624 | "name": "Persian", 625 | "nativeName": "فارسی" 626 | }, 627 | { 628 | "code": "pl", 629 | "name": "Polish", 630 | "nativeName": "polski" 631 | }, 632 | { 633 | "code": "ps", 634 | "name": "Pashto, Pushto", 635 | "nativeName": "پښتو" 636 | }, 637 | { 638 | "code": "pt", 639 | "name": "Portuguese", 640 | "nativeName": "Português" 641 | }, 642 | { 643 | "code": "qu", 644 | "name": "Quechua", 645 | "nativeName": "Runa Simi, Kichwa" 646 | }, 647 | { 648 | "code": "rm", 649 | "name": "Romansh", 650 | "nativeName": "rumantsch grischun" 651 | }, 652 | { 653 | "code": "rn", 654 | "name": "Kirundi", 655 | "nativeName": "kiRundi" 656 | }, 657 | { 658 | "code": "ro", 659 | "name": "Romanian, Moldavian, Moldovan", 660 | "nativeName": "română" 661 | }, 662 | { 663 | "code": "ru", 664 | "name": "Russian", 665 | "nativeName": "русский язык" 666 | }, 667 | { 668 | "code": "sa", 669 | "name": "Sanskrit (Saṁskṛta)", 670 | "nativeName": "संस्कृतम्" 671 | }, 672 | { 673 | "code": "sc", 674 | "name": "Sardinian", 675 | "nativeName": "sardu" 676 | }, 677 | { 678 | "code": "sd", 679 | "name": "Sindhi", 680 | "nativeName": "सिन्धी, سنڌي، سندھی‎" 681 | }, 682 | { 683 | "code": "se", 684 | "name": "Northern Sami", 685 | "nativeName": "Davvisámegiella" 686 | }, 687 | { 688 | "code": "sm", 689 | "name": "Samoan", 690 | "nativeName": "gagana faa Samoa" 691 | }, 692 | { 693 | "code": "sg", 694 | "name": "Sango", 695 | "nativeName": "yângâ tî sängö" 696 | }, 697 | { 698 | "code": "sr", 699 | "name": "Serbian", 700 | "nativeName": "српски језик" 701 | }, 702 | { 703 | "code": "gd", 704 | "name": "Scottish Gaelic; Gaelic", 705 | "nativeName": "Gàidhlig" 706 | }, 707 | { 708 | "code": "sn", 709 | "name": "Shona", 710 | "nativeName": "chiShona" 711 | }, 712 | { 713 | "code": "si", 714 | "name": "Sinhala, Sinhalese", 715 | "nativeName": "සිංහල" 716 | }, 717 | { 718 | "code": "sk", 719 | "name": "Slovak", 720 | "nativeName": "slovenčina" 721 | }, 722 | { 723 | "code": "sl", 724 | "name": "Slovene", 725 | "nativeName": "slovenščina" 726 | }, 727 | { 728 | "code": "so", 729 | "name": "Somali", 730 | "nativeName": "Soomaaliga, af Soomaali" 731 | }, 732 | { 733 | "code": "st", 734 | "name": "Southern Sotho", 735 | "nativeName": "Sesotho" 736 | }, 737 | { 738 | "code": "es", 739 | "name": "Spanish; Castilian", 740 | "nativeName": "español, castellano" 741 | }, 742 | { 743 | "code": "su", 744 | "name": "Sundanese", 745 | "nativeName": "Basa Sunda" 746 | }, 747 | { 748 | "code": "sw", 749 | "name": "Swahili", 750 | "nativeName": "Kiswahili" 751 | }, 752 | { 753 | "code": "ss", 754 | "name": "Swati", 755 | "nativeName": "SiSwati" 756 | }, 757 | { 758 | "code": "sv", 759 | "name": "Swedish", 760 | "nativeName": "svenska" 761 | }, 762 | { 763 | "code": "ta", 764 | "name": "Tamil", 765 | "nativeName": "தமிழ்" 766 | }, 767 | { 768 | "code": "te", 769 | "name": "Telugu", 770 | "nativeName": "తెలుగు" 771 | }, 772 | { 773 | "code": "tg", 774 | "name": "Tajik", 775 | "nativeName": "тоҷикӣ, toğikī, تاجیکی‎" 776 | }, 777 | { 778 | "code": "th", 779 | "name": "Thai", 780 | "nativeName": "ไทย" 781 | }, 782 | { 783 | "code": "ti", 784 | "name": "Tigrinya", 785 | "nativeName": "ትግርኛ" 786 | }, 787 | { 788 | "code": "bo", 789 | "name": "Tibetan Standard, Tibetan, Central", 790 | "nativeName": "བོད་ཡིག" 791 | }, 792 | { 793 | "code": "tk", 794 | "name": "Turkmen", 795 | "nativeName": "Türkmen, Түркмен" 796 | }, 797 | { 798 | "code": "tl", 799 | "name": "Tagalog", 800 | "nativeName": "Wikang Tagalog, ᜏᜒᜃᜅ᜔ ᜆᜄᜎᜓᜄ᜔" 801 | }, 802 | { 803 | "code": "tn", 804 | "name": "Tswana", 805 | "nativeName": "Setswana" 806 | }, 807 | { 808 | "code": "to", 809 | "name": "Tonga (Tonga Islands)", 810 | "nativeName": "faka Tonga" 811 | }, 812 | { 813 | "code": "tr", 814 | "name": "Turkish", 815 | "nativeName": "Türkçe" 816 | }, 817 | { 818 | "code": "ts", 819 | "name": "Tsonga", 820 | "nativeName": "Xitsonga" 821 | }, 822 | { 823 | "code": "tt", 824 | "name": "Tatar", 825 | "nativeName": "татарча, tatarça, تاتارچا‎" 826 | }, 827 | { 828 | "code": "tw", 829 | "name": "Twi", 830 | "nativeName": "Twi" 831 | }, 832 | { 833 | "code": "ty", 834 | "name": "Tahitian", 835 | "nativeName": "Reo Tahiti" 836 | }, 837 | { 838 | "code": "ug", 839 | "name": "Uighur, Uyghur", 840 | "nativeName": "Uyƣurqə, ئۇيغۇرچە‎" 841 | }, 842 | { 843 | "code": "uk", 844 | "name": "Ukrainian", 845 | "nativeName": "українська" 846 | }, 847 | { 848 | "code": "ur", 849 | "name": "Urdu", 850 | "nativeName": "اردو" 851 | }, 852 | { 853 | "code": "uz", 854 | "name": "Uzbek", 855 | "nativeName": "zbek, Ўзбек, أۇزبېك‎" 856 | }, 857 | { 858 | "code": "ve", 859 | "name": "Venda", 860 | "nativeName": "Tshivenḓa" 861 | }, 862 | { 863 | "code": "vi", 864 | "name": "Vietnamese", 865 | "nativeName": "Tiếng Việt" 866 | }, 867 | { 868 | "code": "vo", 869 | "name": "Volapük", 870 | "nativeName": "Volapük" 871 | }, 872 | { 873 | "code": "wa", 874 | "name": "Walloon", 875 | "nativeName": "Walon" 876 | }, 877 | { 878 | "code": "cy", 879 | "name": "Welsh", 880 | "nativeName": "Cymraeg" 881 | }, 882 | { 883 | "code": "wo", 884 | "name": "Wolof", 885 | "nativeName": "Wollof" 886 | }, 887 | { 888 | "code": "fy", 889 | "name": "Western Frisian", 890 | "nativeName": "Frysk" 891 | }, 892 | { 893 | "code": "xh", 894 | "name": "Xhosa", 895 | "nativeName": "isiXhosa" 896 | }, 897 | { 898 | "code": "yi", 899 | "name": "Yiddish", 900 | "nativeName": "ייִדיש" 901 | }, 902 | { 903 | "code": "yo", 904 | "name": "Yoruba", 905 | "nativeName": "Yorùbá" 906 | }, 907 | { 908 | "code": "za", 909 | "name": "Zhuang, Chuang", 910 | "nativeName": "Saɯ cueŋƅ, Saw cuengh" 911 | } 912 | ] -------------------------------------------------------------------------------- /src/public/styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @font-face { 6 | font-family: "Creal"; 7 | src: url("../fonts/5fd07762093e40beee85d22757cc6d8d.woff2") format("woff2"), 8 | url("../fonts/5fd07762093e40beee85d22757cc6d8d.woff") format("woff"); 9 | font-weight: bold; 10 | font-style: normal; 11 | font-display: swap; 12 | } 13 | 14 | @font-face { 15 | font-family: "Creal"; 16 | src: url("../fonts/f5a1414f8fe9188766b39607d923fbb9.woff2") format("woff2"), 17 | url("../fonts/f5a1414f8fe9188766b39607d923fbb9.woff") format("woff"); 18 | font-weight: 900; 19 | font-style: normal; 20 | font-display: swap; 21 | } 22 | 23 | @font-face { 24 | font-family: "Creal"; 25 | src: url("../fonts/3d32e753a2cefc56ce239b04cce45490.woff2") format("woff2"), 26 | url("../fonts/3d32e753a2cefc56ce239b04cce45490.woff") format("woff"); 27 | font-weight: normal; 28 | font-style: normal; 29 | font-display: swap; 30 | } 31 | 32 | @font-face { 33 | font-family: "Creal"; 34 | src: url("../fonts/7ab640c091619f9534886523d3cde66f.woff2") format("woff2"), 35 | url("../fonts/7ab640c091619f9534886523d3cde66f.woff") format("woff"); 36 | font-weight: 900; 37 | font-style: normal; 38 | font-display: swap; 39 | } 40 | 41 | @font-face { 42 | font-family: "Creal"; 43 | src: url("../fonts/855b722e0240c397005b340b1baf8780.woff2") format("woff2"), 44 | url("../fonts/855b722e0240c397005b340b1baf8780.woff") format("woff"); 45 | font-weight: 500; 46 | font-style: normal; 47 | font-display: swap; 48 | } 49 | body { 50 | background-color: #22252f !important; 51 | color: #fff; 52 | background: url(https://cdn.discordapp.com/attachments/636915676665217035/733725416266924123/inspiration-geometry.png) 53 | repeat 0 0; 54 | overflow-x: hidden; 55 | -webkit-animation: slide 20s linear infinite; 56 | overflow: hidden; 57 | } 58 | @-webkit-keyframes slide { 59 | from { 60 | background-position: 0 0; 61 | } 62 | to { 63 | background-position: 0 -400px; 64 | } 65 | } 66 | 67 | * { 68 | font-family: "Creal", sans-serif; 69 | } 70 | ::-webkit-scrollbar { 71 | width: 14px; 72 | height: 18px; 73 | background: #434243; 74 | } 75 | ::-webkit-scrollbar-thumb { 76 | background-color: #696869; 77 | border-color: transparent; 78 | border-style: solid; 79 | border-width: 2px; 80 | background-clip: padding-box; 81 | } 82 | 83 | ::-webkit-scrollbar-thumb:hover { 84 | background-color: #7b7a7a; 85 | } 86 | ::-webkit-scrollbar-thumb:active { 87 | background-color: #a1a1a1; 88 | } 89 | 90 | .invalid-syntax { 91 | background: linear-gradient(160deg, transparent, transparent, #000); 92 | } 93 | 94 | .layout-colored-background { 95 | --color-primary: #d57aff; 96 | --color-gradient-1: #d57aff; 97 | --color-gradient-2: #a521e2; 98 | --color-gradient-3: #9900ff; 99 | --color-gradient-4: #be85ff; 100 | left: 50%; 101 | transform: translateX(-50%); 102 | background: radial-gradient( 103 | at 71% 77%, 104 | var(--color-gradient-1) 0, 105 | transparent 21% 106 | ), 107 | radial-gradient(at 36% 47%, var(--color-gradient-3) 0, transparent 50%), 108 | radial-gradient(at 54% 29%, var(--color-gradient-3) 0, transparent 28%), 109 | radial-gradient(at 45% 51%, var(--color-gradient-1) 0, transparent 53%), 110 | radial-gradient(at 73% 44%, var(--color-gradient-2) 0, transparent 54%), 111 | radial-gradient(at 24% 7%, var(--color-gradient-2) 0, transparent 40%), 112 | radial-gradient(at 76% 46%, var(--color-gradient-1) 0, transparent 50%); 113 | max-height: 800px; 114 | height: 80vh; 115 | max-width: 1400px; 116 | width: 100%; 117 | filter: blur(44px); 118 | z-index: 1; 119 | } 120 | 121 | 122 | .monaco-editor { 123 | flex-shrink: 0 !important; 124 | } -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | content: [ 3 | "./src/pages/**/*.{js,ts,jsx,tsx}", 4 | "./src/components/**/*.{js,ts,jsx,tsx}", 5 | ], 6 | theme: { 7 | extend: { 8 | colors: { 9 | dark: '#110e17' 10 | } 11 | }, 12 | }, 13 | plugins: [], 14 | } 15 | --------------------------------------------------------------------------------