diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..6b4c5ef359eb47e8cb7fd60e7d89a13cb5b24017 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.git* +docker* +.Dockerfile.swp + +chart/ +.editorconfig +*.yaml +*.md +!README.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..d340b505687b0271f0751cd9767de521d2f1e21c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true +curly_bracket_next_line = false +spaces_around_operators = true + +[*.js] +quote_type = double + +[*.{js,js.template,py}] +indent_size = 4 + +[*.{markdown,md}] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..5f977fcc1ad008550f951ce07c1ecc61e8e55404 --- /dev/null +++ b/.gitignore @@ -0,0 +1,137 @@ +# Ignore db/sessions/ +db/ + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ +installed_models/ + +# Misc +api_keys.db +suggestions.db \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..82e89464a50ea9aabaa7d598b09fe1ef3223c6ee --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,15 @@ +# See https://pre-commit.com for more information +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: check-added-large-files + name: " 🐘 Check for added large files" + - id: check-toml + name: " ✔️ Check TOML" + - id: check-json + name: " ✔️ Check JSON" + +ci: + autofix_commit_msg: 🎨 [pre-commit] Auto format + autoupdate_commit_msg: ⬆ [pre-commit] pre-commit auto update diff --git a/.well-known/funding-manifest-urls b/.well-known/funding-manifest-urls new file mode 100644 index 0000000000000000000000000000000000000000..b419350a98a7b81f6695d12d008f252b85fd3935 --- /dev/null +++ b/.well-known/funding-manifest-urls @@ -0,0 +1,2 @@ +https://libretranslate.com/funding.json + diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..4bd022118581d67297669bb3537b178c87e95dce --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,136 @@ +# Contributing + +If you want to make changes to the code, you can build from source, and run the API. + +## Build Dependencies + +* cmake + +### Debian / Ubuntu + +```sh +sudo apt-get install cmake +``` + +### Fedora / RHEL + +```sh +sudo dnf install cmake +``` + +## Getting Started + +Install [`hatch`](https://hatch.pypa.io) to manage the projects dependencies and run dev scripts: + +```bash +pipx install hatch +``` + +Clone the repository: + +```bash +git clone https://github.com/LibreTranslate/LibreTranslate.git +cd LibreTranslate +``` + +Hatch will automatically install the required dependencies in a virtual environment, and enable [`pre-commit`](https://pre-commit.com/), which will run before each commit to run formatting. You can ignore `pre-commit` checks when committing if necessary: `git commit --no-verify -m "Fix"` + +Run in development: + +```bash +hatch run dev --debug +``` + +Then open a web browser to + +You can also start a new shell in a virtual environment with libretranslate installed: + +```bash +hatch shell +libretranslate [args] +# Or +python main.py [args] +``` + +> You can still use `pip install -e ".[test]"` directly if you don't want to use hatch. + +## Run the tests + +Run the test suite and linting checks: + +```bash +hatch run test +``` + +To display all `print()` when debugging: + +```bash +hatch run test -s +``` + +You can also run the tests on multiple python versions: + +```bash +hatch run all:test +``` + +You can clean the virtual environment with: + +```bash +hatch env prune +``` + +## Run with Docker + +Linux/macOS: `./run.sh [args]` +Windows: `run.bat [args]` + +Then open a web browser to + +## Build with Docker + +```bash +docker build -f docker/Dockerfile [--build-arg with_models=true] -t libretranslate . +``` + +If you want to run the Docker image in a complete offline environment, you need to add the `--build-arg with_models=true` parameter. Then the language models are downloaded during the build process of the image. Otherwise, these models get downloaded on the first run of the image/container. + +Run the built image: + +```bash +docker run -it -p 5000:5000 libretranslate [args] +``` + +Or build and run using Docker Compose: + +```bash +docker compose up -d --build +``` + +> Feel free to change the [`docker-compose.yml`](https://github.com/LibreTranslate/LibreTranslate/blob/main/docker-compose.yml) file to adapt it to your deployment needs, or use an extra `docker-compose.prod.yml` file for your deployment configuration. +> +> The models are stored inside the container under `/home/libretranslate/.local/share` and `/home/libretranslate/.local/cache`. Feel free to use volumes if you do not want to redownload the models when the container is destroyed. To update the models, use the `--update-models` argument. + +## FAQ + +### Externally Managed Environment + +Some users may encounter the following error while installing packages: + +``` +error: externally-managed-environment + +× This environment is externally managed +╰─> To install Python packages system-wide, try apt install + python3-xyz, where xyz is the package you are trying to + install. + + … +``` + +This occurs when your operating system depends on and manages Python for core functionality. In this case, you should install and setup venv (virtual environments) to manage project dependencies. + +This prevents pip packages from being installed system-wide. This way, there are no risks of pip packages conflicting between multiple projects or the operating system. + +References: +* [Python venv documentation](https://docs.python.org/library/venv.html) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..0ad25db4bd1d86c452db3f9602ccdbe172438f52 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + 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 +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/TRADEMARK.md b/TRADEMARK.md new file mode 100644 index 0000000000000000000000000000000000000000..d4ac739c042b94a1a84d782e917b086896bced4f --- /dev/null +++ b/TRADEMARK.md @@ -0,0 +1,86 @@ +# LibreTranslate Trademark Guidelines + +LibreTranslate is an open source organization. Because we make our code available to download and modify, proper use of our trademarks is essential to inform users whether or not LibreTranslate stands behind a product or service. When using LibreTranslate trademarks (including some product names that are part of our organization) you must comply with these LibreTranslate Trademark Guidelines. + +Some of our trademark names include: + + * LibreTranslate + +Some of our trademark logos include: + + ![LibreTranslate](https://avatars.githubusercontent.com/u/77352747?s=200&v=4) + +However, this is not a complete list of our names, logos, and brand features, all of which are subject to these guidelines. + +If you want to report misuse of an LibreTranslate trademark, please contact us via https://uav4geo.com/contact + +## When do I need specific permission to use an LibreTranslate trademark? + +Noting that LibreTranslate software combined with, or integrated into, any other software program, including but not limited to automation software for offering LibreTranslate as a cloud service or orchestration software for offering LibreTranslate in containers is considered "modified" LibreTranslate software, you may do the following without receiving specific permission from LibreTranslate (or its affiliates): + + * Use LibreTranslate wordmarks and/or logos in unmodified versions of LibreTranslate programs, products, services and technologies. + * Use LibreTranslate wordmarks in text to truthfully refer to and/or link to unmodified LibreTranslate programs, products, services and technologies. + * Use LibreTranslate logos in visuals to truthfully refer to and/or to link to the applicable programs, products, services and technologies hosted on LibreTranslate servers. + * Use LibreTranslate wordmarks to explain that your software is based on LibreTranslate's open source code, or is compatible with LibreTranslate's software. + * Describe a social media account, page, or community in accordance with the [Social Media Guidelines](#social-media-guidelines). + +All other uses of an LibreTranslate trademark require our prior written permission. This includes any use of a LibreTranslate trademark in a domain name. Contact us at https://uav4geo.com/contact for more information. + +## When allowed, how should I use an LibreTranslate trademark? + +### General Guidelines + +#### Do: + + * Use the LibreTranslate trademark exactly as shown in the list above. + * Use LibreTranslate wordmarks only as an adjective, never as a noun or verb. Do not use them in plural or possessive forms. Instead, use the generic term for the LibreTranslate product or service following the trademark, for example: LibreTranslate translation software. + +#### Don't: + + * Don't use LibreTranslate trademarks in the name of your business, product, service, app, domain name, publication, or other offering. + * Don't use marks, logos, company names, slogans, domain names, or designs that are confusingly similar to LibreTranslate trademarks. + * Don't use LibreTranslate trademarks in a way that incorrectly implies affiliation with, or sponsorship, endorsement, or approval by LibreTranslate of your products or services. + * Don't display LibreTranslate trademarks more prominently than your product, service, or company name. + * Don't use LibreTranslate trademarks on merchandise for sale (e.g., selling t-shirts, mugs, etc.) + * Don't use LibreTranslate trademarks for any other form of commercial use (e.g. offering technical support services), unless such use is limited to a truthful and descriptive reference (e.g. Independent technical support for LibreTranslate's software). + * Don't modify LibreTranslate's trademarks, abbreviate them, or combine them with any other symbols, words, or images, or incorporate them into a tagline or slogan. + + ### Social Media Guidelines + +In addition to the General Guidelines above, the name and handle of your social media account and any and all pages cannot begin with an LibreTranslate trademark. In addition, LibreTranslate logos cannot be used in a way that might suggest affiliation with LibreTranslate, including, but not limited to, the account, profile, or header images. The only exception to these requirements is if you've received prior permission from LibreTranslate. + +For example, you cannot name your account, page, or community "LibreTranslate Representatives" or "LibreTranslate Software". However, it would be acceptable to name your account, page, or community "Fans of LibreTranslate" or "Information about LibreTranslate Software" as long as you do not use the LibreTranslate trademarks or LibreTranslate logos or otherwise suggest any affiliation with LibreTranslate. + +### Open Source Project Guidelines + +The specific license for each of LibreTranslate's software products and code says what you can and cannot do with the code itself but does not give permission to use LibreTranslate's trademarks. If you choose to build on or modify LibreTranslate's open source code for your own project, + +#### You Must: + + * Follow the terms of the Open Source License(s) for LibreTranslate software products and code. + * Choose branding, logos, and trademarks that denotes your own unique identity so as to clearly signal to users that there is no affiliation with or endorsement by LibreTranslate. + * Follow the General Guidelines, above. + +#### You Must NOT: + +* Use any LibreTranslate trademark in connection with the user-facing name or branding of your project. + * Use any LibreTranslate trademark or any part of any LibreTranslate trademark to incorrectly suggest or give the impression your software is actually published by, affiliated with, or endorsed by LibreTranslate. + +For example, please do not name your project, [Something]-LibreTranslate, or LibreTranslate-[Something] + +#### You May: + + * State in words (not using logos or images) that your product "works with" or "is compatible" with certain LibreTranslate software products, if that is true. + * State in words (not using logos or images) that your project is based on LibreTranslate open source technology, if that is true, as long as you also include a statement that your project is not officially associated with LibreTranslate or its products. + +For instance, you may state that your project: + +"is proudly built from LibreTranslate's open source software" + +as long as you also include the statement equally prominently: + +"[Brand Name] and [Product Name] are not officially associated with LibreTranslate or its products." + +### LibreTranslate Community Guidelines + +Various permissions to use LibreTranslate Trademarks have been provided to various members of the LibreTranslate Community, and these LibreTranslate Trademark Guidelines do not alter any such previously granted permissions. diff --git a/VERSION b/VERSION new file mode 100644 index 0000000000000000000000000000000000000000..9edc58bb1dd8cff2f0729fabe243a96e33f9d453 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.6.4 diff --git a/babel.cfg b/babel.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b335d317da5cc980fffa3a34a813d5f88a9d2444 --- /dev/null +++ b/babel.cfg @@ -0,0 +1,2 @@ +[python: **.py] +[jinja2: **/templates/**] \ No newline at end of file diff --git a/docker-compose.cuda.yml b/docker-compose.cuda.yml new file mode 100644 index 0000000000000000000000000000000000000000..46dfeea9978632e1b28fa3e42bcba156b0ae07e5 --- /dev/null +++ b/docker-compose.cuda.yml @@ -0,0 +1,18 @@ +version: "3" + +services: + libretranslate-cuda: + container_name: libretranslate-cuda + build: + context: . + dockerfile: docker/cuda.Dockerfile + restart: unless-stopped + ports: + - "5000:5000" + deploy: + resources: + reservations: + devices: + - driver: nvidia + count: 1 + capabilities: [gpu] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..1156028f2d0448cff36db4f67cb2deaad07c74c0 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,30 @@ +services: + libretranslate: + container_name: libretranslate + build: + context: . + dockerfile: ./docker/Dockerfile + restart: unless-stopped + ports: + - "5000:5000" + ## Uncomment this for logging in docker compose logs + # tty: true + healthcheck: + test: ['CMD-SHELL', './venv/bin/python scripts/healthcheck.py'] + ## Uncomment above command and define your args if necessary + # command: --ssl --ga-id MY-GA-ID --req-limit 100 --char-limit 500 + ## Uncomment this section and the libretranslate_api_keys volume if you want to backup your API keys + # environment: + # - LT_API_KEYS=true + # - LT_API_KEYS_DB_PATH=/app/db/api_keys.db # Same result as `db/api_keys.db` or `./db/api_keys.db` + ## Uncomment these vars and libretranslate_models volume to optimize loading time. + # - LT_UPDATE_MODELS=true + # - LT_LOAD_ONLY=en,fr + # volumes: + # - libretranslate_api_keys:/app/db + # Keep the models in a docker volume, to avoid re-downloading on startup + # - libretranslate_models:/home/libretranslate/.local:rw + +# volumes: +# libretranslate_api_keys: +# libretranslate_models: diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..7e62b795b1cd80da7b69dd75aaecf5c998cd1ad5 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,46 @@ +FROM python:3.11.9-slim-bullseye AS builder + +WORKDIR /app + +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -qq \ + && apt-get -qqq install --no-install-recommends -y pkg-config gcc g++ \ + && apt-get upgrade --assume-yes \ + && apt-get clean \ + && rm -rf /var/lib/apt + +RUN python -mvenv venv && ./venv/bin/pip install --no-cache-dir --upgrade pip + +COPY . . + +# Install package from source code, compile translations +RUN ./venv/bin/pip install Babel==2.12.1 && ./venv/bin/python scripts/compile_locales.py \ + && ./venv/bin/pip install torch==2.0.1 --extra-index-url https://download.pytorch.org/whl/cpu \ + && ./venv/bin/pip install "numpy<2" \ + && ./venv/bin/pip install . \ + && ./venv/bin/pip cache purge + +FROM python:3.11.9-slim-bullseye + +ARG with_models=false +ARG models="" + +RUN addgroup --system --gid 1032 libretranslate && adduser --system --uid 1032 libretranslate && mkdir -p /home/libretranslate/.local && chown -R libretranslate:libretranslate /home/libretranslate/.local +USER libretranslate + +COPY --from=builder --chown=1032:1032 /app /app +WORKDIR /app + +COPY --from=builder --chown=1032:1032 /app/venv/bin/ltmanage /usr/bin/ + +RUN if [ "$with_models" = "true" ]; then \ + # initialize the language models + if [ ! -z "$models" ]; then \ + ./venv/bin/python scripts/install_models.py --load_only_lang_codes "$models"; \ + else \ + ./venv/bin/python scripts/install_models.py; \ + fi \ + fi + +EXPOSE 5000 +ENTRYPOINT [ "./venv/bin/libretranslate", "--host", "*" ] diff --git a/docker/arm.Dockerfile b/docker/arm.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..a4d3c5020853b9b3580be9473019d8e9828b1e0b --- /dev/null +++ b/docker/arm.Dockerfile @@ -0,0 +1,44 @@ +FROM arm64v8/python:3.11.9-slim-bullseye as builder + +WORKDIR /app + +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -qq \ + && apt-get -qqq install --no-install-recommends -y pkg-config gcc g++ \ + && apt-get upgrade --assume-yes \ + && apt-get clean \ + && rm -rf /var/lib/apt + +RUN python -mvenv venv && ./venv/bin/pip install --no-cache-dir --upgrade pip + +COPY . . + +# Install package from source code, compile translations +RUN ./venv/bin/pip install Babel==2.12.1 && ./venv/bin/python scripts/compile_locales.py \ + && ./venv/bin/pip install torch==2.0.1 --extra-index-url https://download.pytorch.org/whl/cpu \ + && ./venv/bin/pip install "numpy<2" \ + && ./venv/bin/pip install . \ + && ./venv/bin/pip cache purge + +FROM arm64v8/python:3.11.9-slim-bullseye + +ARG with_models=false +ARG models="" + +RUN addgroup --system --gid 1032 libretranslate && adduser --system --uid 1032 libretranslate && mkdir -p /home/libretranslate/.local && chown -R libretranslate:libretranslate /home/libretranslate/.local +USER libretranslate + +COPY --from=builder --chown=1032:1032 /app /app +WORKDIR /app + +RUN if [ "$with_models" = "true" ]; then \ + # initialize the language models + if [ ! -z "$models" ]; then \ + ./venv/bin/python scripts/install_models.py --load_only_lang_codes "$models"; \ + else \ + ./venv/bin/python scripts/install_models.py; \ + fi \ + fi + +EXPOSE 5000 +ENTRYPOINT [ "./venv/bin/libretranslate", "--host", "*" ] diff --git a/docker/cuda.Dockerfile b/docker/cuda.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..9ce0751ac539eba8225545d188def548f793e9f7 --- /dev/null +++ b/docker/cuda.Dockerfile @@ -0,0 +1,46 @@ +FROM nvidia/cuda:12.4.1-devel-ubuntu20.04 + +ENV ARGOS_DEVICE_TYPE auto +ARG with_models=false +ARG models="" + +WORKDIR /app + +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update -qq \ + && apt-get -qqq install --no-install-recommends -y libicu-dev libaspell-dev libcairo2 libcairo2-dev pkg-config gcc g++ python3.8-dev python3-pip libpython3.8-dev\ + && apt-get upgrade --assume-yes \ + && apt-get clean \ + && rm -rf /var/lib/apt + +RUN pip3 install --no-cache-dir --upgrade pip && apt-get remove python3-pip --assume-yes + +RUN ln -s /usr/bin/python3 /usr/bin/python + +RUN pip3 install --no-cache-dir torch==1.12.0+cu116 -f https://download.pytorch.org/whl/torch_stable.html + +COPY . . + +RUN if [ "$with_models" = "true" ]; then \ + # install only the dependencies first + pip3 install --no-cache-dir -e .; \ + # initialize the language models + if [ ! -z "$models" ]; then \ + ./scripts/install_models.py --load_only_lang_codes "$models"; \ + else \ + ./scripts/install_models.py; \ + fi \ + fi + +# Install package from source code +RUN pip3 install Babel==2.12.1 && python3 scripts/compile_locales.py \ + && pip3 install "numpy<2" \ + && pip3 install . \ + && pip3 cache purge + +# Depending on your cuda install you may need to uncomment this line to allow the container to access the cuda libraries +# See: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions +# ENV LD_LIBRARY_PATH=/usr/local/cuda/lib:/usr/local/cuda/lib64 + +EXPOSE 5000 +ENTRYPOINT [ "libretranslate", "--host", "*" ] diff --git a/k8s.yaml b/k8s.yaml new file mode 100644 index 0000000000000000000000000000000000000000..06291cd5b5ff6e5b5321e3dd4de1deed5158093f --- /dev/null +++ b/k8s.yaml @@ -0,0 +1,84 @@ +# kubernetes deployment template +# prepare a namespace on your cluster first like libretranslate-prod +apiVersion: v1 +kind: ConfigMap +metadata: + name: libretranslate-config +data: +# list loaded languages or leave empty to load all + langs: "es,de,it,en,fr,cs,da,nl,hu,pl,pt,sk,ru,tr,uk,fi,eo" + ltapikey: "yoursecretapikey" +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: libretranslate +spec: + selector: + matchLabels: + app: libretranslate + template: + metadata: + labels: + app: libretranslate + spec: + containers: + - name: libretranslate + image: libretranslate/libretranslate:latest + resources: + limits: + memory: "1Gi" + cpu: "500m" + ports: + - containerPort: 5000 + env: + - name: "LT_LOAD_ONLY" + valueFrom: + configMapKeyRef: + name: libretranslate-config + key: langs + - name: "TRANSLATE_KEY" + valueFrom: + configMapKeyRef: + name: libretranslate-config + key: ltapikey +--- +apiVersion: v1 +kind: Service +metadata: + name: libretranslate-svc + namespace: libretranslate-prod +spec: + selector: + app: libretranslate + ports: + - port: 5000 + targetPort: 5000 + +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + cert-manager.io/issuer: letsencrypt-prod + nginx.ingress.kubernetes.io/proxy-body-size: 5m + name: libretranslate-ingress + namespace: libretranslate-prod + labels: + app: libretranslate +spec: + tls: + - hosts: + - libretranslate.mydomain.net + secretName: libretranslate-mydomain-net + rules: + - host: libretranslate.mydomain.net + http: + paths: + - backend: + service: + name: libretranslate-svc + port: + number: 5000 + path: / + pathType: Prefix diff --git a/libretranslate/__init__.py b/libretranslate/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..982fb0bafdc27da5352b30300b84388ac14c7260 --- /dev/null +++ b/libretranslate/__init__.py @@ -0,0 +1,3 @@ +import os +from .main import main +from .manage import manage diff --git a/libretranslate/api_keys.py b/libretranslate/api_keys.py new file mode 100644 index 0000000000000000000000000000000000000000..e56ca83e788c32542fdfeba9d9106ab376365332 --- /dev/null +++ b/libretranslate/api_keys.py @@ -0,0 +1,112 @@ +import os +import sqlite3 +import uuid + +import requests +from expiringdict import ExpiringDict + +from libretranslate.default_values import DEFAULT_ARGUMENTS as DEFARGS + +DEFAULT_DB_PATH = DEFARGS['API_KEYS_DB_PATH'] + + +class Database: + def __init__(self, db_path=DEFAULT_DB_PATH, max_cache_len=1000, max_cache_age=30): + # Legacy check - this can be removed at some point in the near future + if os.path.isfile("api_keys.db") and not os.path.isfile("db/api_keys.db"): + print("Migrating {} to {}".format("api_keys.db", "db/api_keys.db")) + try: + os.rename("api_keys.db", "db/api_keys.db") + except Exception as e: + print(str(e)) + + db_dir = os.path.dirname(db_path) + if db_dir != '' and not os.path.exists(db_dir): + os.makedirs(db_dir) + self.db_path = db_path + self.cache = ExpiringDict(max_len=max_cache_len, max_age_seconds=max_cache_age) + + # Make sure to do data synchronization on writes! + self.c = sqlite3.connect(db_path, check_same_thread=False) + self.c.execute( + """CREATE TABLE IF NOT EXISTS api_keys ( + "api_key" TEXT NOT NULL, + "req_limit" INTEGER NOT NULL, + "char_limit" INTEGER DEFAULT NULL, + PRIMARY KEY("api_key") + );""" + ) + + # Schema/upgrade checks + schema = self.c.execute("SELECT sql FROM sqlite_master WHERE type='table' AND name='api_keys';").fetchone()[0] + if '"char_limit" INTEGER DEFAULT NULL' not in schema: + self.c.execute('ALTER TABLE api_keys ADD COLUMN "char_limit" INTEGER DEFAULT NULL;') + + def lookup(self, api_key): + val = self.cache.get(api_key) + if val is None: + # DB Lookup + stmt = self.c.execute( + "SELECT req_limit, char_limit FROM api_keys WHERE api_key = ?", (api_key,) + ) + row = stmt.fetchone() + if row is not None: + self.cache[api_key] = row + val = row + else: + self.cache[api_key] = False + val = False + + if isinstance(val, bool): + val = None + + return val + + def add(self, req_limit, api_key="auto", char_limit=None): + if api_key == "auto": + api_key = str(uuid.uuid4()) + if char_limit == 0: + char_limit = None + + self.remove(api_key) + self.c.execute( + "INSERT INTO api_keys (api_key, req_limit, char_limit) VALUES (?, ?, ?)", + (api_key, req_limit, char_limit), + ) + self.c.commit() + return (api_key, req_limit, char_limit) + + def remove(self, api_key): + self.c.execute("DELETE FROM api_keys WHERE api_key = ?", (api_key,)) + self.c.commit() + return api_key + + def all(self): + row = self.c.execute("SELECT api_key, req_limit, char_limit FROM api_keys") + return row.fetchall() + + +class RemoteDatabase: + def __init__(self, url, max_cache_len=1000, max_cache_age=600): + self.url = url + self.cache = ExpiringDict(max_len=max_cache_len, max_age_seconds=max_cache_age) + + def lookup(self, api_key): + val = self.cache.get(api_key) + if val is None: + try: + r = requests.post(self.url, data={'api_key': api_key}, timeout=60) + res = r.json() + except Exception as e: + print("Cannot authenticate API key: " + str(e)) + return None + + if res.get('error') is not None: + return None + + req_limit = res.get('req_limit', None) + char_limit = res.get('char_limit', None) + + self.cache[api_key] = (req_limit, char_limit) + + return val diff --git a/libretranslate/app.py b/libretranslate/app.py new file mode 100644 index 0000000000000000000000000000000000000000..c1fd4acaf5643896cee3a0d9373bfff982d86b85 --- /dev/null +++ b/libretranslate/app.py @@ -0,0 +1,1200 @@ +import io +import math +import os +import re +import tempfile +import uuid +from datetime import datetime +from functools import wraps +from html import unescape +from timeit import default_timer + +import argostranslatefiles +from argostranslatefiles import get_supported_formats +from flask import Blueprint, Flask, Response, abort, jsonify, render_template, request, send_file, session, url_for, make_response +from flask_babel import Babel +from flask_session import Session +from flask_swagger import swagger +from flask_swagger_ui import get_swaggerui_blueprint +from translatehtml import translate_html +from werkzeug.exceptions import HTTPException +from werkzeug.http import http_date +from werkzeug.utils import secure_filename + +from libretranslate import flood, remove_translated_files, scheduler, secret, security, storage +from libretranslate.language import detect_languages, improve_translation_formatting +from libretranslate.locales import ( + _, + _lazy, + get_alternate_locale_links, + get_available_locale_codes, + get_available_locales, + gettext_escaped, + gettext_html, + lazy_swag, +) + +from .api_keys import Database, RemoteDatabase +from .suggestions import Database as SuggestionsDatabase + + +def get_version(): + try: + with open("VERSION") as f: + return f.read().strip() + except: + return "?" + + +def get_upload_dir(): + upload_dir = os.path.join(tempfile.gettempdir(), "libretranslate-files-translate") + + if not os.path.isdir(upload_dir): + os.mkdir(upload_dir) + + return upload_dir + + +def get_req_api_key(): + if request.is_json: + json = get_json_dict(request) + ak = json.get("api_key") + else: + ak = request.values.get("api_key") + + return ak + +def get_req_secret(): + if request.is_json: + json = get_json_dict(request) + ak = json.get("secret") + else: + ak = request.values.get("secret") + + return ak + + +def get_json_dict(request): + d = request.get_json() + if not isinstance(d, dict): + abort(400, description=_("Invalid JSON format")) + return d + + +def get_remote_address(): + if request.headers.getlist("X-Forwarded-For"): + ip = request.headers.getlist("X-Forwarded-For")[0].split(",")[0] + else: + ip = request.remote_addr or "127.0.0.1" + + return ip + + +def get_req_limits(default_limit, api_keys_db, db_multiplier=1, multiplier=1): + req_limit = default_limit + + if api_keys_db: + api_key = get_req_api_key() + + if api_key: + api_key_limits = api_keys_db.lookup(api_key) + if api_key_limits is not None: + req_limit = api_key_limits[0] * db_multiplier + + return int(req_limit * multiplier) + + +def get_char_limit(default_limit, api_keys_db): + char_limit = default_limit + + if api_keys_db: + api_key = get_req_api_key() + + if api_key: + api_key_limits = api_keys_db.lookup(api_key) + if api_key_limits is not None: + if api_key_limits[1] is not None: + char_limit = api_key_limits[1] + + return char_limit + + +def get_routes_limits(args, api_keys_db): + default_req_limit = args.req_limit + if default_req_limit == -1: + # TODO: better way? + default_req_limit = 9999999999999 + + def minute_limits(): + return "%s per minute" % get_req_limits(default_req_limit, api_keys_db) + + def hourly_limits(n): + def func(): + decay = (0.75 ** (n - 1)) + return "{} per {} hour".format(get_req_limits(args.hourly_req_limit * n, api_keys_db, int(os.environ.get("LT_HOURLY_REQ_LIMIT_MULTIPLIER", 60) * n), decay), n) + return func + + def daily_limits(): + return "%s per day" % get_req_limits(args.daily_req_limit, api_keys_db, int(os.environ.get("LT_DAILY_REQ_LIMIT_MULTIPLIER", 1440))) + + res = [minute_limits] + + if args.hourly_req_limit > 0: + for n in range(1, args.hourly_req_limit_decay + 2): + res.append(hourly_limits(n)) + + if args.daily_req_limit > 0: + res.append(daily_limits) + + return res + +def filter_unique(seq, extra): + seen = set({extra, ""}) + seen_add = seen.add + return [x for x in seq if not (x in seen or seen_add(x))] + +def create_app(args): + from libretranslate.init import boot + + boot(args.load_only, args.update_models, args.force_update_models) + + from libretranslate.language import load_languages + + swagger_url = args.url_prefix + "/docs" # Swagger UI (w/o trailing '/') + api_url = args.url_prefix + "/spec" + + bp = Blueprint('Main app', __name__) + + storage.setup(args.shared_storage) + + if not args.disable_files_translation: + remove_translated_files.setup(get_upload_dir()) + languages = load_languages() + language_pairs = {} + for lang in languages: + language_pairs[lang.code] = sorted([l.to_lang.code for l in lang.translations_from]) + + # Map userdefined frontend languages to argos language object. + if args.frontend_language_source == "auto": + frontend_argos_language_source = type( + "obj", (object,), {"code": "auto", "name": _("Auto Detect")} + ) + else: + frontend_argos_language_source = next( + iter([l for l in languages if l.code == args.frontend_language_source]), + None, + ) + if frontend_argos_language_source is None: + frontend_argos_language_source = languages[0] + + + language_target_fallback = languages[1] if len(languages) >= 2 else languages[0] + + if args.frontend_language_target == "locale": + def resolve_language_locale(): + loc = get_locale() + language_target = next( + iter([l for l in languages if l.code == loc]), None + ) + if language_target is None: + language_target = language_target_fallback + return language_target + + frontend_argos_language_target = resolve_language_locale + else: + language_target = next( + iter([l for l in languages if l.code == args.frontend_language_target]), None + ) + if language_target is None: + language_target = language_target_fallback + frontend_argos_language_target = lambda: language_target + + frontend_argos_supported_files_format = [] + + for file_format in get_supported_formats(): + for ff in file_format.supported_file_extensions: + frontend_argos_supported_files_format.append(ff) + + api_keys_db = None + + if args.req_limit > 0 or args.api_keys or args.daily_req_limit > 0 or args.hourly_req_limit > 0: + api_keys_db = None + if args.api_keys: + api_keys_db = RemoteDatabase(args.api_keys_remote) if args.api_keys_remote else Database(args.api_keys_db_path) + + from flask_limiter import Limiter + + def limits_cost(): + req_cost = getattr(request, 'req_cost', 1) + if args.req_time_cost > 0: + return max(req_cost, int(math.ceil(getattr(request, 'duration', 0) / args.req_time_cost))) + else: + return req_cost + + limiter = Limiter( + key_func=get_remote_address, + default_limits=get_routes_limits( + args, api_keys_db + ), + storage_uri=args.req_limit_storage, + default_limits_deduct_when=lambda req: True, # Force cost to be called after the request + default_limits_cost=limits_cost, + strategy="moving-window", + ) + else: + from .no_limiter import Limiter + + limiter = Limiter() + + if not "gunicorn" in os.environ.get("SERVER_SOFTWARE", ""): + # Gunicorn starts the scheduler in the master process + scheduler.setup(args) + + flood.setup(args) + secret.setup(args) + + measure_request = None + gauge_request = None + if args.metrics: + if os.environ.get("PROMETHEUS_MULTIPROC_DIR") is None: + default_mp_dir = os.path.abspath(os.path.join("db", "prometheus")) + if not os.path.isdir(default_mp_dir): + os.mkdir(default_mp_dir) + os.environ["PROMETHEUS_MULTIPROC_DIR"] = default_mp_dir + + from prometheus_client import CONTENT_TYPE_LATEST, CollectorRegistry, Gauge, Summary, generate_latest, multiprocess + + @bp.route("/metrics") + @limiter.exempt + def prometheus_metrics(): + if args.metrics_auth_token: + authorization = request.headers.get('Authorization') + if authorization != "Bearer " + args.metrics_auth_token: + abort(401, description=_("Unauthorized")) + + registry = CollectorRegistry() + multiprocess.MultiProcessCollector(registry) + return Response(generate_latest(registry), mimetype=CONTENT_TYPE_LATEST) + + measure_request = Summary('libretranslate_http_request_duration_seconds', 'Time spent on request', ['endpoint', 'status', 'request_ip', 'api_key']) + measure_request.labels('/translate', 200, '127.0.0.1', '') + + gauge_request = Gauge('libretranslate_http_requests_in_flight', 'Active requests', ['endpoint', 'request_ip', 'api_key'], multiprocess_mode='livesum') + gauge_request.labels('/translate', '127.0.0.1', '') + + def access_check(f): + @wraps(f) + def func(*a, **kw): + ip = get_remote_address() + + if flood.is_banned(ip): + abort(403, description=_("Too many request limits violations")) + + if args.api_keys: + ak = get_req_api_key() + if ak and api_keys_db.lookup(ak) is None: + abort( + 403, + description=_("Invalid API key"), + ) + else: + need_key = False + key_missing = api_keys_db.lookup(ak) is None + + if (args.require_api_key_origin + and key_missing + and not re.match(args.require_api_key_origin, request.headers.get("Origin", "")) + ): + need_key = True + + req_secret = get_req_secret() + if (args.require_api_key_secret + and key_missing + and not secret.secret_match(req_secret) + ): + need_key = True + if secret.secret_bogus_match(req_secret): + abort(make_response(jsonify({ + 'translatedText': secret.get_emoji(), + 'alternatives': [], + 'detectedLanguage': { 'confidence': 100, 'language': 'en' } + }), 200)) + + if need_key: + description = _("Please contact the server operator to get an API key") + if args.get_api_key_link: + description = _("Visit %(url)s to get an API key", url=args.get_api_key_link) + abort( + 400, + description=description, + ) + return f(*a, **kw) + + if args.metrics: + @wraps(func) + def measure_func(*a, **kw): + start_t = default_timer() + status = 200 + ip = get_remote_address() + ak = get_req_api_key() or '' + g = gauge_request.labels(request.path, ip, ak) + try: + g.inc() + return func(*a, **kw) + except HTTPException as e: + status = e.code + raise e + finally: + request.duration = max(default_timer() - start_t, 0) + measure_request.labels(request.path, status, ip, ak).observe(request.duration) + g.dec() + return measure_func + else: + @wraps(func) + def time_func(*a, **kw): + start_t = default_timer() + try: + return func(*a, **kw) + finally: + request.duration = max(default_timer() - start_t, 0) + return time_func + + @bp.errorhandler(400) + def invalid_api(e): + return jsonify({"error": str(e.description)}), 400 + + @bp.errorhandler(500) + def server_error(e): + return jsonify({"error": str(e.description)}), 500 + + @bp.errorhandler(429) + def slow_down_error(e): + flood.report(get_remote_address()) + return jsonify({"error": _("Slowdown:") + " " + str(e.description)}), 429 + + @bp.errorhandler(403) + def denied(e): + return jsonify({"error": str(e.description)}), 403 + + @bp.route("/") + @limiter.exempt + def index(): + if args.disable_web_ui: + abort(404) + + langcode = request.args.get('lang') + if langcode and langcode in get_available_locale_codes(not args.debug): + session.update(preferred_lang=langcode) + + resp = make_response(render_template( + "index.html", + gaId=args.ga_id, + frontendTimeout=args.frontend_timeout, + api_keys=args.api_keys, + get_api_key_link=args.get_api_key_link, + web_version=os.environ.get("LT_WEB") is not None, + version=get_version(), + swagger_url=swagger_url, + available_locales=[{'code': l['code'], 'name': _lazy(l['name'])} for l in get_available_locales(not args.debug)], + current_locale=get_locale(), + alternate_locales=get_alternate_locale_links() + )) + + if args.require_api_key_secret: + resp.set_cookie('r', '1') + + return resp + + @bp.route("/js/app.js") + @limiter.exempt + def appjs(): + if args.disable_web_ui: + abort(404) + + api_secret = "" + bogus_api_secret = "" + if args.require_api_key_secret: + bogus_api_secret = secret.get_bogus_secret_b64() + + if 'User-Agent' in request.headers and request.cookies.get('r'): + api_secret = secret.get_current_secret_js() + else: + api_secret = secret.get_bogus_secret_js() + + response = Response(render_template("app.js.template", + url_prefix=args.url_prefix, + get_api_key_link=args.get_api_key_link, + api_secret=api_secret, + bogus_api_secret=bogus_api_secret), content_type='application/javascript; charset=utf-8') + + if args.require_api_key_secret: + response.headers['Last-Modified'] = http_date(datetime.now()) + response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0' + response.headers['Pragma'] = 'no-cache' + response.headers['Expires'] = '-1' + + return response + + @bp.get("/languages") + @limiter.exempt + def langs(): + """ + Retrieve list of supported languages + --- + tags: + - translate + responses: + 200: + description: List of languages + schema: + id: languages + type: array + items: + type: object + properties: + code: + type: string + description: Language code + name: + type: string + description: Human-readable language name (in English) + targets: + type: array + items: + type: string + description: Supported target language codes + """ + return jsonify([{"code": l.code, "name": _lazy(l.name), "targets": language_pairs.get(l.code, [])} for l in languages]) + + # Add cors + @bp.after_request + def after_request(response): + response.headers.add("Access-Control-Allow-Origin", "*") + response.headers.add( + "Access-Control-Allow-Headers", "Authorization, Content-Type" + ) + response.headers.add("Access-Control-Expose-Headers", "Authorization") + response.headers.add("Access-Control-Allow-Methods", "GET, POST") + response.headers.add("Access-Control-Allow-Credentials", "true") + response.headers.add("Access-Control-Max-Age", 60 * 60 * 24 * 20) + return response + + @bp.post("/translate") + @access_check + def translate(): + """ + Translate text from a language to another + --- + tags: + - translate + parameters: + - in: formData + name: q + schema: + oneOf: + - type: string + example: Hello world! + - type: array + example: ['Hello world!'] + required: true + description: Text(s) to translate + - in: formData + name: source + schema: + type: string + example: en + required: true + description: Source language code + - in: formData + name: target + schema: + type: string + example: es + required: true + description: Target language code + - in: formData + name: format + schema: + type: string + enum: [text, html] + default: text + example: text + required: false + description: > + Format of source text: + * `text` - Plain text + * `html` - HTML markup + - in: formData + name: alternatives + schema: + type: integer + default: 0 + example: 3 + required: false + description: Preferred number of alternative translations + - in: formData + name: api_key + schema: + type: string + example: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + required: false + description: API key + responses: + 200: + description: Translated text + schema: + id: translate + type: object + properties: + translatedText: + oneOf: + - type: string + - type: array + description: Translated text(s) + 400: + description: Invalid request + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + 500: + description: Translation error + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + 429: + description: Slow down + schema: + id: error-slow-down + type: object + properties: + error: + type: string + description: Reason for slow down + 403: + description: Banned + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + """ + if request.is_json: + json = get_json_dict(request) + q = json.get("q") + source_lang = json.get("source") + target_lang = json.get("target") + text_format = json.get("format") + num_alternatives = int(json.get("alternatives", 0)) + else: + q = request.values.get("q") + source_lang = request.values.get("source") + target_lang = request.values.get("target") + text_format = request.values.get("format") + num_alternatives = request.values.get("alternatives", 0) + + if not q: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='q')) + if not source_lang: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='source')) + if not target_lang: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='target')) + + try: + num_alternatives = max(0, int(num_alternatives)) + except ValueError: + abort(400, description=_("Invalid request: %(name)s parameter is not a number", name='alternatives')) + + if args.alternatives_limit != -1 and num_alternatives > args.alternatives_limit: + abort(400, description=_("Invalid request: %(name)s parameter must be <= %(value)s", name='alternatives', value=args.alternatives_limit)) + + if not request.is_json: + # Normalize line endings to UNIX style (LF) only so we can consistently + # enforce character limits. + # https://www.rfc-editor.org/rfc/rfc2046#section-4.1.1 + q = "\n".join(q.splitlines()) + + char_limit = get_char_limit(args.char_limit, api_keys_db) + + batch = isinstance(q, list) + + if batch and args.batch_limit != -1: + batch_size = len(q) + if args.batch_limit < batch_size: + abort( + 400, + description=_("Invalid request: request (%(size)s) exceeds text limit (%(limit)s)", size=batch_size, limit=args.batch_limit), + ) + + src_texts = q if batch else [q] + + if char_limit != -1: + for text in src_texts: + if len(text) > char_limit: + abort( + 400, + description=_("Invalid request: request (%(size)s) exceeds text limit (%(limit)s)", size=len(text), limit=char_limit), + ) + + if batch: + request.req_cost = max(1, len(q)) + + if source_lang == "auto": + candidate_langs = detect_languages(src_texts) + detected_src_lang = candidate_langs[0] + else: + detected_src_lang = {"confidence": 100.0, "language": source_lang} + + src_lang = next(iter([l for l in languages if l.code == detected_src_lang["language"]]), None) + + if src_lang is None: + abort(400, description=_("%(lang)s is not supported", lang=source_lang)) + + tgt_lang = next(iter([l for l in languages if l.code == target_lang]), None) + + if tgt_lang is None: + abort(400, description=_("%(lang)s is not supported",lang=target_lang)) + + if not text_format: + text_format = "text" + + if text_format not in ["text", "html"]: + abort(400, description=_("%(format)s format is not supported", format=text_format)) + + try: + if batch: + batch_results = [] + batch_alternatives = [] + for text in q: + translator = src_lang.get_translation(tgt_lang) + if translator is None: + abort(400, description=_("%(tname)s (%(tcode)s) is not available as a target language from %(sname)s (%(scode)s)", tname=_lazy(tgt_lang.name), tcode=tgt_lang.code, sname=_lazy(src_lang.name), scode=src_lang.code)) + + if text_format == "html": + translated_text = unescape(str(translate_html(translator, text))) + alternatives = [] # Not supported for html yet + else: + hypotheses = translator.hypotheses(text, num_alternatives + 1) + translated_text = unescape(improve_translation_formatting(text, hypotheses[0].value)) + alternatives = filter_unique([unescape(improve_translation_formatting(text, hypotheses[i].value)) for i in range(1, len(hypotheses))], translated_text) + + batch_results.append(translated_text) + batch_alternatives.append(alternatives) + + result = {"translatedText": batch_results} + + if source_lang == "auto": + result["detectedLanguage"] = [detected_src_lang] * len(q) + if num_alternatives > 0: + result["alternatives"] = batch_alternatives + + return jsonify(result) + else: + translator = src_lang.get_translation(tgt_lang) + if translator is None: + abort(400, description=_("%(tname)s (%(tcode)s) is not available as a target language from %(sname)s (%(scode)s)", tname=_lazy(tgt_lang.name), tcode=tgt_lang.code, sname=_lazy(src_lang.name), scode=src_lang.code)) + + if text_format == "html": + translated_text = unescape(str(translate_html(translator, q))) + alternatives = [] # Not supported for html yet + else: + hypotheses = translator.hypotheses(q, num_alternatives + 1) + translated_text = unescape(improve_translation_formatting(q, hypotheses[0].value)) + alternatives = filter_unique([unescape(improve_translation_formatting(q, hypotheses[i].value)) for i in range(1, len(hypotheses))], translated_text) + + result = {"translatedText": translated_text} + + if source_lang == "auto": + result["detectedLanguage"] = detected_src_lang + if num_alternatives > 0: + result["alternatives"] = alternatives + + return jsonify(result) + except Exception as e: + raise e + abort(500, description=_("Cannot translate text: %(text)s", text=str(e))) + + @bp.post("/translate_file") + @access_check + def translate_file(): + """ + Translate file from a language to another + --- + tags: + - translate + consumes: + - multipart/form-data + parameters: + - in: formData + name: file + type: file + required: true + description: File to translate + - in: formData + name: source + schema: + type: string + example: en + required: true + description: Source language code + - in: formData + name: target + schema: + type: string + example: es + required: true + description: Target language code + - in: formData + name: api_key + schema: + type: string + example: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + required: false + description: API key + responses: + 200: + description: Translated file + schema: + id: translate-file + type: object + properties: + translatedFileUrl: + type: string + description: Translated file url + 400: + description: Invalid request + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + 500: + description: Translation error + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + 429: + description: Slow down + schema: + id: error-slow-down + type: object + properties: + error: + type: string + description: Reason for slow down + 403: + description: Banned + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + """ + if args.disable_files_translation: + abort(403, description=_("Files translation are disabled on this server.")) + + source_lang = request.form.get("source") + target_lang = request.form.get("target") + file = request.files['file'] + char_limit = get_char_limit(args.char_limit, api_keys_db) + + if not file: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='file')) + if not source_lang: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='source')) + if not target_lang: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='target')) + + if file.filename == '': + abort(400, description=_("Invalid request: empty file")) + + if os.path.splitext(file.filename)[1] not in frontend_argos_supported_files_format: + abort(400, description=_("Invalid request: file format not supported")) + + src_lang = next(iter([l for l in languages if l.code == source_lang]), None) + + if src_lang is None and source_lang != "auto": + abort(400, description=_("%(lang)s is not supported", lang=source_lang)) + + tgt_lang = next(iter([l for l in languages if l.code == target_lang]), None) + + if tgt_lang is None: + abort(400, description=_("%(lang)s is not supported", lang=target_lang)) + + try: + filename = str(uuid.uuid4()) + '.' + secure_filename(file.filename) + filepath = os.path.join(get_upload_dir(), filename) + + file.save(filepath) + + # Not an exact science: take the number of bytes and divide by + # the character limit. Assuming a plain text file, this will + # set the cost of the request to N = bytes / char_limit, which is + # roughly equivalent to a batch process of N batches assuming + # each batch uses all available limits + if char_limit > 0: + request.req_cost = max(1, int(os.path.getsize(filepath) / char_limit)) + + if source_lang == "auto": + src_texts = argostranslatefiles.get_texts(filepath) + candidate_langs = detect_languages(src_texts) + detected_src_lang = candidate_langs[0] + src_lang = next(iter([l for l in languages if l.code == detected_src_lang["language"]]), None) + if src_lang is None: + abort(400, description=_("%(lang)s is not supported", lang=detected_src_lang["language"])) + + translated_file_path = argostranslatefiles.translate_file(src_lang.get_translation(tgt_lang), filepath) + translated_filename = os.path.basename(translated_file_path) + + return jsonify( + { + "translatedFileUrl": url_for('Main app.download_file', filename=translated_filename, _external=True) + } + ) + except Exception as e: + abort(500, description=e) + + @bp.get("/download_file/") + def download_file(filename: str): + """ + Download a translated file + """ + if args.disable_files_translation: + abort(400, description=_("Files translation are disabled on this server.")) + + filepath = os.path.join(get_upload_dir(), filename) + try: + checked_filepath = security.path_traversal_check(filepath, get_upload_dir()) + if os.path.isfile(checked_filepath): + filepath = checked_filepath + except security.SuspiciousFileOperationError: + abort(400, description=_("Invalid filename")) + + return_data = io.BytesIO() + with open(filepath, 'rb') as fo: + return_data.write(fo.read()) + return_data.seek(0) + + download_filename = filename.split('.') + download_filename.pop(0) + download_filename = '.'.join(download_filename) + + return send_file(return_data, as_attachment=True, download_name=download_filename) + + @bp.post("/detect") + @access_check + def detect(): + """ + Detect the language of a single text + --- + tags: + - translate + parameters: + - in: formData + name: q + schema: + type: string + example: What language is this? + required: true + description: Text to detect + - in: formData + name: api_key + schema: + type: string + example: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx + required: false + description: API key + responses: + 200: + description: Detections + schema: + id: detections + type: array + items: + type: object + properties: + confidence: + type: number + format: integer + minimum: 0 + maximum: 100 + description: Confidence value + example: 100 + language: + type: string + description: Language code + example: en + 400: + description: Invalid request + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + 500: + description: Detection error + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + 429: + description: Slow down + schema: + id: error-slow-down + type: object + properties: + error: + type: string + description: Reason for slow down + 403: + description: Banned + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + """ + if request.is_json: + json = get_json_dict(request) + q = json.get("q") + else: + q = request.values.get("q") + + if not q: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='q')) + + return jsonify(detect_languages(q)) + + @bp.route("/frontend/settings") + @limiter.exempt + def frontend_settings(): + """ + Retrieve frontend specific settings + --- + tags: + - frontend + responses: + 200: + description: frontend settings + schema: + id: frontend-settings + type: object + properties: + charLimit: + type: integer + description: Character input limit for this language (-1 indicates no limit) + frontendTimeout: + type: integer + description: Frontend translation timeout + apiKeys: + type: boolean + description: Whether the API key database is enabled. + keyRequired: + type: boolean + description: Whether an API key is required. + suggestions: + type: boolean + description: Whether submitting suggestions is enabled. + supportedFilesFormat: + type: array + items: + type: string + description: Supported files format + language: + type: object + properties: + source: + type: object + properties: + code: + type: string + description: Language code + name: + type: string + description: Human-readable language name (in English) + target: + type: object + properties: + code: + type: string + description: Language code + name: + type: string + description: Human-readable language name (in English) + """ + target_lang = frontend_argos_language_target() + + return jsonify( + { + "charLimit": args.char_limit, + "frontendTimeout": args.frontend_timeout, + "apiKeys": args.api_keys, + "keyRequired": bool(args.api_keys and args.require_api_key_origin), + "suggestions": args.suggestions, + "filesTranslation": not args.disable_files_translation, + "supportedFilesFormat": [] if args.disable_files_translation else frontend_argos_supported_files_format, + "language": { + "source": { + "code": frontend_argos_language_source.code, + "name": _lazy(frontend_argos_language_source.name), + }, + "target": { + "code": target_lang.code, + "name": _lazy(target_lang.name), + }, + }, + } + ) + + @bp.post("/suggest") + def suggest(): + """ + Submit a suggestion to improve a translation + --- + tags: + - feedback + parameters: + - in: formData + name: q + schema: + type: string + example: Hello world! + required: true + description: Original text + - in: formData + name: s + schema: + type: string + example: ¡Hola mundo! + required: true + description: Suggested translation + - in: formData + name: source + schema: + type: string + example: en + required: true + description: Language of original text + - in: formData + name: target + schema: + type: string + example: es + required: true + description: Language of suggested translation + responses: + 200: + description: Success + schema: + id: suggest-response + type: object + properties: + success: + type: boolean + description: Whether submission was successful + 403: + description: Not authorized + schema: + id: error-response + type: object + properties: + error: + type: string + description: Error message + """ + if not args.suggestions: + abort(403, description=_("Suggestions are disabled on this server.")) + + if request.is_json: + json = get_json_dict(request) + q = json.get("q") + s = json.get("s") + source_lang = json.get("source") + target_lang = json.get("target") + else: + q = request.values.get("q") + s = request.values.get("s") + source_lang = request.values.get("source") + target_lang = request.values.get("target") + + if not q: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='q')) + if not s: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='s')) + if not source_lang: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='source')) + if not target_lang: + abort(400, description=_("Invalid request: missing %(name)s parameter", name='target')) + + SuggestionsDatabase().add(q, s, source_lang, target_lang) + return jsonify({"success": True}) + + app = Flask(__name__) + + app.config["SESSION_TYPE"] = "filesystem" + app.config["SESSION_FILE_DIR"] = os.path.join("db", "sessions") + app.config["JSON_AS_ASCII"] = False + Session(app) + + if args.debug: + app.config["TEMPLATES_AUTO_RELOAD"] = True + if args.url_prefix: + app.register_blueprint(bp, url_prefix=args.url_prefix) + else: + app.register_blueprint(bp) + + limiter.init_app(app) + + swag = swagger(app) + swag["info"]["version"] = get_version() + swag["info"]["title"] = "LibreTranslate" + + @app.route(api_url) + @limiter.exempt + def spec(): + return jsonify(lazy_swag(swag)) + + app.config["BABEL_TRANSLATION_DIRECTORIES"] = 'locales' + + def get_locale(): + override_lang = request.headers.get('X-Override-Accept-Language') + if override_lang and override_lang in get_available_locale_codes(): + return override_lang + return session.get('preferred_lang', request.accept_languages.best_match(get_available_locale_codes())) + + Babel(app, locale_selector=get_locale) + + app.jinja_env.globals.update(_e=gettext_escaped, _h=gettext_html) + + # Call factory function to create our blueprint + swaggerui_blueprint = get_swaggerui_blueprint(swagger_url, api_url) + if args.url_prefix: + app.register_blueprint(swaggerui_blueprint, url_prefix=swagger_url) + else: + app.register_blueprint(swaggerui_blueprint) + + return app diff --git a/libretranslate/default_values.py b/libretranslate/default_values.py new file mode 100644 index 0000000000000000000000000000000000000000..2c796119138262eae5c690aed5d738f1f8240c54 --- /dev/null +++ b/libretranslate/default_values.py @@ -0,0 +1,222 @@ +import os + +_prefix = 'LT_' + + +def _get_value_str(name, default_value): + env_value = os.environ.get(name) + return default_value if env_value is None else env_value + + +def _get_value_int(name, default_value): + try: + return int(os.environ[name]) + except: + return default_value + + +def _get_value_bool(name, default_value): + env_value = os.environ.get(name) + if env_value in ['FALSE', 'False', 'false', '0']: + return False + if env_value in ['TRUE', 'True', 'true', '1']: + return True + return default_value + + +def _get_value(name, default_value, value_type): + env_name = _prefix + name + if value_type == 'str': + return _get_value_str(env_name, default_value) + if value_type == 'int': + return _get_value_int(env_name, default_value) + if value_type == 'bool': + return _get_value_bool(env_name, default_value) + return default_value + + +_default_options_objects = [ + { + 'name': 'HOST', + 'default_value': '127.0.0.1', + 'value_type': 'str' + }, + { + 'name': 'PORT', + 'default_value': 5000, + 'value_type': 'int' + }, + { + 'name': 'CHAR_LIMIT', + 'default_value': -1, + 'value_type': 'int' + }, + { + 'name': 'REQ_LIMIT', + 'default_value': -1, + 'value_type': 'int' + }, + { + 'name': 'REQ_LIMIT_STORAGE', + 'default_value': 'memory://', + 'value_type': 'str' + }, + { + 'name': 'HOURLY_REQ_LIMIT', + 'default_value': -1, + 'value_type': 'int' + }, + { + 'name': 'HOURLY_REQ_LIMIT_DECAY', + 'default_value': 0, + 'value_type': 'int' + }, + { + 'name': 'DAILY_REQ_LIMIT', + 'default_value': -1, + 'value_type': 'int' + }, + { + 'name': 'REQ_FLOOD_THRESHOLD', + 'default_value': -1, + 'value_type': 'int' + }, + { + 'name': 'REQ_TIME_COST', + 'default_value': -1, + 'value_type': 'int' + }, + { + 'name': 'BATCH_LIMIT', + 'default_value': -1, + 'value_type': 'int' + }, + { + 'name': 'GA_ID', + 'default_value': None, + 'value_type': 'str' + }, + { + 'name': 'DEBUG', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'SSL', + 'default_value': None, + 'value_type': 'bool' + }, + { + 'name': 'FRONTEND_LANGUAGE_SOURCE', + 'default_value': 'auto', + 'value_type': 'str' + }, + { + 'name': 'FRONTEND_LANGUAGE_TARGET', + 'default_value': 'locale', + 'value_type': 'str' + }, + { + 'name': 'FRONTEND_TIMEOUT', + 'default_value': 500, + 'value_type': 'int' + }, + { + 'name': 'API_KEYS', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'API_KEYS_DB_PATH', + 'default_value': 'db/api_keys.db', + 'value_type': 'str' + }, + { + 'name': 'API_KEYS_REMOTE', + 'default_value': '', + 'value_type': 'str' + }, + { + 'name': 'GET_API_KEY_LINK', + 'default_value': '', + 'value_type': 'str' + }, + { + 'name': 'REQUIRE_API_KEY_ORIGIN', + 'default_value': '', + 'value_type': 'str' + }, + { + 'name': 'REQUIRE_API_KEY_SECRET', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'SHARED_STORAGE', + 'default_value': 'memory://', + 'value_type': 'str' + }, + { + 'name': 'SECONDARY', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'LOAD_ONLY', + 'default_value': None, + 'value_type': 'str' + }, + { + 'name': 'ALTERNATIVES_LIMIT', + 'default_value': -1, + 'value_type': 'int' + }, + { + 'name': 'THREADS', + 'default_value': 4, + 'value_type': 'int' + }, + { + 'name': 'SUGGESTIONS', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'DISABLE_FILES_TRANSLATION', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'DISABLE_WEB_UI', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'UPDATE_MODELS', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'FORCE_UPDATE_MODELS', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'METRICS', + 'default_value': False, + 'value_type': 'bool' + }, + { + 'name': 'METRICS_AUTH_TOKEN', + 'default_value': '', + 'value_type': 'str' + }, + { + 'name': 'URL_PREFIX', + 'default_value': '', + 'value_type': 'str' + }, +] + + +DEFAULT_ARGUMENTS = {obj['name']: _get_value(**obj) for obj in _default_options_objects} diff --git a/libretranslate/detect.py b/libretranslate/detect.py new file mode 100644 index 0000000000000000000000000000000000000000..b13d52cf48f917b098fd3aad51283e47fcff3e17 --- /dev/null +++ b/libretranslate/detect.py @@ -0,0 +1,45 @@ + +from langdetect import DetectorFactory + +DetectorFactory.seed = 0 + +from langdetect import detect_langs +from lexilang.detector import detect as lldetect + + +class Language: + def __init__(self, code, confidence): + self.code = code + self.confidence = float(confidence) + + def __str__(self): + return (f"code: {self.code:<9} confidence: {self.confidence:>5.1f} ") + +def check_lang(langcodes, lang): + return normalized_lang_code(lang) in langcodes + +def normalized_lang_code(lang): + code = lang.lang + # Handle zh-cn + if code.startswith("zh"): + code = "zh" + return code + +class Detector: + def __init__(self, langcodes = ()): + self.langcodes = langcodes + + def detect(self, text): + if len(text) < 20: + code, conf = lldetect(text, self.langcodes) + if conf > 0: + return [Language(code, round(conf * 100))] + + top_3_choices = [lang for lang in detect_langs(text) if check_lang(self.langcodes, lang)][:3] + if not len(top_3_choices): + return [Language("en", 0)] + if top_3_choices[0].prob == 0: + return [Language("en", 0)] + + return [Language(normalized_lang_code(lang), round(lang.prob * 100)) for lang in top_3_choices] + diff --git a/libretranslate/flood.py b/libretranslate/flood.py new file mode 100644 index 0000000000000000000000000000000000000000..63cd392ff6c069665295c8e6e0bd304e73f9febe --- /dev/null +++ b/libretranslate/flood.py @@ -0,0 +1,47 @@ +from libretranslate.storage import get_storage + +active = False +threshold = -1 + +def forgive_banned(): + global threshold + + clear_list = [] + s = get_storage() + banned = s.get_all_hash_int("banned") + + for ip in banned: + if banned[ip] <= 0: + clear_list.append(ip) + else: + s.set_hash_int("banned", ip, min(threshold, banned[ip]) - 1) + + for ip in clear_list: + s.del_hash("banned", ip) + +def setup(args): + global active + global threshold + + if args.req_flood_threshold > 0: + active = True + threshold = args.req_flood_threshold + +def report(request_ip): + if active: + get_storage().inc_hash_int("banned", request_ip) + +def decrease(request_ip): + s = get_storage() + if s.get_hash_int("banned", request_ip) > 0: + s.dec_hash_int("banned", request_ip) + +def has_violation(request_ip): + s = get_storage() + return s.get_hash_int("banned", request_ip) > 0 + +def is_banned(request_ip): + s = get_storage() + + # More than X offences? + return active and s.get_hash_int("banned", request_ip) >= threshold diff --git a/libretranslate/init.py b/libretranslate/init.py new file mode 100644 index 0000000000000000000000000000000000000000..098cb2086842ab3daf1c8d962743f0e4b8b34757 --- /dev/null +++ b/libretranslate/init.py @@ -0,0 +1,74 @@ + +from argostranslate import package, translate +from packaging import version + +import libretranslate.language + + +def boot(load_only=None, update_models=False, install_models=False): + try: + if update_models: + check_and_install_models(load_only_lang_codes=load_only, update=update_models) + else: + check_and_install_models(force=install_models, load_only_lang_codes=load_only) + except Exception as e: + print("Cannot update models (normal if you're offline): %s" % str(e)) + + +def check_and_install_models(force=False, load_only_lang_codes=None,update=False): + if len(package.get_installed_packages()) < 2 or force or update: + # Update package definitions from remote + print("Updating language models") + package.update_package_index() + + # Load available packages from local package index + available_packages = package.get_available_packages() + installed_packages = package.get_installed_packages() + print("Found %s models" % len(available_packages)) + if load_only_lang_codes is not None: + # load_only_lang_codes: List[str] (codes) + # Ensure the user does not use any unavailable language code. + unavailable_lang_codes = set(load_only_lang_codes) + for pack in available_packages: + unavailable_lang_codes -= {pack.from_code, pack.to_code} + if unavailable_lang_codes: + raise ValueError( + "Unavailable language codes: %s." + % ",".join(sorted(unavailable_lang_codes)) + ) + # Keep only the packages that have both from_code and to_code in our list. + available_packages = [ + pack + for pack in available_packages + if pack.from_code in load_only_lang_codes and pack.to_code in load_only_lang_codes + ] + if not available_packages: + raise ValueError("no available package") + print("Keep %s models" % len(available_packages)) + + # Download and install all available packages + for available_package in available_packages: + update = False + if not force: + for pack in installed_packages: + if ( + pack.from_code == available_package.from_code + and pack.to_code == available_package.to_code + ): + update = True + if version.parse(pack.package_version) < version.parse(available_package.package_version): + print( + f"Updating {available_package} ({pack.package_version}->{available_package.package_version}) ..." + ) + pack.update() + if not update: + print( + f"Downloading {available_package} ({available_package.package_version}) ..." + ) + available_package.install() + + # reload installed languages + libretranslate.language.languages = translate.get_installed_languages() + print( + f"Loaded support for {len(translate.get_installed_languages())} languages ({len(available_packages)} models total)!" + ) diff --git a/libretranslate/language.py b/libretranslate/language.py new file mode 100644 index 0000000000000000000000000000000000000000..0709cad559464172c8b5b2325141468157c5c4a3 --- /dev/null +++ b/libretranslate/language.py @@ -0,0 +1,135 @@ + +from functools import lru_cache + +from argostranslate import translate + +from libretranslate.detect import Detector + +__languages = None + +def load_languages(): + global __languages + + if __languages is None or len(__languages) == 0: + __languages = translate.get_installed_languages() + + return __languages + +@lru_cache(maxsize=None) +def load_lang_codes(): + languages = load_languages() + return tuple(l.code for l in languages) + +def detect_languages(text): + # detect batch processing + if isinstance(text, list): + is_batch = True + else: + is_batch = False + text = [text] + + lang_codes = load_lang_codes() + + # get the candidates + candidates = [] + for t in text: + try: + d = Detector(lang_codes).detect(t) + for i in range(len(d)): + d[i].text_length = len(t) + candidates.extend(d) + except Exception as e: + print(str(e)) + + # total read bytes of the provided text + text_length_total = sum(c.text_length for c in candidates) + + # this happens if no language could be detected + if not candidates: + # use language "en" by default but with zero confidence + return [{"confidence": 0.0, "language": "en"}] + + # for multiple occurrences of the same language (can happen on batch detection) + # calculate the average confidence for each language + if is_batch: + temp_average_list = [] + for lang_code in lang_codes: + # get all candidates for a specific language + lc = list(filter(lambda l: l.code == lang_code, candidates)) + if len(lc) > 1: + # if more than one is present, calculate the average confidence + lang = lc[0] + lang.confidence = sum(l.confidence for l in lc) / len(lc) + lang.text_length = sum(l.text_length for l in lc) + temp_average_list.append(lang) + elif lc: + # otherwise just add it to the temporary list + temp_average_list.append(lc[0]) + + if temp_average_list: + # replace the list + candidates = temp_average_list + + # sort the candidates descending based on the detected confidence + candidates.sort( + key=lambda l: 0 if text_length_total == 0 else (l.confidence * l.text_length) / text_length_total, reverse=True + ) + + return [{"confidence": l.confidence, "language": l.code} for l in candidates] + + +def improve_translation_formatting(source, translation, improve_punctuation=True, remove_single_word_duplicates=True): + source = source.strip() + + if not len(source): + return "" + + if not len(translation): + return source + + if improve_punctuation: + source_last_char = source[len(source) - 1] + translation_last_char = translation[len(translation) - 1] + + punctuation_chars = ['!', '?', '.', ',', ';', '。'] + if source_last_char in punctuation_chars: + if translation_last_char != source_last_char: + if translation_last_char in punctuation_chars: + translation = translation[:-1] + + translation += source_last_char + elif translation_last_char in punctuation_chars: + translation = translation[:-1] + + # A workaround for certain language models that output + # the single word repeated ad-infinitum (the "salad" bug) + # https://github.com/LibreTranslate/LibreTranslate/issues/46 + if remove_single_word_duplicates: + if len(source) < 20 and source.count(" ") == 0 and translation.count(" ") > 0: + bow = translation.split() + count = {} + for word in bow: + count[word] = count.get(word, 0) + 1 + + for word in count: + if count[word] / len(count) >= 2: + translation = bow[0] + break + + if source.islower(): + return translation.lower() + + if source.isupper(): + return translation.upper() + + if len(translation) == 0: + return source + + if source[0].islower(): + return translation[0].lower() + translation[1:] + + if source[0].isupper(): + return translation[0].upper() + translation[1:] + + return translation + diff --git a/libretranslate/locales.py b/libretranslate/locales.py new file mode 100644 index 0000000000000000000000000000000000000000..eab1a5fa46f4c0eb041e53bb1f2ba39b1a625fd9 --- /dev/null +++ b/libretranslate/locales.py @@ -0,0 +1,97 @@ +import json +import os +from functools import lru_cache + +from flask_babel import gettext as _ +from flask_babel import lazy_gettext as _lazy +from markupsafe import Markup, escape + + +@lru_cache(maxsize=None) +def get_available_locales(only_reviewed=True, sort_by_name=False): + locales_dir = os.path.join(os.path.dirname(__file__), 'locales') + dirs = [os.path.join(locales_dir, d) for d in os.listdir(locales_dir)] + + res = [{'code': 'en', 'name': 'English', 'reviewed': True}] + + for d in dirs: + if d == 'en': + continue + + meta_file = os.path.join(d, 'meta.json') + if os.path.isdir(os.path.join(d, 'LC_MESSAGES')) and os.path.isfile(meta_file): + try: + with open(meta_file) as f: + j = json.loads(f.read()) + except Exception as e: + print(e) + continue + + if j.get('reviewed') or not only_reviewed: + res.append({'code': os.path.basename(d), 'name': j.get('name', ''), 'reviewed': j.get('reviewed', False)}) + + if sort_by_name: + res.sort(key=lambda s: s['name']) + + return res + +@lru_cache(maxsize=None) +def get_available_locale_codes(only_reviewed=True): + return [l['code'] for l in get_available_locales(only_reviewed=only_reviewed)] + +@lru_cache(maxsize=None) +def get_alternate_locale_links(): + tmpl = os.environ.get("LT_LOCALE_LINK_TEMPLATE") + if tmpl is None: + return [] + + locales = get_available_locale_codes() + result = [] + for l in locales: + link = tmpl.replace("{LANG}", l) + if l == 'en': + link = link.replace("en.", "") + result.append({ 'link': link,'lang': l }) + return result + +# Javascript code should use _e instead of _ +def gettext_escaped(text, **variables): + return json.dumps(_(text, **variables)) + +# HTML should be escaped using _h instead of _ +def gettext_html(text, **variables): + # Translate text without args + s = str(escape(_(text))) + + v = {} + if variables: + for k in variables: + if hasattr(variables[k], 'unescape'): + v[k] = variables[k].unescape() + else: + v[k] = Markup(variables[k]) + + # Variables are assumed to be already escaped and thus safe + return Markup(s if not v else s % v) + +def swag_eval(swag, func): + # Traverse the swag spec structure + # and call func on summary and description keys + for k in swag: + if k in ['summary', 'description'] and isinstance(swag[k], str) and swag[k] != "": + swag[k] = func(swag[k]) + elif k == 'tags' and isinstance(swag[k], list): + swag[k] = [func(v) for v in swag[k]] + elif isinstance(swag[k], dict): + swag_eval(swag[k], func) + elif isinstance(swag[k], list) and k != 'consumes': + for i in swag[k]: + if isinstance(i, str): + func(i) + elif isinstance(i, dict): + swag_eval(i, func) + + return swag + +def lazy_swag(swag): + return swag_eval(swag, _lazy) \ No newline at end of file diff --git a/libretranslate/locales/.gitignore b/libretranslate/locales/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..034e08a89ac84565fbd0008c918ce7fab5c4303e --- /dev/null +++ b/libretranslate/locales/.gitignore @@ -0,0 +1,3 @@ +**/*.mo +.langs.py +.swag.py diff --git a/libretranslate/locales/ar/LC_MESSAGES/messages.po b/libretranslate/locales/ar/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..57c7c4ab5b890fcefeaf6886ede9f8567785f198 --- /dev/null +++ b/libretranslate/locales/ar/LC_MESSAGES/messages.po @@ -0,0 +1,753 @@ +# Arabic translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2023-11-02 04:00+0000\n" +"Last-Translator: Rex_sa \n" +"Language-Team: Arabic \n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=0 && n%100<=2 ? 4 : 5);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "تنسيق JSON غير صالح" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "اكتشاف تلقائي" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "غير مصرح به" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "تم تجاوز عدد الطلبات المسموح بها" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "مفتاح API غير صحيح" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "يرجى الاتصال بالسيرفر للحصول على مفتاح API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "زيارة%(url)s للحصول على مفتاح API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "التباطؤ:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "طلب غير صالح: المعامل ‭%(name)s ‮مفقود" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "عدم وجود طلب: صفر البارامترات ليست رقم %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "عدم وجود طلب: صفر البارامترات يجب أن تكون %(value)s %(name)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "الطلب خاطئ: الطلب (%(size)s) تتجاوز حدود النص (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s غير مدعوم‬" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s الشكل غير مدعوم" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "%(tname)s %(tcode)sغير متاحة كلغة هدف من %(sname)s %(scode)s" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "لا يمكن ترجمة النص: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "ترجمة الملفات معطلة على هذا الخادم." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "طلب خاطئ: ملف فارغ" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "طلب غير صحيح: صيغة الملف غير مدعومة" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "اسم الملف غير صالح" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "الاقتراحات معطلة على هذا الخادم." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "الإنجليزية" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "ألبانيا" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "العربية" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "أذربيجان" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basque" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "بنغالي" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "بلغاريا" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalan" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "الصينية" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "الصينية (التقليدية)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "التشيكية" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "الدنمارك" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "هولندا" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "إستونيا" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "فنلندا" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "الفرنسية" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "غاليشي" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "ألمانيا" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "يوناني" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "العبرية" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "الهندية" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "هنغاريا" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "الإندونيسية" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "أيرلندا" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "إيطاليا" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "اليابان" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "كوريا" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "لاتفيا" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "ليتوانيا" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "مالي" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "النرويج" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persian" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "بولندا" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "البرتغال" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "رومانيا" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "الروسية" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "سلوفاكيا" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "سلوفينيا(ن)" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "الإسبانية" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "السويد" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "تايلند" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "تركيا" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "الأوكرانية" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "صربيا" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "أوكرانيا" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamese" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "قائمة الاسترجاع باللغات المدعومة" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "قائمة اللغات" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "ترجمة" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "ترجمة النص من لغة إلى أخرى" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "النص المترجمة" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "عدم وجود طلب" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "خطأ الترجمة" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "تمهل" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "تم حظرها" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "مرحبا العالم!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "النص (النصوص) المراد ترجمتها" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "رمز لغة المصدر" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "رمز اللغة الهدف" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "نص" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format of source text:\n" +"* " النص "\n" +"* html - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "العدد المفضَّل من الترجمات البديلة" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "مفتاح API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "ترجمة ملف من لغة إلى أخرى" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "ملف مراجع" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "ملف للترجمة" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "الكشف عن لغة نص ما" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "الكشف" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "الخطأ" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "النص المراد الكشف عنه" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "استرداد إعدادات محددة للواجهة الأمامية" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "اعدادات الواجهة الأمامية" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "الواجهة" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "تقديم اقتراح لتحسين الترجمة" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "تم بنجاح" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "غيرمرخص به" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "النص الأصلي" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "الترجمة المقترَحة" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "لغة النص الأصلي" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "لغة الترجمة المقترَحة" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "التعليقات" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "رمز اللغة" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "اسم لغة قابلة للقراءة البشرية (باللغة الإنكليزية)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "رموز اللغات المستهدفة المدعومة" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "النص/النثوص المترجمة" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "رسالة خطأ" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "سبب التباطؤ" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "عنوان ملف مترجمة" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "قيمة الثقة" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "الحد الأقصى للمدخلات التعريفية لهذه اللغة (-1 لا يشير إلى حد أقصى)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "وقت واجهة الترجمة" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "ما إذا كانت قاعدة البيانات الرئيسية متاحة." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "ما إذا كان من المطلوب وجود مفتاح." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "وسواء أمكن تقديم الاقتراحات." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "استمارة الملفات المدعومة" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "ما إذا كان التقديم ناجحاً" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "نسخ النص" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "لا يمكن تحميل %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "خطأ غير معروف" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "تم نسخه" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "شكراً على تصحيحك ملاحظة الاقتراح لن يبدأ تطبيقه في الحال." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "لا توجد لغات متاحة. هل قمت بتثبيت النماذج بشكل صحيح؟?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "ادخل مفتاحك إذا كنت بحاجة إلى مفتاح API، %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "اضغط على رابط \"المفاتيح\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "اتصل بمشغل الخادم." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "واجهة برمجة تطبيقات حرة ومفتوحة المصدر للترجمة الآلية" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Free and Open Source Machine Translation API. ذاتي الاستيعاب، غير مباشر قادر" +" وسهل التجهيز أدير خادمك الخاص في غضون دقائق." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "ترجمة" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API مستندات" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "الحصول على مفتاح API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "تعيين مفتاح API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "تغيير اللغة" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "تعديل" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "الظلمة/الضوء" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "تجاهل" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "الترجمة API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "ترجمة النص" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "ترجمة الملفات" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "ترجمة من" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "تبديل المصدر واللغات المستهدفة" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "ترجمة الى" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "نص للترجمة" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "حذف النص" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "اقتراح ترجمة" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "إلغاء" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "أرسل" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "صيغ الملفات المدعومة:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "ملف" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "حذف الملف" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "ترجمة" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "تحميل" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "الطلب" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "الرد" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "api ترجمة آلي مفتوح المصدر" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "استضافة شخصية. غيرمتصل سهل الاعداد." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "ترجمة حرة" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "الرخصة:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "مصنوعة %(heart)s من قبل %(contributors)s ومدعومة بواسطة %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s المساهمون" + +#~ msgid "multipart/form-data" +#~ msgstr "البيانات المتعددة الجوانب/الرسمية" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamese" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "يجب استخدام واجهة برمجة التطبيقات العامة هذه للاختبار أو للاستخدام الشخصي أو" +#~ " غير المتكرر. إذا كنت تريد تشغيل تطبيق إنتاجي ، من فضلك استخدم " +#~ "%(host_server)s أو %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "تستضيف خادمك الخاص" + +#~ msgid "get an API key" +#~ msgstr "الحصول على مفتاح API" diff --git a/libretranslate/locales/ar/meta.json b/libretranslate/locales/ar/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..f240dd22701159f5e65936917d33f9f0a2309545 --- /dev/null +++ b/libretranslate/locales/ar/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Arabic", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/az/LC_MESSAGES/messages.po b/libretranslate/locales/az/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..b6b7a58954b44de316b2b8c66a9124a79c0121d7 --- /dev/null +++ b/libretranslate/locales/az/LC_MESSAGES/messages.po @@ -0,0 +1,760 @@ +# Azerbaijani translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-09-17 21:09+0000\n" +"Last-Translator: Dinissantos \n" +"Language-Team: Azerbaijani \n" +"Language: az\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Invalid JSON format" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Avtomatik simptomlar" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Uşaq" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Ən çox məlumat limitləri" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Invalid API əsas" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Bir API əsas almaq üçün server operatorla əlaqə edin" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Bakı %(url)s Bir API əsas almaq" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Yavaşlama:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Invalid tərəfindən: eksik %(name)s Qeydiyyat" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Ad Soyad: Qeydiyyat parametr bir sayı deyil %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Ad Soyad: Qeydiyyat parametr <= %(value)s %(name)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, fuzzy, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Invalid tərəfindən: (%(size)s) / (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s Yadda saxla" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s format dəstəkləmir" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, fuzzy, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s Ətraf dili kimi mövcud deyil %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Qeyd çevirmə: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Bu server üzərində faylları silinir." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Invalid istə: boş fayl" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Invalid tərəfindən: fayl format əlavə etmir" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Ad Soyad" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Proqramlar bu server üzrə dəstəklənir." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "İngilis dili" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Bakı" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Bakı" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Bakı" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Qalereya" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Qalereya" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Rusiya" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Kateqoriya" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Çin" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Çin (traditional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Çex dili" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danimarka" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Rusiya" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estoniya" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Qeydiyyat" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Fransız" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr " Gal" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Almaniya" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Yunanıstan" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Elan" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Qeydiyyat" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Bakı" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Qeydiyyat" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Rusiya" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Rusiya" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Yapon" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreya" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latvia" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Rusiya" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Bakı" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Rusiya" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Axtar" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Bakı" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portuguese" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romanian" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rusiya" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Qeydiyyat" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Sloveniya" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "İspaniya" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Bakı" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Axtarış" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Türkiyə" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "U" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Bakı" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Rusiya" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrayna" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr " Vietnamese" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Yadda saxla" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Dillərin siyahısı" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "translate" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Bir dildən digər məsləhət" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Tarix" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Ad Soyad" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Translation error" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Aşağı" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Bakı" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Salam dünya!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tərcümə ediləcək mətn(lər)" + +#: libretranslate/locales/.swag.py:12 +#, fuzzy +msgid "Source language code" +msgstr "Dil kodu" + +#: libretranslate/locales/.swag.py:13 +#, fuzzy +msgid "Target language code" +msgstr "İctimai kodları" + +#: libretranslate/locales/.swag.py:14 +#, fuzzy +msgid "text" +msgstr "Elanlar" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Məhsulun forması:\n" +"* 'text' - Düz məhsul\n" +"* 'html' - HTML qeydiyyat\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Alternat ünvanı" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Axtarış" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Bir dildən digər fayl" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Proqram" + +#: libretranslate/locales/.swag.py:21 +#, fuzzy +msgid "File to translate" +msgstr "Tarix" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Bir məhsul dilinin tanınması" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Axtarış" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "İmtahan" + +#: libretranslate/locales/.swag.py:25 +#, fuzzy +msgid "Text to detect" +msgstr "Avtomatik simptomlar" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Yadda saxla" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "front" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "front" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Müəlliflik hüquququ" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Qeydiyyat" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Qeyd olun" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Original" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Qeydiyyat" + +#: libretranslate/locales/.swag.py:34 +#, fuzzy +msgid "Language of original text" +msgstr "Bir məhsul dilinin tanınması" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Müəlliflik" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "feedback" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Dil kodu" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Human-readable dil adı (in English)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "İctimai kodları" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Xüsusi məhsullar" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Yadda saxla" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Yavaş aşağı qaldırmaq" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Url url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Konfiqurasiya" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Bu dil üçün simvol giriş limiti (-1 heç bir limit göstərir)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Qeydiyyat vaxtı" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "API əsas verilən veriləndirilməsi." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Bir API əsas tələb olun." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Təkliflərin təklif edilməsi mümkündür." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "E-poçt ünvanı" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Yadda saxla" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Elanlar" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Qeydiyyat %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Xüsusi məlumat" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Elan" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "Sizin düzeltmeniz üçün. Müəlliflik hüququqları qorunur." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Heç bir dil mövcuddur. Siz modelləri düzgün quraşdırdı?" + +#: libretranslate/templates/app.js.template:530 +#, fuzzy, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "API key növü. Bir API əsas lazım varsa, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "\"Get API Key\" linkini basın." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "server operatoru əlaqə edin." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Pulsuz və Açıq Source Machine Translation API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Pulsuz və Open Source Machine Translation API. Self-səfərli, offline və asan" +" quraşdırmaq. Yalnız bir neçə dərhal öz API server çalışır." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "translation" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Qeydiyyat" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "API Qeydiyyat" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "Qeydiyyat" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "API Qeydiyyat" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Dil" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Tarix" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Qızıl / iş rejimi" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Qeydiyyat" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Axtarış" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Axtarış" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Proqramlar" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Qeydiyyatdan" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Swap məhsul və hedef dillər" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Axtarış" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tarix" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Delete" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Qeydiyyat" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Tarix" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "E-poçt" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Dəstəklənən fayl formatları:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Qeydiyyat" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Proqram" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Axtarış" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Pulsuz" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Qeydiyyat" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Response" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open Source Machine Translation API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Self-Hosted. Offline Capable. Avadanlıq." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "Qeydiyyat" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lisenziya:" + +#: libretranslate/templates/index.html:345 +#, fuzzy, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Yaponiya %(heart)s by %(contributors)s və tərəfdaşlıq %(engine)s" + +#: libretranslate/templates/index.html:345 +#, fuzzy, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Kontributors" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr " Vietnamese" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Bu ictimai API test üçün istifadə olunmalıdır, xüsusi və ya infrequent " +#~ "istifadə. istehsalda bir proqram işləyirsinizsə, lütfen %(host_server)s ya " +#~ "%(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "öz serverinizə baxın" + +#~ msgid "get an API key" +#~ msgstr "bir API əsas almaq" diff --git a/libretranslate/locales/az/meta.json b/libretranslate/locales/az/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..d07c41ad00cc97408b3d374cd4452edeb55839fb --- /dev/null +++ b/libretranslate/locales/az/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Azerbaijani", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/be/LC_MESSAGES/messages.po b/libretranslate/locales/be/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..7d3c94db0c2dc94f01f31bedbd0dd9226eda8142 --- /dev/null +++ b/libretranslate/locales/be/LC_MESSAGES/messages.po @@ -0,0 +1,758 @@ +# Belarusian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-04-02 23:12+0000\n" +"Last-Translator: rferee \n" +"Language: be\n" +"Language-Team: Belarusian " +"\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Памылковы JSON-фармат" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Аўтавызначэнне" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Патрэбна аўтарызацыя" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Перавышаны ліміт запытаў" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Памылковы API ключ" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Калі ласка звяжыцеся з аператарам сэрверу каб атрымаць API ключ" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Наведайце %(url)s каб атрымаць API ключ" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Запаволенне:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Памылковы запыт: параметар %(name)s адсутнічае" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Памылковы запыт: запыт (%(size)s) перавышае дазволены ліміт тэксту " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s не падтрымліваецца" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Фармат %(format)s не падтрымліваеецца" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) не даступная як мова перакладу з %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Не атрымалася перакласці тэкст: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Переклад файлаў вымкнуты на гэтым сэрвере." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Памылковы запыт: пусты файл" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Памылковы запыт: фармат файла не падтрымліваецца" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Няслушная назва файла" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Прапанаванні выключаны на гэтым сэрверы." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Англійская" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Арабская" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Азербайджанская" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Кітайская" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Чешская" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Дацкая" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Нідэрландская" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Эсперанта" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Фінская" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Французская" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Нямецкая" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Грэчаская" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Іўрыт" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Хіндзі" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Венгерская" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Інданезійская" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Ірландская" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Італьянская" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Японская" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Карэйская" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Персідская" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Польская" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Партугальская" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Руская" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Славацкая" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Іспанская" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Шведская" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Турэцкая" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Украінская" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Атрымаць спіс падтрыманых моў" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Спіс моў" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "пераклад" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Перакласць тэкст з адной мовы на іншую" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Перакладзены тэкст" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Памылковы запыт" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Памылка перакладу" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Запаволенне" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Заблакавана" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Прывітанне, свет!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Тэкст(а) для перакладу" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Код мовы арыгінала" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Код мовы пераклада" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "тэкст" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Фармат выточнага тэксту:\n" +"* `text` - Звычайны тэкст\n" +"* `html` - HTML-разметка\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API ключ" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Перакласць файл з адной мовы на іншую" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Перакладзены файл" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Файл для перакладу" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Вызначыць мову аднаго тэксту" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Вызначэння" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Памылка вызначэння" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Тэкст для вызначэння" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Атрымаць налады для інтэрфэйсу" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "налады інтэрфэйсу" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "інтэрфейс" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Запрапанаваць як палепшыць пераклад" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Поспех" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Не аўтаразаваны" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Арыгінальны тэкст" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Запрапанаваны пераклад" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Мова арыгінальнага тэкста" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Мова прапанаванага перакладу" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "зваротная сувязь" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Код мовы" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Чалавекачытальная назва мовы (па-ангельску)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Коды падтрымліваемых моў" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Перакладзены(-я) тэкст(-а)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Паведамленне пра абмылу" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Прычына запаволення" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL-адрэса перакладзенага файла" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Ровень упэўненасці" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Абмежаванне колькаскі знакаў для гэтай мовы (-1 азначае адсутнасць " +"абмежаванняў)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Час перакладу інтэрфэйсу перавышаны" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Ці увамкнёная база дадзеных API ключоў." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Ці патрэбен API ключ." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Ці ўвамкненна магчымасць адпраўляць прапановы." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Падтрымліваемыя фарматы файлаў" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Ці было адсыланне паспяховым" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Скапіяваць тэкст" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Немагчыма спампаваць %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Невядомая памылка" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Скапіявана" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Дзякуй за вашу заўвагу. Прыміце да ўвагі: Ваша прапанова не адразу " +"набудзе моц." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Няма даступных моў. Вы слушна ўсталявалі мадэлі?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Увядзіце ваш API ключ. Калі вам патрэбен API ключ, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "націсніце на спасылку \"Атрымаць API ключ\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "звяжыцеся з аператарам сэрвера." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Бясплатнае API для машыннага перакладу з адкрытым выточным кодам" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +#, fuzzy +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "Бясплатнае API для машыннага перакладу з адкрытым выточным кодам." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "пераклад" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "В’етнамская" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/be/meta.json b/libretranslate/locales/be/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..7d4398d842cafc57d79bec63f5a7167f55b0221b --- /dev/null +++ b/libretranslate/locales/be/meta.json @@ -0,0 +1,4 @@ +{ + "name": "be", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/bg/LC_MESSAGES/messages.po b/libretranslate/locales/bg/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..45fc48176cd1ed1821bb41c282d8054d3bcaf5ce --- /dev/null +++ b/libretranslate/locales/bg/LC_MESSAGES/messages.po @@ -0,0 +1,764 @@ +# Bulgarian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2025-01-02 16:01+0000\n" +"Last-Translator: Salif Mehmed \n" +"Language-Team: Bulgarian \n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Невалиден JSON формат" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Разпознаване" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Неоторизиран" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Твърде много нарушения на ограниченията на заявките" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Невалиден API ключ" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Моля, свържете се с оператора на сървъра, за да получите API ключ" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Посетете %(url)s, за да получите API ключ" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Забавяне:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Невалидна заявка: липсващ %(name)s параметър" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Невалидна заявка: параметърът %(name)s не е число" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Невалидна заявка: параметърът %(name)s трябва да бъде <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Невалидна заявка: заявката (%(size)s) надвишава ограничението за текст " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s не се поддържа" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Форматът %(format)s не се поддържа" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) не е наличен като целеви език от %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Не може да се преведе текстът: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Превеждането на файлове е изключено на този сървър." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Невалидна заявка: празен файл" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Невалидна заявка: файловият формат не се поддържа" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Невалидно име на файла" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Предложенията са изключени на този сървър." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "английски" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "албански" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "арабски" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "азербайджански" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "баски" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "бенгалски" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "български" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "каталонски" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "китайски" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "китайски (традиционен)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "чешки" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "датски" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "нидерландски" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "есперанто" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "естонски" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "фински" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "френски" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "галисийски" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "немски" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "гръцки" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "иврит" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "хинди" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "унгарски" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "индонезийски" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "ирландски" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "италиански" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "японски" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "корейски" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "латвийски" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "литовски" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "малайски" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "норвежки" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "персийски" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "полски" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "португалски" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "румънски" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "руски" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "словашки" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "словенски" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "испански" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "шведски" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "тагалог" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "тайски" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "турски" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "украински" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "урду" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "сръбски" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "украински" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "виетнамски" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Извличане на списък с поддържани езици" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Списък с езици" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "превеждане" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Превеждане на текст от един език на друг" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Преведен текст" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Невалидна заявка" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Грешка при превода" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Забавяне" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Блокиран" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Здравей, свят!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Текст(ове) за превод" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Код на изходния език" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Код на целевия език" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "text" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Формат на изходния текст:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Предпочитан брой алтернативни преводи" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API ключ" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Превеждане на файл от един език на друг" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Преведен файл" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Файл за превод" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Разпознаване на езика на единичен текст" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Разпознавания" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Грешка при разпознаване" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Текст за разпознаване" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Извличане на специфични за клиентска част настройки" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "настройки на клиентската част" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "клиентска част" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Изпрати предложение за подобряване на превода" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Успех" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Не оторизиран" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Оригинален текст" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Предложен превод" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Език на оригиналния текст" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Език на предложения превод" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "обратна връзка" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Езиков код" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Човекоразбираемо име на езика (на английски)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Поддържани целеви езикови кодове" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Преведен(и) текст(ове)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Съобщение за грешка" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Причина за забавяне" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Адрес на преведен файл" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Стойност на увереност" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Ограничение за въвеждане на символи за този език (-1 означава, че няма " +"ограничение)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Време за изчакване на превода през клиентската част" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Дали базата данни с API ключове е включена." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Дали API ключ е задължителен." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Дали изпращането на предложения е включено." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Поддържан файлов формат" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Дали подаването е било успешно" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Копиране на текста" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Не може да се зареди %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Неизвестна грешка" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Копиран" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Благодарности за поправката. Имайте предвид, че предложението няма да " +"влезе в сила веднага." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Няма налични езици. Правилно ли инсталирахте моделите?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Въведете своя API ключ. Ако имате нужда от API ключ, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "натиснете връзката „Получаване на API ключ“." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "свържете се с оператора на сървъра." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Свободен API с отворен код за машинен превод" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Свободен API с отворен код за машинен превод. Самостоятелен хостинг, " +"офлайн способност и лесен за настройка. Стартирайте свой собствен API " +"сървър само за няколко минути." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "превод" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Документация" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Получаване на API ключ" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Задаване на API ключ" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Промяна на езика" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Редактиране" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Превключване на тъмен/светъл режим" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Отхвърляне" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API за превеждане" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Превод на текст" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Превод на файлове" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Превеждане от" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Размяна на изходния и целевия език" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Превеждане на" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Текст за превод" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Изтриване на текста" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Предлагане на превод" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Отказ" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Изпращане" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Поддържани файлови формати:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Файл" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Премахване на файла" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Превеждане" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Изтегляне" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Заявка" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Отговор" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API с отворен код за машинен превод" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Самостоятелен хостинг. Офлайн способност. Лесен за настройка." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Лицензия:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Направено с %(heart)s от %(contributors)s и задвижвано от %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Сътрудници" + +#~ msgid "Vietnamese" +#~ msgstr "Виетнамски" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Този публичен API трябва да се " +#~ "използва за тестване, лична или рядка" +#~ " употреба. Ако възнамерявате да стартирате" +#~ " приложение в продукция, моля " +#~ "%(host_server)s или %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "хоствайте свой собствен сървър" + +#~ msgid "get an API key" +#~ msgstr "получаване на API ключ" diff --git a/libretranslate/locales/bg/meta.json b/libretranslate/locales/bg/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..f2d8b98009ba7f9f6c94f788bdaeb7fc25fbeb75 --- /dev/null +++ b/libretranslate/locales/bg/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Bulgarian", + "reviewed": true +} diff --git a/libretranslate/locales/bn/LC_MESSAGES/messages.po b/libretranslate/locales/bn/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..7175d1ecb9ff64dc202277e21ab78f4e01cc47ba --- /dev/null +++ b/libretranslate/locales/bn/LC_MESSAGES/messages.po @@ -0,0 +1,741 @@ +# Bangla translations for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 13:20-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: bn \n" +"Language: bn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "অবৈধ JSON বিন্যাস" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "স্বয়ংক্রীয় সনাক্তকরণ" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "অনুমোদিত নয়" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "অত্যাধিক সংখ্যক সীমা লঙ্ঘন" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "ভুল API কি" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "API কি প্রাপ্ত করার উদ্দেশ্যে অনুগ্রহ করে সার্ভারের সাথে যোগাযোগ করুন" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "পরিদর্শন করুন API কি প্রাপ্ত করার জন্য একটি API কি %(url)s" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "ধীর:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "অবৈধ অনুরোধ: অনুপস্থিত পরামিতি %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "অবৈধ অনুরোধ: একটি নম্বর নয় %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"অবৈধ অনুরোধ: পরামিতির মান হওয়া আবশ্যক %(name)s %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"অবৈধ অনুরোধ: অনুরোধসীমা অতিক্রান্তআপনি কি মনে করতে পারেন? " +"%(size)s %(limit)s" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr " সমর্থিত নয় %(lang)s" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr " অসমর্থিত বিন্যাস %(format)s" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +" ( চিহ্ন)উপলব্ধ নয় ( চিহ্ন)আপনি কি মনে " +"করতে পারেন? %(tname)s %(tcode)s %(sname)s %(scode)s" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "টেক্সট অনুবাদ করতে ব্যর্থ: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "এই সার্ভারে ফাইল অনুবাদ নিষ্ক্রিয় ।." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "অবৈধ ফাইল: ফাঁকা ফাইল" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "অবৈধ অনুরোধ: ফাইল ফরম্যাট সমর্থিত নয়" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "ফাইলের নাম বৈধ নয়" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "এই সার্ভারের জন্য অতিরিক্ত পরামর্শ নিষ্ক্রিয় করা হয়েছে।." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "ইংরেজি" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "আলবেনীয়" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "আরবি" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "আজারবাইজানিName" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "বাস্ক" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "বাংলা" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "বুলগেরিয়ানName" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "ক্যাটালানName" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "চীনি" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "চীনা (সরলীকৃত)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "চেক" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "ড্যানিশName" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "ডাচ" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "এসপারান্তোName" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "এস্তোনিয়ানName" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "ফিনিশName" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "ফরাসি" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "অংশগ্রহণকারীদের আমন্ত্রণ জানান" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "জার্মান" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "গ্রিক" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "হিব্রু" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "হিন্দি" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "হাঙ্গেরিয়ানName" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "ইন্দোনেশিয়ান" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "আইরিশ" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "ইতালীয়Name" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "জাপানি" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "কোরিয়ান" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "লাটভিয়ানName" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "লিথুয়েনীয়" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "মালয়Name" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "নরওয়েজিয়ান" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "ফার্সি" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "পোলিশ" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "পর্তুগীজName" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "রোমেনিয়ান" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "রুশ" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "স্লোভাকName" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "স্লোভেনিয়ান" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "স্প্যানিশ" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "সুইডিশ" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "ট্যাগু" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "থাই" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "তুর্কি" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "উরানিয়ানName" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "উর্দুName" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "সার্বিয়ান" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "ইউক্রেইনিয়" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "ভিয়েতনামিস" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "সমর্থিত ভাষার তালিকা" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "ভাষা" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "অনুবাদ" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "একটি ভাষা থেকে টেক্সট অনুবাদ করুন" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "অনুবাদক টেক্সট" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "অবৈধ অনুরোধ" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "অনুবাদ সংক্রান্ত ত্রুটি" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "আস্তে যাও" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "নিষিদ্ধ করা হয়েছে" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "হ্যালো বিশ্ব!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "লেখাসমূহ" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "উৎসের কোড" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "লক্ষ্য ভাষার কোড" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "টেক্সট" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"মূল টেক্সটের ধরন:\n" +"* লেখা - প্লেইন টেক্সট\n" +"* `%s' - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "বিকল্প অনুবাদ" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API-কি" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "অন্য একটি ভাষা থেকে ফাইল অনুবাদ করুন" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "অনুবাদক ফাইল" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "যে ফাইল অনুবাদ করা হচ্ছে" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "টেক্সটের ভাষা সনাক্ত করা হবে" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "স্বয়ংক্রীয় সনাক্তকরণ" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "সনাক্ত করা ত্রুটি" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "যে টেক্সট প্রদর্শন করা হবে" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "সুনির্দিষ্ট বৈশিষ্ট্য প্রাপ্ত করুন" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "সম্মুখপ্রান্ত সেটিংস" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "সম্মুখপ্রান্ত" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "অনুবাদ উন্নত করার জন্য একটি পরামর্শ প্রেরণ করুন" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "সাফল্য" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "অনুমোদিত নয়" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "মূল টেক্সট" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "প্রস্তাবিত অনুবাদ" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "মূল টেক্সটের ভাষা" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "অনুবাদ করার ভাষার অনুবাদ" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "প্রতিক্রিয়া" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "ভাষার কোড" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "পাঠযোগ্য নাম (ইংরেজি)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "সমর্থিত ভাষার কোড" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "অনুবাদক টেক্সট" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "ত্রুটির বার্তা" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "ধীর হওয়ার কারণ" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "অনুবাদক ফাইল url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "মান" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "এই ভাষার জন্য অক্ষরের ইনপুট সীমা (-1-র মধ্যে সীমিত)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "সম্মুখপ্রান্ত অনুবাদ সময়সীমা" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "API- কি'র ডাটাবেস সক্রিয় করা হয়েছে কি না।." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "API-কি আবশ্যক কি না।." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "প্রস্তাবসমূহ সক্রিয় করা হয়েছে কি না." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "এই পাসওয়ার্ডটি মনে রাখা হবে" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "ডিস্কটি সফল হয়েছে কিনা" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "টেক্সট কপি করুন" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "লোড করতে ব্যর্থ %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "অজানা ত্রুটি" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "অনুলিপি করা হয়েছে" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "সংশোধন করার জন্য ধন্যবাদ. উল্লেখ্য, এই পরামর্শ কার্যকর করা হবে না।." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "কোনো ভাষা উপলব্ধ নেই। আপনি কি মডেল সঠিকভাবে ইনস্টল করেছেন?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"API-র মধ্যে পরিচয় পংক্তি লিখুন। যদি আপনার একটি API প্রয়োজন হয়, " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "\" API\" কি-র সাথে লিঙ্ক স্থাপন করুন।." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "সার্ভার সার্ভারের সাথে যোগাযোগ করুন ।." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "মুক্ত এবং ওপেন সোর্স মেশিন অনুবাদ API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"মুক্ত এবং ওপেন সোর্স মেশিন অনুবাদ API। স্ব-বিশ্লেষণ, অফ-লাইন অবস্থায় থাকা। " +"কয়েক মিনিটের মধ্যে আপনার নিজস্ব API সার্ভার চালান।." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "অাপনার সিস্টেম সম্বন্ধে তথ্য দেখুনtranslation" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "অঙ্ক" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API ডক" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "API প্রাপ্ত করুন কি" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "গিটহাব" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "API নির্ধারণ করুন কি" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "ভাষা পরিবর্তন করো" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "সম্পাদনা" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "পর্দা জুড়ে প্রদর্শন/আড়াল করা হবে" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "বাতিল" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "অনুবাদ API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "টেক্সট অনুবাদ" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "ফাইল অনুবাদ করুন" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "অনুবাদ করো" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Swap উৎস ও টার্গেট ভাষা ব্যবহার করুন" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "চিহ্নিত অবস্থানে স্থানান্তর করুন" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "অনুবাদ করার জন্য চিহ্নিত টেক্সট" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "টেক্সট মুছে ফেলুন" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "অনুবাদ পরামর্শ করো" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "বাতিল" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "প্রেরণ" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "সমর্থিত ফাইল ফরম্যাট:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "ফাইল" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "ফাইল মুছে ফেলুন" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "অনুবাদ" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "ডাউনলোড করা হয়েছে" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "অনুরোধ" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "প্রতিক্রিয়া" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "ওপেন সোর্স মেশিন অনুবাদ APIQuery" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "হায় খোদা! অফ-লাইন। শান্ত হও।." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "লাইসেন্স:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"সহ ধরন এবং বিদারনশীল %(heart)s %(contributors)s " +"%(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr " অংশগ্রহণকারী %(libretranslate)s" diff --git a/libretranslate/locales/bn/meta.json b/libretranslate/locales/bn/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..0bc3ef5b44c2211a305e8a2b1a21bb0c3f7a9693 --- /dev/null +++ b/libretranslate/locales/bn/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Bengali", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/ca/LC_MESSAGES/messages.po b/libretranslate/locales/ca/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..6bfc202bf5ba2d64ace3a6e92e0ab4d0accb25af --- /dev/null +++ b/libretranslate/locales/ca/LC_MESSAGES/messages.po @@ -0,0 +1,760 @@ +# Catalan translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-11-29 04:07+0000\n" +"Last-Translator: Quentin PAGÈS \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Format JSON invàlid" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Detecció automàtica" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "No autoritzat" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Massa violacions de límits de la sol·licitud" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Clau API invàlida" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" +"Si us plau, contacta amb l'administrador del servidor per demanar una clau " +"API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Visita %(url)s per demanar una clau API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Alenteix:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Sol·licitud no vàlida: falta el paràmetre %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Petició no vàlida: %(name)s el paràmetre no és un número" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Petició no vàlida: %(name)s el paràmetre ha de ser <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Sol·licitud no vàlida: la sol·licitud (%(size)s) supera el límit de text " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "El %(lang)s no és compatible" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "El format %(format)s no està implementat" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) no està disponible com a llengua de destí des de " +"%(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "No es pot traduir el text: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "La traducció de fitxers està deshabilitada en aquest servidor." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Sol·licitud no vàlida: fitxer buit" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Sol·licitud no vàlida: el format del fitxer no està implementat" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nom de fitxer no vàlid" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Els suggeriments estan deshabilitats en aquest servidor." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "anglès" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanès" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "àrab" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "àzeri" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basc" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengalí" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Búlgar" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Català" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "xinès" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Xinès (tradicional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "txec" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "danès" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "holandès" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonià" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "finès" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "francès" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Gallec" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "alemany" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "grec" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "hebreu" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "hongarès" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "indonesi" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "irlandès" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "italià" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "japonès" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "coreà" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letó" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituà" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malai" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Noruec" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "persa" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "polonès" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "portuguès" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romanès" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "rus" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "eslovac" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Eslovè" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "castellà" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "suec" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagàlog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "turc" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "ucraïnès" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdú" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbi" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ucraïnès" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamita" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Recupera la llista d'idiomes compatibles" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Llista d'idiomes" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traduir" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traduir text d'un idioma a un altre" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Text traduït" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Petició no vàlida" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "S'ha produït un error de traducció" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Redueix" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Prohibit" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hola món!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Text(s) a traduir" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Codi de l'idioma font" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Codi de l'idioma objectiu" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "text" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format del text del codi font:\n" +"* handheldtext text text text_ text pla\n" +"* htmlhtmlhtmlhtml - marca HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Nombre preferit de traduccions alternatives" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Clau API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Tradueix el fitxer des d' un idioma a un altre" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Fitxer traduït" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fitxer a traduir" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detecta l' idioma d' un únic text" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detecciós" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Error de detecció" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Text a detectar" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Recupera els arranjaments específics del frontal" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "configuració del frontal" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontal" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Envia un suggeriment per millorar una traducció" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Èxit" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "No autoritzat" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Text original" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Traducció suggerida" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Idioma del text original" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Idioma de traducció suggerida" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "reacció" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Codi d' idioma" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nom de l' idioma llegible (en anglès)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Codis d' idioma de destí acceptats" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Text traduït(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Missatge d' error" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Motiu per alentir- se" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL de fitxer traduït" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valor de confiança" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Límit d' entrada de caràcters per a aquest idioma (- 1 indica que no hi ha " +"límit)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Expiració de la traducció del Frontal" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Si la base de dades de claus de l' API està habilitada." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Si es requereix una clau API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Si s' han d' habilitar els suggeriments d' enviament." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Format de fitxers acceptats" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Si la submissió ha estat correcta" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copia text" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "No s' ha pogut carregar %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Error desconegut" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "S' ha copiat" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Gràcies per la teva correcció. Noteu que el suggeriment no tindrà efecte " +"immediatament." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "No hi ha idiomes disponibles. Has instal·lat correctament els models?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Escriviu la vostra clau API. Si necessiteu una clau API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "premeu l' enllaç \"Treta la clau de l' API.\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "contacteu amb l' operador del servidor." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API de traducció de la màquina lliure i oberta" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API de traducció de la màquina lliure i oberta. Auto- màquina, fora de línia" +" capaç de configurar. Executa el vostre servidor API en només uns minuts." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "traducció" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Obtén API Clau" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Estableix l' API Clau" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Canvia l' idioma" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Edita" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Commuta el mode fosc/ clar" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Descarta" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API de traducció" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Tradueix el text" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Tradueix fitxers" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Tradueix des de" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Intercanvia idiomes font i objectiu" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Tradueix dins" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Text a traduir" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Esborra text" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Suggereix traducció" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Cancel· la" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Envia" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formats de fitxer acceptats:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fitxer" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Elimina fitxer" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Tradueix" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Descarrega" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Sol· licita" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Resposta" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Obre l' API de traducció de la màquina d' origen" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Ha acabat. Capable fora de línia. Fàcil de configurar." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "Librescue" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Llicència:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Fet amb %(heart)s per %(contributors)s i alimentat per %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Col· laboradors" + +#~ msgid "Vietnamese" +#~ msgstr "vietnamita" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" diff --git a/libretranslate/locales/ca/meta.json b/libretranslate/locales/ca/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..acbb6a69dff42256b69dcd69f329b1ca050f3a3d --- /dev/null +++ b/libretranslate/locales/ca/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Catalan", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/cs/LC_MESSAGES/messages.po b/libretranslate/locales/cs/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..bc90baf32d8ae1aa446dc8531cf2b2e384bb1e60 --- /dev/null +++ b/libretranslate/locales/cs/LC_MESSAGES/messages.po @@ -0,0 +1,764 @@ +# Czech translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-01-23 14:01+0000\n" +"Last-Translator: Michal Čihař \n" +"Language: cs\n" +"Language-Team: Czech " +"\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Neplatný formát JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Automaticky rozpoznat" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Neoprávněné" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Příliš mnoho omezení požadavků" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Neplatný API klíč" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Obraťte se na provozovatele serveru pro získání API klíče" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Navštivte %(url)s pro získání API klíče" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Zpomalení:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Neplatný požadavek: chybějící parametr %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Neplatná žádost: %(name)s parametr není číslo" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Neplatná žádost: %(name)s 2 nařízení o kapitálových požadavcích. %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Neplatná požadavek: požadavek (%(size)s) překračuje limit textu " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s není podporováno" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formát není podporován" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) není k dispozici jako cílový jazyk od %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Nelze přeložit text: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Překlady souborů jsou na tomto serveru zakázány." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Neplatný požadavek: prázdný soubor" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Neplatný požadavek: formát souboru není podporován" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Neplatný název souboru" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Návrhy jsou na tomto serveru zakázány." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Angličtina" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albánie" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabština" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Ázerbájdžánština" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengálsko" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulharsky" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalánština" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Čínština" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Čína (tradiční)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Čeština" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dánština" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holandština" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonština" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finština" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francouzština" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Němčina" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Řečtina" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebrejština" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindština" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Maďarština" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonéština" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irština" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italština" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonština" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korejština" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Lotyšsky" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litevština" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norština" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Perština" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polština" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugalština" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumunsko" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ruština" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovenština" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovinsky" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Španělština" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Švédština" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thajské" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turečtina" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrajinština" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Získat seznam podporovaných jazyků" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Seznam jazyků" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "překlady" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Přeložit text do jiného jazyka" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Přeložený text" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Neplatný požadavek" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Chyba překladu" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Zpomalte" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Zablokován" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Ahoj světe!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Text(y) k překladu" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kód zdojového jazyka" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Kód cílového jazyka" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "text" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formát zdrojového textu:\n" +"* `text` - prostý text\n" +"* `html` - HTML kód\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Preferovaný počet alternativních překladů" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API klíč" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Přeložit soubor do jiného jazyka" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Přeložený soubor" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Soubor k překladu" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Rozpozná jazyk jediného textu" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Rozpoznání" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Chyba rozpoznání" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Text pro rozpoznání" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Načíst nastavení specifické pro rozhraní" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "nastavení rozhraní" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "rozhraní" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Odeslat návrh na zlepšení překladu" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Hledat" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Chybí oprávnění" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Původní text" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Navrhovaný překlad" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Jazyk původního textu" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Jazyk navrhovaného překladu" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "zpětná vazba" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Kód jazyka" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Lidsky čitelný název jazyka (v angličtině)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Podporované cílové jazykové kódy" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Přeložený text(y)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Chybová zpráva" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Důvod pro zpomalení" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL přeloženého souboru" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Míra jistoty" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Omezení počtu znaků pro tento jazyk (-1 označuje žádný limit)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Časový limit překladu rozhraní" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Jestli je dostupná databáze API klíčů." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Jestli je vyžadován API klíč." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Jestli je povoleno podání návrhů." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Podporované formáty souborů" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Jestli bylo podání úspěšné" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopírovat text" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Nelze načíst %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Neznámá chyba" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Zkopírováno" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "Díky za opravu. Všimněte si, že návrh nebude mít vliv hned." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Žádné jazyky. Nainstalovali jste modely správně?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Zadejte ve svém API klíč. Pokud potřebujete klíč API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "následujte odkaz „Získejte API klíč“." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "obraťte se na provozovatele serveru." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Zdarma a Open Source API strojového překladu" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Zdarma a Open Source API strojového překladu. Vlastní hostovaní, " +"použitelné bez připojení a snadno nastavitelné. Spusťte si vlastní API " +"server během několika minut." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "překlad" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API dokumentace" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Získejte API klíč" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Nastavit API klíč" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Změnit jazyk" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Editace" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Přepnout tmavý / světlý režim" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Odmítnout" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Překladové API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Přeložit text" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Přeložit soubory" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Přeložit z" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Vyměnit zdroj a cílové jazyky" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Přeložit do" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Text překládat" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Smazat text" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Navrhnout překlad" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Hledat" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Odeslat" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Podporované formáty souborů:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Soubor" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Odebrat soubor" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Přeložit" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Stáhnout" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Požadavek" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Odpoveď" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open Source API strojového překladu" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Vlastní hostovnání. Použitelné bez připojení. Snadné nastavení." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licence:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Vyrobeno s %(heart)s %(contributors)s a poháněno %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s přispěvateli" + +#~ msgid "multipart/form-data" +#~ msgstr "vícepart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamština" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Toto veřejné API by měl být " +#~ "použito jen pro testování, osobní nebo" +#~ " pro občasné použití. Pokud se " +#~ "chystáte spustit aplikaci v ostrém " +#~ "provozu, prosím %(host_server)s nebo " +#~ "%(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "hostujte vlastní server" + +#~ msgid "get an API key" +#~ msgstr "získejte API klíč" + diff --git a/libretranslate/locales/cs/meta.json b/libretranslate/locales/cs/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..ea49a0372d06f4d13feecf2d29e9e1017b666c48 --- /dev/null +++ b/libretranslate/locales/cs/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Czech", + "reviewed": true +} diff --git a/libretranslate/locales/da/LC_MESSAGES/messages.po b/libretranslate/locales/da/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..8a2344e0fb18f07318a7cf0bd246a75b6913fadc --- /dev/null +++ b/libretranslate/locales/da/LC_MESSAGES/messages.po @@ -0,0 +1,763 @@ +# Danish translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-06-09 17:09+0000\n" +"Last-Translator: Luna \n" +"Language-Team: Danish \n" +"Language: da\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Ugyldigt JSON-format" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Auto-registrer" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Uautoriseret" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "For mange overtrædelser af anmodningsbegrænsninger" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Ugyldig API-nøgle" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Kontakt venligst serveroperatøren for at få en API-nøgle" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Besøg %(url)s for at få en API-nøgle" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Nedsættelse:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Ugyldig anmodning: manglende %(name)s-parameter" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Ugyldig anmodning: %(name)s parameter er ikke et nummer" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Ugyldig anmodning: %(name)s parameter skal være <= 1 1 1 1 " +"%(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Ugyldig anmodning: anmodningen (%(size)s) overskrider tekstgrænsen " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s understøttes ikke" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s-format understøttes ikke" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) er ikke tilgængelig som målsprog fra %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Kan ikke oversætte tekst: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Oversættelse af filer er deaktiveret på denne server." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Ugyldig anmodning: tom fil" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Ugyldig anmodning: filformat understøttes ikke" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Ugyldigt filnavn" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Forslag er deaktiveret på denne server." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Engelsk" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanien" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabisk" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Aserbajdsjan" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baskisk" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgarsk" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalansk" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kinesisk" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kinesisk (traditionelt)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tjekkisk" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dansk" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Hollandsk" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estisk" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finsk" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Fransk" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galicien" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Tysk" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Græsk" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebræisk" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungarsk" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesisk" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irsk" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiensk" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japansk" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreansk" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Lettisk let lettisk" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litauen" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norge" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persisk" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polsk" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugisisk" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumænsk" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Russisk" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovakisk" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovensk slovensk" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spansk" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Svensk" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Billeder af Thai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Tyrkisk" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrainsk" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbisk serbisk" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukraine" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamesisk" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Hent liste over understøttede sprog" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Liste over sprog" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "oversæt" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Oversæt tekst fra et sprog til et andet" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Oversat tekst" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Ugyldig anmodning" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Oversættelsesfejl" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Sænk farten" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Bandlyst" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hej verden!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tekst(er) at oversætte" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kildesprogkode" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Målsprogkode" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tekst" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format af kildetekst:\n" +" * `tekst` - Almindelig tekst\n" +" * `html` - HTML-markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Antal alternative oversættelser" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API-nøgle" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Oversæt fil fra et sprog til et andet" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Oversat fil" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fil at oversætte" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Registrer sproget i en enkelt tekst" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Registreringer" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Registreringsfejl" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Tekst at registrere" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Hent frontend-specifikke indstillinger" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "frontend-indstillinger" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Indsend et forslag til forbedring af en oversættelse" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Succes" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Ikke autoriseret" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Original tekst" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Foreslået oversættelse" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Originaltekstens sprog" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Sprog i foreslået oversættelse" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "feedback" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Sprogkode" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Menneskeligt læseligt sprognavn (på engelsk)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Understøttede målsprogkoder" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Oversat tekst(er)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Fejlmeddelelse" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Årsag til nedbremsning" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Oversat fil-URL" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Konfidensværdi" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Grænse for tegninput for dette sprog (-1 angiver ingen grænse)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Timeout for frontend-oversættelse" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Om API-nøgledatabasen er aktiveret." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Om en API-nøgle er påkrævet." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Om indsendelse af forslag er aktiveret." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Understøttede filformater" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Om indsendelse var vellykket" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopiér tekst" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Kan ikke indlæse %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Ukendt fejl" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopieret" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Tak for din rettelse. Bemærk, at forslaget ikke træder i kraft med det " +"samme." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Ingen tilgængelige sprog. Har du installeret modellerne korrekt?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Indtast din API-nøgle. Hvis du har brug for en API-nøgle, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "tryk på linket \"Get API Key\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "kontakt serveroperatøren." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Gratis og Open Source Maskinoversættelses-API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Gratis og Open Source Maskinoversættelses-API. Selv-hosted, kan bruges " +"offline og er let at opsætte. Kør din egen API-server på blot et par " +"minutter." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "oversættelse" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API-dokumenter" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Få API-nøgle" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Indstil API-nøgle" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Skift sprog" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Rediger" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Skift mellem mørk/lys tilstand" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Afvis" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Oversættelses-API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Oversæt Tekst" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Oversæt Filer" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Oversæt fra" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Byt om på kilde- og målsprog" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Oversæt til" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tekst at oversætte" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Slet tekst" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Foreslå oversættelse" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Annuller" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Send" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Understøttede filformater:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fil" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Fjern fil" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Oversæt" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Hent" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Anmod" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Svar" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open Source Maskinoversættelses-API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Selv-Hosted. Kan bruges offline. Nem at opsætte." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licens:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Lavet med %(heart)s af %(contributors)s og drevet af %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Bidragsydere" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamesisk" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Denne offentlige API bør bruges til test, personlig eller sjælden brug. Hvis" +#~ " du har tænkt dig at køre en applikation i produktion, venligst " +#~ "%(host_server)s eller %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "host din egen server" + +#~ msgid "get an API key" +#~ msgstr "få en API-nøgle" diff --git a/libretranslate/locales/da/meta.json b/libretranslate/locales/da/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..0a7d7e0994deed8bf87539cf6a4840a46ed929c4 --- /dev/null +++ b/libretranslate/locales/da/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Danish", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/de/LC_MESSAGES/messages.po b/libretranslate/locales/de/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..3fc6800dc6112a8cbfb6ec62ff29f3c5b2509382 --- /dev/null +++ b/libretranslate/locales/de/LC_MESSAGES/messages.po @@ -0,0 +1,767 @@ +# German translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-10-23 17:15+0000\n" +"Last-Translator: Ettore Atalan \n" +"Language-Team: German \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.8.2-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Ungültiges JSON-Format" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Auto-Erkennung" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Unbefugt" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Zu viele Verstöße gegen die Anfragelimits" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Ungültiger API-Schlüssel" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" +"Bitte kontaktieren Sie den Serverbetreiber, um einen API-Schlüssel zu " +"erhalten" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Besuchen Sie %(url)s, um einen API-Schlüssel zu erhalten" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Verlangsamung:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Ungültige Anfrage: fehlender Parameter %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Ungültige Anfrage: %(name)s-Parameter ist keine Zahl" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Ungültige Anfrage: %(name)s-Parameter muss <= %(value)s sein" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Ungültige Anfrage: Anfrage (%(size)s) überschreitet Textlimit (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s wird nicht unterstützt" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "„%(format)s“-Format wird nicht unterstützt" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) ist nicht als Zielsprache von %(sname)s (%(scode)s)" +" verfügbar" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Konnte Text nicht übersetzen: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Die Übersetzung von Dateien ist auf diesem Server deaktiviert." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Ungültige Anfrage: leere Datei" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Ungültige Anfrage: Dateiformat nicht unterstützt" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Ungültiger Dateiname" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Vorschläge sind auf diesem Server deaktiviert." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Englisch" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanisch" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabisch" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Aserbaidschanisch" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baskisch" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgarisch" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalanisch" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chinesisch" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Chinesisch (traditionell)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tschechisch" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dänisch" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Niederländisch" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estnisch" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finnisch" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Französisch" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galicisch" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Deutsch" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Griechisch" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebräisch" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungarisch" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesisch" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irisch" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italienisch" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japanisch" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreanisch" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Lettisch" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litauisch" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malayisch" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norwegisch" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persisch" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polnisch" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugiesisch" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumänisch" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Russisch" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slowakisch" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slowenisch" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spanisch" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Schwedisch" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Türkisch" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrainisch" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbisch" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrainisch" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamesisch" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Liste der unterstützten Sprachen abrufen" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Liste der Sprachen" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "übersetzen" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Übersetzen von Text aus einer Sprache in eine andere" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Übersetzter Text" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Ungültige Anfrage" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Übersetzungsfehler" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Verlangsamen" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Verbannt" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hallo Welt!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Zu übersetzende(r) Text(e)" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Quellsprachen-Code" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Zielsprachen-Code" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "text" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format des Ausgangstextes:\n" +" * `text` – Einfacher Text\n" +" * `html` – HTML-Markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Bevorzugte Anzahl alternativer Übersetzungen" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API-Schlüssel" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Datei von einer Sprache in eine andere übersetzen" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Übersetzte Datei" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Datei zum Übersetzen" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Sprache eines einzelnen Textes erkennen" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Erkennungen" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Erkennungsfehler" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Zu erkennender Text" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Abrufen frontendspezifischer Einstellungen" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "Frontend-Einstellungen" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "Frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Einen Vorschlag zur Verbesserung einer Übersetzung einreichen" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Erfolg" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Nicht autorisiert" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Ursprünglicher Text" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Vorgeschlagene Übersetzung" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Sprache des Originaltextes" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Sprache der vorgeschlagenen Übersetzung" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "Feedback" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Sprachencode" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Vom Menschen lesbare Sprachbezeichnung (auf Englisch)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Unterstützte Zielsprachencodes" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Übersetzter Text(e)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Fehlermeldung" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Gründe für die Verlangsamung" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL der übersetzten Datei" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Konfidenzwert" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Zeicheneingabegrenze für diese Sprache (-1 bedeutet unbegrenzt)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Zeitüberschreitung der Frontend-Übersetzung" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Ob die API-Schlüsseldatenbank aktiviert ist." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Ob ein API-Schlüssel erforderlich ist." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Ob die Einreichung von Vorschlägen aktiviert ist." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Unterstütztes Dateiformat" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Ob die Einreichung erfolgreich war" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Text kopieren" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Kann %(url)s nicht laden" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Unbekannter Fehler" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopiert" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Danke für Ihre Korrektur. Beachten Sie, dass der Vorschlag nicht sofort " +"wirksam wird." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Keine Sprachen verfügbar. Haben Sie die Modelle richtig installiert?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Geben Sie Ihren API-Schlüssel ein. Wenn Sie einen API-Schlüssel " +"benötigen, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "folgen Sie dem Link „API-Schlüssel erhalten“." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "kontaktieren Sie den Serverbetreiber." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Freie und quelloffene API für maschinelle Übersetzung" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Freie und quelloffene API für maschinelle Übersetzung. Selbstgehostet, " +"offline-fähig und einfach einzurichten. Betreiben Sie Ihren eigenen API-" +"Server in nur wenigen Minuten." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "Übersetzung" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "API" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API-Doku" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "API-Schlüssel erhalten" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "API-Schlüssel festlegen" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Sprache ändern" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Bearbeiten" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Dunkler/Lichtmodus" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Ablehnen" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Übersetzungs-API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Text übersetzen" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Dateien übersetzen" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Übersetzen von" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Quell- und Zielsprache vertauschen" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Übersetzen in" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Text zum Übersetzen" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Text löschen" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Übersetzung vorschlagen" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Abbrechen" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Senden" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Unterstützte Dateiformate:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Datei" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Datei entfernen" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Übersetzen" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Herunterladen" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Anfrage" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Antwort" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open-Source-API für maschinelle Übersetzung" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Selbstgehostet. Offline-fähig. Einfach einzurichten." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lizenz:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Mit %(heart)s gemacht von %(contributors)s und betrieben mit %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "den %(libretranslate)s-Mitwirkenden" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamesisch" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Diese öffentliche API sollte zum Testen," +#~ " persönlichen oder seltenen Gebrauch " +#~ "verwendet werden. Wenn Sie eine " +#~ "Anwendung produktiv betreiben wollen, bitte" +#~ " %(host_server)s oder %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "hosten Sie Ihren eigenen Server" + +#~ msgid "get an API key" +#~ msgstr "holen Sie sich einen API-Schlüssel" diff --git a/libretranslate/locales/de/meta.json b/libretranslate/locales/de/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..e2aa116f711d03fc91a4d093153dcc309103b285 --- /dev/null +++ b/libretranslate/locales/de/meta.json @@ -0,0 +1,4 @@ +{ + "name": "German", + "reviewed": true +} diff --git a/libretranslate/locales/el/LC_MESSAGES/messages.po b/libretranslate/locales/el/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..aace82a7397d34301bb00f42fcbce5f00cf52505 --- /dev/null +++ b/libretranslate/locales/el/LC_MESSAGES/messages.po @@ -0,0 +1,762 @@ +# Greek translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-24 07:09+0000\n" +"Last-Translator: Nikos Merianos \n" +"Language-Team: Greek \n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Άκυρη JSON μορφή" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Αυτόματη Ανίχνευση" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Μη εξουσιοδοτημένο" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Πάρα πολλά αιτήματα περιορίζουν τις παραβιάσεις" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Μη έγκυρο κλειδί API" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Επικοινωνήστε με τον χειριστή server για να πάρετε ένα API κλειδί" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Επισκεφθείτε τον σύνδεσμο %(url)s για να πάρετε ένα κλειδί API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Επιβράδυνση:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Άκυρο αίτημα: απούσα η παράμετρος %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Μη έγκυρη αίτηση: Η παράμετρος %(name)s δεν είναι αριθμός" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Μη έγκυρη αίτηση: Η παράμετρος %(name)s πρέπει να είναι <= > %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Άκυρο αίτημα: το αίτημα(%(size)s) υπερβαίνει το όριο χαρακτήρων του κειμένου" +" (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s δεν υποστηρίζετε" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Η μορφή %(format)s δεν υποστηρίζεται" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) δεν είναι διαθέσιμη ως γλώσσα-στόχος από %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Το κείμενο: %(text)s δεν μπορεί να μεταφράστει" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Η μετάφραση αρχείων ειναί απενεργοποιημένη σε αυτόν τον διακομιστή." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Μη έγκυρο αίτημα: Το αρχείο είναι άδειο" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Ακυρωμένη αίτηση: μορφή αρχείου που δεν υποστηρίζεται" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Μη έγκυρο όνομα αρχείου" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Οι προτάσεις απενεργοποιούνται σε αυτόν τον server." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Αγγλικά" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Αλβανικά" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Αραβικά" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Αζερμπαϊτζάν" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Βασκικά" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Μπενγκάλι" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Βουλγαρικά" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Καταλανικά" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Κινέζοι" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Κινέζικα (παραδοσιακά)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Τσεχική" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Δανία" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Ολλανδ Ολλανδία" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Εσθονικά" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Φινλανδός" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Γάλλος" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Γαλικιακά" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Γερμανός" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Ελληνικά" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Εβραϊκή εβραϊκή" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ούγγρος" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Ινδονησία" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Ιρλανδία" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Ιταλός" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Ιάπωνες" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Κορεατική Κορέα" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Λετονικά" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Λιθουανικά" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Μαλαϊκή" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Νορβηγικά" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Πέρσες" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Πολωνία Πολωνίας" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Πορτογαλικά" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Ρουμανία" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ρώσοι" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Σλοβά" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Σλοβενία" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Ισπανικά ισπανικά" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Σουηδικά" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Ταγκαλόγκ" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Ταϊλάνδη" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Το τουρκικό Τουρκ Τουρκίας" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ουκρανίας" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Ούρντου" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Σερβία" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ουκρανικά" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Βιετναμέζικα" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Αναγνώριση λίστας υποστηριζόμενων γλωσσών" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Κατάλογος γλωσσών" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "μετέφρασε" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Μεταφράστε κείμενο από γλώσσα σε άλλη" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Μεταφρασμένο κείμενο" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Ακυρωμένο αίτημα" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Σφάλμα μετάφρασης" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Αργά κάτω" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Απαγορεύεται" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Γεια σας κόσμο!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Κείμενο(-α) για μετάφραση" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Κωδικός γλώσσας πηγής" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Κωδικός γλώσσας στόχου" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "Κείμενο" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Μορφή κειμένου προέλευσης:\n" +"* \"text\" - Plain text\n" +"* \"html\" - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Προτιμώμενος αριθμός εναλλακτικών μεταφράσεων" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Κλειδί API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Επίπεδο από γλώσσα σε άλλη" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Μεταφρασμένο αρχείο" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Αρχείο για μετάφραση" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Περιγράψτε τη γλώσσα ενός ενιαίου κειμένου" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Ανιχνεύεται" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Ανίχνευση σφάλματος" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Κείμενο για ανίχνευση" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Επανάκτηση συγκεκριμένων ρυθμίσεων" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "ρυθμίσεις frontend" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "πρόσωψη" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Υποβολή πρότασης για βελτίωση της μετάφρασης" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Επιτυχία" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Όχι εξουσιοδοτημένος" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Πρωτότυπο κείμενο" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Προτεινόμενη μετάφραση" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Γλώσσα αρχικού κειμένου" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Γλώσσα προτεινόμενης μετάφρασης" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "ανατροφοδότηση" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Κωδικός γλώσσας" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Ανθρώπινο αναγνώσιμο όνομα γλώσσας (στα αγγλικά)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Υποστηριζόμενη γλώσσα-στόχος" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Μεταφρασμένο κείμενο(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Μήνυμα σφάλματος" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Λόγος για επιβράδυνση" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Μεταφρασμένο αρχείο url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Εμπιστοσύνη αξία" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Χαρακτηριστικά όρια εισόδου για αυτή τη γλώσσα (-1 δεν υποδεικνύει όριο)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Frontend μετάφραση timeout" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Είτε η βάση δεδομένων API είναι ενεργοποιημένη." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Είτε απαιτείται κλειδί API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Είτε η υποβολή προτάσεων είναι ενεργοποιημένη." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Υποστηριζόμενη μορφή αρχείων" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Είτε η υποβολή ήταν επιτυχής" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Αντιγραφή κειμένου" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Δεν μπορεί να φορτώσει φορτίο %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Άγνωστο λάθος" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Συνήγοροι" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Χάρη στη διόρθωση σας. Σημειώστε ότι η πρόταση δεν θα τεθεί σε ισχύ αμέσως." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Δεν υπάρχουν διαθέσιμες γλώσσες. εγκαταστήσετε σωστά τα μοντέλα?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Τύπος στο API Key. Εάν χρειάζεστε ένα API key, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "πατήστε το σύνδεσμο \"Get API Key\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "επικοινωνήστε με τον διαχειριστή server." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Δωρεάν και Open Source Machine μετάφραση API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Δωρεάν και Open Source Machine Translation API. Self-hosted, offline ικανή " +"και εύκολη στη ρύθμιση. Πατήστε το δικό σας διακομιστή API σε λίγα λεπτά." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "μετάφραση" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Λήψη κλειδιού API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Ορισμός κλειδιού API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Αλλαγή γλώσσας" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Επεξεργασία επεξεργασίας" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Toggle dark/light mode" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Απ" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Μετάφραση API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Μετάφραση κειμένου" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Αρχεία μετάφρασης" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Μεταφράστε από" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Η πηγή Swap και οι γλώσσες-στόχος" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Μετάβαση σε" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Κείμενο για μετάφραση" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Διαγράψτε κείμενο" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Πρότεινε μετάφραση" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Ακύρωση" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Αποστολή" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Υποστηριζόμενη μορφή αρχείων:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "File" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Αφαιρέστε αρχείο αρχείων" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Μετάφρασε" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Λήψη" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Αίτηση αιτήματος" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Απάντηση" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Άνοιγμα API Πηγιαίου Μηχανίματος Μετάφρασης" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Αυτο-Hosted. Offline Capable. Εύκολο στη ρύθμιση." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Άδεια:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Δημιουργήθηκε με %(heart)s από %(contributors)s και τροφοδοτείται από " +"%(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Συμβαλλόμενοι" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Βιετναμ Βιετνάμ" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Αυτό το δημόσιο API θα πρέπει να χρησιμοποιείται για δοκιμές, προσωπική ή " +#~ "σπάνια χρήση. Εάν πρόκειται να εκτελέσετε μια εφαρμογή στην παραγωγή, " +#~ "παρακαλούμε %(host_server)s ή %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "φιλοξενήσει το δικό σας διακομιστή" + +#~ msgid "get an API key" +#~ msgstr "πάρετε ένα API key" diff --git a/libretranslate/locales/el/meta.json b/libretranslate/locales/el/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..03fe87deb2e3445373b8a4e5969e496c231f9d7c --- /dev/null +++ b/libretranslate/locales/el/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Greek", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/eo/LC_MESSAGES/messages.po b/libretranslate/locales/eo/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..eb3ae6d64d3594e9394622b59e7b69a9b50d187c --- /dev/null +++ b/libretranslate/locales/eo/LC_MESSAGES/messages.po @@ -0,0 +1,763 @@ +# Esperanto translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2023-05-02 19:52+0000\n" +"Last-Translator: Jorge Maldonado Ventura \n" +"Language: eo\n" +"Language-Team: Esperanto " +"\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Nevalida JSON-aranĝo" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Aŭtomata Detekto" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Ne rajtigita" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Tro da petaj limmalobservoj" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Invalid API-ŝlosilo" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Bonvolu kontakti la servilo operatoro por akiri API-ŝlosilon" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Vizitu %(url)s por akiri API-ŝlosilon" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Malrapidiĝo:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Nevalida peto: mankas %(name)s parametro" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Invalida peto: 0 0 0 0 parametro ne estas nombro %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Invalida peto: 0 0 0 0 parametro devas esti 1 1 1 1 " +"%(name)s %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Nevalida peto: peto (%(size)s) superas tekstlimon (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s ne estas subtenata" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s-aranĝo ne estas subtenata" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) ne estas disponebla kiel cellingvo de %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Ne povas traduki tekston: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Dosier-tradukoj estas malebligitaj en ĉi tiu servilo." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Nevalida peto: malplena dosiero" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Nevalida peto: dosieraranĝo ne subtenata" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nevalida dosiernomo" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Sugestoj estas malebligitaj en ĉi tiu servilo." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Angla" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albana albana" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Araba" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbajĝana" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengala bengala" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgara Bulgaro" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalana kataluno" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Ĉina" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "La ĉina (tradicia)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Ĉeĥa" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dana" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Nederlanda" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "La estona" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finna" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Franca" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Germana" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Greka" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebrea" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindia" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Hungara" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonezia" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlanda" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Itala" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japana" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korea" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "La latva" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litova litovo" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malaja" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norvega" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persa" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Pola" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugala" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumana" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rusa" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovaka" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovena slovena" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Hispana" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Sveda" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "La tagaloga tagalo" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tajlanda" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turka" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraina" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "La urdua" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Ricevi liston de subtenataj lingvoj" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Listo de lingvoj" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traduki" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traduki tekston de lingvo al alia" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Tradukita teksto" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Nevalida peto" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Traduka eraro" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Malrapidiĝo" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Forbarita" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Saluton, mondo!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Teksto(j) por traduki" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Fontlingva kodo" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Kodo de la cellingvo" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "teksto" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Aranĝo de fontteksto:\n" +" * `text` - Plata teksto\n" +" * `html` - HTML-markado\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Preferita nombro de alternativaj tradukoj" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API-ŝlosilo" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traduki dosieron de lingvo al alia" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Tradukita dosiero" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Dosiero por traduki" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detekti la lingvon de ununura teksto" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Ekkonoj" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Ekkona eraro" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Ekkonota teksto" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Ricevu agordojn specifajn de la fasado" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "agordoj de la fasado" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "fasado" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Submeti sugeston por plibonigi tradukon" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Sukceso" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Ne rajtigita" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Origina teksto" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Proponita traduko" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Lingvo de la origina teksto" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Lingvo de la proponita traduko" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "prikomentado" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Lingvokodo" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Hom-legebla lingvonomo (en la angla)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Subtenitaj cellingvokodoj" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Tradukita(j) teksto(j)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Erarmesaĝo" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Kaŭzo de malrapido" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL de tradukita dosiero" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Konfidencvaloro" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Limo de signaj enigoj por ĉi tiu lingvo (-1 indikas neniun limon)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Tempolimo de fasada traduko" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Ĉu la datumbazo de la API-ŝlosilo estas ebligita." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Ĉu API-ŝlosilo estas postulata." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Ĉu submeti proponojn estas ebligita." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Aranĝo de subtenataj dosieroj" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Ĉu submetado estis sukcesa" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopii tekston" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Ne povas ŝarĝi %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Nekonata eraro" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopiita" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "Dankon pro via korekto. Notu, ke la propono ne ekvalidos tuj." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Neniu lingvo disponebla. Ĉu vi ĝuste instalis la modelojn?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Tajpu vian API-ŝlosilon. Se vi bezonas API-ŝlosilon, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "premu la «Akiri API-ŝlosilon» ligilon." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "kontaktu la servilan operatoron." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Libera kaj malfermitkoda API de maŝina tradukado" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Libera kaj malfermitkoda API de maŝina tradukado. Mem-gastigita, " +"senkonekte funkciebla kaj facile instalebla. Rulu vian propran API-" +"servilon en nur kelkaj minutoj." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "traduko" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API-dokumentaro" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Akiri API-ŝlosilon" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Agordi API-ŝlosilon" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Ŝanĝi la lingvon" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Redakti" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Toggle malhela/luma reĝimo" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Malakcepti" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Tradukado-API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traduki tekston" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traduki dosierojn" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Tradukita de" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Interŝanĝi fontajn kaj celajn lingvojn" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traduki al" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Teksto por traduki" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Forigi tekston" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Proponita traduko" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Nuligi" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Sendi" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Subtenitaj dosierformatoj:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Dosiero" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Forigi dosieron" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traduku" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Elŝuti" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Peto" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Respondo" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API de malfermitkoda maŝina tradukado" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Mem-gastigita. Senkonekte funkciebla. Facile instalebla." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Permesilo:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Farita per %(heart)s de %(contributors)s kaj funkciigita per %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Kontribuantoj" + +#~ msgid "multipart/form-data" +#~ msgstr "multiparta/forma-datumoj" + +#~ msgid "Vietnamese" +#~ msgstr "Vjetnama" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Ĉi tiu publika API devus esti " +#~ "uzita por testado, persona aŭ malofta" +#~ " uzo. Se vi rulos apon en " +#~ "produkta medio, bonvolu %(host_server)s aŭ " +#~ "%(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "gastigi vian propran servilon" + +#~ msgid "get an API key" +#~ msgstr "akiri API-ŝlosilon" + diff --git a/libretranslate/locales/eo/meta.json b/libretranslate/locales/eo/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..9f93056e4d41761c14a551ce67563601c13546d1 --- /dev/null +++ b/libretranslate/locales/eo/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Esperanto", + "reviewed": true +} diff --git a/libretranslate/locales/es/LC_MESSAGES/messages.po b/libretranslate/locales/es/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..c54f06d2c98ed9fdc1acc4adf97c537ab18a3f2e --- /dev/null +++ b/libretranslate/locales/es/LC_MESSAGES/messages.po @@ -0,0 +1,768 @@ +# Spanish translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-11-12 22:23+0000\n" +"Last-Translator: gallegonovato \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Formato JSON inválido" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Detección automática" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "No autorizado" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Demasiadas violaciones a los límites de la solicitud" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Clave API inválida" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" +"Por favor, contacte con el operador del servidor para obtener una clave " +"API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Visita %(url)s para conseguir una clave API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Ralentización:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Solicitud inválida: falta %(name)s parámetro" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Solicitud no válida: El parámetro %(name)s no es un número" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Petición no válida: el parámetro %(name)s debe ser <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Solicitud inválida: el %(size)s) de la solicitud excede el límite de " +"(%(limit)s) de texto" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "el %(lang)s no es compatible" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "formato(s) %(format)s no compatible(s)" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) no está disponible como idioma de destino para " +"%(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "No se puede traducir el texto: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "La traducción de archivos está deshabilitada en este servidor." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Solicitud inválida: archivo vacío" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Solicitud inválida: formato de archivo no compatible" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nombre de archivo inválido" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Las sugerencias están deshabilitadas en este servidor." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Inglés" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanés" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Árabe" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaijani" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Vasco" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengalí" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Búlgaro" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalán" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chino" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Chino (tradicional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Checo" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danés" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holandés" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonio" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finlandés" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francés" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galego" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Alemán" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Griego" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebreo" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Húngaro" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesio" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandés" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiano" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonés" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Coreano" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letón" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituano" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malayo" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Noruego" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persa" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polaco" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugués" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumano" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ruso" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Eslovaco" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Esloveno" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Español" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Suecia" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalo" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tailandés" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turco" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ucraniano" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbio" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ucraniano" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamita" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Recuperar la lista de idiomas compatibles" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista de idiomas" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traducir" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traducir texto de un idioma a otro" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Texto traducido" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Solicitud inválida" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Error de traducción" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Despacio" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Prohibido" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "¡Hola mundo!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Texto(s) para traducir" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Código fuente del idioma" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Código del idioma de destino" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "texto" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formato de texto fuente:\n" +" * `text` - Texto sin formato\n" +" * `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Número preferido de traducciones alternativas" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Clave API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traducir archivo de un idioma a otro" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Archivo traducido" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Archivo a traducir" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detectar el idioma de un solo texto" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detecciones" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Error de detección" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Texto a detectar" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Recuperar configuración específica de la interfaz" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "configuración de la interfaz" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "interfaz" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Presentar una sugerencia para mejorar la traducción" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Todo salió bien" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "No autorizado" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Texto original" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Traducción propuesta" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Idioma del texto original" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Idioma de la traducción sugerida" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "opinión" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Código de idioma" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nombre del idioma comprensible por el ser humano (en inglés)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Códigos de idiomas de destino compatibles" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Texto(s) traducido(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Mensaje de error" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Razón para reducir la velocidad" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Archivo traducido url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valor de confianza" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Límite de entrada de caracteres para este idioma (-1 indica sin límite)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Tiempo de traducción de interfaz" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Si la base de datos clave API está habilitada." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Si se necesita una clave API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Si se permite presentar sugerencias." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Formato de archivos compatibles" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Si el envío tuvo éxito" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copiar texto" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "No se puede cargar %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Error desconocido" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copiado" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Gracias por tu corrección. Ten en cuenta que la sugerencia no tendrá " +"efecto inmediatamente." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "No hay idiomas disponibles. ¿Instalaste los modelos correctamente?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Introduce tu clave de API. Si necesitas una clave de API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "presiona el enlace \"Obtener Clave API\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "comunícate con el operador del servidor." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API de traducción automática gratuita y de código abierto" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API de traducción automática gratuita y de código abierto. Autónoma, con " +"capacidad para trabajar sin conexión y fácil de configurar. Aloja tu " +"propio servidor API en sólo unos minutos." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "traducción" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Obtener Clave API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Establecer Clave API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Cambiar el idioma" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Editar" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Modo oscuro/ligero" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Desestimar" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API de Traducción" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traducir texto" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traducir archivos" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Traducir del" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Cambiar idioma de origen y destino" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traducir al" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Texto para traducir" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Borrar el texto" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Sugerir traducción" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Cancelar" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Enviar" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formatos de archivo compatibles:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Archivo" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Eliminar el archivo" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traducir" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Descargar" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Solicitud" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Respuesta" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API de Traducción de Código Abierto" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Autónoma. Funciona Sin Conexión. Fácil de Configurar." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licencia:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Hecho con %(heart)s por %(contributors)s e impulsado por %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Colaboradores de %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamita" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Esta API pública debería ser utilizada" +#~ " sólo para hacer pruebas y para " +#~ "el uso personal o poco frecuente. " +#~ "Si vas a ejecutar una aplicación " +#~ "en producción, por favor %(host_server)s " +#~ "u %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "aloja tu propio servidor" + +#~ msgid "get an API key" +#~ msgstr "obtén una clave API" diff --git a/libretranslate/locales/es/meta.json b/libretranslate/locales/es/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..f928e05577c549cdeb4c1b3ab600127704b42fb7 --- /dev/null +++ b/libretranslate/locales/es/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Spanish", + "reviewed": true +} diff --git a/libretranslate/locales/et/LC_MESSAGES/messages.po b/libretranslate/locales/et/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..215624b9326a21df54adf17fcc8d8f0aa9f7e83c --- /dev/null +++ b/libretranslate/locales/et/LC_MESSAGES/messages.po @@ -0,0 +1,764 @@ +# Estonian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-02-01 18:01+0000\n" +"Last-Translator: Priit Jõerüüt \n" +"Language-Team: Estonian \n" +"Language: et\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Vigane JSON-vorming" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Tuvasta keel automaatselt" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Pole lubatud" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Liiga palju päringuid ühes ajaühikus" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Vigane API võti" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Palun küsi serveri haldajalt API võtit" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "API võtme saamiseks palun vaata seda urli - %(url)s" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Võtame nüüd tempot alla:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Vigane päring: puuduv parameeter „%(name)s“" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Vigane taotlus: %(name)s parameeter ei ole arv" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Vigane taotlus: %(name)s parameeter peab olema ≤ %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Vigane päring: päringu (%(size)s) suurus ületab tekstipäringutele lubatud " +"ülempiiri (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s keel ei ole veel tõlgitav" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s vorming ei ole veel toetatud" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s keel (%(tcode)s) ei ole veel kasutatav sihtkeelena kui lähtekeel " +"on %(sname)s keel (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Teksti tõlkimine ei õnnestu: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Failide tõlkimine ei ole selles serveris lubatud." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Vigane päring: tühi fail" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Vigane päring: failivorming pole toetatud" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Vigane failinimi" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Tõlkesoovituste võimalus ei ole selles serveris kasutusel." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "inglise" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albaania" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "araabia" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "aserbaidžaani" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baski" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgaaria" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Kataloonia" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "hiina" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Hiina (traditsiooniline)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "tšehhi" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "taani" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "hollandi" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Eesti" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "soome" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "prantsuse" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galicia" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "saksa" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "kreeka" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "heebrea" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "ungari" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "indoneesia" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "iiri" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "itaalia" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "jaapani" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "korea" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Läti" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Leedu" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norra" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "pärsia" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "poola" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "portugali" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumeenlane" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "vene" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "slovaki" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Sloveenia" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "hispaania" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "rootsi" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalogi" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "türgi" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "ukraina" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbia" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukraina" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnami" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Laadi kasutatavate keelte loend" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Keelte loend" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "tõlkimine" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Tõlgi tekst ühest keelest teise" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Tõlgitud tekst" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Vigane päring" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Tõlkeviga" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Aeglustame päringuid" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Keelatud" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Tere maailm!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tõlgitav tekst" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Lähtekeele kood" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Tõlkekeele kood" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tekst" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Lähteteksti vorming:\n" +" * `text` - vormindamata tekst\n" +" * `html` - HTML-vormingus tekst\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Alternatiivsete tõlgete eelistatud arv" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API võti" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Tõlgi fail ühest keelest teise" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Tõlgitud fail" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Tõlgitav fail" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Tuvasta ühe teksti keel" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Tuvastamise tulemused" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Viga tuvastamisel" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Tekst, kust peaksime keele tuvastama" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Päring kasutajaliidese seadistuste vaatamiseks" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "kasutajaliidese seadistused" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "kasutajaliides" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Võimalus ettepanekute saatmiseks tõlke parandamise nimel" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Päring õnnestus" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Päring pole lubatud" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Lähtetekst" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Ettepanek tõlke parandamiseks" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Teksti lähtekeel" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Teksti tõlkekeel" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "tagasiside" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Keelekood" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Inimloetav keele nimi (inglise keeles)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Tõetatud tõlkekeelte koodid" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Tõlgitud tekst(id)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Veateade" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Päringute aeglustamise põhjus" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Tõlgitud faili url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Usaldusväärsuse väärtus" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Lähteteksti tähemärkide mahu ülempiir selle keele kohta (-1 märgib ülempiiri" +" puudumist)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Tõlkepäringu aegumine kasutajaliideses" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Kas API võtmete andmebaas on kasutusel." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Kas API võtme kasutamine on nõutav." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Kas tõlkesoovituste saatmine on kasutusel." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Toetatud failivormingud" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Kas tõlkesoovituse saatmine õnnstus" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopeeri tekst" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "%(url)s urli laadimine ei õnnestunud" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Tundmatu viga" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopeeritud" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Täname tõlke parandusettepaneku eest. Palun arvesta, et ta ei tule koheselt " +"kasutusele." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" +"Ühtegi keelt pole saadaval. Kas sa keelemudelid paigaldasid korrektselt?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Sisesta siia oma API võti. Kui sul API võti on puudu, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "klõpsi linki „Osta API võti“." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "võta ühendust serveri haldajaga." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Vaba ja avatud lähtekoodiga masintõlke API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Vaba ja avatud lähtekoodiga masintõlke API. Majutatav oma serveris, toimib " +"ka võrguühenduseta ja on hõlpsasti seadistatav. Võta oma API server " +"kasutusele vaid mõne minutiga." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "tõlge" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API kirjeldus" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Osta API võti" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Lisa API võti" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Vaheta keelt" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Muuda" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Vaheta kujundust: tume/hele" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Loobu" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "TõlkeAPI" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Tõlgi teksti" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Tõlgi faile" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Lähtekeel" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Vaheta lähte- ja tõlkekeeled" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Tõlkekeel" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tõlgitav tekst" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Kustuta tekst" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Soovita paremat tõlget" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Katkesta" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Saada" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Kasutatavad failivormingud:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fail" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Eemalda fail" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Tõlgi" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Laadi alla" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Päring" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Vastus" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Avatud lähtekoodiga masintõlke API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" +"Majutatav oma serveris. Toimib ka võrguühenduseta. Hõlpsasti seadistatav." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Litsents:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Tehtud suure %(heart)s'ga, millesse panustasid %(contributors)s ning " +"sisulise töö teeb ära %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s kaasautorid" + +#~ msgid "Vietnamese" +#~ msgstr "vietnami" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Palun kasuta seda avalikku API't testimiseks, isiklikel eesmärkidel või " +#~ "muudel harvadel juhtudel. Kui tahad kasutada API't mõnes " +#~ "produktsioonirakenduses, siis palun %(host_server)s või %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "pane püsti oma server" + +#~ msgid "get an API key" +#~ msgstr "või osta meie serveri API võti" diff --git a/libretranslate/locales/et/meta.json b/libretranslate/locales/et/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..01f9bd49012bcbfacee996d55976d74cf1cb20d2 --- /dev/null +++ b/libretranslate/locales/et/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Estonian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/eu/LC_MESSAGES/messages.po b/libretranslate/locales/eu/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..c6266dee50106540f64f2b7e0451781489f80f9d --- /dev/null +++ b/libretranslate/locales/eu/LC_MESSAGES/messages.po @@ -0,0 +1,761 @@ +# Basque translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-10-09 17:15+0000\n" +"Last-Translator: Urtzi Odriozola Lizaso \n" +"Language: eu\n" +"Language-Team: Basque " +"\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "JSON formatu baliogabea" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Hautemate automatikoa" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Baimenik gabe" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Eskaera-mugaren urraketa gehiegi" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "API gako baliogabea" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Mesedez, jarri harremanetan zerbitzari-operadorearekin API gakoa lortzeko" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Bisitatu %(url)s API gako bat lortzeko" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Moteltzea:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Eskaera baliogabea: %(name)s parametroa falta da" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Eskaera baliogabea: %(name)s parametroa ez da zenbakia" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Eskaera baliogabea: %(name)s parametroak <= %(value)s izan behar du" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Eskaera baliogabea: eskaerak (%(size)s) testu muga (%(limit)s) gainditzen" +" du" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s ez da bateragarria" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formatua ez da bateragarria" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) ez dago eskuragarri helburu hizkuntza moduan " +"%(sname)s-(e)tik (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Ezin da testua itzuli: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Fitxategi itzulpenak ez daude gaituta zerbitzari honetan." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Eskaera baliogabea: fitxategi hutsa" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Eskaera baliogabea: fitxategiaren formatua ez da bateragarria" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Fitxategiaren izena baliogabea" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Iradokizunak ez daude gaituta zerbitzari honetan." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Ingelesa" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albaniera" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabiera" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaijanera" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Euskara" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengalera" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgariera" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalana" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Txinera" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Txinera (tradizionala)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Txekiera" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Daniera" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Nederlandera" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperantoa" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estoniera" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finlandiera" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Frantsesa" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galiziera" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Alemana" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Greziera" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebreera" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindiera" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Hungariera" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesiera" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandera" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiera" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japoniera" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreera" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letoniera" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituaniera" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malaysiera" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norvegiera" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persiera" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Poloniera" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugesa" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Errumaniera" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Errusiera" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Eslovakiera" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Esloveniera" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Gaztelania" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Suediera" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagaloa" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thailandiera" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turkiera" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrainera" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdua" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbiera" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrainera" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamera" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Eskuratu bateragarriak diren hizkuntzen zerrenda" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Hizkuntzen zerrenda" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "itzuli" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Itzuli testua hizkuntza batetik bestera" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Itzulitako testua" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Eskaera baliogabea" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Itzulpen errorea" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Moteldu" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Debekatua" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Kaixo mundua!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Itzultzeko testua(k)" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Jatorrizko hizkuntza kodea" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Helburu hizkuntza kodea" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "testua" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Jatorrizko testu formatua:\n" +" * `text` - Formatu gabeko testua\n" +" * `html` - HTML etiketak\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Itzulpen alternatiboen kopuru hobetsia" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API gakoa" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Itzuli fitxategia hizkuntza batetik bestera" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Itzulitako fitxategia" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Itzultzeko fitxategia" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Hauteman testu bakar baten hizkuntza" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Hautemateak" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Hautemate errorea" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Hautemateko testua" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Eskuratu interfazeko ezarpen espezifikoak" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "interfaze ezarpenak" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "interfazea" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Bidali iradokizun bat itzulpena hobetzeko" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Arrakasta" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Baimenik gabea" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Jatorrizko testua" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Iradokitako itzulpena" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Jatorrizko testuaren hizkuntza" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Iradokitako itzulpenaren hizkuntza" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "iritzia" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Hizkuntzaren kodea" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Gizakiak uler dezakeen hizkuntzaren izena (ingelesez)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Helburuko hizkuntzen kode bateragarriak" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Itzulitako testua(k)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Errore mezua" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Moteltzeko arrazoia" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Itzulitako fitxategiaren url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Konfiantza balioa" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Karakterearen sarrera-muga hizkuntza honetarako (-1ek mugarik ez dagoela " +"adierazten du)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Interfazeko itzulpen denbora" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "API gakoen datu-basea gaituta dagoen ala ez." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "API gako bat behar den ala ez." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Iradokizunak bidaltzea gaituta dagoen ala ez." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Fitxategi bateragarrien formatua" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Bidalketa arrakastatsua izan den ala ez" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopiatu testua" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Ezin da %(url)s kargatu" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Errore ezezaguna" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopiatua" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Eskerrik asko zuzenketagatik. Kontuan izan iradokizunak ez duela " +"berehalakoan eraginik izango." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Ez dago hizkuntza erabilgarririk. Modeloak ongi instalatu dituzu?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Idatzi zure API gakoa. API gako bat behar baduzu, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "sakatu \"Lortu API Gakoa\" esteka." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "jarri zerbitzari-operadorearekin harremanetan." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Doako eta kode irekiko Itzulpen automatikoko APIa" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Doako eta kode irekiko Itzulpen automatikoko APIa. Norberak ostatatua, " +"konexio beharrik gabea eta konfiguratzeko erraza. Exekutatu zure API " +"zerbitzaria minutu gutxitan." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "itzulpena" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Dokak" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Lortu API Gakoa" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Ezarri API Gakoa" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Aldatu hizkuntza" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Editatu" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Modu iluna/argia" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Baztertu" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Itzulpen APIa" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Itzuli testua" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Itzuli fitxategiak" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Itzuli hemendik" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Aldatu jatorrizko eta helburuko hizkuntzak" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Itzuli hona" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Itzultzeko testua" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Ezabatu testua" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Iradoki itzulpena" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Utzi" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Bidali" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Fitxategi bateragarrien formatuak:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fitxategia" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Kendu fitxategia" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Itzuli" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Deskargatu" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Eskaera" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Erantzuna" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Kode Irekiko Itzulpen Automatikoko APIa" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Norberak ostatatua. Konexio beharrik gabe. Konfiguratzeko erraza." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lizentzia:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "%(contributors)s %(heart)sez egina eta %(engine)sk sustatua" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Laguntzaileek" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "API publiko hau proba, erabilera " +#~ "pertsonal edo ez-ohikoetarako erabili " +#~ "behar da. Aplikazio bat ekoizpenean " +#~ "exekutatu nahi baduzu, mesedez %(host_server)s" +#~ " edo %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "ostatatu zure zerbitzaria" + +#~ msgid "get an API key" +#~ msgstr "API gako bat lortu" + diff --git a/libretranslate/locales/eu/meta.json b/libretranslate/locales/eu/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..76ebb650a240bf83545ba68ad2679c4ae992ba09 --- /dev/null +++ b/libretranslate/locales/eu/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Basque", + "reviewed": true +} diff --git a/libretranslate/locales/ext/LC_MESSAGES/messages.po b/libretranslate/locales/ext/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..5d123f82a3fe9e83e6c3255d17eb5c02efa9a541 --- /dev/null +++ b/libretranslate/locales/ext/LC_MESSAGES/messages.po @@ -0,0 +1,743 @@ +# ext translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language: ext\n" +"Language-Team: none\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/ext/meta.json b/libretranslate/locales/ext/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..94f47673177f5cfd41bd82c983db2c7428ad2d96 --- /dev/null +++ b/libretranslate/locales/ext/meta.json @@ -0,0 +1,4 @@ +{ + "name": "ext", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/fa/LC_MESSAGES/messages.po b/libretranslate/locales/fa/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..db4492df0fb207b659ea0f389de827a9200acf5e --- /dev/null +++ b/libretranslate/locales/fa/LC_MESSAGES/messages.po @@ -0,0 +1,760 @@ +# Persian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-07-26 07:54+0000\n" +"Last-Translator: MjavadH \n" +"Language-Team: Persian \n" +"Language: fa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "فرمت JSON نامعتبر است" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "تشخیص خودکار" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "غیرمجاز" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "تعداد درخواست‌ها بیش از حد مجاز است" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "کلید API نامعتبر است" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "لطفاً برای دریافت کلید API با اپراتور سرور تماس بگیرید" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "برای دریافت کلید API از %(url)s بازدید نمایید" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "کاهش سرعت:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "درخواست نامعتبر: پارامتر %(name)s وجود ندارد" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "درخواست Invalid: %(name)s پارامتر یک عدد نیست" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "درخواست Invalid: %(name)s پارامتر باید <= 1 1 %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"درخواست نامعتبر: درخواست (%(size)s) از محدودیت متنی (%(limit)s) فراتر رفت" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s پشتیبانی نمی‌شود" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "فرمت %(format)s پشتیبانی نمی‌شود" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"(%(tcode)s) (%(tname)s) از (%(scode)s) (%(sname)s) به عنوان یک زبان هدف در " +"دسترس نیست" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "متن قابل ترجمه نیست: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "ترجمه فایل در این سرور غیرفعال است." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "درخواست نامعتبر: فایل خالی است" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "درخواست نامعتبر: فرمت فایل پشتیبانی نمی‌شود" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "نام فایل نامعتبر است" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "پیشنهادات در این سرور غیرفعال است." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "انگلیسی" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "آلبانی" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "عربی" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "آذری" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basque" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "بنگالی" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "بلغاری" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "کاتالونیا" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "چینی" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "چینی ( سنتی)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "(کشور) چک" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "دانمارکی" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "هلندی" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "اسپرانتور" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "استونی" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "فنلاندی" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "فرانسوی" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galician" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "آلمانی" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "یونانی" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "عبری" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "هندی" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "مجارستانی" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "اندونزیایی" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "ایرلندی" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "ایتالیایی" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "ژاپنی" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "کره‌ای" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "لتونی" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "لیتوانی" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "مالزیایی" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "نروژی" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "فارسی" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "لهستانی" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "پرتغالی" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "رومانی" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "روسی" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "اسلواکی" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "اسلوونی" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "اسپانیایی" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "سوئدی" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "تایلند" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "ترکی" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "اوکراینی" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "اردو" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "صربستان" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "اوکراین" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "ویتنامی" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "بازیابی فهرست زبان‌های پشتیبانی شده" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "فهرست زبان‌ها" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "ترجمه" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "ترجمه متن از یک زبان به زبان دیگر" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "متن ترجمه شده" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "درخواست نامعتبر است" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "خطا در ترجمه" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "کاهش سرعت" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "ممنوع شده" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "سلام دنیا!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "متن (ها) برای ترجمه" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "کد زبان منبع" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "کد زبان هدف" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "متن" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"فرمت متن منبع:\n" +"* text - متن ساده\n" +"* html - حالت های html\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "تعداد ترجمه های جایگزین" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "کلید API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "ترجمه فایل از یک زبان به زبان دیگر" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "فایل ترجمه شده" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "فایل برای ترجمه" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "تشخیص زبان یک متن" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "شناسایی ها" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "خطای شناسایی" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "متن برای شناسایی" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "بازیابی تنظیمات ظاهری ویژه" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "تنظیمات ظاهری" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "نما ظاهری" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "پیشنهادی برای بهبود ترجمه ثبت نمایید" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "موفقیت‌آمیز" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "مجاز نیست" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "متن اصلی" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "ترجمه پیشنهادی" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "زبان متن اصلی" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "زبان ترجمه پیشنهادی" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "بازخورد" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "کد زبان" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "نام زبان قابل خواندن برای انسان (به انگلیسی)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "کدهای زبان هدف پشتیبانی شده" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "متن‌(های) ترجمه شده" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "پیام خطا" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "دلیل کاهش سرعت" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "نشانی فایل ترجمه شده" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "ضریب اطمینان" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "محدودیت کاراکتر برای این زبان (-1 یعنی بدون محدودیت)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "محدودیت زمانی ترجمه برای نمای ظاهری" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "اینکه (آیا) پایگاه داده مربوط به کلید API فعال است." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "اینکه (آیا) کلید API مورد نیاز است." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "اینکه (آیا) ارسال پیشنهادات ممکن است." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "فرمت فایل‌های پشتیبانی شده" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "اینکه (آیا) ارسال موفقیت‌آمیز بود" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "کپی متن" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "%(url)s بارگیری نمی‌شود" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "خطای ناشناخته" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "کپی شد" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"از تصحیح شما سپاس‌گزاریم. توجه داشته باشید که این پیشنهاد بلافاصله اجرا " +"نخواهد شد." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "هیچ زبانی در دسترس نیست. آیا مدل‌ها را به‌درستی نصب کرده‌اید؟" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"کلید API خود را وارد نمایید. اگر به یک کلید API نیاز دارید، %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "بر روی لینک \"دریافت کلید API\" کلیک کنید." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "با اپراتور سرور تماس بگیرید." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API ترجمه ماشینی رایگان و متن باز" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API ترجمه ماشینی رایگان و متن باز. خود میزبان، با قابلیت راه‌اندازی آسان و " +"آفلاین. سرور API خود را تنها در چند دقیقه اجرا کنید." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "ترجمه" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "داکیومنت های API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "دریافت کلید API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "گیت‌هاب" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "تنظیم کلید API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "تغییر زبان" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "ویرایش" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "تغییر به حالت تیره/روشن" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "انصراف" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API ترجمه" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "ترجمه متن" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "ترجمه فایل ها" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "ترجمه از" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "جابجایی زبان مبدا و هدف" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "ترجمه به" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "متن برای ترجمه" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "حذف متن" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "پیشنهاد ترجمه" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "لغو" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "ارسال" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "فرمت‌های فایل پشتیبانی شده:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "فایل" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "حذف فایل" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "ترجمه کن" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "بارگیری (دانلود)" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "درخواست" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "پاسخ" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API ترجمه ماشینی متن باز" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "خود میزبان. قابلیت کار آفلاین. با قابلیت راه‌اندازی آسان." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "لیبر ترنسلیت" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "مجوز:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"ساخته شده با %(heart)s توسط %(contributors)s و قدرت گرفته از %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "مشارکت‌‌کنندگان %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "ویتنامی" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "این API عمومی باید برای آزمایش، استفاده شخصی یا اختصاصی است. اگر قرار است " +#~ "برنامه‌ای که برای محصول است با آن اجرا کنید، لطفا %(host_server)s یا " +#~ "%(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "در سرور خود میزبانی کنید" + +#~ msgid "get an API key" +#~ msgstr "یک کلید API بگیرید" diff --git a/libretranslate/locales/fa/meta.json b/libretranslate/locales/fa/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..31f6aed65a0f38cd8afd3ceda85541723b623e87 --- /dev/null +++ b/libretranslate/locales/fa/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Persian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/fi/LC_MESSAGES/messages.po b/libretranslate/locales/fi/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..27226ace1c413e2f874a70d32cdaff0256a825ee --- /dev/null +++ b/libretranslate/locales/fi/LC_MESSAGES/messages.po @@ -0,0 +1,759 @@ +# Finnish translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-12-03 12:00+0000\n" +"Last-Translator: Ricky Tigg \n" +"Language-Team: Finnish \n" +"Language: fi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Virheellinen JSON-muoto" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Automaattinen havaitseminen" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Luvaton" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Liikaa pyyntöjä rajoittaa rikkomuksia" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Virheellinen API-avain" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Ota yhteyttä palvelimen ylläpitäjään saadaksesi API-avaimen" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Vieraile %(url)s:tä saadaksesi API-avaimen" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Hidasta:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Virheellinen pyyntö: Kadonnut %(name)s parametri" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Virheellinen pyyntö: %(name)s Parametri ei ole numero" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Virheellinen pyyntö: %(name)s Parametrin on oltava 1 1 %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Virheellinen pyyntö: pyyntö (%(size)s ylittää tekstin rajan (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s ei ole tuettu" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formaattia ei tueta" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) ei ole saatavilla kohdekielenä %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Ei voi kääntää tekstiä: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Tiedostojen kääntäminen on poistettu käytöstä tällä palvelimella." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Virheellinen pyyntö: tyhjä tiedosto" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Virheellinen pyyntö: tiedostomuotoa ei tueta" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Virheellinen tiedostonimi" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Ehdotukset on poistettu käytöstä tällä palvelimella." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Englanti" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanialaiset" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabian kieli" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaidžanin" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baski" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgarian" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalonian" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kiina" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kiinalainen (perinteinen)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tšekki" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Tanska" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Hollanti" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Viron" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Suomi" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Ranska" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galician" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Saksa" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Kreikka" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Heprea" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Unkari" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesia" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlanti" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italia" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japani" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korea" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latvialaiset" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Liettua" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malesia" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norjalainen" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persia" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Puola" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugali" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romanian" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Venäjä" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovakia" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovenia" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Espanja" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Ruotsi" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalogi" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thaimaa" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turkki" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraina" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbian" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrainalaiset" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamilaiset" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Luettelo tuetuista kielistä" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Luettelo kielistä" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "käännökset" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Käännä teksti kielestä toiseen" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Käännetty teksti" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Virheellinen pyyntö" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Käännösvirhe" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Hidasta" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Kielletty" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hei maailma!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Käännettävä teksti" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Lähdekielikoodi" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Kohdekielen koodi" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "teksti" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Lähdetekstin muoto:\n" +" * `text` - Selkeä teksti\n" +" * `html` - HTML-merkintä\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Vaihtoehtoisia käännöksiä suositellaan" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API-avain" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Tiedoston kääntäminen kielestä toiseen" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Käännetty tiedosto" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Käännettävä tiedosto" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Tunnista yhden tekstin kieli" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Havainnot" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Tunnistusvirhe" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Tunnistettava teksti" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Etsi rintamakohtaisia asetuksia" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "etusivu asetukset" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "etusivu" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Ehdota parannusta käännökseen" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Onnistui" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Ei todennettu" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Alkuperäinen teksti" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Käännösehdotus" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Alkuperäisen tekstin kieli" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Ehdotetun käännöksen kieli" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "palaute" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Kielikoodi" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Ihmisen luettava kieli (englanniksi)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Tuettu kohdekielikoodi" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Käännetty teksti" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Virheviesti" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Hidastuksen syy" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Käännetyn tiedoston URL" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Luottamusarvo" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Merkkien syöttörajoitus tälle kielelle (-1 = ei rajaa)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Käyttöliittymän käännöksen aikakatkaisu" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Onko API avaintietokanta käytössä." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Tarvitaanko API-avain." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Onko ehdotusten esittäminen mahdollista." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Tuettu tiedostomuoto" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Onnistuiko lähetys" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopioi teksti" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Ei voi ladata %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Tuntematon virhe" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopioitiin" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "Kiitos korjauksesta. Huomaa, että ehdotus ei tule heti voimaan." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Ei kieliä saatavilla. Oletko asentanut mallit oikein?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Kirjoita API-avaimeesi. Jos tarvitset API-avaimen, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "paina \"Get API Key\" -linkkiä." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "ota yhteyttä palvelimen ylläpitäjään." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Ilmainen ja avoimen lähdekoodin konekäännösrajapinta" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Ilmainen ja avoimen lähdekoodin konekäännösrajapinta. Itseisännöity, " +"offline-tilassa toimiva ja helppo asentaa. Käytä omaa API-palvelintasi " +"muutamassa minuutissa." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "käännös" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Dokumentaatio" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Hanki API-avain" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Aseta API-avain" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Vaihda kieltä" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Muokkaa" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Tumma/kevyt tila" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Hylkää" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Käännös API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Käännä teksti" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Käännä tiedosto" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Käännökset" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Vaihda lähde ja kohdekielet" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Käännä kielelle" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Käännettävä teksti" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Poista teksti" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Ehdota käännöstä" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Peru" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Lähetä" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Tuetut tiedostomuodot:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Tiedosto" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Poista tiedosto" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Käännä" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Lataa" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Pyyntö" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Vastaus" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Avoimen lähdekoodin käännös konekäännösrajapinta" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Itseisännöity. Offline-yhteensopiva. Helppo asentaa." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lisenssi:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "%(heart)s:lla tehnyt %(contributors)s ja %(engine)s voimanlähteinä" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Osallistujat" + +#~ msgid "multipart/form-data" +#~ msgstr "monipuolinen/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnami" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Tämä julkinen API on käytettävissä testaamiseen, henkilökohtaiseen tai " +#~ "harvaan käyttöön. Jos aiot käyttää sovellusta tuotannossa, ole hyvä " +#~ "%(host_server)s tai %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "isännöi oma palvelin" + +#~ msgid "get an API key" +#~ msgstr "hanki API-avain" diff --git a/libretranslate/locales/fi/meta.json b/libretranslate/locales/fi/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..786443a33dea5bb092676235287f5a2cda3fac58 --- /dev/null +++ b/libretranslate/locales/fi/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Finnish", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/fil/LC_MESSAGES/messages.po b/libretranslate/locales/fil/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..b53df05e8571ef0ffa047ffea09bdc2bc964ff13 --- /dev/null +++ b/libretranslate/locales/fil/LC_MESSAGES/messages.po @@ -0,0 +1,751 @@ +# Filipino translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-04-03 08:46+0000\n" +"Last-Translator: searinminecraft " +"<114207889+searinminecraft@users.noreply.github.com>\n" +"Language: fil\n" +"Language-Team: Filipino " +"\n" +"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 ==" +" 4 || n % 10 == 6 || n % 10 == 9);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Hindi wastong JSON format" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "I-auto Detect" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Hindi awtorisado" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Masyadong maraming paglalabag sa limitasyon ng hiling" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Hindi wastong API key" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Makipag-ugnayan sa operator ng server para makakuha ng API key" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Bisitahin ang %(url)s para makakuha ng API key" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Slowdown:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Hindi wastong hiling: nawawalang %(name)s na parameter" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Hindi wastong hiling: lumalagpas ang hiling (%(size)s) ang limitasyon ng " +"text (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "Hindi sinusuportahan ang %(lang)s" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Hindi sinusuportahan ang %(format)s na format" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"Ang %(tname)s (%(tcode)s) ay hindi available bilang target na wika galing" +" sa %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Hindi masalin ang text: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Ang pagsalin ng file ay naka-disable sa server na ito." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Hindi wastong hiling: walang laman na file" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Hindi wastong hiling: hindi sinusuportahan ang file format" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Hindi wastong filename" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Naka-disable ang mga mungkahi sa server na ito." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Kunin ang listahan ng mga sinusuportahang wika" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Listahan ng mga wika" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/fil/meta.json b/libretranslate/locales/fil/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..241cc010f664fa961c6b9e6d4d869b160a87c843 --- /dev/null +++ b/libretranslate/locales/fil/meta.json @@ -0,0 +1,4 @@ +{ + "name": "fil", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/fr/LC_MESSAGES/messages.po b/libretranslate/locales/fr/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..c115bd7c1c1a624238221bdd80bab1da4716bdf2 --- /dev/null +++ b/libretranslate/locales/fr/LC_MESSAGES/messages.po @@ -0,0 +1,766 @@ +# French translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-10-09 03:16+0000\n" +"Last-Translator: Olivier Dragon \n" +"Language: fr\n" +"Language-Team: French " +"\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Format JSON incorrect" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Détection automatique" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Non autorisé" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Dépassement de la limite du nombre de requêtes" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Clé API incorrecte" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Veuillez contacter l'opérateur du serveur pour obtenir une clé API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Visitez %(url)s pour obtenir une clé API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Ralentissement :" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Requête incorrecte : le paramètre %(name)s est manquant" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Demande non valable: %(name)s paramètre n'est pas un nombre" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Demande non valable: %(name)s paramètre doit être <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Requête non valide : la requête (%(size)s) dépasse la limite de texte " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s n'est pas prise en charge" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "le format %(format)s n'est pas pris en charge" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) n'est pas disponible comme langue cible pour " +"%(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Impossible de traduire le texte : %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "La traduction de fichiers est désactivée sur ce serveur." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Requête invalide : le fichier est vide" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Requête non valide : le format de ce fichier n'est pas pris en charge" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nom de fichier invalide" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Les suggestions sont désactivées sur ce serveur." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Anglais" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanais" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "arabe" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "azéri" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgare" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalan" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "chinois" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Chinois (traditionnel)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "tchèque" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "danois" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "néerlandais" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "espéranto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonien" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "finnois" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "français" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "allemand" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "grec" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "hébreux" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "hongrois" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "indonésien" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "irlandais" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "italien" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "japonais" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "coréen" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Lettonie" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituanien" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norvège" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "perse" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "polonais" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "portugais" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Roumain" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "russe" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "slovaque" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovénie" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "espagnol" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "suédois" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thaï" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "turque" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "ukrainien" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Ourdou" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbe" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrainien" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamien" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Récupérer la liste des langues prises en charge" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Liste des langues" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traduction" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traduire du texte d’une langue à l'autre" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Texte traduit" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Requête incorrecte" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Erreur de traduction" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Ralentissement" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Banni" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Bonjour le monde !" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Texte(s) à traduire" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Code de la langue source" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Code de la langue cible" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "texte" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format du texte source :\n" +" * `text` - Texte brut\n" +" * `html` - Balises HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Nombre préféré de traductions alternatives" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Clé API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traduire un fichier d'une langue à une autre" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Fichier traduit" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fichier à traduire" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Détecter la langue d'un seul texte" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Détections" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Erreur de détection" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Texte à détecter" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Récupérer les paramètres spécifiques à l’interface" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "paramètres de l’interface" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "interface" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Soumettre une suggestion pour améliorer une traduction" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Succès" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Autorisation manquante" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Texte original" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Traduction proposée" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Langue du texte original" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Langue de la traduction proposée" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "commentaire" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Code de la langue" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nom de la langue lisible par un humain (en anglais)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Codes de langues cibles pris en charge" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Texte(s) traduit(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Message d'erreur" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Raison du ralentissement" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL du fichier traduit" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valeur de confiance" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Limite de caractères pour cette langue (-1 indique aucune limite)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Expiration du délai d'attente pour l'interface de traduction" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Indique si la base de données de clés API est activée." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Indique si une clé API est requise." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Indique si l'envoi de suggestions est activé." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Formats de fichier pris en charge" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Si l'envoi a réussi" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copier le texte" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Impossible de charger %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Erreur inconnue" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copié" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Merci pour votre correction. Notez que la suggestion ne prendra pas effet" +" immédiatement." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Pas de langues disponibles. Avez-vous installé les modèles correctement ?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Entrez votre clé API. Si vous avez besoin d'une clé API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "appuyez sur le lien « Obtenir une clé d'API »." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "contactez l'opérateur du serveur." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API de Traduction Automatique libre et ouverte" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API de Traduction Automatique libre et ouverte. Auto-hébergée, hors ligne" +" et facile à installer. Lancez votre propre serveur API en quelques " +"minutes." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "traduction" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "API" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Documentation de l'API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Obtenir une clé d'API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Définir la clé d'API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Changer de langue" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Modifier" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Basculer en mode sombre/clair" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Ignorer" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API de traduction" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traduire du texte" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traduire des fichiers" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Traduire depuis" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Échanger la langue source et la langue cible" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traduire en" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Texte à traduire" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Supprimer le texte" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Suggérer une traduction" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Annuler" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Envoyer" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formats de fichiers pris en charge :" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fichier" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Supprimer le fichier" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traduire" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Télécharger" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Requête" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Réponse" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API ouverte de traduction automatique" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Auto-hébergé. Mode hors ligne. Facile à configurer." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licence :" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Conçu avec %(heart)s par %(contributors)s et propulsé par %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Contributeurs %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "vietnamien" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Cette API publique ne devrait être " +#~ "utilisée que pour des tests, de " +#~ "manière personnelle ou occasionnelle. Si " +#~ "vous souhaitez l'utiliser avec une " +#~ "application en production, veuillez " +#~ "%(host_server)s ou %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "héberger votre propre serveur" + +#~ msgid "get an API key" +#~ msgstr "obtenir une clé d'API" + diff --git a/libretranslate/locales/fr/meta.json b/libretranslate/locales/fr/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..ac9b9663ca4bdf3618e6168e4386e6e5c5b0bf97 --- /dev/null +++ b/libretranslate/locales/fr/meta.json @@ -0,0 +1,4 @@ +{ + "name": "French", + "reviewed": true +} diff --git a/libretranslate/locales/ga/LC_MESSAGES/messages.po b/libretranslate/locales/ga/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..ceee2c73f74786dcd6013121a510156dae1c3d49 --- /dev/null +++ b/libretranslate/locales/ga/LC_MESSAGES/messages.po @@ -0,0 +1,765 @@ +# Irish translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-09-15 20:09+0000\n" +"Last-Translator: Aindriú Mac Giolla Eoin \n" +"Language-Team: Irish \n" +"Language: ga\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(n>6 && n<11) ? 3 : 4;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Formáid JSON marcáilte" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Braith Uathoibríoch" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Gan údarás" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Cuireann an iomarca iarratas teorainn le sáruithe" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Eochair API neamhbhailí" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Déan teagmháil le hoibreoir an fhreastalaí chun eochair API a fháil" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Tabhair cuairt ar %(url)s a fháil eochair API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Go mall:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Iarratas neamhbhailí: paraiméadar %(name)s in easnamh" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Iarratas neamhbhailí: ní uimhir é paraiméadar %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Iarratas neamhbhailí: Caithfidh paraiméadar %(name)s a bheith <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Iarratas neamhbhailí: iarratas (%(size)s) níos mó ná teorainn téacs " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "Ní thacaítear le %(lang)s" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Ní thacaítear le formáid %(format)s" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) nach bhfuil ar fáil mar sprioctheanga ó %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Ní féidir téacs a aistriú: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Comhaid aistriúcháin atá faoi mhíchumas ar an bhfreastalaí." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Iarratas neamhbhailí: comhad folamh" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Iarratas neamhbhailí: formáid comhaid nach bhfuil tacaíocht" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Ainm comhaid neamhbhailí" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Díchumasaítear moltaí ar an bhfreastalaí seo." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Béarla" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "An Albáinis" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Araibis" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "An Asarbaiseáin" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Taiseachas aeir: fliuch" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Beangáilis" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgáiris" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalóinis" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Sínis" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Sínis (traidisiúnta)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Seiceach" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danmhairgis" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Ollainnis" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Eastóinis" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Fionlainnis" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Fraincis" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Riachtanais uisce: measartha" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Gearmáinis" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Gréigis" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Eabhrais" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hiondúis" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungáiris" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indinéisis" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Gaeilge" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Iodálach" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Seapánach" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Cóiréis" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Laitvis" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Liotuáinis" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malaeis" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Ioruais" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Peirsis" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polainnis" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portaingéilis" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rómáinis" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rúisis" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slóvaicis" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slóivéinis" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spáinnis" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Sualainnis" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagálaigis" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Téalainnis" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Tuircis" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Úcráinis" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdais" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "An tSeirbia" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Bláthanna cumhra: cumhráin" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vítneaimis Víneaimis" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Aisghabh liosta de na teangacha a dtacaítear leo" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Liosta teangacha" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "aistrigh" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Aistrigh téacs ó theanga go teanga eile" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Téacs Aistrithe" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Iarratas neamhbhailí" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Earráid aistriúcháin" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Go mall" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Cosc" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Dia duit domhan!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Téacs(í) le haistriú" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Cód teanga foinse" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Cód teanga sprice" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "téacs" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formáid an téacs foinseach:\n" +" * `téacs` - Gnáth-théacs\n" +" * `html` - marcáil HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "An líon rogha aistriúcháin mhalartacha" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Eochair API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Aistrithe comhad ó theanga go ceann eile" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Aistrithe comhad" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Comhad le haistriú" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Braith teanga téacs amháin" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Brathanna" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Earráid braite" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Téacs le brath" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Aisghabh sainsocruithe tosaigh" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "socruithe ceann tosaigh" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "ceann tosaigh" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Cuir isteach moladh chun aistriúchán a fheabhsú" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Rath" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Gan údar" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Téacs bunaidh" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Aistriúchán molta" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Teanga an bhuntéacs" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Teanga an aistriúcháin molta" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "aiseolas" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Cód teanga" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Ainm teanga inléite ag an duine (i mBéarla)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Cóid sprioctheanga tacaithe" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Téacs(í) traslatáilte" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Teachtaireacht Earráid" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Cúis le mall síos" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL comhad aistrithe" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Luach muiníne" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Teorainn ionchuir charachtair don teanga seo (ní léiríonn -1 aon teorainn)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Teorainn ama aistriúcháin tosaigh" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Cibé an bhfuil an bunachar sonraí eochair API cumasaithe." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Cibé an bhfuil eochair API ag teastáil." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Cibé an bhfuil moltaí a chur isteach ar chumas." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Formáid comhaid Tacaithe" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Cibé an raibh aighneacht rathúil" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Téacs Cóip" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Ní féidir ualach %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Earráid anaithnid" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Cóipeáladh" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Go raibh maith agat as do cheartú. Tabhair faoi deara nach mbeidh an moladh " +"i bhfeidhm ar shiúl." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" +"Níl aon teangacha ar fáil. An raibh tú a shuiteáil na samhlacha i gceart?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Clóscríobh isteach d'Eochair API. Má tá eochair API uait, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "brúigh an nasc \"Get API Key\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "déan teagmháil le hoibreoir an fhreastalaí." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API Aistriú Meaisín Foinse Oscailte saor in aisce" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API Aistriú Meaisín Foinse Oscailte saor in aisce. Féin-óstach, as líne in " +"ann agus éasca le socrú. Rith do fhreastalaí API féin i gceann cúpla " +"nóiméad." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "aistriúchán" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Faigh Eochair API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Socraigh Eochair API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Athrú teanga" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Cuir in eagar" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Scoránaigh mód dorcha/solas" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Díbhe" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Aistriúchán API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Aistrigh Téacs" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Aistrigh Comhaid" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Aistrigh ó" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Babhtáil foinse agus sprioctheangacha" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Aistrigh isteach" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Téacs a aistriú" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Scrios téacs" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Mol aistriúcháin" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Cealaigh" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Seol" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formáidí comhaid tacaithe:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Comhad" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Bain comhad" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Aistrigh" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Íoslódáil" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Iarratas" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Freagra" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API Aistriú Meaisín Foinse Oscailte" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Féin-Óstach. As Líne In ann. Éasca le Socrú." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Ceadúnas:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Déanta le %(heart)s ag %(contributors)s agus arna chumhachtú ag %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Rannpháirtithe" + +#~ msgid "multipart/form-data" +#~ msgstr "ilpháirt / form-sonraí" + +#~ msgid "Vietnamese" +#~ msgstr "Vítneaimis Víneaimis" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Ba cheart an API poiblí seo a úsáid le haghaidh tástála, úsáide pearsanta nó" +#~ " go minic. Má tá tú ag dul a reáchtáil iarratas i dtáirgeadh, le do thoil " +#~ "%(host_server)s nó %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "óstach do fhreastalaí féin" + +#~ msgid "get an API key" +#~ msgstr "a fháil eochair API" diff --git a/libretranslate/locales/ga/meta.json b/libretranslate/locales/ga/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..89711ed6ac9c054774c3008dbf6ac9d99a74927d --- /dev/null +++ b/libretranslate/locales/ga/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Irish", + "reviewed": true +} diff --git a/libretranslate/locales/gd/LC_MESSAGES/messages.po b/libretranslate/locales/gd/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..8719451080cd8cfba439ed33e908f312e6a3417c --- /dev/null +++ b/libretranslate/locales/gd/LC_MESSAGES/messages.po @@ -0,0 +1,746 @@ +# Translations template for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.2\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-10-23 17:15+0000\n" +"Last-Translator: GunChleoc \n" +"Language-Team: Gaelic \n" +"Language: gd\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " +"(n > 2 && n < 20) ? 2 : 3;\n" +"X-Generator: Weblate 5.8.2-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Fòrmat JSON mì-dhligheach" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Fèin-mhothaich" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Gun chead" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Chuirear cus iarrtasan thar na tha ceadaiche" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Iuchair API mhì-dhligheach" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Cuir fios gu obraiche an fhrithealaiche airson iuchair API fhaighinn" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Tadhail air %(url)s a dh’fhaighinn iuchair API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Maille:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Iarrtas mì-dhligheach: tha am paramadair %(name)s a dhìth" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Iarrtas mì-dhligheach: chan eil am paramadair %(name)s ’na àireamh" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Iarrtas mì-dhligheach: feumaidh am paramadair %(name)s a bhith <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Iarrtas mì-dhligheach: tha teacsa an iarrtais (%(size)s) thair na crìche de " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "Chan eil taic ri %(lang)s" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Chan eil taic ris an fhòrmat %(format)s" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"Chan eil %(tname)s (%(tcode)s) ri fhaighinn ’na chànan-amais o %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Chan urrainn dhuinn an teacsa seo eadar-theangachadh: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Tha eadar-theangachaidh fhaidhlichean à comas air an frithealaiche seo." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Iarrtas mì-dhligheach: faidhle falamh" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Iarrtas mì-dhligheach: Cha chuir sinn taic ri fòrmat an fhaidhle" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Ainm faidhle mì-dhligheach" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Tha molaidhean à comas air an frithealaiche seo." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Beurla" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albàinis" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabais" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Asarbaideànais" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basgais" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Beangailis" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgarais" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalanais" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Sìnis" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Sìnis (thradaiseanta)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Seacais" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danmhairgis" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Duitsis" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Eastoinis" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Fionnlannais" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Fraingis" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Gailìsis" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Gearmailtis" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Greugais" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Eabhra" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindis" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungairis" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Innd-Innsis" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Gaeilge" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Eadailtis" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Seapanais" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Coirèanais" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Laitbheis" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Liotuainis" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malaidhis" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Nirribhis" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Pearsais" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Pòlainnis" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portagailis" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romàinis" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ruisis" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slòbhacais" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slòbhainis" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spàinntis" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Suainis" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tàidh" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turcais" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Ùrdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Sèirbis" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ucràinis" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Bhiet-Namais" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Faigh liosta nan cànan ris a bheil taic" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Liosta nan cànan" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "eadar-theangaich" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Eadar-theangaich teacsa on dàrna cànan gun chànan eile" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Teacsa air eadar-theangachadh" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Iarrtas mì-dhligheach" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Mearachd eadar-theangachaidh" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Maille" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Toirmeasg" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Shin thu, a shaoghail!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Teacsa no dhà ri eadar-theangachadh" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Còd a’ chanain thùsail" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Còd a’ chanain-amais" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "teacsa" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Fòrmat teacsa an tùis:\n" +" * `text` – Teacsa lom\n" +" * `html` – Markup HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "An àireamh as fheàrr de roghainnean eadar-theangachaidh" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Iuchair API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Eadar-theangaich faidhle on dàrna cànan gun chànan eile" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Faidhle air eadar-theangachadh" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Am faidhle ri eadar-theangachadh" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Mothaich do chànan aon teacsa" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Mothachaidhean" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Mearachd mothachaidh" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "An teacsa ri mhothachadh" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Faigh roghainnean sònraichte a’ frontend" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "roghainnean a’ frontend" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Cuir a-null moladh airson piseach a thoirt air eadar-theangachadh" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Chaidh leis" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Gun ùghdarrachadh" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "An teacsa tùsail" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "An t-eadar-theangachadh ’ga mholadh" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Cànan an teacsa thùsail" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Cànan an eadar-theangachaidh ’ga mholadh" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "beachd thugainn" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Còd a’ chànain" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Ainm a’ chànain a leughas daoine (sa Bheurla)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Còdan canain-amais ris a chuir sinn taic" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Teacsa(ichean) air eadar-theangachadh" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Teachdaireachd na mearachd" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Adhbhar na maille" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL an fhaidhle air eadar-theangachadh" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Luach na h-earbsa" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Crìoch ion-chur charactaran dhan chànan seo (innsidh -1 nach bi crìoch air)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Crìoch-ùine eadar-theangachadh a’ frontend" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Co-dhiù a bheil stòr-dàta nan iuchraichean API an comas gus nach eil." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Co-dhiù a bheil feum air iuchair API gus nach eil." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Co-dhiù a bheil cur a-null mholaidhean an comas gus nach eil." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Fòrmatan faidhle ris a bheil taic" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Co-dhiù an do shoirbhich leis a’ cur a-null gus nach do shoirbhich" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Dèan lethbhreac dhen teacsa" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Cha ghabh %(url)s a luchdadh" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Mearachd nach aithne dhuinn" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Chaidh lethbhreac dheth a dhèanamh" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Mòran taing airson do cheartachadh. Thoir an aire nach bi am moladh an sàs " +"sa bhad." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" +"Cha eil cànan ri fhaighinn. An do stàlaich thu na modailean mar bu chòir?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Cuir a-steach an iuchair API agad. Ma tha iuchair API a dhìth ort, " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "brùth air a’ cheangal “Faigh iuchair API”." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "cuir fios gu obraiche an fhrithealaiche." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API saor airson eadar-theangachadh inneil le bun-tùs fosgailte" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API saor airson eadar-theangachadh inneil le bun-tùs fosgailte. Òstaichidh " +"tu fhèin is cleachdaidh far loidhne thu e is tha e furasta a shuidheachadh." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "eadar-theangachadh" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Docamaideadh an API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Faigh iuchair API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Suidhich iuchair API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Atharraich an cànan" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Deasaich" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Toglaich am modh dorcha/soilleir" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Leig seachad" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API eadar-theangachaidh" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Eadar-theangaich teacsa" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Eadar-theangaich faidhlichean" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Eadar-theangaich o" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Cuir na cànanan tùsail is ri eadar-theangachadh an àite a chèile" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Eadar-theangaich gu" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "An teacsa ri eadar-theangachadh" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Sguab às an teacsa" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Mol eadar-theangachadh" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Sguir dheth" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Cuir" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Fòrmatan faidhle ris a chuir sinn taic:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Faidhle" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Thoir am faidhle air falbh" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Eadar-theangaich" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Luchdaich a-nuas" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Iarrtas" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Freagairt" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API airson eadar-theangachadh inneil le bun-tùs fosgailte" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Òstaich thu fhèin e. Comas far loidhne. Furasta a shuidheachadh." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Ceadachas:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Chaidh a dhèanamh le %(heart)s le %(contributors)s ’s le cumhachd %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Co-thabhartaichean %(libretranslate)s" diff --git a/libretranslate/locales/gd/meta.json b/libretranslate/locales/gd/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..67ea3784e90ccf5c8326f731b97a323429204b0e --- /dev/null +++ b/libretranslate/locales/gd/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Scottish Gaelic", + "reviewed": true +} diff --git a/libretranslate/locales/gl/LC_MESSAGES/messages.po b/libretranslate/locales/gl/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..88a4edc469e61527e3069aef2ebc7252db33faa1 --- /dev/null +++ b/libretranslate/locales/gl/LC_MESSAGES/messages.po @@ -0,0 +1,760 @@ +# Galician translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2023-01-17 09:47+0000\n" +"Last-Translator: gallegonovato \n" +"Language-Team: Galician \n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Formato JSON non válido" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Auto Detección" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Non autorizado" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Demasiadas peticións por enriba do límite" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Chave API non válida" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Contacte coa xerencia do servidor para obter unha chave da API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Visite %(url)s para obter unha chave API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Máis amodo:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Solicitude non válida: falta o parámetro %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Solicitude inválida: 0 0 O parámetro non é un número. %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Solicitude inválida: 0 0 O parámetro debe ser <= %(value)s " +"%(name)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Solicitude non válida: solicitude (%(size)s) supera o límite de texto " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "Non hai soporte para %(lang)s" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Non hai soporte para o formato %(format)s" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s non está dispoñible como idioma a traducir desde " +"%(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Non se pode traducir: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "A tradución de ficheiros está desactivada neste servidor." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Solicitude non válida: ficheiro baleiro" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Solicitude non válida: o formato do ficheiro non está soportado" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nome de ficheiro non válido" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "As suxestións están desactivadas neste servidor." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Inglés" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanés" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Árabe" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Acerbaixano" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Vasco" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengalí" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Búlgaro" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalán" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chinés" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "China (tradicional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Checo" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dinamarqués" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Neerlandés" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estoniano" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finés" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francés" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galego" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Alemán" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grego" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebreo" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Húngaro" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesio" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandés" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiano" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Xaponés" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Coreano" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letón" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituano" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malaio" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Noruega" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Farsi" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polaco" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugués" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romanía" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ruso" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Eslovaco" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Esloveno" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Español" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Sueco" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tailandés" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turco" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ucraniano" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbio" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ucraíno" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnam" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Obter lista dos idiomas soportados" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista de idiomas" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traducir" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traducir texto dun idioma a outro" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Texto traducido" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Solicitude non válida" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Erro na tradución" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Máis amodo" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Vetado" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Ola mundo!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Texto(s) a traducir" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Código de idioma da fonte" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Código de idioma do obxectivo" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "texto" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formato do texto fonte:\n" +" * `text`- Texto plano\n" +" * `html`- Marcado HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Número de traduccións alternativas" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Chave API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traducir un ficheiro dun idioma a outro" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Ficheiro traducido" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Ficheiro a traducir" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detectar idioma dun único texto" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Deteccións" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Erro na detección" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Texto a detectar" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Obter axustes específicos da interface" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "axustes da interface" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "interface" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Enviar unha suxestión para mellorar a tradución" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Correcto" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Non autorizado" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Texto orixinal" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Tradución suxerida" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Idioma do texto orixinal" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Idioma da tradución suxerida" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "opinión" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Código de idioma" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nome do idioma en formato lexible (en Inglés)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Códigos de idioma obxectivo soportados" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Texto(s) traducido(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Mensaxe de erro" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Motivo da ralentización" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL do ficheiro traducido" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valor de fiabilidade" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Límite de caracteres de entrada par este idioma (-1 significa sen límite)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Marxe temporal para a tradución na interface" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Se a base de datos de chaves API está activada." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Se é precisa unha chave API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Se está activado o envío de suxestións." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Formatos de ficheiro soportados" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Se o envío foi correcto" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copiar texto" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Non se cargou %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Erro descoñecido" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copiado" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Grazas pola túa corrección. Ten en conta que a suxestión non ten efectos " +"inmediatos." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Sen idiomas dispoñibles. Instalaches os módulos correctamente?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Escribe a túa Chave API. Se precisas unha Chave API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "preme na ligazón \"Obter Chave API\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "contacta coa xerencia do servidor." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API da Tradución por Máquina de código Libre e Aberto" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API da Tradución por Máquina de código Libre e Aberto. Auto-Hospedado, doado" +" de instalar e sen precisar conexión. Executa o teu propio servidor API en " +"só uns minutos." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "tradución" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Docs da API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Obter Chave API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Establecer Chave API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Cambiar de Idioma" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Editar" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Modo escuro/luz" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Desbotar" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API de tradución" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traducir Texto" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traducir Ficheiros" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Traducir desde" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Intercambiar idiomas de orixe e obxectivo" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traducir ao" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Texto a traducir" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Eliminar texto" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Suxerir tradución" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Cancelar" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Enviar" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formatos de ficheiro soportados:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Ficheiro" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Eliminar ficheiro" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traduce" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Descargar" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Solicitar" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Resposta" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API de Tradución por Máquina de Código Aberto" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Auto-Hospedado. Sen Conexión. Doado de Configurar." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licenza:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Feito con %(heart)s por %(contributors)s e grazas a %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Colaboradoras de %(libretranslate)s" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamita" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Esta API pública só debe ser utilizada para probas, de xeito personal e " +#~ "pouco frecuente. Se vas a usar unha aplicación en produción, por favor " +#~ "%(host_server)s ou %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "instala o teu propio servidor" + +#~ msgid "get an API key" +#~ msgstr "obtén unha chave API" diff --git a/libretranslate/locales/gl/meta.json b/libretranslate/locales/gl/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..2317495e11c872ecfa59e7f2cf79db96e9ef6190 --- /dev/null +++ b/libretranslate/locales/gl/meta.json @@ -0,0 +1,4 @@ +{ + "name": "gl", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/he/LC_MESSAGES/messages.po b/libretranslate/locales/he/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..280814579c744ed5c1c6a67f648c709fb17faad3 --- /dev/null +++ b/libretranslate/locales/he/LC_MESSAGES/messages.po @@ -0,0 +1,754 @@ +# Hebrew translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-11-16 07:05+0000\n" +"Last-Translator: Yaron Shahrabani \n" +"Language-Team: Hebrew \n" +"Language: he\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Weblate 5.9-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "תבנית ה־JSON שגויה" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "זיהוי אוטומטי" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "לא מורשה" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "יותר מדי הפרות מגבלות בקשות" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "מפתח API שגוי" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "נא ליצור קשר עם מפעילי השרת כדי לקבל מפתח API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "נא לגשת אל %(url)s כדי להשיג מפתח API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "האטה:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "בקשה שגויה: המשתנה %(name)s חסר" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "בקשה שגויה: המשתנה %(name)s הוא לא מספר" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "בקשה שגויה:המשתנה %(name)s חייב להיות קטן או שווה ל־%(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "בקשה שגויה: גודל הבקשה (%(size)s) חורג ממגבלת הטקסט (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s לא נתמכת" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "התבנית %(format)s לא נתמכת" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "(%(tname)s) (%(tcode)s)לא זמינה כשפת מטרה מהשפה %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "לא ניתן לתרגם טקסט: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "תרגום קבצים מוגבל בשרת זה." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "בקשה שגויה: קובץ ריק" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "בקשה שגויה: תסדיר קובץ לא נתמך" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "שם הקובץ שגוי" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "הצעות מושבתות בשרת זה." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "אנגלית" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "אלבנית" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "ערבית" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "אזרית" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "בסקית" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "בנגלית" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "בולגרית" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "קטאלונית" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "סינית" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "סינית מסורתית" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "צ׳כית" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "דנית" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "הולנדית" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "אספרנטו" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "אסטונית" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "פינית" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "צרפתית" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "גליסית" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "גרמנית" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "יוונית" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "עברית" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "הינדי" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "הונגרית" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "אינדונזית" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "אירית" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "איטלקית" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "יפנית" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "קוריאנית" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "לטבית" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "ליטאית" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "מלאית" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "נורבגית" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "פרסית" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "פולנית" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "פורטוגלית" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "רומנית" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "רוסית" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "סלובקית" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "סלובנית" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "ספרדית" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "שוודית" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "טאגאלוג" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "תאית" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "טורקית" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "אוקראה" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "אורדו" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "סרבית" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "אוקראינית" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "וייטנאמית" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "משיכת רשימת השפות הנתמכות" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "רשימת השפות" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "תרגום" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "תרגום טקסט משפה אחת לאחרת" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "הטקסט המתורגם" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "בקשה שגויה" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "שגיאת תרגום" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "האטה" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "חסום" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "שלום עולם!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "טקסט(ים) לתרגום" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "קוד שפת המקור" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "קוד שפת היעד" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "טקסט" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"תבנית טקסט מקור:\n" +"„טקסט” - טקסט רגיל\n" +"„html” - קוד HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "מספר מועדף של תרגומים חלופיים" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "מפתח API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "תרגום קובץ משפה אחת לאחרת" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "הקובץ המתורגם" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "קובץ לתרגום" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "זיהוי השפה של טקסט בודד" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "זיהויים" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "שגיאת זיהוי" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "טקסט לזיהוי" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "משיכת הגדרות נקודתיות למנשק משתמש" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "הגדרות מנשק משתמש" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "מנשק משתמש" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "הגשת הצעה לשיפור תרגום" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "הצליח" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "לא מורשה" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "טקסט מקורי" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "תרגום מוצע" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "שפת הטקסט המקורי" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "שפת התרגום המוצע" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "משוב" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "קוד שפה" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "שם שפה לקריאה אנושית (באנגלית)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "קוד שפת היעד" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "תרגום טקסט(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "הודעת שגיאה" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "סיבה להאט" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "קובץ url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "ערך אמון" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "הגבלת קלט תווים לשפה זו (-1 לא מצביעה על גבול)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "זמן תרגום מיידי" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "בין אם מסד הנתונים מפתח API מופעל." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "בין אם נדרש מפתח API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "בין אם ניתן להגיש הצעות." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "פורמט קבצים נתמך" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "אם ההגשה הייתה מוצלחת" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "העתק טקסט" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "לא ניתן לטעון את %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "טעות לא ידועה" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "שוטרים" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "תודה על התיקון שלך. שימו לב שההצעה לא תיכנס לתוקף מיד." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "אין שפות זמינות. האם התקנת נכון את המודלים?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "הזמן את מפתח ה-API שלך. אם אתה זקוק למפתח API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "לחצו על הקישור \"Get API Key\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "צור קשר עם מפעיל השרת." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Free and Open Source Machine" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Free and Open Source Machine Translation API עוין עצמי, לא מקוון מסוגל וקל " +"להגדרה. הפעילו את שרת ה- API שלכם תוך מספר דקות בלבד." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "תרגום התרגום" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "קבלת מפתח API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "הגדר מפתח API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "שינוי השפה" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Editעריכה" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "מצב כהה/אור" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "משמעת" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "תרגום API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "תרגום טקסט" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "תרגום קבצים" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "תרגום" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "מקור ושפת היעד" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "לתרגם" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "טקסט לתרגם" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "למחוק טקסט" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "הצעות תרגום" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "ביטול" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "שלח" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "פורמטי קבצים תומכים:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "File" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "הסרת קובץ" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "תרגום" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "הורד Download" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "בקשה" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "תגובה" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "קוד פתוח תרגום API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "מוגן. Offline Capable קל להגדרה." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "רישיון:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "מיוצר עם %(heart)s על ידי %(contributors)s ומופעל על ידי %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "תורמי %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "וייטנאם" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "ממשק API ציבורי זה משמש לבדיקה, שימוש אישי או בלתי צפוי בלבד. אם אתה הולך " +#~ "להפעיל יישום בסביבת פעילות מלאה, בבקשה %(host_server)s או %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "מארח את השרת שלך" + +#~ msgid "get an API key" +#~ msgstr "מפתח API" diff --git a/libretranslate/locales/he/meta.json b/libretranslate/locales/he/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..3cc0c1b14f83a6a338b9a3be9696254ba023df91 --- /dev/null +++ b/libretranslate/locales/he/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Hebrew", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/hi/LC_MESSAGES/messages.po b/libretranslate/locales/hi/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..570772464b43db5efeee7a539d8bd4d8b0b29358 --- /dev/null +++ b/libretranslate/locales/hi/LC_MESSAGES/messages.po @@ -0,0 +1,764 @@ +# Hindi translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2025-01-19 00:28+0000\n" +"Last-Translator: \"Sravika Padakanti (MSS2020079)\" " +"\n" +"Language-Team: Hindi \n" +"Language: hi\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "अमान्य JSON प्रारूप" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "ऑटो डिटेक्ट करें" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "अनधिकृत" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "बहुत से अनुरोध सीमा उल्लंघन" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "अमान्य API कुंजी" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "API कुंजी प्राप्त करने के लिए कृपया सर्वर ऑपरेटर से संपर्क करें" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "API कुंजी प्राप्त करने के लिए %(url)s पर जाएं" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "गति कम करो:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "अमान्य अनुरोध: %(name)s पैरामीटर अनुपलब्ध है" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "अमान्य अनुरोध: %(name)s पैरामीटर संख्या नहीं है" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "अमान्य अनुरोध: %(name)s पैरामीटर होना चाहिए <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "अमान्य अनुरोध: अनुरोध (%(size)s) पाठ सीमा (%(limit)s) से अधिक है" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s समर्थित नहीं है" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s प्रारूप समर्थित नहीं है" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (d)%(tcode)s) से लक्ष्य भाषा के रूप में उपलब्ध नहीं है %(sname)s " +"(d)%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "पाठ का अनुवाद नहीं कर सकते: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "इस सर्वर पर फ़ाइलें अनुवाद अक्षम हैं।।" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "अमान्य अनुरोध: खाली फ़ाइल" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "अमान्य अनुरोध: फ़ाइल प्रारूप समर्थित नहीं है" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "अमान्य फ़ाइलनाम" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "इस सर्वर पर सुझाव अक्षम हैं।." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "अंग्रेज़ी" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "अल्बानियाई" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "अरबी" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "अज़रबैजानी" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "बास्क" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "बंगाली" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "बल्गेरियन" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "कैटलन" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "चीनी" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "चीनी (पारंपरिक)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "चेक" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "डैनिश" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "डच" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "एस्पेरांतो" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "एस्टोनियाई" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "फिनिश" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "फ्रेंच" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "गैलिशियन" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "जर्मन" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "यूनानी" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "हिब्रू" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "हिन्दी" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "हंगेरियन" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "इंडोनेशिया" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "आयरिश" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "इतालवी" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "जापानी" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "कोरियाई" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "लातवियाई" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "लेबनान" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "मलय" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "नॉर्वे" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "फ़ारसी" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "पोलिश" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "पुर्तगाली" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "रोमानियाई" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "रूसी" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "स्लोवाक" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "स्लोवेनियाई" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "स्पेनिश" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "स्वीडिश" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "टैगलॉग" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "थाई" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "तुर्की" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "यूक्रेनी" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "उर्दू" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "सर्बियाई" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "यूक्रेनियन" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "वियतनामी" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "समर्थित भाषाओं की सूची पुनर्प्राप्त करें" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "भाषाओं की सूची" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "अनुवाद" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "पाठ को एक भाषा से दूसरे में अनुवाद करें" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "अनुवादित पाठ" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "अमान्य अनुरोध" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "अनुवाद त्रुटि" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "गति कम करो" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "प्रतिबंधित" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "नमस्ते दुनिया!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "अनुवाद करने के लिए पाठ" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "स्रोत भाषा का कोड" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "लक्ष्य भाषा का कोड" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "पाठ" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"स्रोत पाठ का प्रारूप:\n" +" * `पाठ` - सादा पाठ\n" +" * `html` - HTML मार्कअप\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "वैकल्पिक अनुवादों की पसंदीदा संख्या" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API कुंजी" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "किसी भाषा से किसी अन्य भाषा में फ़ाइल ट्रांसलेट करें" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "अनुवादित फाइल" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "अनुवाद करने के लिए फाइल" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "एकल पाठ की भाषा का पता लगाएं" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "जांच" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "जांच त्रुटि" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "डिटेक्ट करने के लिए पाठ" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Frontend विशिष्ट सेटिंग्स पुनर्प्राप्त करें" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "Frontend सेटिंग्स" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "Frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "अनुवाद को बेहतर बनाने के लिए सुझाव देना" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "सफलता" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "अधिकृत नहीं" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "मूल पाठ" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "सुझाया गया अनुवाद" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "मूल पाठ की भाषा" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "सुझाए गए अनुवाद की भाषा" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "प्रतिक्रिया" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "भाषा कोड" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "मानव पठनीय भाषा का नाम (अंग्रेजी में)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "समर्थित लक्ष्य भाषा कोड" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "अनुवादित पाठ(ओं)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "त्रुटि संदेश" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "गति धीमी होने का कारण" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "अनुवादित फ़ाइल url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "आत्मविश्वास मूल्य" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "इस भाषा के लिए चरित्र इनपुट सीमा (-1 इंगित करता है कि कोई सीमा नहीं)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Frontend अनुवाद टाइमआउट" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "क्या API कुंजी डेटाबेस सक्षम है।।" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "क्या एक API कुंजी की आवश्यकता है।।" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "क्या सुझाव देना संभव है।." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "समर्थित फाइलें प्रारूप" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "क्या सबमिशन सफल रहा" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "पाठ कॉपी करें" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "%(url)s लोड नहीं किया जा सकता" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "अज्ञात त्रुटि" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "कॉपी किया गया" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"आपके सुधार के लिए धन्यवाद। ध्यान दें कि सुझाव तुरंत प्रभावी नहीं होगा।." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" +"कोई भाषा उपलब्ध नहीं है। क्या आप मॉडल को सही ढंग से स्थापित कर सकते हैं?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"अपने API कुंजी में टाइप करें। यदि आपको API कुंजी की आवश्यकता है, " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "\"API कुंजी प्राप्त करें\" लिंक दबाएं।" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "सर्वर ऑपरेटर से संपर्क करें।." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "मुफ़्त और मुक्त स्रोत मशीन अनुवाद API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"मुफ़्त और मुक्त स्रोत मशीन अनुवाद एपीआई। स्व-होस्टेड, ऑफ़लाइन सक्षम और सेटअप" +" करने में आसान। कुछ ही मिनटों में अपना स्वयं का API सर्वर चलाएं।" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "अनुवाद" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API दस्तावेज़" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "API प्राप्त करें कुंजी" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "API सेट कुंजी" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "भाषा बदलें" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "संपादित करें" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "टॉगल डार्क / लाइट मोड" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "खारिज" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "अनुवाद API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "पाठ अनुवाद" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "फ़ाइलें अनुवाद" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "से अनुवाद करें" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "स्रोत और लक्ष्य भाषाओं की अदला-बदली करें" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "में अनुवाद" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "अनुवाद करने के लिए पाठ" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "पाठ हटाएँ" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "अनुवाद सुझाएँ" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "रद्द करें" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "भेजें" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "समर्थित फ़ाइल प्रारूप:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "फ़ाइल" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "फ़ाइल निकालें" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "अनुवाद" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "डाउनलोड" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "अनुरोध" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "जवाब" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "ओपन सोर्स मशीन अनुवाद API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "स्व-होस्टेड। ऑफलाइन सक्षम। सेटअप करने में आसान।." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "लाइसेंस:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"%(contributors)s द्वारा %(heart)s के साथ बनाया गया और %(engine)s द्वारा " +"संचालित" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s योगदानकर्ता" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "वियतनामी" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "इस सार्वजनिक API का उपयोग परीक्षण, व्यक्तिगत या गलत उपयोग के लिए किया जाना " +#~ "चाहिए। यदि आप उत्पादन में आवेदन चला रहे हैं, तो कृपया ध्यान दें। " +#~ "%(host_server)s या %(get_api_key)s।" + +#~ msgid "host your own server" +#~ msgstr "अपने सर्वर को होस्ट करें" + +#~ msgid "get an API key" +#~ msgstr "API कुंजी प्राप्त करें" diff --git a/libretranslate/locales/hi/meta.json b/libretranslate/locales/hi/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..4c1fbaea2178e68598bdf2c10169823f93e1950a --- /dev/null +++ b/libretranslate/locales/hi/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Hindi", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/hu/LC_MESSAGES/messages.po b/libretranslate/locales/hu/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..89a83bd2a8742d62206fd85d55946faf85d891a8 --- /dev/null +++ b/libretranslate/locales/hu/LC_MESSAGES/messages.po @@ -0,0 +1,769 @@ +# Hungarian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-10-23 17:15+0000\n" +"Last-Translator: Ghost of Sparta \n" +"Language-Team: Hungarian \n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.8.2-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Érvénytelen JSON formátum" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Automatikus felismerés" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Nincs jogosultsága" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Túl sok kérelem korlátozza a jogsértéseket" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Érvénytelen API kulcs" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" +"Vegye fel a kapcsolatot a kiszolgáló-üzemeltetővel, hogy megkapja az API " +"kulcsot" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Látogasson el a(z) %(url)s címre, API kulcshoz" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Lassulás:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Érvénytelen kérés: hiányzik a(z) %(name)s paraméter" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Érvénytelen kérés: 0 0 paraméter nem szám %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Érvénytelen kérés: 0 0 paraméternek <= %(value)s %(name)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Érvénytelen kérés: a kérés mérete (%(size)s) meghaladja a szövegkorlátot " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s nyelv nem támogatott" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formátum nem támogatott" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) nem áll rendelkezésre célnyelvként %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Nem fordítható szöveg: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "A fájlfordítások ki vannak kapcsolva ezen a kiszolgálón." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Érvénytelen kérés: üres fájl" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Érvénytelen kérés: fájlformátum nem támogatott" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Érvénytelen fájlnév" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "A javaslatok ki vannak kapcsolva ezen a kiszolgálón." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Angol" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albán" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arab" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbajdzsáni" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baszk" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengáli" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bolgár" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalán" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kínai" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kínai (hagyományos)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Cseh" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dán" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holland" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Eszperantó" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Észt" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finn" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francia" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galíciai" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Német" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Görög" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Héber" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Magyar" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonéz" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Ír" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Olasz" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japán" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreai" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Lett" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litván" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Maláj" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norvég" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Perzsa" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Lengyel" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugál" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Román" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Orosz" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Szlovák" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Szlovén" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spanyol" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Svéd" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Török" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrán" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Szerb" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrán" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnámi" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Támogatott nyelvek listájának lekérése" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Nyelvek listája" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "fordítás" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Szöveg fordítása egy nyelvről egy másikra" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Fordított szöveg" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Érvénytelen kérés" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Fordítási hiba" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Lassabban" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Tiltott" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hello világ!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Lefordítandó szöveg(ek)" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Forrás nyelv kódja" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Cél nyelv kódja" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "szöveg" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formátum forrás szöveg:\n" +"* `text' - egyszerű szöveg\n" +"* `html' - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Előnyös számú alternatív fordítás" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API kulcs" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Fájl fordítása egy nyelvről egy másikra" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Fordított fájl" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fájl fordítása" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "A szöveg nyelvének észlelése" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Észlelések" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Észlelési hiba" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Felismerendő szöveg" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Frontend-specifikus beállítások lekérése" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "frontend beállítások" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Küldjön javaslatot a fordítás javításához" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Siker" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Nem engedélyezett" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Eredeti szöveg" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Javasolt fordítás" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Eredeti szöveg nyelve" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "A javasolt fordítás nyelve" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "visszajelzés" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Nyelvkód" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Emberi olvasható nyelv neve (angolul)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Támogatott célnyelvi kódok" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Fordított szöveg(ek)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Hibaüzenet" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "A lelassulás oka" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Fordított fájl url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Bizalmi érték" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Jellemző bemeneti határértéke ennek a nyelvnek (-1 nem jelzi a határt)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Frontend fordítás időtúllépés" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Függetlenül attól, hogy az API kulcs adatbázisa engedélyezett-e." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Szükséges-e API kulcs." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Engedélyezve van-e a javaslatok beküldése." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Támogatott fájlformátum" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Amennyiben a beküldés sikeres volt" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Szöveg másolása" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Nem tölthető be a(z) %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Ismeretlen hiba" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Másolva" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Köszönöm a helyesbítést. Vegye figyelembe, hogy a javaslata nem fog " +"azonnal hatályba lépni." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Nincsenek elérhető nyelvek. Helyesen telepítette a modelleket?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Írja be az API kulcsot. Ha szüksége van egy API kulcsra, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "nyomja meg a \"Get API Key\" hivatkozást." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "lépjen kapcsolatba a kiszolgáló-üzemeltetővel." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Ingyenes és nyílt forráskódú gépi fordító API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Ingyenes és nyílt forráskódú gépi fordító API. Helyileg telepített, " +"offline működő és könnyen telepíthető. Futtassa saját API kiszolgálóját " +"néhány perc alatt." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "fordítás" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Dokumentáció" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Szerezzen API kucsot" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Állítsa be az API kulcsot" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Nyelv módosítása" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Szerkesztés" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Váltás sötét/világos módra" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "elvetés" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Fordító API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Szöveg fordítása" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Fájlok fordítása" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Fordítási ürlap" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Forrás és célnyelv felcserélése" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Fordítsd le ebbe" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Fordítandó szöveg" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Szöveg törlése" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Javasoljon fordítást" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Mégse" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Küldés" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Támogatott fájlformátumok:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fájl" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Fájl eltávolítása" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Fordítás" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Letöltés" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Kérés" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Válasz" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Nyílt Forráskódú Gépi Fordító API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Helyben futtatható, offline működő. Könnyen beállítható." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licenc:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"%(heart)s-el készítve. Közreműködtek %(contributors)s működtetve ezzel: " +"%(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Közreműködők" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnami" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Ezt a nyilvános API-t tesztelésre, " +#~ "személyes vagy alkalmi használatra " +#~ "használandó. Amennyiben az alkalmazásod éles" +#~ " környezetben fogod használni úgy használd" +#~ " a %(host_server)s-t vagy %(get_api_key)s-t." + +#~ msgid "host your own server" +#~ msgstr "Hosztold a saját szervered" + +#~ msgid "get an API key" +#~ msgstr "API kulcs szerzése" diff --git a/libretranslate/locales/hu/meta.json b/libretranslate/locales/hu/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..a7f59d99084ca11f56dd817bc31623ab28911e44 --- /dev/null +++ b/libretranslate/locales/hu/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Hungarian", + "reviewed": true +} diff --git a/libretranslate/locales/id/LC_MESSAGES/messages.po b/libretranslate/locales/id/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..e285f2054e18157a0a64dc0c1830a35eb40b8dfa --- /dev/null +++ b/libretranslate/locales/id/LC_MESSAGES/messages.po @@ -0,0 +1,766 @@ +# Indonesian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-06-08 12:27+0000\n" +"Last-Translator: Wahyu Hamdani \n" +"Language-Team: Indonesian \n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Format JSON tidak sah" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Mendeteksi Otomatis" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Tidak Diizinkan" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Terlalu banyak pelanggaran batas permintaan" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Kunci API tidak valid" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Silakan hubungi operator server untuk mendapatkan kunci API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Kunjungi %(url)s untuk mendapatkan kunci API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Pelan-pelan:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Permintaan tidak valid: parameter %(name)s tidak ada" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" +"permintaan tidak valid: Sitemap parameter bukan jumlah %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"permintaan tidak valid: Sitemap parameter harus <= 1 " +"Artikel %(name)s %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Permintaan tidak valid: permintaan (%(size)s) melebihi batas teks " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s tidak didukung" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s format tidak didukung" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) tidak tersedia sebagai bahasa target dari %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Tidak dapat menerjemahkan teks: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Terjemahan file dinonaktifkan di server ini." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Permintaan tidak valid: file kosong" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Permintaan tidak valid: format file tidak didukung" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nama file tidak valid" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Saran dinonaktifkan di server ini." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Bahasa Inggris" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Indonesia" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Bahasa Arab" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Bahasa Zerbaijani" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Login" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Login" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Login" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Bahasa Cina" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kitajka (traditional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Bahasa Czech" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Bahasa Danish" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Bahasa Belanda" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Bahasa Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Bahasa Suomi" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Bahasa Perancis" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Login" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Bahasa Jerman" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Bahasa Yunani" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Bahasa Yahudi" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Bahasa India" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Bahasa Hungaria" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Bahasa Indonesia" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Bahasa Irlandia" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Bahasa Italy" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Bahasa Jepang" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Bahasa Korea" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Login" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Bahasa Persia" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Bahasa Polish" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugis" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rusia" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovak" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spanyol" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Swedia" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Login" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Login" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turki" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraina" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Login" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Login" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Login" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Lihat daftar bahasa yang didukung" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Daftar bahasa" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "terjemahkan" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Terjemahkan teks dari bahasa ke bahasa lain" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Teks yang diterjemahkan" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Permintaan tidak valid" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Kesalahan terjemahan" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Pelan-pelan" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Diblokir" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Halo dunia!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Teks-teks untuk diterjemahkan" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kode bahasa sumber" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Kode bahasa target" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "teks" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format teks sumber:\n" +"Sitemap\n" +"* `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Sejumlah alternatif terjemahan" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Kunci API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Terjemahkan file dari bahasa ke bahasa lain" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "File yang diterjemahkan" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "File untuk diterjemahkan" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Mendeteksi bahasa teks tunggal" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Deteksi" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Kesalahan deteksi" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Teks untuk dideteksi" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Lihat pengaturan spesifik frontend" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "pengaturan frontend" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Kirim saran untuk meningkatkan terjemahan" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Berhasil" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Tidak sah" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Teks asli" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Terjemahan yang disarankan" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Bahasa teks asli" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Bahasa terjemahan yang disarankan" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "umpan balik" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Bahasa" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nama bahasa yang dapat dibaca manusia (dalam bahasa Inggris)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Mendukung kode bahasa target" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Teks yang telah diterjemahkan" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Pesan kesalahan" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Alasan untuk memperlambat" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Diterjemahkan url file" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Nilai kepercayaan" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Batas input karakter untuk bahasa ini (-1 menunjukkan tidak ada batasan)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Sitemap" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Apakah database kunci API diaktifkan." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Apakah kunci API diperlukan." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Apakah pengiriman saran diaktifkan." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Format file yang didukung" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Apakah pengajuan berhasil" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Fotokopi" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Tidak bisa memuat %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Kesalahan tidak diketahui" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Disalin" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Terima kasih atas koreksi Anda. Perhatikan saran tidak akan mengambil efek " +"segera." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" +"Tidak ada bahasa yang tersedia. Apakah Anda menginstal model dengan benar?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Ketikkan kunci API. Jika Anda memerlukan kunci API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "tekan tautan \"Get API Key\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "hubungi operator server." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API Translation API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Gratis dan Open Source Machine Translation API. Secara mandiri, offline " +"mampu dan mudah diatur. Jalankan server API Anda sendiri hanya dalam " +"beberapa menit." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "sitemap" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Documents" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Dapatkan Kunci API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Tetapkan Kunci API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Mengubah bahasa" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Sunting" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Mode gelap / ringan" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Tutup" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Terjemahkan Teks" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Terjemahkan File" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Terjemahkan dari" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Sumber swap dan bahasa target" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Terjemahkan ke" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Teks untuk diterjemahkan" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Hapus teks" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Sarankan terjemahan" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Batal" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Kirim" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Format file yang didukung:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "File" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Hapus file" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Terjemahkan" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Unduh" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Minta" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Respons" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API documentation" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Hosting mandiri. Bisa Offline. Mudah Disiapkan." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lisensi:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Dibuat dengan %(heart)s oleh %(contributors)s dan didukung oleh %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Kontributor %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnam" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "API publik ini harus digunakan untuk pengujian, penggunaan pribadi, atau " +#~ "jarang dipakai. Jika Anda akan menjalankan aplikasi dalam tahap produksi, " +#~ "silakan %(host_server)s atau %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "host server anda sendiri" + +#~ msgid "get an API key" +#~ msgstr "dapatkan kunci API" diff --git a/libretranslate/locales/id/meta.json b/libretranslate/locales/id/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..7b51b1af29cbe32541dbf074337fc361fb26cf87 --- /dev/null +++ b/libretranslate/locales/id/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Indonesian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/it/LC_MESSAGES/messages.po b/libretranslate/locales/it/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..266ef5dc70d07ad7cfc77a766792738a2d253246 --- /dev/null +++ b/libretranslate/locales/it/LC_MESSAGES/messages.po @@ -0,0 +1,767 @@ +# Italian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 22:34+0000\n" +"Last-Translator: Piero Toffanin \n" +"Language: it\n" +"Language-Team: Italian " +"\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Formato JSON non valido" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Rileva Automaticamente" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Non autorizzato" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Violazione da troppe richieste" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Chiave API non valida" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Si prega di contattare l'operatore del server per ottenere una chiave API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Visita %(url)s per ottenere una chiave API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Rallenta:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Richiesta non valida: parametro %(name)s mancante" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Richiesta invalida: parametro %(name)s non è un numero" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Richiesta invalida: parametro %(name)s deve essere <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Richiesta non valida: richiesta (%(size)s) supera i limiti di testo " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s non è supportato" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "il formato %(format)s non è supportato" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) non è disponibile come lingua di destinazione da " +"%(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Non è possible tradurre il testo: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "La traduzione dei files è disabilitata su questo server." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Richiesta non valida: file vuoto" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Richiesta non valida: formato del file non supportato" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nome del file non valido" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "I suggerimenti sono disabilitati su questo server." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Inglese" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanese" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabo" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azero" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgaro" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalano" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Cinese" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Cinese (tradizionale)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Ceco" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danese" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Olandese" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estone" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finlandese" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francese" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Tedesco" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Greco" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Ebraico" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungherese" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesiano" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandese" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiano" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Giapponese" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Coreano" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Lettone" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituano" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malese" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norvegese" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persiano" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polacco" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portoghese" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumeno" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Russo" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovacco" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Sloveno" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spagnolo" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Svedese" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tailandese" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turco" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ucraino" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbo" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ucraino" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamita" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Recupera l'elenco delle lingue supportate" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Elenco delle lingue" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traduzione" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traduce testo da una lingua a un'altra" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Testo tradotto" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Richiesta non valida" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Errore di traduzione" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Rallenta" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Bannato" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Ciao mondo!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Testo/i da tradurre" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Codice lingua sorgente" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Codice lingua destinazione" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "testo" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formato del testo sorgente:\n" +" * `text` - Testo normale\n" +" * `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Numero preferito di traduzioni alternative" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Chiave API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traduce file da una lingua a un'altra" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "File tradotto" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "File da tradurre" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Rileva la lingua di un singolo testo" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Rilevazioni" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Errore di rilevamento" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Testo da rilevare" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Recupera le impostazioni del frontend" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "impostazioni del frontend" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Invia un suggerimento per migliorare una traduzione" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Successo" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Non autorizzato" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Testo originale" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Traduzione suggerita" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Lingua del testo originale" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Lingua della traduzione suggerita" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "feedback" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Codice lingua" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nome della lingua (in Inglese)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Codici lingua di destinazione supportati" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Testo/i tradotto/i" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Messaggio di errore" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Ragione del rallentamento" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL del file tradotto" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valore di confidenza" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Limite di caratteri per questa lingua (-1 indica nessun limite)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Tempo limite di traduzione sul frontend" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Se il database di chiavi API è abilitato." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Se è richiesta una chiave API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Se l'invio di suggerimenti è abilitato." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Formati files supportati" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Se l'invio è stato di successo" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copia testo" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Non riesco a caricare %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Errore sconosciuto" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copiato" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Grazie per la tua correzione. Si noti che il suggerimento non avrà " +"effetto subito." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Nessuna lingua disponibile. Hai installato correttamente i modelli?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Digita la tua chiave API. Se hai bisogno di una chiave API, " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "premi il link \"Ottieni Chiave API\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "contatta l'operatore del server." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API di traduzione automatica libera e open source" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API di traduzione automatica libera e open source. Self-hosted, funziona " +"anche offline e facile da configurare. Fai girare il tuo server API in " +"pochi minuti." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "traduzione" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Ottieni Chiave API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Imposta Chiave API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Cambia lingua" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Modifica" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Cambia modalità scura/chiara" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Chiudi" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API di Traduzione" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traduci Testo" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traduci Files" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Traduci da" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Scambia lingua sorgente e di destinazione" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traduci in" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Testo da tradurre" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Elimina testo" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Suggerisci una traduzione" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Annulla" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Invia" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formati files supportati:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "File" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Rimuovi file" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traduci" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Scarica" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Richiesta" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Risposta" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API di Traduzione Automatica Open Source" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Self-Hosted. Funziona anche offline. Facile da Configurare." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licenza:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Realizzato con %(heart)s da %(contributors)s e powered by %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Contributori di %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamita" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Questa API pubblica può essere " +#~ "utilizzata per fare prove, per uso " +#~ "personale o infrequente. Se hai " +#~ "intenzione di utilizzarla in produzione, " +#~ "per favore %(host_server)s o %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "hosta un server tuo" + +#~ msgid "get an API key" +#~ msgstr "ottieni una chiave API" + diff --git a/libretranslate/locales/it/meta.json b/libretranslate/locales/it/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..5f788ae19c7ee1c6220c9a2c4f1c74678b447aea --- /dev/null +++ b/libretranslate/locales/it/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Italian", + "reviewed": true +} diff --git a/libretranslate/locales/ja/LC_MESSAGES/messages.po b/libretranslate/locales/ja/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..51be49245afb6064efe5c896fbf86c2bc7d12770 --- /dev/null +++ b/libretranslate/locales/ja/LC_MESSAGES/messages.po @@ -0,0 +1,757 @@ +# Japanese translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2025-01-04 07:30+0000\n" +"Last-Translator: moyashi_24 \n" +"Language-Team: Japanese \n" +"Language: ja\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "無効なJSON形式" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "自動検出" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "無許可" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "リクエストが多すぎます" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "無効なAPIキー" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "APIキーを取得するにはサーバ管理者に連絡してください" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "%(url)sにアクセスして API キーを取得する" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "スローダウン:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "無効なリクエスト:パラメータ %(name)s が欠落しています" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "無効なリクエスト:パラメータ %(name)s は数値ではありません" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "無効なリクエスト:パラメータ %(name)s は %(value)s 以下である必要があります" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "無効なリクエスト:リクエスト(%(size)s)がテキストの制限(%(limit)s)を超えていま" +"す" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s はサポートされていません" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s フォーマットはサポートされていません" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "%(sname)s (%(scode)s)から%(tname)s (%(tcode)s)への翻訳は利用できません" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "テキストを翻訳できません: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "このサーバーではファイル翻訳が無効になっています。" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "無効なリクエスト:空のファイル" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "無効なリクエスト:サポートされていないファイル形式" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "無効なファイル名" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "このサーバーで提案が無効になっています。" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "英語" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "アルバニア語" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "アラビア語" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "アゼルバイジャン語" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "バスク語" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "ベンガル語" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "ブルガリア語" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "カタルーニャ語" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "中国語 (簡体)" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "中国語 (繁体)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "チェコ語" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "デンマーク語" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "オランダ語" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "エスペラント語" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "エストニア語" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "フィンランド語" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "フランス語" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "ガリシア語" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "ドイツ語" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "ギリシャ語" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "ヘブライ語" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "ヒンディー語" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "ハンガリー語" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "インドネシア語" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "アイルランド語" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "イタリア語" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "日本語" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "韓国語" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "ラトビア語" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "リトアニア語" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "マレー語" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "ノルウェー語" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "ペルシア語" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "ポーランド語" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "ポルトガル語" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "ルーマニア語" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "ロシア語" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "スロヴァキア語" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "スロベニア語" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "スペイン語" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "スウェーデン語" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "タガログ語" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "タイ語" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "トルコ語" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "ウクライナ語" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "ウルドゥー語" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "セルビア語" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "ウクライナ語" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "ベトナム語" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "サポートされている言語リストを取得" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "言語リスト" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "翻訳" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "言語から言語にテキストを翻訳する" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "翻訳済みテキスト" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "無効なリクエスト" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "翻訳エラー" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "スローダウン" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "禁止された" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "こんにちは皆さん!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "翻訳するテキスト" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "翻訳元の言語コード" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "翻訳先の言語コード" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "テキスト" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"ソーステキストの形式:\n" +"* `text` - プレーンテキスト\n" +"* `html` - HTML マークアップ\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "代替翻訳の優先数" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "APIキー" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "言語から言語にファイルを翻訳する" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "翻訳済みファイル" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "翻訳するファイル" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "単一テキストの言語を検出する" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "検出" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "検出エラー" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "検出するテキスト" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "フロントエンドの特定の設定を取得する" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "フロントエンドの設定" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "フロントエンド" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "翻訳の改善案を出す" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "成功" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "認証されていません" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "オリジナルテキスト" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "提案された翻訳" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "オリジナルテキストの言語" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "提案された翻訳の言語" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "フィードバック" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "言語コード" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "読みやすい言語名(英語)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "サポートされた翻訳先の言語コード" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "翻訳されたテキスト" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "エラーメッセージ" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "遅くなる理由" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "翻訳されたファイルのURL" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "確信度" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "この言語の入力可能文字数 (-1は無制限)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "フロントエンド翻訳タイムアウト" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "APIキーデータベースが有効になっているかどうか。" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "APIキーが要求されるかどうか。" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "翻訳精度を上げるための修正が可能かどうか。" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "サポートされているファイル形式" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "提出が成功したかどうか" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "テキストをコピー" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "%(url)sを読み込めません" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "未知のエラー" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "コピー済み" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "修正ありがとうございます。 提案の反映には時間がかかる場合があります。" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "利用可能な言語がありません。利用するには言語モデルを正しくインストールしてく" +"ださい。" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "APIキーを入力してください。 APIキーが必要な場合は、%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "「APIキーを取得」を押してください。" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "サーバーオペレータに連絡して下さい。" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "無料かつオープンソースな機械翻訳API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "フリーでオープンソースな機械翻訳API。セルフホスト、オフラインで利用可能、セットアップも簡単。数分であなたのAPIサーバーを実行。" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "翻訳" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "APIドキュメント" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "APIキーを取得" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "APIキーを設定" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "言語を変更" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "編集" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "ダークモード/ライトモードを切り替える" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "却下" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "翻訳API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "テキストを翻訳" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "ファイルを翻訳" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "翻訳元:" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "翻訳元と翻訳先の言語を入れ替える" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "翻訳先:" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "翻訳するテキスト" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "テキストを削除" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "翻訳を改善する" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "キャンセル" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "送信" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "サポートされているファイル形式:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "ファイル" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "ファイルを削除" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "翻訳" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "ダウンロード" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "リクエスト" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "レスポンス" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "オープンソース機械翻訳API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "セルフホスティング。 オフライン対応。簡単にセットアップ。" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "ライセンス:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "%(heart)sと%(contributors)sによって作成され、%(engine)sを利用して作られていま" +"す。" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s 貢献者" + +#~ msgid "multipart/form-data" +#~ msgstr "マルチパート/フォームデータ" + +#~ msgid "Vietnamese" +#~ msgstr "ベトナム" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "この公開API " +#~ "はテストまたは個人的、頻繁でない用途に使用してください。製品のアプリケーションに使用する場合は、%(host_server)s " +#~ "または %(get_api_key)sしてください。" + +#~ msgid "host your own server" +#~ msgstr "自分のサーバーをホストする" + +#~ msgid "get an API key" +#~ msgstr "APIキーを取得" diff --git a/libretranslate/locales/ja/meta.json b/libretranslate/locales/ja/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..1a126f011acb2ae8ec938d69fa6a079a5491988e --- /dev/null +++ b/libretranslate/locales/ja/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Japanese", + "reviewed": true +} diff --git a/libretranslate/locales/kab/LC_MESSAGES/messages.po b/libretranslate/locales/kab/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..69d5f217e126415a4c01a94866433a6386ddd22f --- /dev/null +++ b/libretranslate/locales/kab/LC_MESSAGES/messages.po @@ -0,0 +1,760 @@ +# Kabyle translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-12-21 11:46+0000\n" +"Last-Translator: ButterflyOfFire \n" +"Language-Team: Kabyle \n" +"Language: kab\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Amasal JSON d arameɣtu" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Tifin tawurmant" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Ur yettusireg ara" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Aṭas n uɛeddi deg tilas n ussuter" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Tasarut API d tarameɣtut" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Ttxil-k·m, nermes amahal n uqeddac i wawway n tsarut API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Rzu ɣer %(url)s i wawway n tsarut API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Taẓayt:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Assuter arameɣtu: ixuṣṣ uɣewwar %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Assuter d arameɣtu: assuter(%(size)s) iɛedda tilas n uḍris (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s ur yettusefrak ara" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Amasal %(format)s ur yettusefrak ara" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) ur yelli ara am tutlayt tasaḍast n %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Ur yizmir asuqel n uḍṛis: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Asuqqel n yifuyla yensa ɣef uqeddac-a." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Assuter arameɣtu: afaylu d ilem" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Assuter d arameɣtu: amasal n ufaylu ur yettusefrak ara" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Isem n ufaylu d armeɣtu" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Isumar nsan ɣef uqeddac-a." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Taglizit" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Talbanit" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Taɛrabt" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Tazerbiǧanit" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Tabaskit" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Tabengalit" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Tabulgarit" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Takaṭalant" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Tacinwatt" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Tacinwat (tamansayt)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tačikit" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Tadanit" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Tahulandit" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Taspirantit" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Tasṭunit" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Tafinit" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Tafṛansist" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Tagalisyant" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Talmanit" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Tagrigit" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Taɛebranit" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Tahendit" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Tahungaṛit" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Tandunizit" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Tirlandit" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Taṭelyanit" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Tajapunit" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Takurit" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Talitunit" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Talitwanit" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Tamalayt" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Tanurvijit" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Tafarsit" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Tapulunit" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Tapurtugit" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Tarumanit" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Tarusit" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Tasluvakt" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Tasluvinit" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Taspenyulit" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Taswidit" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tatagalugt" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Taṭaylandit" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Taṭurkit" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Takrinit" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Turdut" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Tasiṛbit" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Tukranit" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Tavyiṭnamit" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Tabdart n tutlayin yettwasefraken" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Tabdart n tutlayin" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "suqel" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Asuqqel n uḍris seg tutlayt ɣer tayeḍ" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Aḍris yettwasuqqlen" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Assuter arameɣtu" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Tuccḍa deg tsuqilt" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "S ttawil" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Yettwagdel" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Azul !" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Aḍris(iḍrisen) ara yettwasuqqlen" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Tangalt n tutlayt taɣbalut" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Tangalt n tutlayt tasaḍast" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "aḍṛis" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Amasal n uḍris aɣbalu:\n" +" * `text` - Aḍris aččaran\n" +" * `html` - Taṛekkazt HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Tasarutt API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Asuqqel n ufaylu seg tutlayt ɣer tayeḍ" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Afaylu yettwasuqqlen" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Afaylu ara yettwasuqqlen" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Tifin n tutlayt n kra n uḍris" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Tifin" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Tuccḍa deg tifin" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Aḍris ara yettwafen" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Err-d iɣewwaren imaẓlayen n ugrudem" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "iɣewwaren n ugrudem" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "agrudem" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Azen asumer i usnerni n tsuqqilt" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Awwaḍ" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Ur yettusireg ara" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Aḍris aɣbalu" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Tasuqqilt i d-yettwasumren" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Tutlayt n uḍris aɣbalu" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Tutlayt n tsuqqilt i d-yettwasumren" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "tamawt" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Tangalt n tutlayt" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Isem n tutlayt igezzu umdan (s teglizit)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Tingalin n tutlayin tisaḍasin i yettwasefraken" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Aḍris(iḍrisen) yettwasuqqlen" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Izen n tuccḍa" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Ssebba n taẓayt" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL n ufaylu i yettwasuqqlen" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Azal n teflest" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Talast n unekcum n yisekkilen i tutlayt-a (-1 ur d-iskan kra n talast)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Akud n tsuqqilt ɣef ugrudem" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Yeskan ma yella taffa n yisefka n tsura API termed." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Yeskan-d ma tettwasra tasarut n API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Yeskan ma yella tuzna n yisumar termed." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Imasalen n yifuyla i yettwasefraken" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Ma yella tuzna tɛedda" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Nɣel aḍris" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "D awezɣi asali n %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Tuccḍa d tarussint" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Yettwanɣel" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "Tanemmirt ɣef useɣti. Ẓer belli asumer ur iteṭṭef ara imir kan." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Ulac tutlayin i yellan. Tesbeddeḍ tineɣrufin akken iwata?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Sekcem tasarut-ik•im API. Ma yella tesriḍ tasarut API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "sit ɣef useɣwen \"Awi tasarut API\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "nermes amahal n uqeddac." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API n tsuqqilt tawurmant tilellit, n uɣbalu yeldin" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API n tsuqqilt tawurmant tilellit, n uɣbalu yeldin. Yezdeɣ i yiman-is, s " +"war tuqqna, fessus i usebded. Senker aqeddac-ik·im API deg kra n " +"tesdatin." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "tasuqqilt" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Tasemlit API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Awi tasarut API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Sbadu tasarut API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Beddel tutlayt" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Ẓreg" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Uɣal ɣer uskar aberkan neɣ aceɛlal" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Zgel" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API n usuqqel" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Suqqel aḍris" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Suqqel ifuyla" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Suqqel seg" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Semmeskel aɣbalu d tutlayt tasaḍast" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Suqqel ɣer" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Aḍris ara yettwasuqqlen" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Kkes aḍris" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Sumer tasuqqilt" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Sefsex" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Azen" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Imasalen n ufaylu i yettwasefraken:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Afaylu" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Kkes afaylu" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Suqqel" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Sader" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Assuter" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Tiririt" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API n usuqqel awurman n uɣbalu yeldin" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Yettwasezdeɣ i yiman-is. Iteddu s war tuqqna. Fessus i usesteb." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Turagt:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Yettufeṣṣel s %(heart)s sɣur %(contributors)s, yella-d s lmendad n " +"%(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Imttekkiyen n %(libretranslate)s" + +#~ msgid "Vietnamese" +#~ msgstr "Tavyiṭnamit" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "API-a azayaz ilaq ad yettuseqdec i " +#~ "usekyed, i useqdec uslig neɣ i " +#~ "useqdec ur negzi. Ma yella tesnekkreḍ" +#~ " asnas id-yettfarasen, ttxil-k·m seqdec " +#~ "%(host_server)s neɣ %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "Sezdeɣ aqeddac inek·inem" + +#~ msgid "get an API key" +#~ msgstr "Awi tasarut API" diff --git a/libretranslate/locales/kab/meta.json b/libretranslate/locales/kab/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..8c26a291c4d29970791e7c0173de9abe0c7d4676 --- /dev/null +++ b/libretranslate/locales/kab/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Kabyle", + "reviewed": true +} diff --git a/libretranslate/locales/ko/LC_MESSAGES/messages.po b/libretranslate/locales/ko/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..5e1c57284159ce98b4ac88bd669cc5de1bd184ae --- /dev/null +++ b/libretranslate/locales/ko/LC_MESSAGES/messages.po @@ -0,0 +1,757 @@ +# Korean translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2023-06-19 20:49+0000\n" +"Last-Translator: Sungjoon Moon \n" +"Language: ko\n" +"Language-Team: Korean " +"\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "잘못된 JSON 형식" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "자동 감지" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "인증되지 않음" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "요청이 너무 많음" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "잘못된 API 키" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "API 키를 얻기 위해 서버 연산자에 문의하시기 바랍니다" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "%(url)s 에서 API 키 받기" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "속도가 느림:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "잘못된 요청: %(name)s 파라미터 누락" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "잘못된 요청: 0 댓글 매개변수는 수 없습니다 %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "잘못된 요청: 0 댓글 매개 변수는 <= 1명 1명 %(name)s %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "잘못된 요청: 텍스트 제한 (%(limit)s) 초과하는 요청 (%(size)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s 지원되지 않음" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s 형식은 지원되지 않습니다" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "%(sname)s (%(scode)s)에서 %(tname)s (%(tcode)s)로 번역할 수 없습니다" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "텍스트를 번역할 수 없습니다: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "현재 서버에서 파일 번역이 비활성화 되어 있습니다." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "잘못된 요청: 빈 파일" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "잘못된 요청: 파일 형식 지원되지 않음" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "잘못된 파일명" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "현재 서버에서 제안이 비활성화 되어 있습니다." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "영어" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "알바니아" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "아랍어" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "아제르바이잔어" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "채용정보" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "한국어" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "카테고리" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "중국어" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "한국어 (Korean)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "체코어" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "덴마크어" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "네덜란드어" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "에스페란토" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "에스토니아" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "핀란드어" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "프랑스어" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "독일어" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "그리스어" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "히브리어" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "힌디어" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "헝가리어" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "인도네시아어" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "아일랜드어" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "이탈리아어" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "일본어" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "한국어" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "라트비아" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "한국어" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "담당자: Ms" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "한국어" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "페르시아어" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "폴란드어" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "포르투칼어" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "한국어" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "러시아어" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "슬로바키아어" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "한국어" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "스패인어" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "스웨덴어" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "다운로드" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "뚱 베어" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "터키어" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "우크라이나어" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "채용 정보" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "지원되는 언어 목록 검색" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "언어 목록" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "번역" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "다른 언어로 텍스트를 번역" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "번역된 텍스트" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "잘못된 요청" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "번역 오류" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "속도가 느림" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "금지됨" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "안녕하세요!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "번역할 테스트" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "출발 언어 코드" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "도착 언어 코드" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "텍스트" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"출발 텍스트의 형식 :\n" +"* `text` - 평문 텍스트\n" +"* `html` - HTML 마크 업\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "다른 번역의 선호 번호" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API 키" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "다른 언어로 파일을 번역" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "번역된 파일" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "번역할 파일" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "단일 텍스트의 언어를 감지" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "감지 내용" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "감지 오류" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "감지할 텍스트" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "프론트엔드의 특정 설정을 검색" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "프론트엔드 설정" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "프론트엔드" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "번역을 개선하기 위해 제안을 제출" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "성공" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "권한 없음" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "원문" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "제안된 번역" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "원문의 언어" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "제안된 번역의 언어" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "피드백" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "언어 코드" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "사람이 읽을 수 있는 언어 이름 (영어로)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "지원하는 언어 코드" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "번역된 텍스트" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "오류 메시지" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "느려지는 이유" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "번역된 파일 url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "신뢰치" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "이 언어의 문자 입력 제한 (-1은 제한이 없음을 의미)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "프론트엔드 번역 시간 초과" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "API 키 데이터베이스가 활성화되었는지 여부." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "API 키가 필요하든." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "자주 묻는 질문." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "지원된 파일 형식" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "제출이 성공했는지 여부" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "텍스트 복사" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "%(url)s를 읽어들일 수 없음" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "알려지지 않은 오류" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "복사됨" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "수정해 주셔서 감사합니다. 제안은 즉시 반영되지 않을 수 있습니다." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "가능한 언어가 없음. 언어 모델을 제대로 설치하셨나요?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "API 키 입력. API 키가 필요한 경우, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "\"Get API Key\" 링크를 누릅니다." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "서버 운영자에게 문의하세요." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "자유 오픈 소스 기계 번역 API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"자유 오픈 소스 기계 번역 API. 셀프 호스팅, 오프라인에서 사용이 가능하며, 설치가 쉽습니다. 단 몇 분 만 투자하여 자신의 " +"API 서버를 돌려보세요." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "번역" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API 문서" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "API 키 획득" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "API 키 설정" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "언어 선택" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "수정" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "어두운 색/빛 모드" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "닫기" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "번역 API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "텍스트 번역하기" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "파일 번역하기" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "~로 부터 번역하기" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "출발 언어, 도착 언어 서로 바꾸기" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "~로 번역하기" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "번역할 텍스트" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "텍스트 삭제" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "번역 제안하기" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "취소" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "보내기" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "지원되는 파일 형식:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "파일" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "파일 삭제" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "번역" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "다운로드" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "요청" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "응답" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "오픈 소스 기계 번역 API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "셀프 호스팅. 오프라인 이용 가능. 설정하기 쉬움." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "라이센스:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "%(contributors)s의 손으로 %(heart)s와 함께 만들었으며, %(engine)s에 의해 제공됨" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s 기여자" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form 자료" + +#~ msgid "Vietnamese" +#~ msgstr "베트남어" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "이 공개 API는 테스트 또는 개인적인 용도로만 " +#~ "사용되어야 하며, 잦은 요청을 지양합니다. 운영 환경에서" +#~ " 응용 프로그램을 실행할 경우, %(host_server)s 또는" +#~ " %(get_api_key)s을 참조하십시오." + +#~ msgid "host your own server" +#~ msgstr "자신만의 서버 호스팅" + +#~ msgid "get an API key" +#~ msgstr "API 키 획득" + diff --git a/libretranslate/locales/ko/meta.json b/libretranslate/locales/ko/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..f5044c39eba2ca51c295f912eaebe97aa5e60991 --- /dev/null +++ b/libretranslate/locales/ko/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Korean", + "reviewed": true +} diff --git a/libretranslate/locales/lt/LC_MESSAGES/messages.po b/libretranslate/locales/lt/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..31589d69394d66e4f762f701c7d80bbf00e5896c --- /dev/null +++ b/libretranslate/locales/lt/LC_MESSAGES/messages.po @@ -0,0 +1,736 @@ +# Lithuanian translations for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 13:03-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: lt \n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Blogas JSON formatas" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Automatinis aptikimas" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Neleidžiama" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "NAME OF TRANSLATORS" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Blogas API raktas" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Prašome susisiekti su serverio operatoriumi, kad gautumėte API raktą" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Apsilankymas %(url)s gauti API raktą" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Lėčiau:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Blogas prašymas: trūksta %(name)s parametras" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Klaidingas prašymas: %(name)s parametras nėra skaičius" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Klaidingas prašymas: %(name)s parametras turi būti < = %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Blogas prašymas: prašymas (%(size)s) viršija teksto ribą (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s nepalaikoma" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formatas nepalaikomas" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) nėra kaip tikslinės kalbos iš %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Nepavyko išversti teksto: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Failų vertimas šiame serveryje yra išjungtas." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Blogas prašymas: tuščias failas" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Klaidingas prašymas: failo formatas nepalaikomas" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Klaidingas failo pavadinimas" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Siūlymai yra išjungti šiame serveryje." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Anglų" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanijos" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabų" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaidžanas" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baskij" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgarų" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalonų" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kinų" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kinų (tradicinė)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Čekų" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danų" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Olandų" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estų" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Suomių" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Prancūzų" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "GalisName" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Vokiečių" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Graikų" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebrajų" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindis" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Vengrų" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indoneziečių" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Airių" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italų" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonų" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korėjiečių" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latvių" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lietuvių" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "MalajusCountry name" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norvegų" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persų" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Lenkų" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugalų" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumunų" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rusų" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovakų" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovėnų" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Ispanų" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Švedų" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalogas" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turkų" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "UkranijName" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbų" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrainiečių" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamiečių" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Gauti palaikomų kalbų sąrašą" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Kalbų sąrašas" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "translate" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Versti tekstą iš kalbos į kitą" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Tekstas išvertus" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Klaidingas prašymas" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Vertimo klaida" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Lėčiau" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Konservuoti" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Labas pasaulis!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Verstinas (-i) tekstas (-ai)" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Šaltinio kalbos kodas" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Paskirties kalbos kodas" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tekstas" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Šaltinio teksto formatas:\n" +"* tekstas - plonas tekstas\n" +"* 'html' - HTML žymėjimas\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Pageidautinas alternatyvių vertimų skaičius" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API raktas" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Klubui buvo priskirtas žaidėjas dėl per mažo jų skaičiaus" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Išverstas failas" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Failas išversti" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "NAME OF TRANSLATORS" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "III PRIEDAS" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Nustatymo klaida" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Name" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "@ info: whatsthis" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "frontent nustatymai" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontent" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Siūlymą patobulinti vertimą" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Sėkmė" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Neleidžiama" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Originalus tekstas" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Siūlomas vertimas" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Originalaus teksto kalba" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Siūlomo vertimo kalba" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "grįžtamoji informacija" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Kalbos kodas" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Humanitarinės kalbos pavadinimas (anglų kalba)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "NAME OF TRANSLATORS" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Išverstas (-i) tekstas (-ai)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Klaidos pranešimas" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Vėlavimo priežastis" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Išverstas failas url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Patikimumo vertė" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Simbolių įvedimo riba šiai kalbai (-1 reiškia, kad ribų nėra)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Name" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "NAME OF TRANSLATORS." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "NAME OF TRANSLATORS." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "@ info: status." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Palaikomas failų formatas" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "@ info: whatsthis" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopijuoti tekstą" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Nepavyko įkelti %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Nežinoma klaida" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopijuota" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Ačiū, kad pataisei. Atkreipkite dėmesį, pasiūlymas nebus įsigalioti iš " +"karto." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Kalbų nėra. Tu teisingai įdiegei modelius?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Įveskite savo API raktą. Jums reikia API rakto, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "paspauskite nuorodą \"Gauk API raktą\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "susisiekti su serverio operatoriumi." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Nemokamas ir atvirojo kodo mašinos vertimas API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Nemokamai ir Open Source Machine Translation API. Savarankiškai patalpintas," +" atsijungęs gali ir lengvai nustatyti. Bėk savo API serverį po kelių " +"minučių." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "vertimas" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API dokumentai" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Gauk API Raktas" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Nustatyti API Raktas" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Keisti kalbą" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Keisti" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Perjungti tamsios (šviesos) veikseną" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Naikinti" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Vertimo API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Versti tekstą" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Name" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Žaisti iš" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Sukeisti šaltinį ir tikslines kalbas" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Pereiti į" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Verstinas tekstas" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Trinti" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Siūlomas vertimas" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Atsisakyti" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Siųsti" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Palaikomi failų formatai:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Failas" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Pašalinti failą" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Transliuoti" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Atsisiųsti" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Prašymas" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Atsakas" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open Source Machine Translation API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Selfas Hostedas. Galimi atsijungimai. Lengva susitvarkyti." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "Name" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licencija:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Lovatiesės %(heart)s pagal %(contributors)s ir varomas %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Pagalbininkai" diff --git a/libretranslate/locales/lt/meta.json b/libretranslate/locales/lt/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..df73c998b2213c115e3aa0b67128471a746af263 --- /dev/null +++ b/libretranslate/locales/lt/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Lithuanian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/lv/LC_MESSAGES/messages.po b/libretranslate/locales/lv/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..e5ddfed3c547c556daa7429c9aa25da809342b51 --- /dev/null +++ b/libretranslate/locales/lv/LC_MESSAGES/messages.po @@ -0,0 +1,737 @@ +# Latvian translations for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 13:03-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: lv \n" +"Language: lv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Nederīgs JSON formāts" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Automātiski noteikt" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Neautorizēts" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Pārāk daudz pieprasījumu ierobežo pārkāpumus" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Nederīga API atslēga" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Lūdzu sazinieties ar servera operatoru, lai iegūtu API atslēgu" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Apmeklējums %(url)s API atslēga" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Lejupvērst:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Nederīgs pieprasījums: trūkst %(name)s parametrs" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Nederīgs pieprasījums: %(name)s parametrs nav skaitlis" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Nederīgs pieprasījums: %(name)s parametram jābūt > %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Nederīgs pieprasījums (%(size)s) pārsniedz teksta limitu (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s nav atbalstīts" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formāts nav atbalstīts" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) nav pieejams kā mērķa valoda no %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Nevar tulkot tekstu: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Šajā serverī ir atslēgts failu tulkojums." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Nederīgs pieprasījums: tukšs fails" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Nederīgs pieprasījums: faila formāts nav atbalstīts" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nederīgs faila nosaukums" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Serverī ir atslēgti ieteikumi." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Angļu" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albāņu" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arābu" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaidžāna" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "BaskuName" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "BengāļuName" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgāru" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Kataloņu" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Ķīniešu" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Ķīniešu (tradicionālie)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Čehu" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dāņu" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holandiešu" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Igauņu" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Somu" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Franču" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galisiešu" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Vācu" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grieķu" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Ebreju" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungāru" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonēziešu" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Īru" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Itāļu" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japānas" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korejiešu" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latviešu" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lietuviešu" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malāvija" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Latviešu" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persiešu" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Poļu" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugāļu" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumāņu" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Krievu" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovāku" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovēņu" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spāņu" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Zviedru" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalogs" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Taizemiešu" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turku" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraņu" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbu" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukraiņu" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vjetnamiešu" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Ielādēt atbalstīto valodu sarakstu" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Valodu saraksts" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "tulkot" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Tulkot tekstu no valodas uz citu" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Tulkots teksts" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Nederīgs pieprasījums" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Tulkošanas kļūda" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Lēnāk" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Konservēti" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Labdien!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Teksts(-i), ko tulkot" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Izcelsmes valodas kods" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Mērķa valodas kods" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "teksts" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Avota teksta formāts:\n" +"* `teksts` - vienkāršs teksts\n" +"* `html` - HTML marķējums\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Vēlamais alternatīvo tulkojumu skaits" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API atslēga" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Tulkot failu no valodas uz citu" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Tulkots fails" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fails, ko tulkot" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Noteikt viena teksta valodu" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Noteikšana" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Noteikšanas kļūda" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Nosakāmais teksts" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Ielādēt priekšpuses īpašos iestatījumus" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "priekšpuses iestatījumi" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "priekšpuse" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Iesniegt ierosinājumu uzlabot tulkojumu" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Panākumi" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Nav atļauts" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Oriģinālais teksts" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Ierosinātais tulkojums" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Oriģināla teksta valoda" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Ierosinātā tulkojuma valoda" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "atsauksmes" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Valodas kods" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Cilvēkam salasāms valodas nosaukums (angliski)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Pamatotie mērķa valodu kodi" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Tulkots(i) teksts(i)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Kļūdas paziņojums" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Palēninājuma iemesls" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Tulkots faila URL" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Ticamības vērtība" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Rakstzīmju ievades ierobežojums šai valodai (-1 norāda, ka nav ierobežojuma)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Priekšpuses tulkošanas noildze" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Vai ir ieslēgta API atslēgu datubāze." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Vai nepieciešama API atslēga." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Vai ir ieslēgta ieteikumu nosūtīšana." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Atbalstīto failu formāts" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Vai iesniegšana bija veiksmīga" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopēt tekstu" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Nevar ielādēt %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Nezināma kļūda" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Nokopēts" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Paldies par korekciju. Ņemiet vērā, ka ierosinājums stāsies spēkā uzreiz." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Valodas nav pieejamas. Vai jūs pareizi uzstādījāt modeļus?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Ierakstiet savā API atslēgā. Ja jums ir nepieciešama API atslēga, " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "nospiediet \"Get API Key\" saiti." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "sazinieties ar servera operatoru." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Bezmaksas un atvērtā pirmkoda mašīntulkošanas API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Bezmaksas un atvērtā pirmkoda mašīntulkošanas API. Self-hosted, bezsaistē " +"spēj un viegli uzstādīt. Palaist savu API serveri tikai dažas minūtes." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "tulkošana" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API dokumenti" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Saņemt API Atslēga" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Uzstādīt API Atslēga" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Mainīt valodu" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Rediģēt" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Slēgt Tumšo/ Gaismu" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Noņemt" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Tulkošanas API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Tulkot tekstu" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Tulkot failus" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Tulkot no" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Maiņvietas avots un mērķa valodas" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Tulkot uz" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tulkojamais teksts" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Dzēst tekstu" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Ieteikt tulkojumu" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Atcelt" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Sūtīt" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Atbalstītie failu formāti:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fails" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Izņemt failu" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Tulkot" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Lejupielādēt" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Pieprasījums" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Atbildes reakcija" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Atvērt pirmkoda mašīnas tulkošanas API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Pašaizliedzies. Bezsaistes Spēj. Viegli iestatīt." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTulkot" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licence:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Izgatavots no %(heart)s līdz %(contributors)s un darbina %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Atbalstītāji" diff --git a/libretranslate/locales/lv/meta.json b/libretranslate/locales/lv/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..d5bd3b2e92745d8b3334599c687a9b4d91cacc92 --- /dev/null +++ b/libretranslate/locales/lv/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Latvian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/mia/LC_MESSAGES/messages.po b/libretranslate/locales/mia/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..133409062d41c74cd36e010f2126b54c69d9f6b6 --- /dev/null +++ b/libretranslate/locales/mia/LC_MESSAGES/messages.po @@ -0,0 +1,746 @@ +# mia translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-07-04 18:09+0000\n" +"Last-Translator: \"Michael R. Lawrence\" \n" +"Language: mia\n" +"Language-Team: Miami " +"\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +#, fuzzy +msgid "Invalid JSON format" +msgstr "moochi eelaamweekaneewiki JSON kiikoo" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "" + +#: libretranslate/app.py:273 +#, fuzzy +msgid "Unauthorized" +msgstr "moochi koteelilo" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Moochi API paahpahaakani" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "weekiyosiko" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, fuzzy, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "maci kiikoo : kiikoo (%(size)s) mihši awikawiko limit (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, fuzzy, python-format +msgid "%(lang)s is not supported" +msgstr "moochi supported" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/mia/meta.json b/libretranslate/locales/mia/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..72ccea11040362f7391f3f5f243a2d6dfd84ad38 --- /dev/null +++ b/libretranslate/locales/mia/meta.json @@ -0,0 +1,4 @@ +{ + "name": "mia", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/ms/LC_MESSAGES/messages.po b/libretranslate/locales/ms/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..d80867509a7caf6c4edf6c98d682890178ddcbcd --- /dev/null +++ b/libretranslate/locales/ms/LC_MESSAGES/messages.po @@ -0,0 +1,754 @@ +# Malay translations for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 13:03-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: ms \n" +"Language: ms\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Format JSON tidak sah" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Autokesan" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Tidak dibenarkan" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Terlalu banyak permintaan yang membatasi pelanggaran" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Kunci API tidak sah" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Sila hubungi operator server untuk mendapatkan kunci API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Lawati WANITA 0 Diambil kunci API %(url)s" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Perlahan:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "" +"Permintaan tidak sah: hilang WANITA 0 Parameter month= yang tidak " +"diketahui akan diabaikan %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" +"Permintaan tidak sah: WANITA 0 Parameter gnona bukanlah sebuah angka " +"%(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Permintaan tidak sah: WANITA 0 parameter harus <= Perancis " +"%(name)s %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Permintaan tidak sah: permintaan (request)WANITA 0) melebihi batas " +"teks (Perancis) %(size)s %(limit)s" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "WANITA 0 Pautan simbolik tidak disokong %(lang)s" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "WANITA 0 Format wourne tidak didukung %(format)s" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"WANITA 0 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( " +"( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( " +"( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (.Perancis) tidak " +"tersedia sebagai bahasa target dari %(sname)s ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( " +"( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( " +"( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( " +"( (.Fiji 3) %(tname)s %(tcode)s %(scode)s" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Tidak dapat menerjemahkan teks: WANITA 0 %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Penerjemahan berkas-berkas translasi tidak aktif pada server ini." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Permintaan tidak sah: fail kosong" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Permintaan tidak sah: format berkas tidak disokong" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nama berkas tidak sah" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Cadang ringan dinonaktifkan pada server ini." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Bahasa Inggris" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albania" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arab" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaijan" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basque" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgaria" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalan" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Perancis" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Bahasa Tionghoa (tradisional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Czech" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Denmark" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Hindia Belanda" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonia" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finlandia" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Perancis" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galisia" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Jerman" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Yunani" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Ibrani" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Hongaria" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Bahasa Indonesia" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Ireland" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italia" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Jepang" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korea" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latvia" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lithuania" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Bahasa Melayu" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norwegia" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persia" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polish" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugis" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumania" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rusia" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovak" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovenia" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spanyol" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Swedish" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turki" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrainian" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbia" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukraina" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnam" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Daftar bahasa yang didukung" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Bahasa" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "terjemahkan" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Terjemahkan teks dari bahasa ke bahasa lain" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Terjemahkan teks" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Permintaan tidak sah" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Kesalahan terjemahan terjemahan terjemahan" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Perlahan" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Diban" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Halo dunia!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Teks untuk diterjemahkan" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kode bahasa sumber" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Kode bahasa sasaran" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "teks" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format teks sumber:\n" +"Teks biasa\n" +"* * `html` - Markup HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Jumlah terjemahan alternatif yang lebih disukai" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Kunci API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Terjemahkan file dari bahasa ke bahasa lain" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Berkas terterjemah terjemahan" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Berkas untuk diterjemahkan" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Kesan bahasa teks tunggal" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Mengesankan" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Kesalahan pengesanan efek" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Teks untuk dideteksi" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Pengaturan spesifik frontend boochi Retrievee" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "pengaturan frontend xahole" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "bagian depan *" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Berikan saran untuk meningkatkan terjemahan" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Sukses" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Tidak berwenang" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Teks Asal" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Terjemahan yang disarankan" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Bahasa Mandarin dari teks asli" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Bahasa dari terjemahan yang disarankan" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "umpan balik tidak merata" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Bahasa" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nama bahasa Human-readable (dalam bahasa Inggris)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Kode bahasa sasaran yang didukung" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Teks Terjemah Terjemahkan" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Pesan kesalahan" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Alasan untuk memperlambat" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL berkas terterjemahan Terjemahkan" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Nilai percaya diri" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Batas input karakter bagi bahasa ini (-1 menunjukkan tidak ada batas)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Terjemahan bahasa Jerman" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Apakah database kunci API diaktifkan." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Apakah anak kunci API diperlukan." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Tidak soal apakah saran - saran yang diajukan diaktifkan." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Format berkas yang didukung" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Apakah pengerahan kata berhasil" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Salin teks" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Tidak dapat memuat WANITA 0 %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Tidak diketahui error" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copied" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Terima kasih atas pembetulanmu. Perhatikan saran tidak akan mengambil efek " +"segera." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "197 bahasa tidak tersedia. Apa kau memasang model dengan benar?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Ketik di kunci API-mu. Jika Anda membutuhkan kunci API, WANITA 0 " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "tekan « Get API Key\" link." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "hubungi operator server." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API Terjemahan Mesin Jerman" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API Terjemahan Mesin Sumber Terbuka dan Bebas Wadah Free dan Open Source. " +"Kepemilikan diri, offline mampu dan mudah diatur. Liat server API sendiri " +"dalam beberapa menit." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "terjemahan fedora" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "afrika" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Dok API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Dapatkan API Kunci" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "API Set Kunci" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Bahasa" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Edit" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Togol mode gelap/cahaya" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "[Salah]" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API Terjemahan Bahasa Indonesia" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Terjemahan" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Terjemahkan Berkas" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Terjemahan dari" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "S Swap sumber dan bahasa target SHAPD" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Terjemahkan kedalam" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Teks untuk diterjemahkan" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Teks Delete" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Saran terjemahan" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Batal" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Kirim" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Format berkas yang didukung:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Berkas" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Mengeluarkan berkas" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Terjemahan" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Muaturun" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Permintaan" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Sambutan" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API Terjemahan Mesin Sumber Terbuka" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Self-Hosted. Kemampuan Luar Talian. Mudah diatur." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lisensi:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Dibuat dengan WANITA 0 Oleh: Perancis Ditenagai oleh " +"%(engine)s %(heart)s %(contributors)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "WANITA 0 Kontributor %(libretranslate)s" diff --git a/libretranslate/locales/ms/meta.json b/libretranslate/locales/ms/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..7e2741ad5e4c8de4d34003ddcc0df9442b62baf0 --- /dev/null +++ b/libretranslate/locales/ms/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Malay", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/nb/LC_MESSAGES/messages.po b/libretranslate/locales/nb/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..3e2a7c7e00b37fdae6195a4ac28bd0b194f723b6 --- /dev/null +++ b/libretranslate/locales/nb/LC_MESSAGES/messages.po @@ -0,0 +1,771 @@ +# Norwegian Bokmål (Norway) translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-03-25 12:01+0000\n" +"Last-Translator: Kaleido Scope \n" +"Language-Team: Norwegian Bokmål \n" +"Language: nb_NO\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Ugyldig JSON-format" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Oppdag automatisk" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Ikke godkjent" + +#: libretranslate/app.py:291 +#, fuzzy +msgid "Too many request limits violations" +msgstr "For mange brudd på forespørselsgrensene" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Ugyldig API-nøkkel" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Kontakt tjeneradministrator for å få API-nøkkel" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Besøk %(url)s for å få en API-nøkkel" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Nedsakking:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Ugyldig forespørsel: manglende %(name)s-parameter" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Ugyldig forespørsel: %(name)s parameteren er ikke et tall" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Ugyldig forespørsel: %(name)s Parameteren må være <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Ugyldig forespørsel: forespørselen (%(size)s) overstiger tekstgrensen " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s støttes ikke" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s-formatet støttes ikke" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) er ikke tilgjengelig som målspråk fra %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Kan ikke oversette tekst: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +#, fuzzy +msgid "Files translation are disabled on this server." +msgstr "Filoversettelse er avskrudd på denne tjeneren." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Ugyldig forespørsel: tom fil" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Ugyldig forespørsel: filformatet støttes ikke" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Ugyldig filnavn" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Forslag er deaktivert på denne tjeneren." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Engelsk" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albansk" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabisk" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Aserbajdsjansk" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baskisk" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgarsk" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalansk" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kinesisk" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kinesisk (tradisjonell)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tsjekkisk" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dansk" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Nederlandsk" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estisk" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finsk" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Fransk" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galicisk" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Tysk" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Gresk" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebraisk" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungarsk" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesisk" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irsk" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiensk" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japansk" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreansk" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latvisk" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litauisk" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norsk" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persisk" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polsk" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugisisk" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumensk" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Russisk" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovakisk" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovensk" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spansk" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Svensk" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thailandsk" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Tyrkisk" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrainsk" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbisk" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrainsk" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamesisk" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Hent liste over støttede språk" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Språkliste" + +#: libretranslate/locales/.swag.py:3 +#, fuzzy +msgid "translate" +msgstr "oversettelse" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Oversett tekst fra ett språk til et annet" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Oversatt tekst" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Ugyldig forespørsel" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Oversettelsesfeil" + +#: libretranslate/locales/.swag.py:8 +#, fuzzy +msgid "Slow down" +msgstr "Sakk ned" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Bannlyst" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hei verden!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tekst(er) å oversette" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kilde-språkkode" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Målspråkkode" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tekst" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "HTML" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format for kildetekst:\n" +" * `text` — klartekst\n" +" * `html` — HTML-oppmerking\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Foretrukket antall alternative oversettelser" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API-nøkkel" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Oversett fil fra ett språk til et annet" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Oversatt fil" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fil å oversette" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Oppdag språk for enkelt tekst" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Oppdagelser" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Oppdagelsesfeil" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Tekst å oppdage" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Hent skjermflate-spesifikke innstillinger" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "skjermflate-innstillinger" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "skjermflate" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Send inn et forslag om forbedring av en oversettelse" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Vellykket" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Ikke godkjent" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Opprinnelig tekst" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Foreslått oversettelse" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Originaltekstens språk" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Språk for foreslått oversettelse" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "tilbakemelding" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Språkkode" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Menneskelesbart språknavn (på engelsk)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Støttede målspråkkoder" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Oversatt(e) tekst(er)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Feilmelding" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Grunn for nedsakking" + +#: libretranslate/locales/.swag.py:43 +#, fuzzy +msgid "Translated file url" +msgstr "Oversatt fil-nettadresse" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Tillitsverdi" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Tegnbegrensning for dette språket (-1 indikerer ingen grense)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Tidsavbrudd for skjermflateoversettelse" + +#: libretranslate/locales/.swag.py:47 +#, fuzzy +msgid "Whether the API key database is enabled." +msgstr "Hvorvidt API-nøkkeldatabasen er påskrudd." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Hvorvidt en API-nøkkel kreves." + +#: libretranslate/locales/.swag.py:49 +#, fuzzy +msgid "Whether submitting suggestions is enabled." +msgstr "Hvorvidt innsendelse av forslag tillates." + +#: libretranslate/locales/.swag.py:50 +#, fuzzy +msgid "Supported files format" +msgstr "Støttede filformater" + +#: libretranslate/locales/.swag.py:51 +#, fuzzy +msgid "Whether submission was successful" +msgstr "Hvorvidt innsendelsen var vellykket" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopier tekst" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Kan ikke laste inn %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Ukjent feil" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopiert" + +#: libretranslate/templates/app.js.template:339 +#, fuzzy +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Takk for korrigeringen. Merk at forslaget ikke vil tre i kraft umiddelbart." + +#: libretranslate/templates/app.js.template:463 +#, fuzzy +msgid "No languages available. Did you install the models correctly?" +msgstr "Ingen tilgjengelige språk. Har du installert modellene riktig?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Skriv inn din API-nøkkel. Hvis du trenger en API-nøkkel, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +#, fuzzy +msgid "press the \"Get API Key\" link." +msgstr "trykk på «Hent API-nøkkel»-lenken." + +#: libretranslate/templates/app.js.template:530 +#, fuzzy +msgid "contact the server operator." +msgstr "kontakt tjeneradministratoren." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Fritt maskinoversettelses-API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Fritt maskinoversettelses-API. Selvtjent, mulighet for frakoblet modus, og " +"enkelt oppsett. Kjør din egen API-tjener i løpet av minutter." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "oversettelse" + +#: libretranslate/templates/index.html:11 +#, fuzzy +msgid "api" +msgstr "API" + +#: libretranslate/templates/index.html:67 +#, fuzzy +msgid "API Docs" +msgstr "API-dokumentasjon" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Hent API-nøkkel" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Sett API-nøkkel" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Endre språk" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Rediger" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Slå av/på mørk/lysmodus" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Avslå" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Oversettelses-API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Oversett tekst" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Oversett filer" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Oversett fra" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Bytt kilde- og målspråk" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Oversett til" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tekst å oversette" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Slett tekst" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Foreslå oversettelse" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Avbryt" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Send" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Støttede filformater:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fil" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Fjern fil" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Oversett" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Last ned" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Forespørsel" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Svar" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Fritt maskinoversettelses-API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Selvtjent. Muligheter for frakoblet modus. Enkelt oppsett." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lisens:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Laget med %(heart)s av %(contributors)s og drevet av %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s-bidgragsytere" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamesisk" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Dette offentlige API-et er tiltenkt testing, personlig, eller sjelden bruk. " +#~ "Hvis du vil kjøre et program i produksjon, %(host_server)s, eller " +#~ "%(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "vertstjen din egen tjener" + +#~ msgid "get an API key" +#~ msgstr "hent en API-nøkkel" diff --git a/libretranslate/locales/nb/meta.json b/libretranslate/locales/nb/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..7dd39d7836d62d07fca254573fc8236105c6f7d1 --- /dev/null +++ b/libretranslate/locales/nb/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Norwegian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/nl/LC_MESSAGES/messages.po b/libretranslate/locales/nl/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..041bd16aaf2f652226b64f4721ebb80f1675edd2 --- /dev/null +++ b/libretranslate/locales/nl/LC_MESSAGES/messages.po @@ -0,0 +1,761 @@ +# Dutch translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2025-01-13 08:55+0000\n" +"Last-Translator: Vincenzo van Wijk \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Onjuist JSON-formaat" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Automatisch Detecteren" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Niet bevoegd" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Overschrijding maximaal aantal verzoeken" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Ongeldige API-sleutel" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Neem contact op met de serverbeheerder om een API-sleutel te krijgen" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Ga naar %(url)s om een API-sleutel te krijgen" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Vertraging:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Ongeldig verzoek: %(name)s parameter ontbreekt" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Ongeldig verzoek: %(name)s parameter is geen getal" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Ongeldig verzoek: %(name)s parameter moet zijn %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Ongeldig verzoek: verzoek (%(size)s) overschrijdt tekstlimiet (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s wordt niet ondersteund" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formaat wordt niet ondersteund" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) Is niet beschikbaar als een doeltaal van %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Kan tekst niet vertalen: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Bestanden vertalen is uitgeschakeld op deze server." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Ongeldig verzoek: leeg bestand" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Ongeldig verzoek: bestandsformaat wordt niet ondersteund" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Ongeldige bestandsnaam" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Suggesties zijn uitgeschakeld op deze server." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Engels" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanezen" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabisch" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbeidzjaans" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baskische" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengaals" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgaars" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalaans" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chinees" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Chinees (traditioneel)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tsjechisch" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Deens" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Nederlands" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Ests" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Fins" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Frans" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galicisch" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Duits" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grieks" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebreeuws" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Hongaars" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesisch" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Iers" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiaans" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japans" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreaans" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Lets" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litouws" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Maleis" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Noors" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Perzisch" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Pools" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugees" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Roemeens" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Russisch" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovaaks" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Sloveens" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spaans" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Zweeds" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thais" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turks" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Oekraïens" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Servisch" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Oekraïens" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamees" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Haal de lijst met ondersteunde talen op" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lijst van talen" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "vertaal" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Vertaal tekst van de ene taal naar een andere" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Vertaalde tekst" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Ongeldig verzoek" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Vertaalfout" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Vertraag" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Geband" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hallo wereld!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tekst(en) om te vertalen" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Brontaal code" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Doeltaal code" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tekst" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format of bron sms:\n" +"Plain sms\n" +"HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Voorkeursaantal alternatieve vertalingen" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API sleutel" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Vertaal een bestand van de ene taal naar de andere" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Vertaald bestand" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Bestand om te vertalen" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Vernietig de taal van een enkele sms" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detecties" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Detectie fout" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Tekst om te detecteren" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Verwijder de frontend specifieke instellingen" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "frontend instellingen" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Doe een suggestie voor het verbeteren van een vertaling" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Succes" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Niet goedgekeurd" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Originele sms" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Voorgestelde vertaling" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Taal van de oorspronkelijke tekst" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Taal van de voorgestelde vertaling" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "feedback" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Taalcode" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Menselijke taalnaam (in Engels)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Codes van ondersteunde doeltalen" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Vertaald bericht" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Foutmelding" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Reden voor vertraging" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL van het vertaalde bestand" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Vertrouwelijke waarde" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Character input limiet voor deze taal" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Frontend vertaling time-out" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Of de API-sleutel database in staat is." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Of een API-sleutel nodig is." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Of het indienen van suggesties in staat is." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Ondersteunde bestandsformaten" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Of het nu succesvol was" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Tekst kopiëren" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Kan niet laden %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Onbekende fout" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Gekopieerd" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Bedankt voor je correctie. Let op dat de suggestie niet meteen zal werken." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Geen talen beschikbaar. Heb je de modellen correct geïnstalleerd?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Voer je API-sleutel in. Als je een API-sleutel nodig hebt, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "druk op de \"Get API Key\" link." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "neem contact op met de server." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Vrij en open source Machine Vertaling" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Vrij en open source Machine Vertaling API. Self-hosted, offline capabel en " +"makkelijk te koppelen. Laat je eigen API-server binnen een paar minuten." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "vertaling" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docmentatie" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Haal API Sleutel" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "API-sleutel instellen" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Taal wijzigen" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Bewerk" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Schakelen tussen donker/lichtmodus" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Verwerpen" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Vertaling API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Vertaal Tekst" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Vertaal Bestanden" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Vertaal uit" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Verwissel bron- en doeltalen" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Vertaal naar" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Text om te vertalen" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Tekst verwijderen" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Vertaling voorstellen" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Annuleren" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Versturen" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Ondersteunde bestandsformaten:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Bestand" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Verwijder bestand" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Vertaal" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Download" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Verzoek" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Antwoord" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open source Machine Vertaling API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Zelf gehost. Offline Capable. Makkelijk te configureren." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licentie:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Gemaakt met %(heart)s door %(contributors)s Emmet de kracht van %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Bijdragers" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamees" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Deze publieke API moet worden gebruikt voor testen, persoonlijk of " +#~ "infrequent gebruik. Als je een applicatie in productie laat lopen, dan aub " +#~ "%(host_server)s of... %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "host je eigen server" + +#~ msgid "get an API key" +#~ msgstr "verkrijg een API sleutel" diff --git a/libretranslate/locales/nl/meta.json b/libretranslate/locales/nl/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..5a776a4235b19c13a31c221f3f42e59b6822cfbe --- /dev/null +++ b/libretranslate/locales/nl/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Dutch", + "reviewed": true +} diff --git a/libretranslate/locales/nn/LC_MESSAGES/messages.po b/libretranslate/locales/nn/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..be717c8b5852701487d87b9c5a123557a83cc340 --- /dev/null +++ b/libretranslate/locales/nn/LC_MESSAGES/messages.po @@ -0,0 +1,745 @@ +# Norwegian Nynorsk translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-03-25 12:01+0000\n" +"Last-Translator: Kaleido Scope \n" +"Language: nn\n" +"Language-Team: Norwegian Nynorsk " +"\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Ugyldig JSON-format" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Oppdag automatisk" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Ikkje godkjent" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "For mange førespurnadar" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Ugyldig API-nykel" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Ta kontakt med sørvaradministrator for å få API-nykel" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Besøk %(url)s for å få ein API-nykel" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Nedbremsing:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Ugyldig førespurnad: manglande %(name)s-parameter" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Engelsk" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabisk" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azeri" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Mandarin" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tjekkisk" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dansk" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Nederlandsk" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finsk" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Fransk" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Tysk" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Gresk" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebraisk" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungarsk" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesisk" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irsk" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiensk" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japansk" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreansk" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Farsi" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polsk" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugisisk" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Russisk" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovakisk" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spansk" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Svensk" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Tyrkisk" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrainsk" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Hent liste over støtta språk" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Språkliste" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Omset tekst frå eit språk til eit anna" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Omsette tekst" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Ugyldig førespurnad" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Omsetningsfeil" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Senk farten" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Utestengd" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hei verda!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tekst til omsetning" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamesisk" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/nn/meta.json b/libretranslate/locales/nn/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..cf3777d668ecec77ab0234b93df9e6bb57c01ef6 --- /dev/null +++ b/libretranslate/locales/nn/meta.json @@ -0,0 +1,4 @@ +{ + "name": "nn", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/oc/LC_MESSAGES/messages.po b/libretranslate/locales/oc/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..b53f55c203cc51f3f8753c1696aeb531252c0793 --- /dev/null +++ b/libretranslate/locales/oc/LC_MESSAGES/messages.po @@ -0,0 +1,763 @@ +# Occitan translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-11-29 04:07+0000\n" +"Last-Translator: Quentin PAGÈS \n" +"Language-Team: Occitan \n" +"Language: oc\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Format JSON invalid" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Deteccion automatica" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Pas permés" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Tròp de despassament de limit de requèstas" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Clau API invalida" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Mercés de contactar l’operator del servidor per obténer una clau API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Consultatz %(url)s per obténer una clau API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Alentissètz :" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Requèsta invalida : paramètre %(name)s mancant" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Requèsta non valabla: lo paramètre %(name)s es pas un nombre" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Demanda non valida : requèsta (%(size)s) despassa lo limit de tèxte " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s es pas pres en carga" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Format %(format)s pas pres en carga" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) es pas disponible coma lenga cibla de %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Impossible de traduire lo tèxte : %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "La traduccion de fichièrs es desactivada sus aqueste servidor." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Requèsta invalida : fichièr void" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Requèsta invalida : format de fichièr pas pres en carga" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nom de fichièr invalida" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Las suggestions son desactivadas sus aqueste servidor." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Anglés" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabi" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azèri" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basc" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalan" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chinés" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Mandarin (tradicional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Chèc" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danés" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Neerlandés" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finés" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francés" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Alemand" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grèc" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Ebrèu" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Indi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ongrés" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesian" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandés" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italian" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonés" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Corean" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persan" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polonés" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugués" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romanés" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rus" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Eslovac" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Espanhòl" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Suedés" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turc" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ucraïnian" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Recuperar la lista de las lengas presas en carga" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista de lengas" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traduire" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traduire un tèxte d’una lenga a l’autra" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Tèxte traduch" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Requèsta invalida" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Error de traduccion" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Alentir" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Fòrabandit" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Adieu, lo mond !" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tèxte(s) de traduire" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Còdi de la lenga font" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Còdi de la lenga cibla" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tèxte" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format del tèxt font :\n" +" * `text` - Tèxte brut\n" +" * `html` - Balisatge HTM\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "clau d’API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traduire un fichièr d’una lenga a l’autra" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Fichièr traduch" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fichièr de traduire" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detectar la lenga d’un sol tèxte" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Deteccions" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Error de deteccion" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Tèxte de detectar" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Recuperar los paramètres especifics de l’interfàcia" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "paramètres de l’interfàcia" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "interfàcia" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Sometre una suggestion per melhorar una traduccion" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Succès" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Pas permés" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Tèxte original" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Traduccion suggerida" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Lenga del tèxte original" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Lenga de la traduccion suggerida" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "comentaris" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Còdi lenga" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nom de la lenga lisible per un uman (en anglés)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Còdis de lengas cibla presas en carga" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Tèxte(s) traduch(es)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Messatge d’error" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Rason de l’alentiment" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL del fichièr traduch" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valor de fisança" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Limit d’entrada de caractèrs per aquesta lenga (-1 indica cap de limit)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Expiracion de la traduccion de l’interfàcia" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Indica se la basa de donadas de claus API es activada." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Indica se una clau API es requerida." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Indica se lo mandadís de suggestions es activat." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Fichièrs preses en carga" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Indica se lo mandadís a capitat" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copiar lo tèxte" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Cargament impossible de %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Error desconeguda" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copiat" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Mercés de vòstra correccion. Notatz que la suggestion serà pas presa en " +"compte immediatament." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Cap de lenga pas disponibla. Avètz installats los modèls corrèctament ?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Picatz vòstra clau API. Se vos cal una clau API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "quichatz lo ligam « Obténer una clau API »." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "contactatz l’operator del servidor." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API de traduccion automatica gratuita e liura" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API de traduccion automatica liura e dobèrta. Auto-albergada, fòra linha," +" de bon installar. Lançatz vòstre pròpri servidor API en qualques " +"minutas." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "traduccion" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Documents API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Obténer clau API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Definir clau API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Cambiar la lenga" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Modificar" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Ignorar" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API de traduccion" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traduire tèxte" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traduire fichièrs" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Traduire a partir de" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Intervertir la lenga font e cibla" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traduire en" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tèxte de traduire" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Suprimir lo tèxte" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Suggerir traduccion" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Anullar" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Enviar" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formats de fichièrs preses en carga :" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fichièr" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Suprimir fichièr" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traduire" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Telecargar" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Requèsta" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Responsa" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API de traduccion automatica liura" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Auto albergat. Pòt foncionar fòra connexion. De bon configurar." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licéncia :" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Concebut amb %(heart)s pels %(contributors)s e propulsat per %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Contributors %(libretranslate)s" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamian" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Aquesta API publica deuriá èsser " +#~ "utilizada per d’ensages, l’utilizacion " +#~ "personala o ocasionala. Se sètz per " +#~ "executar una aplicacion en produccion, " +#~ "se vos plai %(host_server)s o " +#~ "%(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "albergatz vòstre pròpri servidor" + +#~ msgid "get an API key" +#~ msgstr "obténer una clau API" diff --git a/libretranslate/locales/oc/meta.json b/libretranslate/locales/oc/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..b5ed1de0d1678a94c81d9db721284a5923f5936f --- /dev/null +++ b/libretranslate/locales/oc/meta.json @@ -0,0 +1,4 @@ +{ + "name": "oc", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/pa/LC_MESSAGES/messages.po b/libretranslate/locales/pa/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..c5c313990d9e73977791565ae8db06026614ed53 --- /dev/null +++ b/libretranslate/locales/pa/LC_MESSAGES/messages.po @@ -0,0 +1,747 @@ +# Punjabi translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language: pa\n" +"Language-Team: none\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "" + +#~ msgid "Kabyle" +#~ msgstr "" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/pa/meta.json b/libretranslate/locales/pa/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..ce7938244dad3b7e1b02b1cd6dff16aaf65f53d3 --- /dev/null +++ b/libretranslate/locales/pa/meta.json @@ -0,0 +1,4 @@ +{ + "name": "pa", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/pl/LC_MESSAGES/messages.po b/libretranslate/locales/pl/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..c129a65e24782f171ac14281c85e32391d7ca303 --- /dev/null +++ b/libretranslate/locales/pl/LC_MESSAGES/messages.po @@ -0,0 +1,758 @@ +# Polish translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-09-03 16:09+0000\n" +"Last-Translator: Michał Stankiewicz \n" +"Language-Team: Polish \n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Nieprawidłowy format JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Wykryj automatycznie" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Nieautoryzowany" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Przekroczono limit ilości zapytań" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Nieprawidłowy klucz API" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Proszę skontaktować się z operatorem serwera, aby uzyskać klucz API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Przejdź do %(url)s aby uzyskać klucz API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Spowolnienie:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Nieprawidłowe zapytanie: brakuje parametru %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Nieprawidłowe zapytanie: %(name)s parametr nie jest liczbą" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Nieprawidłowe zapytanie: %(name)s parametr musi być < = %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Nieprawidłowe zapytanie: zapytanie (%(size)s) przekracza limit znaków " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s nie jest wspierany" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "format %(format)s nie jest wspierany" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) nie jest dostępny jako język docelowy z języka " +"%(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Nie można przetłumaczyć tekstu: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Tłumaczenie plików jest wyłączone na tym serwerze." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Nieprawidłowe zapytanie: pusty plik" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Nieprawidłowe zapytanie: format pliku nie jest wspierany" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nieprawidłowa nazwa pliku" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Sugestie są wyłączone na serwerze." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Angielski" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albański" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabski" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbejdżański" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baskijski" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengalski" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bułgarski" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Kataloński" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chiński" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Chiński (tradycyjny)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Czeski" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Duński" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holenderski" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estoński" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Fiński" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francuski" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galicyjczyk" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Niemiecki" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grecki" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebrajski" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Węgierski" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonezyjski" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandzki" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Włoski" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japoński" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreański" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Łotwa" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litewski" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malajski" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norweski" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Perski" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polski" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugalski" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumuński" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rosyjski" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Słowacki" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Słoweński" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Hiszpański" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Szwedzki" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalski" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tajski" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turecki" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraiński" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbski" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukraiński" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Wietnamski" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Pobierz listę wspieranych języków" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista języków" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "tłumaczenie" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Tłumaczenie tekstu z jednego języka na inny" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Przetłumaczony tekst" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Nieprawidłowe żądanie" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Błąd tłumaczenia" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Zwolnij" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Zbanowany" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Witaj świecie!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tekst(y) do przetłumaczenia" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kod języka źródłowego" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Kod języka tłumaczenia" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tekst" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format tekstu źródłowego:\n" +"* `text` – zwykły tekst\n" +"* `html' – znaczniki HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Preferowana liczba tłumaczeń alternatywnych" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Klucz API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Tłumaczenie pliku z jednego języka na inny" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Przetłumaczony plik" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Plik do przetłumaczenia" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Wykryj język pojedynczego tekstu" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Wykryto" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Błąd wykrywania" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Tekst do wykrycia" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Pobierz ustawienia frontendu" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "ustawienia frontendu" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Zgłoś sugestię do poprawy tłumaczenia" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Sukces" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Nie autoryzowano" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Oryginalny tekst" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Proponowane tłumaczenie" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Język tekstu oryginalnego" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Język sugerowanego tłumaczenia" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "informacja zwrotna" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Kod języka" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nazwa języka (w języku angielskim)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Wspierane kody językowe" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Przetłumaczone tekst(y)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Błąd" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Powód" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Przetłumaczony url pliku" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Poziom ufności" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Limit znaków dla tego języka (-1 oznacza brak limitu)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Przekroczono czas oczekiwania na tłumaczenie" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Czy baza kluczy API jest włączona." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Czy klucz API jest wymagany." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Umożliwia to, że sugestie mogą być poddane." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Plik multimedialny" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Współzałożycielstwo odniosło sukces" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Tekst Copy" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "ładunek %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Nieznany błąd" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Skopiowano" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "Dzięki korekcji. Zasugerowanie nie będzie realizowane." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Żadne języki nie są dostępne. Czy można poprawnie stosować modele?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Wprowadź swój klucz API. Jeśli potrzebujesz klucza API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "prasa \"Get API Key\" (ang.)." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "skontaktuje się z operatorem serwera." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Free and Open Source Machine Translation API (ang.)" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Free and Open Source Machine Translation API (ang.). Samodzielny, niezdolny " +"i łatwy do położenia. Służysz własny serwer API w ciągu kilku minut." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "transkrypcja" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "API Key" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Ustaw klucz API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Język zmienny" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Edyta" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Przełącz tryb ciemny/jasny" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Dyskusja" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Tłumaczenie API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Przekład" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Translate File" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Przetłumaczenie" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Źródło i języki docelowe" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Przetłumaczyć" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tekst tłumaczenia" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Tekst Delete" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Suggest" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Anuluj" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Send" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formaty plików:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "File" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Usuń plik" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Tłumacz" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Pobierz" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Zapytanie" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Odpowiedź" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open Source Machine Translation API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Self-Hosted (ang.). Offline Capable (ang.). Łatwe do realizacji." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslation" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licencja:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "zrealizować %(heart)s by %(contributors)s zasilany %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Contributor" + +#~ msgid "multipart/form-data" +#~ msgstr "wieloczęściowy/formowy" + +#~ msgid "Vietnamese" +#~ msgstr "Wietnamski" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "To publiczne API powinno być wykorzystywane do testowania, osobistego lub " +#~ "rzadkiego użytku. Jeśli zamierzasz uruchomić aplikację w produkcji, proszę " +#~ "%(host_server)s lub %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "serwer" + +#~ msgid "get an API key" +#~ msgstr "uzyskaj klucz API" diff --git a/libretranslate/locales/pl/meta.json b/libretranslate/locales/pl/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..086ddfbdf4ef8211f451f1f31cee4ba6504f4596 --- /dev/null +++ b/libretranslate/locales/pl/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Polish", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/pt/LC_MESSAGES/messages.po b/libretranslate/locales/pt/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..72e10f7d07771c51ef8ba1560f2137c8275b4ad1 --- /dev/null +++ b/libretranslate/locales/pt/LC_MESSAGES/messages.po @@ -0,0 +1,763 @@ +# Portuguese translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-10-13 13:54+0000\n" +"Last-Translator: João Palmeiro \n" +"Language: pt\n" +"Language-Team: Portuguese " +"\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Formato JSON inválido" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Deteção automática" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Não autorizado" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Muitas violações do limite de requisições" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Chave de API inválida" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Entre em contacto com o operador do servidor para obter uma chave API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Visite %(url)s para obter uma chave API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Devagar:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Pedido inválido: parâmetro %(name)s em falta" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Requisição inválida: o parâmetro %(name)s não é um número" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Requisição inválida: o parâmetro %(name)s deve ser <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Pedido inválido: pedido (%(size)s) excede o limite de texto (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s não é suportado" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formato não é suportado" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) não está disponível como uma linguagem alvo de " +"%(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Não é possível traduzir o texto: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "A tradução de arquivos está desativada neste servidor." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Pedido inválido: arquivo vazio" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Pedido inválido: formato de arquivo não suportado" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nome de arquivo inválido" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Sugestões estão desativadas neste servidor." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Inglês" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanês" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Árabe" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaijão" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Búlgaro" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalão" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chinês" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Chinês (tradicional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Checo" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dinamarquês" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holandês (Países Baixos)" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estoniano" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finlandês" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francês" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Alemão" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grego" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebraico" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Indiano (Hindi)" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Húngaro" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonésio" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandês" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiano" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonês" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Coreano" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letão" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituano" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malaio" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norueguês" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persa" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polonês" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Português" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romeno" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Russo" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Eslovaco" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Esloveno" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Espanhol" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Sueco" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalo" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tailandês" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turco" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ucraniano" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Sérvio" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ucraniano" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamita" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Lista de idiomas suportados" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista de idiomas" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traduzir" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traduzir texto de um idioma para outro" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Texto traduzido" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Requisição inválida" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Erro ao traduzir" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Devagar" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Banido" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Olá, mundo!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Texto(s) para traduzir" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Código da linguagem de origem" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Código do idioma alvo" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "texto" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formato do texto de origem:\n" +"* `text` - Texto simples\n" +"* `html` - marcação HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Número preferido de traduções alternativas" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Chave API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traduzir ficheiro de um idioma para outro" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Ficheiro traduzido" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Ficheiro a traduzir" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detectar a linguagem de um único texto" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detecções" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Erro de deteção" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Texto para detectar" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Recupere configurações específicas do frontend" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "configurações de frontend" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Envie uma sugestão para melhorar uma tradução" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Sucesso" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Não autorizado" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Texto original" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Tradução sugerida" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Idioma do texto original" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Idioma da tradução sugerida" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "retorno" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Código de linguagem" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nome do idioma legível para humanos (em inglês)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Códigos de idioma alvo suportados" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Texto(s) traduzido(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Mensagem de erro" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Motivo da lentidão" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Url do arquivo traduzido" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valor de confiança" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Limite de entrada de caracteres para esta língua (-1 indica sem limite)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Tempo de tradução do frontend" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Se o banco de dados de chave API está ativado." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Se uma chave API é necessária." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Se enviar sugestões está ativado." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Formatos de ficheiros suportados" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Se a submissão foi bem sucedida" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copiar texto" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Não foi possível carregar %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Erro desconhecido" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copiado" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Obrigado por sua correção. Note que a sugestão não terá efeito " +"imediatamente." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Não há idiomas disponíveis. Instalou os modelos corretamente?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Digite sua chave API. Se precisar de uma chave API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "pressione o link \"Obter Chave API\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "contacte o operador do servidor." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API de tradução em máquina gratuita e de código aberto" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API de tradução em máquina gratuita e de código aberto. Auto-hospedável, " +"off-line e fácil de configurar. Execute seu próprio servidor API em " +"apenas alguns minutos." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "tradução" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Documentação API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Obter Chave API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Definir Chave API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Alterar idioma" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Editar" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Alternar o modo escuro/claro" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Dispensar" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API de tradução" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traduzir texto" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traduzir ficheiros" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Traduzir de" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Inverter linguagens de origem e destino" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traduzir para" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Texto para traduzir" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Excluir texto" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Sugerir tradução" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Cancelar" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Enviar" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formatos de ficheiros suportados:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Ficheiro" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Remover ficheiro" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traduzir" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Descarregar" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Pedido" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Resposta" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API de tradução em máquina de código aberto" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Auto-Hospedável. Funciona Offline. Fácil de configurar." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licença:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Feito com %(heart)s por %(contributors)s e alimentado por %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Contribuintes %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamita" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Esta API pública deve ser usada " +#~ "para testes, uso pessoal ou infrequente." +#~ " Se você vai executar uma aplicação" +#~ " em produção, por favor %(host_server)s " +#~ "ou %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "hospede seu próprio servidor" + +#~ msgid "get an API key" +#~ msgstr "obter uma chave API" + diff --git a/libretranslate/locales/pt/meta.json b/libretranslate/locales/pt/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..43e85525e7dbc672de2137a936bb67445ad29e5e --- /dev/null +++ b/libretranslate/locales/pt/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Portuguese", + "reviewed": true +} diff --git a/libretranslate/locales/pt_BR/LC_MESSAGES/messages.po b/libretranslate/locales/pt_BR/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..ae673ee7e5c35aadd910d56e8aac20894babe4bb --- /dev/null +++ b/libretranslate/locales/pt_BR/LC_MESSAGES/messages.po @@ -0,0 +1,766 @@ +# Portuguese (Brazil) translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-11-12 22:23+0000\n" +"Last-Translator: kowih83264 \n" +"Language-Team: Portuguese (Brazil) \n" +"Language: pt_BR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.9-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Formato JSON inválido" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Detecção automática" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Sem autorização" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Muitas violações de limite de solicitação" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Chave de API inválida" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Entre em contato com o operador do servidor para obter uma chave de API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Acesse %(url)s para obter uma chave de API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Devagar:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Solicitação inválida: parâmetro %(name)s ausente" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Solicitação inválida: o parâmetro %(name)s não é um número" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Solicitação inválida: o parâmetro %(name)s deve ser <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Solicitação inválida: a solicitação (%(size)s) excede o limite de texto " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s não é suportado" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "O formato %(format)s não é suportado" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) não está disponível como idioma da tradução em " +"%(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Não é possível traduzir o texto: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "A tradução de arquivos está desativada neste servidor." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Solicitação inválida: arquivo vazio" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Solicitação inválida: formato de arquivo não suportado" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nome de arquivo inválido" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "As sugestões estão desativadas neste servidor." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Inglês" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanês" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Árabe" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaijano" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basco" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Búlgaro" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalão" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chinês" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Chinês (tradicional)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tcheco" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dinamarquês" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holandês" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estoniano" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finlandês" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francês" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galego" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Alemão" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grego" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebraico" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Húngaro" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonésio" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandês" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiano" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonês" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Coreano" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letão" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituano" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malaio" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norueguês" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persa" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polonês" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Português" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romeno" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Russo" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Eslovaco" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Esloveno" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Espanhol" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Sueco" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalo" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tailandês" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turco" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ucraniano" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Sérvio" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ucraniano" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamita" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Recuperar lista de idiomas suportados" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista de idiomas" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "tradução" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traduz texto de um idioma para outro" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Texto traduzido" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Solicitação inválida" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Erro de tradução" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Devagar" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Banido" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Olá, mundo!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Texto(s) para traduzir" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Código do idioma do texto original" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Código do idioma da tradução" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "texto" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formato do texto original:\n" +"* `text` - Texto simples\n" +"* `html` - Marcação HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Número preferido para traduções alternativas" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Chave de API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traduz arquivo de um idioma para outro" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Arquivo traduzido" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Arquivo a ser traduzido" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detecta o idioma de um único texto" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detecções" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Erro de detecção" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Texto a ser detectado" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Recuperar configurações específicas do front-end" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "configurações de front-end" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "front-end" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Envie uma sugestão para melhorar uma tradução" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Sucesso" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Não autorizado" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Texto original" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Tradução sugerida" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Idioma do texto original" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Idioma da tradução sugerida" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "feedback" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Código do idioma" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Nome do idioma legível por humanos (em Inglês)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Códigos de idioma da tradução suportados" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Texto(s) traduzido(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Mensagem de erro" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Razão para desacelerar" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL do arquivo traduzido" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valor da confiança" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Limite de entrada de caracteres para este idioma (-1 indica que não há " +"limite)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Tempo limite de tradução do front-end" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Se o banco de dados de chaves de API está ativado." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Se é necessária uma chave de API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Se o envio de sugestões está ativado." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Formato de arquivos suportados" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Se o envio foi bem-sucedido" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copiar texto" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Não é possível carregar %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Erro desconhecido" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copiado" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Obrigado pela sua correção. Observe que a sugestão não entrará em vigor " +"imediatamente." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Nenhum idioma disponível. Você instalou os modelos corretamente?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Digite sua chave de API. Se você precisar de uma chave de API, " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "clique no link \"Obter chave de API\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "entre em contato com o operador do servidor." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API de Tradução Automática Livre e de Código Aberto" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API de Tradução Automática Livre e de Código Aberto. Auto-hospedado, " +"também funciona offline e fácil de configurar. Execute seu próprio " +"servidor de API em apenas alguns minutos." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "tradução" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "API" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Documentação da API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Obter chave de API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Definir chave de API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Alterar idioma" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Editar" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Alternar modo claro/escuro" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Descartar" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API de Tradução" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traduzir Texto" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traduzir Arquivos" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Traduzir de" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Inverter idiomas do texto original e da tradução" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traduzir para" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Texto a ser traduzido" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Apagar texto" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Sugerir tradução" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Cancelar" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Enviar" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formatos de arquivo suportados:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Arquivo" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Remover arquivo" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traduzir" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Download" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Solicitação" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Resposta" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API de Tradução Automática de Código Aberto" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Auto-hospedável. Funciona offline. Fácil de configurar." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licença:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Feito com %(heart)s por %(contributors)s e desenvolvido por %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Colaboradores" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamita" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Esta API pública deve ser usada " +#~ "para testes, uso pessoal ou pouco " +#~ "frequente. Se for executar uma aplicação" +#~ " em produção, por favor, %(host_server)s" +#~ " ou %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "hospede seu próprio servidor" + +#~ msgid "get an API key" +#~ msgstr "obtenha uma chave de API" diff --git a/libretranslate/locales/pt_BR/meta.json b/libretranslate/locales/pt_BR/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..a5c27199b92de984f4c0ff97494a3e66ae9dc51e --- /dev/null +++ b/libretranslate/locales/pt_BR/meta.json @@ -0,0 +1,4 @@ +{ + "name": "pt_BR", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/ro/LC_MESSAGES/messages.po b/libretranslate/locales/ro/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..13d7803a1c500f8f17f0942d93aa510189cbee3a --- /dev/null +++ b/libretranslate/locales/ro/LC_MESSAGES/messages.po @@ -0,0 +1,759 @@ +# Romanian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2023-02-27 19:38+0000\n" +"Last-Translator: Simona Iacob \n" +"Language-Team: Romanian \n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Format JSON invalid" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Detectare automată" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Neautorizat" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Prea multe încălcări ale limitelor de solicitare" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Cheie API invalidă" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" +"Vă rugăm să contactați operatorul serverului pentru a obține o cheie API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Vizitați %(url)s pentru a obține o cheie API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Încetinire:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Cerere invalidă: lipsește parametrul %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Cerere nevalidă: %(name)s parametrul nu este un număr" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Cerere nevalidă: %(name)s parametrul trebuie să fie > %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Cerere invalidă: cererea (%(size)s) depășește limita de text (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s nu este acceptat" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formatul nu este acceptat" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) nu este disponibilă ca limbă țintă din %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Nu se poate traduce textul: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Traducerea fișierelor este dezactivată pe acest server." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Cerere invalidă: fișier gol" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Cerere invalidă: formatul de fișier nu este acceptat" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nume de fișier invalid" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Sugestiile sunt dezactivate pe acest server." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Engleză" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albaneză" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabă" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaidjan" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basc" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgară" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalană" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Chineză" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Chineză (tradițională)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Cehă" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Daneză" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Olandeză" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estoniană" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finlandeză" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Franceză" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galiciană" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Germană" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Greacă" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Ebraică" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindusă" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Maghiară" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indoneziană" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandezii" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italiană" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japoneză" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Coreeană" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letonia" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituaniană" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malaezia" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norvegiană" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persană" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Poloneză" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugheză" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Română" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rusă" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovacă" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovacă" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spaniolă" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Suedeză" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thailandeză" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turcă" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ucraineană" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Sârbă" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ucraineană" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnameză" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Preluarea listei de limbi acceptate" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Listă de limbi" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "traduceți" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Traduceți text dintr-o limbă în alta" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Text tradus" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Cerere invalidă" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Eroare de traducere" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Încetinește" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Interzis" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Bună ziua lume!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Text(e) de tradus" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Codul limbii sursă" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Codul limbii țintă" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "text" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formatul textului sursă:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Numărul preferat de traduceri alternative" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Cheia API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Traduceți fișierul dintr-o limbă în alta" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Fișier tradus" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fișier de tradus" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detectarea limbii unui singur text" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detecții" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Eroare de detectare" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Text de detectat" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Preluarea setărilor specifice frontend-ului" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "setări frontend" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "partea din față" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Trimiteți o sugestie pentru a îmbunătăți o traducere" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Succes" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Nu este autorizat" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Textul original" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Traducere sugerată" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Limba în care a fost redactat textul original" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Limba de traducere propusă" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "feedback" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Cod de limbă" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Denumirea limbii lizibile de către om (în limba engleză)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Coduri de limbă țintă acceptate" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Text(e) tradus" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Mesaj de eroare" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Motivul încetinirii" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Traducere fișier url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Valoarea de încredere" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Limita de introducere a caracterelor pentru această limbă (-1 indică faptul " +"că nu există limită)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Timeout de traducere frontală" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Dacă este activată baza de date cu chei API." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Dacă este necesară o cheie API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Dacă este activată trimiterea de sugestii." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Formatul fișierelor acceptate" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Dacă depunerea a avut succes" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Copiați textul" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Nu se poate încărca %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Eroare necunoscută" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Copiat" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Vă mulțumim pentru corecție. Rețineți că sugestia nu va avea efect imediat." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Nu există limbi disponibile. Ați instalat corect modelele?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Introduceți cheia API. Dacă aveți nevoie de o cheie API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "apăsați linkul \"Get API Key\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "contactați operatorul serverului." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Gratuit și Open Source Machine Translation API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API de traducere automată gratuită și cu sursă deschisă. Self-hosted, " +"capabil de offline și ușor de configurat. Rulați propriul server API în doar" +" câteva minute." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "traducere" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Obțineți cheia API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Setați cheia API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Schimbați limba" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Editați" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Comută modul întuneric/lumină" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Respingeți" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API de traducere" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Traduceți textul" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Traducere fișiere" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Traducere din" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Schimbați limbile sursă și țintă" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Traduceți în" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Text de tradus" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Ștergeți textul" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Sugerați o traducere" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Anulează" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Trimiteți" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formate de fișiere acceptate:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fișier" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Eliminați fișierul" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Traducere" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Descărcați" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Cerere" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Răspuns" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open Source Machine Translation API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Self-Hosted. Capabil offline. Ușor de instalat." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licență:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Realizat cu %(heart)s de %(contributors)s și propulsat de %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Colaboratori" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnameză" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Această API publică ar trebui să fie utilizată pentru testare, pentru uz " +#~ "personal sau pentru utilizări rare. Dacă aveți de gând să rulați o aplicație" +#~ " în producție, vă rugăm să folosiți %(host_server)s sau %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "găzduiți propriul server" + +#~ msgid "get an API key" +#~ msgstr "obțineți o cheie API" diff --git a/libretranslate/locales/ro/meta.json b/libretranslate/locales/ro/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..c0dd6d6ed3b439f8776bf67fa3f3e75ee5e8c020 --- /dev/null +++ b/libretranslate/locales/ro/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Romanian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/ru/LC_MESSAGES/messages.po b/libretranslate/locales/ru/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..a0c6a2bb12704015f289f2beb7f00f24f442bb9d --- /dev/null +++ b/libretranslate/locales/ru/LC_MESSAGES/messages.po @@ -0,0 +1,769 @@ +# Russian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2025-01-19 00:28+0000\n" +"Last-Translator: Blueberry \n" +"Language-Team: Russian \n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Неверный формат JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "[автоопределение языка]" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Не авторизовано" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Слишком много нарушений предела запроса" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Недействительный ключ API" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Пожалуйста, свяжитесь с оператором сервера, чтобы получить ключ API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Посетите %(url)s для получения ключа API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Притормозите:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Недействительный запрос: отсутствует параметр «%(name)s»" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Неверный запрос: параметр «%(name)s» не является числом" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Неверный запрос: параметр «%(name)s» должен быть <= «%(value)s»" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Недействительный запрос: запрос (%(size)s) превышает ограничение текста " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s не поддерживается" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Формат %(format)s не поддерживается" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) не доступен как целевой язык от %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Не удаётся перевести текст: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Перевод файлов отключён на этом сервере." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Недействительный запрос: пустой файл" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Недействительный запрос: формат файла не поддерживается" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Неверное имя файла" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Предложения отключены на этом сервере." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "английский" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "албанский" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "арабский" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "азербайджанский" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "баскский" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "бенгальский" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "болгарский" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "каталонский" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "китайский" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "китайский (традиционный)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "чешский" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "датский" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "голландский" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "эсперанто" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "эстонский" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "финский" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "французский" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "галисийский" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "немецкий" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "греческий" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "иврит" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "хинди" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "венгерский" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "индонезийский" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "ирландский" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "итальянский" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "японский" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "корейский" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "латвийский" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "литовский" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "малайский" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "норвежский" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "персидский" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "польский" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "португальский" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "румынский" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "русский" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "словацкий" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "словенский" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "испанский" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "шведский" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "тагальский" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "тайский" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "турецкий" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "украинский" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "урду" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "сербский" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "украинский" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "вьетнамский" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Получение списка поддерживаемых языков" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Список языков" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "перевод" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Перевести текст с языка на другой" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Перевод текста" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "При недействительном запросе" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "При ошибке перевода" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "При замедлении" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "При блокировке" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Привет, мир!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Текст для перевода" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Код исходного языка" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Код целевого языка" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "text" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Формат исходного текста:\n" +" * `text` - Простой текст\n" +" * `html` - HTML-разметка\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Желаемое число других переводов" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Ключ API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Перевести файл с языка на другой" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "При переведённом файле" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Файл для перевода" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Обнаружение языка одного текста" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Обнаружения" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "При ошибке обнаружения" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Текст для обнаружения" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Получение конкретных настроек интерфейса (frontend)" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "При настройке интерфейса (frontend)" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Подать предложение для улучшения перевода" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "При отправке" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Если пользователь не авторизован" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Изначальный текст" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Предлагаемый перевод" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Язык изначального текста" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Язык предлагаемого перевода" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "обратная связь" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Языковой код" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Человеческое название языка (на английском)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Поддерживаемые языковые коды" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Перевод текста" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Сообщение ошибки" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Причина замедления" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL переведённого файла" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Уровень достоверности" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Предел вводимых символов для этого языка (-1 не указывает на предел)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Превышаемое время ожидания перевода интерфейса (frontend)" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "При включённой базе данных ключей API." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "При требовании ключа API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "При включённом предложения перевода." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Поддерживаемый формат файлов" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "При отправке предложения" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Копировать текст" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Невозможно загрузить %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Неизвестная ошибка" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Скопировано" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Спасибо за вашу поправку. Обратите внимание, что предложение не будет " +"действовать сразу." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Нет языков. Вы правильно установили модели?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Введите ваш ключ API. Если вам нужен ключ API — %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "нажмите на ссылку «Получить ключ API»." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "связаться с оператором сервера." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Бесплатный и открытый источник машинного перевода с помощью API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Бесплатный и открытый источник машинного перевода с помощью API. " +"Самостоятельный хостинг, возможность работы в автономном режиме и " +"простота настройки. Запустите свой собственный сервер API всего за " +"несколько минут." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "перевод" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Документация API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Получить ключ API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Установить ключ API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Изменить язык" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Изменить" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Переключение тёмного/светлого режима" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Закрыть" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Перевод с помощью API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Перевести текст" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Перевести файлы" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Перевести с" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Поменять местами исходный и целевой языки" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Перевести на" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Текст для перевода" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Удалить текст" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Предложить перевод" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Отмена" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Отправить" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Поддерживаемые форматы файлов:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Файл" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Удалить файл" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Перевести" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Скачать" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Запрос" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Ответ" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API машинного перевода с открытым исходным кодом" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" +"Самостоятельный хостинг. Возможность работы в автономном режиме. Легко " +"настраивается." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Лицензия:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Сделано с %(heart)s благодаря %(contributors)s и работает на %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "участникам, внёсшим вклад в разработку %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-данные" + +#~ msgid "Vietnamese" +#~ msgstr "вьетнамский" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Этот публичный API должен использоваться " +#~ "для тестирования, личного или нечастого " +#~ "использования. Если вы собираетесь запустить" +#~ " приложение в производстве, пожалуйста " +#~ "%(host_server)s или %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "разместите собственный сервер" + +#~ msgid "get an API key" +#~ msgstr "получите ключ API" diff --git a/libretranslate/locales/ru/meta.json b/libretranslate/locales/ru/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..d5ee81d96f572dc32d012a200e91bb97130155af --- /dev/null +++ b/libretranslate/locales/ru/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Russian", + "reviewed": true +} diff --git a/libretranslate/locales/si/LC_MESSAGES/messages.po b/libretranslate/locales/si/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..f918406a605ca3d883a5b5d63aa15bc59a9a1a0e --- /dev/null +++ b/libretranslate/locales/si/LC_MESSAGES/messages.po @@ -0,0 +1,746 @@ +# Sinhala translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2023-07-27 07:54+0000\n" +"Last-Translator: Overplant Poster " +"\n" +"Language: si\n" +"Language-Team: Sinhala " +"\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "ඉංග්‍රීසි" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "අරාබි" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "චීන" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "ප්‍රංශ" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "ජර්මානු" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "ග්‍රීක" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "හින්දි" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "ඉතාලි" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "ජපන්" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "කොරියානු" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "රුසියානු" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "භාෂා ලැයිස්තුව" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "යෝජිත පරිවර්තනය" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "යෝජිත පරිවර්තනයේ භාෂාව" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "භාෂා කේතය" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "බලපත්‍රය:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/si/meta.json b/libretranslate/locales/si/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..72e0a9348dfe9cb6812ce0b9c84cb36dc4fbea41 --- /dev/null +++ b/libretranslate/locales/si/meta.json @@ -0,0 +1,4 @@ +{ + "name": "si", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/sk/LC_MESSAGES/messages.po b/libretranslate/locales/sk/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..303ffae009a534fcf160d2c41ac3eca08b8b90a3 --- /dev/null +++ b/libretranslate/locales/sk/LC_MESSAGES/messages.po @@ -0,0 +1,758 @@ +# Slovak translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-11-05 12:00+0000\n" +"Last-Translator: Milan Šalka \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" +"X-Generator: Weblate 5.8.2\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Neplatný formát JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Auto Detect" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Neoprávnené" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Príliš veľa porušení limitov žiadostí" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Neplatný API kľúč" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Prosím, kontaktujte operátora servera, aby ste dostali kľúč API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Návšteva %(url)s získať API kľúč" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Spomaľovanie:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Neplatná požiadavka: chýba %(name)s parameter" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Neplatná požiadavka: %(name)s parameter nie je číslo" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Neplatná požiadavka: %(name)s parameter musí byť <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Neplatná požiadavka: žiadosť (%(size)s) presahuje limit textu (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s nie je podporovaný" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s formát nie je podporovaný" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s ()%(tcode)s) nie je k dispozícii ako cieľový jazyk od %(sname)s " +"()%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Nemožno preložiť text: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Preklady sú zakázané na tomto serveri." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Neplatná požiadavka: prázdny súbor" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Neplatná požiadavka: formát súboru nie je podporovaný" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Neplatné meno" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Návrhy sú zakázané na tomto serveri." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Angličtina" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albánsko" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabčina" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaština" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Všeobecný" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengálčina" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulharšťina" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalánsky" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Čínske" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Čínština (tradičná)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Čeština" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Dánčina" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Dánština" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estónčina" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Fínština" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francúzština" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galský" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Nemčina" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Gréčtina" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebrejčina" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Madarčina" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonézske" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Írština" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Taliančina" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonština" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Kórejština" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Litvinština" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litovčina" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Zuzana" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Nórština" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Perzština" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polština" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugalština" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumunčina" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ruština" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovenčina" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovinčina" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Španiečina" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Švédština" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thajské" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turečtina" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrajinčina" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Srbština" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrajinčina" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamčina" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Zdroj podporovaných jazykov" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Zoznam jazykov" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "preložiť" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Preložiť text z jazyka do druhého" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Preklad" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Neplatná požiadavka" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Chyba prekladu" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Spomaľte" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Zakázané" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Dobrý deň, svet!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Text(y) na preloženie" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kód zdrojového jazyka" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Kód cieľového jazyka" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "text" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formát zdrojového textu:\n" +" * `text` - Jednoduchý text\n" +" * `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Preferovaný počet alternatívnych prekladov" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API kľúč" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Preložiť súbor z jedného jazyka do iného" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Preložený súbor" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Súbor na preloženie" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detegovať jazyk jedného kusu textu" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detekcie" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Chyba detekcie" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Text na detekciu" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Získať nastavenia špecifické pre rozhranie" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "Nastavenia rozhrania" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Poslať návrh na zlepšenie prekladu" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Úspech" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Chýba oprávnenie" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Pôvodný text" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Navrhnutý preklad" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Jazyk pôvodného textu" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Jazyk navrhovaného prekladu" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "spätná väzba" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Kód jazyka" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Ľudské meno jazyka (v angličtine)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Podporované cieľové jazykové kódy" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Preložený text(y)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Chybová správa" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Dôvod spomalenia" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Url preloženého súboru" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Miera istoty" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Limit vloženia znakov pre tento jazyk (-1 označuje žiadny limit)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Časový limit prekladu rozhrania" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Či je povolená databáza API kľúčov." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Či je potrebný API kľúč." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Či je povolené posielanie návrhov." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Podporovaný formát súborov" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Či bolo podanie úspešné" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopírovať text" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Nemožno načítať %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Neznáma chyba" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Skopírované" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "Vďaka za vašu korekciu. Všimnite si, že návrh nebude mať vplyv hneď." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "K dispozícii nie sú žiadne jazyky. Nainštalovali ste modely správne?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Zadajte svoje API kľúč. Ak potrebujete kľúč API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "stlačte odkaz „Get API Key“." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "kontaktujte operátora servera." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Zadarmo a Open Source strojový preklad API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Zadarmo a Open Source strojového prekladu API. Seba-hosted, offline schopný " +"a ľahko nastaviť. Spustite svoj vlastný server API za pár minút." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "preklad" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API dokumentácia" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Získať API kľúč" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Nastaviť API kľúč" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Zmeniť jazyk" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Upraviť" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Toggle tmavý / svetelný režim" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Odmietnuť" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Prekladové API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Preložiť text" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Preložiť súbory" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Preložiť z" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Zameniť zdrojový a cieľový jazyk" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Preložiť do" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Text na preloženie" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Odstrániť text" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Navrhnúť preklad" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Zrušiť" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Odoslať" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Podporované formáty súborov:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Súbor" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Odstrániť súbor" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Preložiť" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Stiahnuť" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Žiadosť" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Odpoveď" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open Source strojového prekladu API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Samostatne. Offline Capable. Jednoduché nastavenie." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licencia:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Vyrobené s %(heart)s za pomoci %(contributors)s a poháňaný %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Prispievatelia" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/formátové údaje" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamčina" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Toto verejné API by malo byť použité pre testovanie, osobné alebo zriedkavé " +#~ "použitie. Ak sa chystáte spustiť aplikáciu vo výrobe, prosím %(host_server)s" +#~ " alebo %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "hostiť svoj vlastný server" + +#~ msgid "get an API key" +#~ msgstr "získať API kľúč" diff --git a/libretranslate/locales/sk/meta.json b/libretranslate/locales/sk/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..f8c255d7c93b9e2a4a1796c6c46a7f5813f4f5f6 --- /dev/null +++ b/libretranslate/locales/sk/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Slovak", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/sl/LC_MESSAGES/messages.po b/libretranslate/locales/sl/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..101537710b29d8fa50a079f9af65ab3d77e2ae68 --- /dev/null +++ b/libretranslate/locales/sl/LC_MESSAGES/messages.po @@ -0,0 +1,736 @@ +# Slovenian translations for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 13:03-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sl \n" +"Language: sl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Neveljavna oblika JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Samodejno zaznaj" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Nepooblaščen" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Preveč zahtevkov omejuje kršitve" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Neveljaven ključ API" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Prosimo kontaktirajte operaterja strežnika, da dobite API ključ" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Obisk %(url)s dobiti API ključ" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Upočasni:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Neveljaven zahtevek: manjka %(name)s parameter" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Neveljavna zahteva: %(name)s parameter ni številka" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Neveljavna zahteva: %(name)s Parameter mora biti pomanjkljiv %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Neveljavna zahteva: zahteva (%(size)s) presega mejo besedila (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s ni podprto" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s oblika ni podprta" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) ni na voljo kot ciljni jezik %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Ni moč prevesti besedila: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Prevajanje datotek je onemogočeno na tem strežniku." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Neveljavna zahteva: prazna datoteka" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Neveljaven zahtevek: oblika datoteke ni podprta" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Neveljavno ime datoteke" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Predlogi so onemogočeni na tem strežniku." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Angleščina" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "AlbanskoName" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabščina" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbajdžan" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "BaskovskoName" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengalska" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bolgarščina" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalonščina" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kitajska" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kitajska (tradicionalna)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Češka" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danski" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Nizozemska" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonščina" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finska" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francoski" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galščina" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Nemščina" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grščina" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebrejsko" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Madžarska" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonezijski" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irska" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italijanska" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonka" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korejska" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latvijščina" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litva" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norveška" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Perzijščina" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Poljska" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugalščina" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romunska" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ruščina" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovaščina" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovenski" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Španščina" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Švedska" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tajska" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turška" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukranian" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Srbska" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrajinski" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamec" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Pridobi seznam podprtih jezikov" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Seznam jezikov" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "prevedi" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Prevedi besedilo iz jezika v jezik" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Prevedeno besedilo" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Neveljavna zahteva" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Napaka pri prevajanju" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Počasi" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Prepovedano" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Pozdravljen svet!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Besedilo za prevajanje" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Koda izvornega jezika" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Oznaka ciljnega jezika" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "besedilo" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Oblika izvornega besedila:\n" +"* `besedilo' - navadno besedilo\n" +"* `html' - pribitek HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Prednostna številka alternativnih prevodov" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Ključ API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Prevedi datoteko iz jezika v drug jezik" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Prevedena datoteka" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Datoteka za prevajanje" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Zaznaj jezik enega besedila" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Odkrivanje" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Napaka pri odkrivanju" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Besedilo za odkrivanje" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Pridobi posebne nastavitve za prednji konec" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "nastavitve prednjega okna" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "začelje" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Predloži predlog za izboljšanje prevoda" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Uspeh" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Ni dovoljeno" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Originalno besedilo" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Predlagani prevod" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Jezik izvirnega besedila" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Jezik predlaganega prevajanja" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "povratne informacije" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Jezikovna koda" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Ime jezika, ki ga je mogoče brati (v angleščini)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Podprte ciljne jezikovne kode" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Prevedena besedila" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Sporočilo o napaki" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Razlog za upočasnitev" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Prevedena datoteka url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Vrednost zaupanja" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Omejitev vnosa znakov za ta jezik (-1 označuje brez omejitve)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Zakasnitev prevajanja v začetku" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Ali je omogočena zbirka ključev API." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Ali je potreben ključ API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Ali je predlog omogočen." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Oblika podprtih datotek" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Ali je bila vloga uspešna" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopiraj besedilo" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Ni moč naložiti %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Neznana napaka" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopirano" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "Hvala za popravek. Upoštevajte, da predlog ne bo takoj začel veljati." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Jeziki niso na voljo. Ste pravilno namestili modele?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Vtipkaj svoj API ključ. Če potrebujete API ključ, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "pritisnite » Get API Key«." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "kontaktirajte operaterja strežnika." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Brezplačno in odprtokodno strojno prevajanje API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Brezplačno in odprtokodno strojno prevajanje API. Samo-gostitelj, brez " +"povezave sposoben in enostaven za namestitev. Poženite svoj API strežnik v " +"samo nekaj minutah." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "prevod" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Dobi API Ključ" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Nastavi API Ključ" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Spremeni jezik" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Uredi" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Preklopi temen/lahek način" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Prosto" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Prevod API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Prevedi besedilo" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Prevedi datoteke" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Prevedi iz" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Zamenjaj izvorne in ciljne jezike" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Prevedi v" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Besedilo za prevajanje" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Zbriši besedilo" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Predlog za prevod" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Prekliči" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Pošlji" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Podprti formati datotek:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Datoteka" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Odstrani datoteko" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Prevedi" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Prenesi" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Zahtevek" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Odziv" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API za prevajanje odprtokodnega stroja" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Samosvoj. Nesposobna. Enostavna nastavitev." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibrePrevajanje" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licenca:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Narejeno z %(heart)s z %(contributors)s in napajajo %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Prispevki" diff --git a/libretranslate/locales/sl/meta.json b/libretranslate/locales/sl/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..9e715251b64f259bd0ad33d2ba1c9c2fc8d7e0ee --- /dev/null +++ b/libretranslate/locales/sl/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Slovenian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/sq/LC_MESSAGES/messages.po b/libretranslate/locales/sq/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..a980ed068daaa96e40a72ee163a5f2901e1ba866 --- /dev/null +++ b/libretranslate/locales/sq/LC_MESSAGES/messages.po @@ -0,0 +1,752 @@ +# Albanian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: sq\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Format i pavlefshëm JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Auto" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "I paautorizuar" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Tepër kërkojnë shkelje të kufizimeve" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Kyç i pavlefshëm" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Vihu në kontakt me operatorin e serverit për të marrë një kyç API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Vizitim %(url)s merr a" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Ngadalë:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Kërkesë e pavlefshme: mungon %(name)s Parametër" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Kërkesë e pavlefshme: %(name)s nuk a" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Kërkesë e pavlefshme: %(name)s Parametri duhet të jetë <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Kërkesë e pavlefshme: (%(size)s) tejkaloi kufirin e tekstit (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s nuk suportohet" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s Format i pasuportuar" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "%(tname)s (%(tcode)snuk është a %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "I pamundur përkthimi i tekstit: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "File në server j." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Kërkesë e pavlefshme: file bosh" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Kërkesë e pavlefshme: Format i pasuportuar file" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Emri" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Propozimet në këtë server janë të çaktivizuar." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Anglisht" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Shqip" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabisht" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaixhani" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baske" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bullgarisht" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalane" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kineze" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kineze" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Çekisht" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danisht" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Hollandeze" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonisht" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finlandeze" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Frengjisht" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galiciani" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Gjermanisht" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Greqisht" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebraike" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Hungarisht" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indoneziane" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandeze" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italisht" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonisht" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreane" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letonisht" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Lituaniane" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norvegjeze" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persiane" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polonisht" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugalisht" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumanisht" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rusisht" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Sllovak" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Sllovene" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spanjisht" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Suedisht" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tailandeze" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turqisht" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraneze" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbe" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "UkrahinaseHebrew, Visual" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnameze" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Duke marrë listën e gjuhëve të suportuara" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista e gjuhëve" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "për" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Përkthe tekstin nga një gjuhë në një tjetër" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Teksti i përkthyer" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Kërkesë e pavlefshme" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Gabim në përkthimin" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Ngadalë" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Ndaluar" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Përshëndetje botë!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Teksti" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kodi i gjuhës së buruesit" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Objektivi kodi" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tekst" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Formati i tekstit burim:\n" +"* tekst i thjeshtë\n" +"* Hhtml-Spanj HTML\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Numri i preferuar i përkthimeve alternative" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Pulsanti API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Përkthe skedarët nga një gjuhë tek tjetra" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Përkther file" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "File nga" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Dekto gjuhën e një teksti të vetëm" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Deteksione" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Gabim në shmangje" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Teksti që duhet zbuluar" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Duke marrë rregullimet e prezgjedhura" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "parametrat" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "A" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Me sukses" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Nuk është i autorizuar" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Tekst origjinal" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Sugjerim për përkthimin" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Gjuha e tekstit origjinal" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Gjuha e përkthimit të sugjeruar" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "release" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Kodi i gjuhës" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Emri i gjuhës së lexueshme (në anglisht)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Kodi i gjuhës së synuar" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Përkthehet teksti" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Gabim" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Arsye për të ngadalësuar" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Përktheu file url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Vlera e besimit" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Për nuk" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Ndërfaqe" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Tregon nëse është aktivizuar databaza e kyçit API." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Nëse nevoitet një kyç API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Nëse është aktivuar paraqitja e sugjerimeve." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Format i suportuar files" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Nëse nënshtrimi ishte i suksesshëm" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopjo tekstin" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "I pamundur ngarkimi %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Gabim i panjohur" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopjuar" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Faleminderit për korrigjimin. Vër re se sugjerimi nuk do të ndikojë " +"menjëherë." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Asnjë gjuhë në dispozicion. I instalove mirë modelet?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Lloji në çelësin tuaj API. Nëse ju duhet një çelës API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "shtyp lidhjen \"Merr API.\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "kontaktoni operatorin e serverit." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Translation falas dhe i hapur i makinave" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Translation i Makinave Free dhe Open. Vetë-pritur, jashtë linje i aftë dhe i" +" lehtë për t'u krijuar. Zbatoni serverin tuaj API për pak minuta." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "përkthimi" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Merr API Kenia" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Vendose Kenia" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Ndrysho gjuhën" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Ndrysho" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Kavo" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Të këqijat" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Përkthimi" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Përkthe tekstin" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Përkthe files" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Përkthe nga" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Dhe" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Përkthe në" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Teksti që duhet përkthyer" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Fshi tekstin" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Sugjerim për përkthimin" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Anullo" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Dërgo" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Formatet e suportuar të file:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "File" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Hiq file" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Përkthe" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Shkarkimi" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Kërkesë" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Përgjigje" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Përkthimi i Makinës Burimit" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "E vetmuar. Jashtë Kapit. E lehtë për t'u rregulluar." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "Libre Translate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Liçenca:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "E bërë me %(heart)s nga %(contributors)s Dhe fuqizuar nga %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Ndihmuan" + +#~ msgid "Vietnamese" +#~ msgstr "" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" diff --git a/libretranslate/locales/sq/meta.json b/libretranslate/locales/sq/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..b3cfa9fe1906f6190d31f54a34ae76dc017aa621 --- /dev/null +++ b/libretranslate/locales/sq/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Albanian", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/sr/LC_MESSAGES/messages.po b/libretranslate/locales/sr/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..47375c6d839167f29b2c97cfbf6e92c69450c63c --- /dev/null +++ b/libretranslate/locales/sr/LC_MESSAGES/messages.po @@ -0,0 +1,761 @@ +# Serbian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2025-01-15 11:58+0000\n" +"Last-Translator: Lav Rottweiler \n" +"Language-Team: Serbian \n" +"Language: sr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Nevažeći JSON format" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Auto Detekcija" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Neovlašćeno" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Previše zahteva i kršenja ograničenja" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Nevažeći API ključ" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Kontaktirajte operatera servera da dobijete API ključ" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Posetite %(url)s da bi ste dobili API ključ" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Uspori:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Nevažeći zahtev: nedostaje parametar %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Nevažeći zahtev: parametar %(name)s nije broj" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Nevažeći zahtev: parametar %(name)s mora biti <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Nevažeći zahtev: zahtev (%(size)s) premašuje ograničenje teksta " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s nije podržan" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s format nije podržan" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) nije dostupan kao ciljni jezik is %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Nije moguće prevesti tekst:%(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Prevođenje fajlova je onemogućeno na ovom serveru." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Nevažeći zahtev: prazan fajl" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Nevažeći zahtev: format fajla nije podržan" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Nepostojeće ime fajla" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Predlozi su onemogućeni na ovom serveru." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Engleski" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanski" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arapski" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbejdžanski" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Baskijski" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengalski" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bugarski" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalonski" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kineski" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kineski (tradicionalni)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Češki" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danski" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holandski" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonski" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finski" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Francuski" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galicijski" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Nemački" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grčki" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebrejski" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Indijski" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Mađarski" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonežanski" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irski" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italijanski" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japanski" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korejski" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latvijski" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litvanski" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malezijski" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norveški" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persijski" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Poljski" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugalski" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumunski" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ruski" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovacki" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovenački" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Španski" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Švedski" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagaloški" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tajlandski" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turski" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukrajinski" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Srpski" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrajnski" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vijetnamski" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Preuzmite listu podržanih jezika" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista jezika" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "prevodi" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Prevedite tekst sa jednog jezika na drugi" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Prevedeni tekst" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Nevažeći upit" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Greška u prevodu" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Uspori" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Zabranjeno" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Zdravo Svete!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Tekst(ovi) za prevod" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Jezik izvornog koda" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Kod ciljnog jezika" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "tekst" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format izvornog teksta:\n" +" * `text` - običan tekst\n" +" * `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Željeni broj alternativnih prevoda" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API ključ" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Prevedite fajl sa jednog jezika na drugi" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Prevedeni fajl" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fajl za prevod" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Detektuj jezik u tekstu" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detekcija" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Greška u detekciji" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Tekst za detekciju" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Preuzmi specifična podešavanja frontenda" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "podešavanja frontenda" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Pošaljite predlog za poboljšanje prevoda" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Uspešno" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Nije dozvoljeno" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Originalni tekst" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Predloženi prevod" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Jezik originalnog teksta" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Jezik predloženog prevoda" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "povratne info" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Jezik koda" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Ime jezika (na engleskom)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Podržani kodovi ciljnog jezika" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Prevedeni tekst(ovi)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Poruka o grešci" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Razlog za usporavanje" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL prevedenog fajla" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Nivo poverenja" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Ograničenje unosa znakova za ovaj jezik (-1 označava da nema ograničenja)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Vremensko ograničenje za prevod na frontendu" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Da li je omogućena baza podataka API ključeva." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Kada je potreban API ključ." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Kada je slanje predloga omogućeno." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Podržani format fajlova" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Da li je podnošenje bilo uspešno" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopiraj teks" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Nije moguće učitati %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Nepoznata greška" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopirano" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "Hvala na ispravci. Imajte na umu da predlog neće odmah stupiti na snagu." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Nema dostupnih jezika. Da li ste pravilno instalirali modele?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Unesite svoj API ključ. Ako vam je potreban API ključ,%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "kliknite na „Preuzmi API ključ“." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "kontaktirajte administratora servera." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Besplatni API za mašinsko prevođenje otvorenog koda" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Besplatni API za mašinsko prevođenje otvorenog koda. Hostovan na vašem " +"serveru, lokalna verzija i jednostavan za podešavanje. Pokrenite " +"sopstveni API server za samo nekoliko minuta." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "prevod" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API dokumentacija" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Nabavite API ključ" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Kreiraj API ključ" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Promeni jezik" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Izmeni" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "tamni/svetli mod" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Odbaci" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API za prevođenje" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Prevedi Tekst" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Prevedi Fajl" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Prevedi iz" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Zamenite izvorni i ciljni jezik" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Prevesti u" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tekst za prevod" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Izbriši tekst" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Predloži prevod" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Otkaži" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Pošalji" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Podržani formati fajlova:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fajl" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Izbriši fajl" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Prevedi" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Preuzmi" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Zahtev" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Odgovor" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API za prevođenje otvorenog koda" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Hostujte sami. Radi i bez internet konekcije. Laka instalacija." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "SlobodniPrevodilac" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licenca:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Napravljen sa %(heart)s, sa %(contributors)s , i pokreće ga %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Saradnici" + +#~ msgid "Vietnamese" +#~ msgstr "Vijetnamski" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Ovaj javni API bi trebalo da se" +#~ " koristi za testiranje, ličnu ili " +#~ "retku upotrebu. Ako nameravate da " +#~ "pokrenete aplikaciju u produkciji, molim " +#~ "vas %(host_server)s ili %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "hostujte svoj server" + +#~ msgid "get an API key" +#~ msgstr "zatraži API ključ" diff --git a/libretranslate/locales/sr/meta.json b/libretranslate/locales/sr/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..e8f8cc4d989bae47bef27330e5e79d4023bd3386 --- /dev/null +++ b/libretranslate/locales/sr/meta.json @@ -0,0 +1,4 @@ +{ + "name": "sr", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/sv/LC_MESSAGES/messages.po b/libretranslate/locales/sv/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..bd6cba5e76c2ce7d5fade9a6ec294a7065bbb2e5 --- /dev/null +++ b/libretranslate/locales/sv/LC_MESSAGES/messages.po @@ -0,0 +1,774 @@ +# Swedish translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2023-03-01 08:36+0000\n" +"Last-Translator: tygyh \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Invalid JSON-format" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Identifiera Automatiskt" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Obehörig" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "För många förfrågningar begränsar överträdelser" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Invalid API nyckel" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Kontakta serveroperatören för att få en API-nyckel" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Besök %(url)s för att få en API-nyckel" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Nedsaktning:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Ogiltig begäran: parametern %(name)s saknas" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" +"Ogiltig begäran: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 parameter är inte ett tal %(name)s" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Ogiltig begäran: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +"0 parameter måste vara ≤ 1 1 %(name)s %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Ogiltig begäran: begäran %(size)s överstiger textgränsen (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s stöds inte" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s-formatet stöds inte" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) är inte tillgängligt som målspråk från %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Kan inte översätta text: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Filöversättning är inaktiverad på denna server." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Ogiltig begäran: tom fil" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Ogiltig begäran: filformat som inte stöds" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Invalid filnamn" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Förslag är inaktiverade på denna server." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Engelska" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanska" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabiska" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbajdzjan" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basket" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgariska" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalanska" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Kinesiska" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Kinesiska (traditionell)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Tjeckien" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danska" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Holländska" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estland" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Finska finska" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Franska franska" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galiker" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Tyska tyska" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Grekiska" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebreiska" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Ungerska" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesiska" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irländska" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italienska Italien" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japansk" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreanska" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Lettland" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litauen" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norska" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persiska" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polska" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portugisiska" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumänien" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ryska" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovakiska" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovenska" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Spanska spanska" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Svenska" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thailändska" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turkiska" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraniska" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbiska" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrainska" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamesiska" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Hämta lista över stödda språk" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Lista över språk" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "översättning" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Översätt text från ett språk till ett annat" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Översatt text" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Ogiltig begäran" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Översättningsfel" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Sakta ner" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Bannad" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Hello världen!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Text(er) att översätta" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Källspråkskod" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Målspråkskod" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "text" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Format för källtext:\n" +"\"text\" - vanlig text\n" +"\"html\" - HTML-märkning\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Föredraget antal alternativa översättningar" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API-nyckel" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Översätt fil från ett språk till ett annat" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Översatt fil" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Fil att översätta" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Upptäck språket i en enda text" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Detektioner" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Detektering fel" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Text att upptäcka" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Hämta frontend specifika inställningar" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "frontend inställningar" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "frontend" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Skicka in ett förslag för att förbättra en översättning" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Framgång" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Inte auktoriserad" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Originaltext" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Föreslagen översättning" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Språk av originaltext" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Språk av föreslagen översättning" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "återkoppling" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Språkkod" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Mänskligt läsbart språknamn (på engelska)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Stödda målspråkskoder" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Översatt text(er)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Felmeddelande" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Reason för slow down" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Översatt fil url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Förtroendevärde" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Teckengräns för detta språk (-1 anger ingen gräns)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Frontend översättning timeout" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Oavsett om API-nyckeldatabasen är aktiverad." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Oavsett om en API-nyckel krävs." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Oavsett om det är möjligt att lämna in förslag." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Stödda filer format" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Oavsett om inlämning var framgångsrik" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopiera text" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Kan inte ladda %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Okänd fel" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopierad" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Tack för din korrigering. Observera att förslaget inte kommer att träda i " +"kraft direkt." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Inga språk tillgängliga. Har du installerat modellerna korrekt?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"Skriv in din API-nyckel. Om du behöver en API-nyckel, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "tryck på länken \"Get API Key\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "kontakta serveroperatören." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Gratis och öppen källkod Maskinöversättning API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Gratis och öppen källkod Maskinöversättning API. Självvärd, offline kapabel " +"och lätt att installera. Kör din egen API-server på bara några minuter." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "översättning" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Få API Nyckeln" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Ställ in API Nyckeln" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Ändra språk" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Redigera" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Växla mörkt/ljusläge" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Avfärda" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Översättning API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Översätt text" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Översätt filer" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Översättning från" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Swap källa och målspråk" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Översätt till" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Text att översätta" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Ta bort text" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Föreslå översättning" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Avbokning" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Skicka" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Stödda filformat:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Fil" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Ta bort filen" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Översättning" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Ladda ner" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Begäran" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Svar" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API för maskinöversättning med öppen källkod" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Självhäftad. Offline kapabel. Lätt att ställa in." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Licens:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Tillverkad med %(heart)s av %(contributors)s och drivs av %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Bidragsgivare" + +#~ msgid "multipart/form-data" +#~ msgstr "multipart/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamesiska" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Detta offentliga API bör användas för testning, personlig eller sällsynt " +#~ "användning. Om du ska köra en ansökan i produktionen, vänligen " +#~ "%(host_server)s eller %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "värd din egen server" + +#~ msgid "get an API key" +#~ msgstr "få en API-nyckel" diff --git a/libretranslate/locales/sv/meta.json b/libretranslate/locales/sv/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..c5b5b464c17a804eb1952c3a3a10235e24f5d03a --- /dev/null +++ b/libretranslate/locales/sv/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Swedish", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/ta/LC_MESSAGES/messages.po b/libretranslate/locales/ta/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..f2f63ceda275f06dd73a5e3a02175c6275b3d8a5 --- /dev/null +++ b/libretranslate/locales/ta/LC_MESSAGES/messages.po @@ -0,0 +1,737 @@ +# Translations template for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.2\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2025-01-12 20:04+0000\n" +"Last-Translator: தமிழ்நேரம் \n" +"Language-Team: Tamil \n" +"Language: ta\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "தவறான சாதொபொகு வடிவம்" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "ஆட்டோ கண்டறிதல்" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "அங்கீகரிக்கப்படாதது" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "பல கோரிக்கை மீறல்களைக் கட்டுப்படுத்துகிறது" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "தவறான பநிஇ விசை" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "பநிஇ விசையைப் பெற சேவையக ஆபரேட்டரைத் தொடர்பு கொள்ளவும்" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "பநிஇ விசையைப் பெற %(url)s ஐப் பார்வையிடவும்" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "மந்தநிலை:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "தவறான கோரிக்கை: காணாமல் போன %(name)s அளவுரு" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "தவறான கோரிக்கை: %(name)s அளவுரு ஒரு எண் அல்ல" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "தவறான கோரிக்கை: %(name)s அளவுரு <= %(value)s இருக்க வேண்டும்" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "தவறான கோரிக்கை: கோரிக்கை (%(அளவு) வரி வரம்பை மீறுகிறது (%(வரம்புகள்)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s ஆதரிக்கப்படவில்லை" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(வடிவம்) வடிவமைப்பு ஆதரிக்கப்படவில்லை" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(எச் பெயர்) எச் (%(டி குறியீடுகள்)%(tname)s (%(tcode)s) இலிருந்து இலக்கு மொழியாக " +"கிடைக்கவில்லை" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "உரையை மொழிபெயர்க்க முடியாது: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "இந்த சேவையகத்தில் கோப்புகள் மொழிபெயர்ப்பு முடக்கப்பட்டுள்ளது." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "தவறான கோரிக்கை: வெற்று கோப்பு" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "தவறான கோரிக்கை: கோப்பு வடிவம் ஆதரிக்கப்படவில்லை" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "தவறான கோப்பு பெயர்" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "இந்த சேவையகத்தில் பரிந்துரைகள் முடக்கப்பட்டுள்ளன." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "ஆங்கிலம்" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "அல்பேனிய" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "அரபு" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "அசர்பைசானி" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "பாச்க்" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "பெங்காலி" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "பல்கேரியன்" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "கற்றலான்" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "சீன" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "சீன (பாரம்பரிய)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "செக்" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "டேனிச்" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "டச்சு" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "எச்பெராண்டோ" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "எச்டோனிய" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "பின்னிச்" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "பிரஞ்சு" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "காலிசியன்" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "செர்மன்" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "கிரேக்கம்" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "எபிரேய" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "இந்தி" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "அங்கேரியன்" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "இந்தோனேசிய" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "ஐரிச்" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "இத்தாலிய" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "சப்பானியர்கள்" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "கொரிய" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "லாட்வியன்" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "லிதுவேனியன்" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "மலாய்" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "நோர்வே" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "பெர்சியன்" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "போலீச்" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "போர்த்துகீசியம்" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "ருமேனிய" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "ரச்ய" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "ச்லோவாக்" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "ச்லோவேனியன்" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "ச்பானிச்" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "ச்வீடிச்" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "டாக்லாக்" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "தாய்" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "துருக்கிய" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "உருது" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "செர்பிய" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "உக்ரேனிய" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "வியட்நாமிய" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "உதவி மொழிகளின் பட்டியலை மீட்டெடுக்கவும்" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "மொழிகளின் பட்டியல்" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "மொழிபெயர்த்திடு" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "உரையை ஒரு மொழியிலிருந்து இன்னொரு மொழிக்கு மொழிபெயர்க்கவும்" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "மொழிபெயர்க்கப்பட்ட உரை" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "தவறான கோரிக்கை" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "மொழிபெயர்ப்பு பிழை" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "மெதுவாக" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "தடைசெய்யப்பட்டது" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "வணக்கம் உலகம்!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "மொழிபெயர்க்க உரை (கள்)" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "மூல மொழி குறியீடு" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "இலக்கு மொழி குறியீடு" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "உரை" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "உஉகுமொ" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"மூல உரையின் வடிவம்:\n" +" * `உரை` - எளிய உரை\n" +" * `html` - உஉகுமொ markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "மாற்று மொழிபெயர்ப்புகளின் விருப்பமான எண்ணிக்கை" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "பநிஇ விசை" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "கோப்பை ஒரு மொழியிலிருந்து இன்னொரு மொழிக்கு மொழிபெயர்க்கவும்" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "மொழிபெயர்க்கப்பட்ட கோப்பு" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "மொழிபெயர்க்க கோப்பு" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "ஒற்றை உரையின் மொழியைக் கண்டறியவும்" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "கண்டறிதல்கள்" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "கண்டறிதல் பிழை" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "கண்டறிய உரை" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "ஃபிரான்டென்ட் குறிப்பிட்ட அமைப்புகளை மீட்டெடுக்கவும்" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "ஃபிரான்டென்ட் அமைப்புகள்" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "ஃபிரான்ட்" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "மொழிபெயர்ப்பை மேம்படுத்த ஒரு ஆலோசனையை சமர்ப்பிக்கவும்" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "செய்" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "ஏற்பு இல்லை" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "அசல் உரை" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "பரிந்துரைக்கப்பட்ட மொழிபெயர்ப்பு" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "அசல் உரையின் மொழி" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "பரிந்துரைக்கப்பட்ட மொழிபெயர்ப்பின் மொழி" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "கருத்து" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "மொழி குறியீடு" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "மனிதனால் படிக்கக்கூடிய மொழி பெயர் (ஆங்கிலத்தில்)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "ஆதரிக்கப்பட்ட இலக்கு மொழி குறியீடுகள்" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "மொழிபெயர்க்கப்பட்ட உரை (கள்)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "பிழை செய்தி" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "மெதுவாக இருப்பதற்கான காரணம்" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "மொழிபெயர்க்கப்பட்ட கோப்பு முகவரி" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "நம்பிக்கை மதிப்பு" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"இந்த மொழிக்கான எழுத்து உள்ளீட்டு வரம்பு (-1 வரம்பு இல்லை என்பதைக் குறிக்கிறது)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "ஃபிரான்டென்ட் மொழிபெயர்ப்பு நேரம் முடிந்தது" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "பநிஇ விசை தரவுத்தளம் இயக்கப்பட்டதா என்பதை." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "பநிஇ விசை தேவையா என்பதை." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "பரிந்துரைகளை சமர்ப்பிப்பது இயக்கப்பட்டதா." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "ஆதரிக்கப்பட்ட கோப்புகள் வடிவம்" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "சமர்ப்பிப்பு வெற்றிகரமாக இருந்ததா" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "உரையை நகலெடுக்கவும்" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "%(url)s ஏற்ற முடியாது" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "தெரியாத பிழை" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "நகலெடுக்கப்பட்டது" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"உங்கள் திருத்தத்திற்கு நன்றி. குறிப்பு பரிந்துரை இப்போதே நடைமுறைக்கு வராது." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "மொழிகள் எதுவும் கிடைக்கவில்லை. நீங்கள் மாதிரிகளை சரியாக நிறுவினீர்களா?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"உங்கள் பநிஇ விசையில் தட்டச்சு செய்க. உங்களுக்கு பநிஇ விசை தேவைப்பட்டால், " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "\"பநிஇ கீ\" இணைப்பை அழுத்தவும்." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "சேவையக ஆபரேட்டரைத் தொடர்பு கொள்ளுங்கள்." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "இலவச மற்றும் திறந்த மூல இயந்திர மொழிபெயர்ப்பு பநிஇ" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"இலவச மற்றும் திறந்த மூல இயந்திர மொழிபெயர்ப்பு பநிஇ. சுய-ஓச்ட், இணைப்பில்லாத திறன் மற்றும் " +"அமைக்க எளிதானது. உங்கள் சொந்த பநிஇ சேவையகத்தை சில நிமிடங்களில் இயக்கவும்." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "மொழிபெயர்ப்பு" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "பநிஇ" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "பநிஇ டாக்ச்" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "பநிஇ விசையைப் பெறுங்கள்" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "கிரப்" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "பநிஇ விசையை அமைக்கவும்" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "மொழியை மாற்றவும்" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "தொகு" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "இருண்ட/ஒளி பயன்முறையை மாற்றவும்" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "தள்ளுபடி" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "மொழிபெயர்ப்பு பநிஇ" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "உரையை மொழிபெயர்க்கவும்" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "கோப்புகளை மொழிபெயர்க்கவும்" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "இருந்து மொழிபெயர்க்கவும்" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "மூலத்தை மாற்றவும் மற்றும் இலக்கு மொழிகள்" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "மொழிபெயர்க்கவும்" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "மொழிபெயர்க்க உரை" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "உரையை நீக்கு" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "மொழிபெயர்ப்பை பரிந்துரைக்கவும்" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "ரத்துசெய்" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "அனுப்பு" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "உதவி கோப்பு வடிவங்கள்:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "கோப்பு" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "கோப்பை அகற்று" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "மொழிபெயர்த்திடு" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "பதிவிறக்கம்" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "கோரிக்கை" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "பதில்" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "திறந்த மூல இயந்திர மொழிபெயர்ப்பு பநிஇ" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "சுய-ஓச்ட். இணைப்பில்லாத திறன். அமைக்க எளிதானது." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "லிப்ரெட்ரான்ச்லேட்" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "உரிமம்:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"%(heart)s %(contributors)s மூலம் தயாரிக்கப்படுகின்றன மற்றும் %(engine)s மூலம் " +"இயக்கப்படுகின்றன" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(லிப்ரெட்ரான்ச்லேட்) பங்களிப்பாளர்கள்" diff --git a/libretranslate/locales/th/LC_MESSAGES/messages.po b/libretranslate/locales/th/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..6b244e19bff82c5aeb0c03f2e2d92e6f9ad2c26f --- /dev/null +++ b/libretranslate/locales/th/LC_MESSAGES/messages.po @@ -0,0 +1,734 @@ +# Thai translations for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 13:03-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: th \n" +"Language: th\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "รูปแบบ Json ไม่ถูกต้อง" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "ตรวจสอบอัตโนมัติ" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "ไม่มีชื่อ" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "มีการละเมิดข้อห้ามมากเกินไป" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "กุญแจ API ใช้ไม่ได้หรือไม่ถูกต้อง" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "โปรดติดต่อโอเปอเรเตอร์เพื่อรับกุญแจ API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "ไปยัง %(url)s เพื่อเอากุญแจ API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "ชะลอ:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "การร้องขอไม่ถูกต้อง: ไม่พบ %(name)s พารามิเตอร์" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "การร้องขอไม่ถูกต้อง: %(name)s พารามิเตอร์ไม่ใช่ตัวเลข" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "การร้องขอไม่ถูกต้อง: %(name)s พารามิเตอร์ต้องเป็น <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"การร้องขอไม่ถูกต้อง: การร้องขอ " +"(help)%(size)sเกินขีดจํากัดของข้อความ%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s ไม่รองรับ" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s ยังไม่รองรับการฟอร์แมต" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "%(tname)s (%(tcode)sไม่มีภาษาเป้าหมาย %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "ไม่สามารถแปลข้อความ: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "การแปลของแฟ้มถูกปิดการใช้งานบนเซิร์ฟเวอร์นี้." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "การร้องขอไม่ถูกต้อง:" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "การร้องขอไม่ถูกต้อง: ยังไม่รองรับรูปแบบของแฟ้ม" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "ชื่อแฟ้มไม่ถูกต้อง" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "คําแนะนําถูกปิดการใช้งานบนเซิร์ฟเวอร์นี้." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "อังกฤษ" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "อัลเบเนีย" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "อารบิก" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "อาร์เซอร์ไบจัน" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "บาสก์Name" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "เบงกาลี" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "บัลแกเรีย" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "ภาษาคาตาลันName" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "จีน" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "จีน (ประเพณี)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "ภาษาเชคName" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "เดนมาร์ก" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "ภาษาดัตช์Name" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "เอสเปรันโต" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "ภาษาเอสโตเนียName" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "ฟินแลนด์" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "ฝรั่งเศส" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "ภาษากาลิเซียName" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "เยอรมัน" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "กรีก" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "ฮีบรู" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "ภาษาฮินดูName" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "ฮังการี" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "อินโดนีเซีย" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "ไอริชName" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "อิตาลี" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "ญี่ปุ่น" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "เกาหลี" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "ภาษาลัตเวียName" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "ภาษาลิทัวเนียName" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "ภาษามาเลย์Name" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "นอร์เวย์" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "เปอร์เซีย" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "โปแลนด์" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "โปรตุเกส" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "โรมาเนียName" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "รัสเซีย" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "ภาษาสโลวาเกียName" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "ภาษาสโลเนียName" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "สเปน" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "สวีเดน" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "ป้ายกํากับ" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "ภาษาไทยName" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "ภาษาตุรกีName" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "ภาษาอุรากวัยName" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "อูร์ดู" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "เซอร์เบียName" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "ยูเครน" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "ภาษาเวียดนามName" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "รับรายการภาษาที่รองรับ" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "รายการภาษา" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "แปล" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "แปลข้อความจากภาษาเป็นภาษาอื่น" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "ข้อความที่แปลแล้ว" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "การร้องขอไม่ถูกต้อง" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "การแปลผิดพลาด" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "ช้าลงหน่อย" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "แบน" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "สวัสดีโลก!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "ข้อความที่จะแปล" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "รหัสภาษาต้นฉบับ" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "รหัสภาษาเป้าหมาย" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "ข้อความ" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"รูปแบบข้อความต้นฉบับ:\n" +"– ข้อความธรรมดา\n" +"*เพลง*\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "จํานวนที่ควรใช้ในการแปลภาษา" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "กุญแจ API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "แปลแฟ้มจากภาษาเป็นภาษาอื่น" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "แฟ้มที่แปลแล้ว" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "แฟ้มที่จะแปล" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "ตรวจจับภาษาของข้อความเดียว" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "ตรวจสอบ" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "การตรวจสอบผิดพลาด" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "ข้อความที่จะตรวจสอบ" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "รับค่าค่าหน้าจอที่กําหนด" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "ตั้งค่าด้านหน้า" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "ด้านหน้า" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "จง ส่ง ข้อ เสนอ แนะ เพื่อ ปรับ ปรุง การ แปล" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "สําเร็จ" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "ไม่ได้รับอนุญาต" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "ข้อความต้นฉบับ" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "แปลที่แนะนํา" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "ภาษาของต้นฉบับ" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "ภาษา ที่ มี การ แนะ ให้ แปล" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "การตอบกลับ" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "รหัสภาษา" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "ชื่อภาษาที่อ่านได้ของมนุษย์ (in อังกฤษ)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "รองรับรหัสภาษาเป้าหมาย" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "แปลข้อความ" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "ข้อความผิดพลาด" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "เหตุผลสําหรับช้าลง" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "แปลแฟ้ม url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "ค่าความละเอียด" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "จํากัดการป้อนอักขระสําหรับภาษานี้ (1 แสดงถึงไม่มีข้อจํากัด)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "เวลาแปลฟร้อนท์" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "จะเปิดใช้งานฐานข้อมูลกุญแจ API หรือไม่." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "ต้องการกุญแจ API หรือไม่." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "เปิดใช้การแนะนําการส่งข้อมูลหรือไม่." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "รูปแบบแฟ้มที่รองรับ" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "การส่งล้มเหลวหรือไม่" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "คัดลอกข้อความ" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "ไม่สามารถเรียกใช้ได้ %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "เกิดข้อผิดพลาดไม่ทราบสาเหตุ" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "คัดลอก" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "ขอบคุณที่แก้ไข โปรด สังเกต ข้อ เสนอ แนะ นี้ จะ ไม่ มี ผล กระทบ ทันที." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "ไม่มีภาษา คุณติดตั้งแบบจําลองอย่างถูกต้องหรือไม่?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "พิมพ์กุญแจ API ของคุณ ถ้าคุณต้องการกุญแจ API %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "กดลิงก์ \"get API คีย์\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "ติดต่อเครื่องแม่ข่าย." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API ฟรีและโอเพนซอร์ส" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API ฟรีและโอเพนซอร์ส ระบบควบคุมตัวเอง เชื่อมต่อได้ง่าย เรียกใช้เซิร์ฟเวอร์ " +"API ของคุณเองในไม่กี่นาที." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "แปล" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "หมอ API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "รับ API คีย์" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "กิตฮับ" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "ตั้งค่า API คีย์" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "เปลี่ยนภาษา" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "แก้ไข" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "สลับโหมดมืด/ แสง" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "ไม่สนใจ" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "แปล API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "แปลข้อความ" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "แปลแฟ้ม" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "แปลจาก" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "เปลี่ยนแหล่งและภาษาเป้าหมาย" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "แปลเป็น" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "ข้อความที่จะแปล" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "ลบข้อความ" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "แนะนําการแปลภาษา" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "ยกเลิก" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "ส่ง" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "รูปแบบแฟ้มที่รองรับ:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "แฟ้ม" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "ลบแฟ้ม" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "แปล" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "ดาวน์โหลด" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "ต้องการ" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "ปฏิกิริยา" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API สําหรับแปลภาษาแบบโอเพนซอร์ส" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "หลงตัวเอง ไม่มีสัญญาณ ง่ายต่อการจัดฉาก." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "สัญญาอนุญาตสิทธิ์:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "สร้างด้วย %(heart)s โดย %(contributors)s และพลังงานโดย %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s ผู้มีส่วนร่วม" diff --git a/libretranslate/locales/th/meta.json b/libretranslate/locales/th/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..4ae2cc0da303b15fa3e3666cce800d9bb7f26ea2 --- /dev/null +++ b/libretranslate/locales/th/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Thai", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/tl/LC_MESSAGES/messages.po b/libretranslate/locales/tl/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..4e0fea85ba9b0cdcd2468eef6272b36d540d4362 --- /dev/null +++ b/libretranslate/locales/tl/LC_MESSAGES/messages.po @@ -0,0 +1,746 @@ +# Filipino (Philippines) translations for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 13:03-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: fil_PH \n" +"Language: fil_PH\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Hindi tanggap na anyo ng JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Di - Nakikitang Awto" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Hindi awtorisado" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Napakarami ang humihiling ng limitasyon sa mga paglabag" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Hindi tanggap na key ng API" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" +"Pakisuyong makipag - ugnayan sa opereytor ng server upang makakuha ng susi " +"ng API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Pagdalaw %(url)s upang makakuha ng susing API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Mabagal:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Imbalidong pangalan ng programa: bigo %(name)s parameter" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Imbalidong kahilingan: %(name)s Hindi numero ang parameter" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Imbalidong kahilingan: %(name)s Ang parameter ay dapat <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Imbalidong pangalan ng programa: (%(size)s) lumampas sa itinakdang teksto " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s hindi suportado ang mga symbolic link" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s Hindi suportado ang mga symbolic link" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) ay hindi magagamit bilang isang wikang puntirya mula " +"sa %(sname)s (%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Hindi maisalin ang teksto: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Ang salin ng talaksan ay may kapansanan sa server na ito." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Imbalidong pangalan ng programa: bigong talaksan" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Hindi suportado ang mga symbolic link" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Hindi tanggap na hostname" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Ang mga mungkahi ay may kapansanan sa serverg ito." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Albanian" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arabe" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaijani" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basque" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengali" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgariano" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Catalan" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Tsino" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Tsino (tradisyonal)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Czech" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danes" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Olandes" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estoniano" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Wikang Pinlandes" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Pranses" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galician" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Aleman" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Griego" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Hebreo" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Hungariano" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesian" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Irlandes" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Italyano" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Hapones" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Koreano" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Latviano" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Ang Lithuanian" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malay" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norwego" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Persiano" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Polako" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portuges" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Romaniano" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Ruso" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovak" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovenia" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Kastila" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Suweko" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalog" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Thai" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Turko" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukranian" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urdu" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Serbiano" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukrainian" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamese" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Retrieve list ng suportadong mga wika" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Talaan ng mga wika" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "salin" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Isinalin ang teksto mula sa isang wika tungo sa ibang wika" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Isinalin na teksto" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Imbalidong pangalan ng programa" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Pagkakamali sa pagsasalin" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Magmabagal" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Ipinagbawal" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Maganda talaga!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Mga teksto(mga) na isasalin" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Pinagmulan ng kodigo ng wika" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Target language code" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "teksto" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Pinagmulan ng teksto:\n" +"* `text` - Plain\n" +"* `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Mas piniling bilang ng alternatibong mga salin" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Susi ng API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Isinalin ang talaksan mula sa isang wika tungo sa ibang wika" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Isinalin na talaksan" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Sawi sa pagsasalin" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Alamin ang wika ng isang teksto" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Mga Pag - aalinlangan" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Maling diyagnosis" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Mag - text para malaman ito" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Ibalik ang espesipikong mga setting" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "harapan" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "harap" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Magpasakop sa mungkahi na pagbutihin ang isang salin" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Tagumpay" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Hindi awtorisado" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Orihinal na teksto" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Iminumungkahing salin" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Wika ng orihinal na teksto" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Wika ng iminungkahing salin" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "pagtanggap" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Kodigo ng wika" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Pangalan ng tao-basang wika (sa Ingles)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Suportadong target na mga kodigo sa wika" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Isinalin na teksto(s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Error sa pagbasa ng mensahe" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Dahilan para magmabagal" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Isinalin ang talaksang url" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Halaga ng pagtitiwala" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Ang character input limit para sa wikang ito (-1 ay nagpapakita ng walang " +"hangganan)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Harapang pagsasalin" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Kung baga magagawa ang API key database." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Kung kailangan ang susing API." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Kung baga ang pagkakapit ng mga mungkahi ay magagawa." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Suportadong format ng mga file" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Kung baga ang pagpapasakop ay matagumpay" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Kopya ng teksto" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Hindi maikarga %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Hindi kilalang error" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Pinagkunan" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Salamat sa iyong pagtutuwid. Pansinin na ang mungkahi ay hindi kaagad - agad" +" matutupad." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Walang makukuhang wika. Tama ba ang pagkakakabit mo sa mga modelo?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Uri sa iyong API Key. Kung kailangan mo ng API key, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "pindutin ang \"Get API Key\" link." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "makipag - ugnayan sa opereytor ng server." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API at Open Source Machine Translation" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Malaya at Open Source Machine Translation API. Sarili-hosted, offline may " +"kakayahan at madaling mag-setup. Itakbo ang iyong sariling API server sa " +"loob lamang ng ilang minuto." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "salin" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Docs" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Kumuha ng API Susi" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Magtakda ng API Susi" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Nagbabago ng wika" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Baguhin" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Togle dark/light mode" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Mga Mali" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API sa Pagsasalin" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Saling Teksto" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Mga Larawan ng Pagsasalin" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Isinalin mula sa" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Swap source at target languages" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Isinalin sa" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Tekstong isasalin" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Itapon ang teksto" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Mungkahi" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Huwag ituloy" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Pagpadala" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Suportadong mga format ng talaksan:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Sawi ang paglikha ng talaksan" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Alisin ang talaksan" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Pagsasalin" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Ibaba" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Kahilingan" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Pagtugon" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Open Source Machine Translation API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Sarili-Hosted. May Kapansanan. Madaling Itakda." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lisensiya:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"Ginawa kasama ng %(heart)s sunod %(contributors)s at pinapatakbo ng " +"%(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Tagapag - abuloy" diff --git a/libretranslate/locales/tl/meta.json b/libretranslate/locales/tl/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..aea7939f9566a00dec0cabc11077cbfbcb9e563c --- /dev/null +++ b/libretranslate/locales/tl/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Tagalog", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/tr/LC_MESSAGES/messages.po b/libretranslate/locales/tr/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..b995fd47481351ff4ef81241ff9a3795f48e3db9 --- /dev/null +++ b/libretranslate/locales/tr/LC_MESSAGES/messages.po @@ -0,0 +1,765 @@ +# Turkish translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-09-22 23:14+0000\n" +"Last-Translator: Oğuz Ersen \n" +"Language-Team: Turkish \n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Geçersiz JSON biçimi" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Otomatik Algıla" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Yetkisiz" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Çok fazla istekte bulunarak, istek sınırı aşıldı" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Geçersiz API anahtarı" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" +"Bir API anahtarı almak için lütfen sunucu yöneticisiyle iletişime geçin" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "API anahtarı almak için %(url)s adresini ziyaret edin" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Yavaşlama:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Geçersiz istek: eksik %(name)s parametresi" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Geçersiz istek: %(name)s parametresi bir sayı değil" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" +"Geçersiz istek: %(name)s parametresi %(value)s değerinden küçük veya eşit " +"olmalı" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Geçersiz istek: istek (%(size)s) metin sınırını aşıyor (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s desteklenmiyor" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s biçimi desteklenmiyor" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s), %(sname)s (%(scode)s) için hedef dil olarak " +"kullanılamıyor" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Metin çevrilemiyor: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Dosya çevirisi bu sunucuda devre dışı bırakıldı." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Geçersiz istek: boş dosya" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Geçersiz istek: dosya biçimi desteklenmiyor" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Geçersiz dosya adı" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Öneriler bu sunucuda devre dışı bırakıldı." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "İngilizce" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Arnavutça" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Arapça" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerice" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Basque" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Bengalce" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Bulgarca" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Katalanca" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Çince" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Çince (geleneksel)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Çekçe" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Danca" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Felemenkçe" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Estonca" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Fince" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Fransızca" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Galician" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Almanca" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Yunanca" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "İbranice" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hintçe" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Macarca" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Endonezce" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "İrlandaca" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "İtalyanca" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Japonca" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Korece" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Letonca" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Litvanyaca" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Malayca" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Norveççe" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Farsça" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Lehçe" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Portekizce" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Rumence" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Rusça" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovakça" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Slovence" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "İspanyolca" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "İsveççe" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Tagalogca" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Tayca" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Türkçe" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraynaca" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Urduca" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Sırpça" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Ukraynaca" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "Vietnamca" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Desteklenen dillerin listesini al" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Dil listesi" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "çevir" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Bir dilden diğerine metin çevirin" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Çevirilen metin" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Geçersiz istek" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Çeviri hatası" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Yavaşla" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Yasaklandı" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Merhaba dünya!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Çevrilecek metin" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Kaynak dil kodu" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Hedef dil kodu" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "metin" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Kaynak metin biçimi:\n" +" * `text` - Düz metin\n" +" * `html` - HTML işaretlemesi\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Tercih edilen alternatif çeviri sayısı" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API anahtarı" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Bir dilden diğerine dosya çevirin" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Çevrilen dosya" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Çevrilecek dosya" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Tek bir metnin dilini algıla" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Algılamalar" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Algılama hatası" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Algılanacak metin" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Ön uca özel ayarları al" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "ön uç ayarları" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "ön uç" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Bir çeviriyi iyileştirmek için öneri gönderin" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Başarılı" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Yetkili değil" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Orijinal metin" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Önerilen çeviri" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Orijinal metnin dili" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Önerilen çevirinin dili" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "geri bildirim" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Dil kodu" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Okunabilir dil adı (İngilizce olarak)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Desteklenen hedef dil kodları" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Çevirilen metin" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Hata mesajı" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Yavaşlama nedeni" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Çevrilen dosya URL'si" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Güven değeri" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Bu dil için karakter giriş sınırı (-1, sınır olmadığını gösterir)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Ön uç çeviri zaman aşımı" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "API anahtarı veri tabanının etkin olup olmadığı." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Bir API anahtarının gerekli olup olmadığı." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Öneri göndermenin etkin olup olmadığı." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Desteklenen dosya biçimi" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Gönderimin başarılı olup olmadığı" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Metni kopyala" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "%(url)s yüklenemiyor" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Bilinmeyen hata" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Kopyalandı" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "" +"Düzeltmeniz için teşekkürler. Önerinin hemen etkili olmayacağını unutmayın." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Kullanılabilir dil yok. Modelleri doğru şekilde yüklediniz mi?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"API anahtarınızı yazın. Bir API anahtarına ihtiyacınız varsa, " +"%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "\"API Anahtarı Al\" bağlantısına tıklayın." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "sunucu yöneticisiyle iletişime geçin." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Özgür ve Açık Kaynaklı Makine Çevirisi API'si" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Özgür ve Açık Kaynaklı Makine Çevirisi API'si. Kendiniz " +"barındırabileceğiniz, çevrim dışı çalışabilir ve kurulumu kolay. Sadece " +"birkaç dakika içinde kendi API sunucunuzu çalıştırın." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "çeviri" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API Belgeleri" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "API Anahtarı Al" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "API Anahtarını Ayarla" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Dili değiştir" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Düzenle" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Koyu/açık modu değiştir" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Kapat" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "Çeviri API'si" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Metin Çevir" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Dosya Çevir" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Şundan çevir" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Kaynak ve hedef dilleri değiştir" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Şuna çevir" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Çevrilecek metin" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Metni sil" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Çeviri öner" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "İptal" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Gönder" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Desteklenen dosya biçimleri:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Dosya" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Dosyayı kaldır" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Çevir" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "İndir" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "İstek" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Yanıt" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "Açık Kaynaklı Makine Çevirisi API'si" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" +"Kendiniz Barındırabileceğiniz. Çevrim Dışı Çalışabilen. Kurulumu Kolay." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Lisans:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"%(contributors)s tarafından %(heart)s ile yapıldı ve %(engine)s tarafından " +"desteklenmektedir" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s Katkıda Bulunanlar" + +#~ msgid "multipart/form-data" +#~ msgstr "çoklu bölüm/form-data" + +#~ msgid "Vietnamese" +#~ msgstr "Vietnamca" + +#~ msgid "" +#~ "This public API should be used for testing, personal or infrequent use. If " +#~ "you're going to run an application in production, please %(host_server)s or " +#~ "%(get_api_key)s." +#~ msgstr "" +#~ "Bu herkese açık API test, kişisel veya ara sıra kullanım için " +#~ "kullanılmalıdır. Üretimde bir uygulama çalıştıracaksanız, lütfen " +#~ "%(host_server)s veya %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "kendi sunucunuzu barındırın" + +#~ msgid "get an API key" +#~ msgstr "bir API anahtarı alın" diff --git a/libretranslate/locales/tr/meta.json b/libretranslate/locales/tr/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..498ea8aaa2ee7c0c111b398069bdffbbeadbd463 --- /dev/null +++ b/libretranslate/locales/tr/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Turkish", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/ug/LC_MESSAGES/messages.po b/libretranslate/locales/ug/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..a9521cd6f32355eca0048ed21db96bd5038ea870 --- /dev/null +++ b/libretranslate/locales/ug/LC_MESSAGES/messages.po @@ -0,0 +1,745 @@ +# Uyghur translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.12\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-02-20 07:02+0000\n" +"Last-Translator: Liam Johnson \n" +"Language: ug\n" +"Language-Team: Uyghur " +"\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "ئىناۋەتسىز JSON فورماتى" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "ئاپتوماتىك تەكشۈرۈش" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "ھوقۇق بېرىلمىگەن" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "ئىلتىماس سانى چەكتىن ئاشتى" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "API ئاچقۇچ ئىناۋەتسىز" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/ug/meta.json b/libretranslate/locales/ug/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..a886bc452b4e7f4bc7e146fd7ce6e455b636940b --- /dev/null +++ b/libretranslate/locales/ug/meta.json @@ -0,0 +1,4 @@ +{ + "name": "ug", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/uk/LC_MESSAGES/messages.po b/libretranslate/locales/uk/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..a0ac6d28da47559ce5899a6ade734e034fb27a9e --- /dev/null +++ b/libretranslate/locales/uk/LC_MESSAGES/messages.po @@ -0,0 +1,768 @@ +# Ukrainian translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-10-26 12:15+0000\n" +"Last-Translator: Bezruchenko Simon \n" +"Language-Team: Ukrainian \n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"X-Generator: Weblate 5.8.2-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Неправильний формат JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Автовизначення" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Неавторизовано" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Перевищено ліміт запитів" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Неправильний API ключ" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Зв'яжіться з оператором сервера, щоб отримати API ключ" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Відвідайте %(url)s, щоб отримати API ключ" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Сповільнення:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Неправильний запит: відсутній параметр %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "Неправильний запит: параметр %(name)s не є числом" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "Неправильний запит: параметр %(name)s має бути <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "Неправильний запит: запит (%(size)s) перевищує ліміт тексту (%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s не підтримується" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "Формат %(format)s не підтримується" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) не доступна, як мова перекладу з %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Не вдалося перекласти текст: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Переклад файлів на цьому сервері вимкнено." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Неправильний запит: порожній файл" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Неправильний запит: формат файлу не підтримується" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Неправильна назва файлу" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Пропозиції на цьому сервері вимкнено." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Англійська" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "Албанська" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Арабська" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Азербайджанська" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "Баскська" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "Бенгальська" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "Болгарська" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "Каталанська" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Китайська" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "Китайська (традиційна)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Чеська" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Данська" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Нідерландська" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Есперанто" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "Естонська" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Фінська" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Французька" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "Галісійська" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Німецька" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Грецька" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Іврит" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Хінді" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Угорська" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Індонезійська" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "Ірландська" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Італійська" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Японська" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Корейська" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "Латиська" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "Литовська" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "Малайська" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "Норвезька" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Перська" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Польська" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Португальська" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "Румунська" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Російська" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Словацька" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "Словенська" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Іспанська" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Шведська" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "Тагальська" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "Тайська" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Турецька" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Українська" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "Урду" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "Сербська" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "Українська" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "В'єтнамська" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Отримати список підтримуваних мов" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Список мов" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "переклад" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Перекласти текст з однієї мови на іншу" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Перекладений текст" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Неправильний запит" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Помилка перекладу" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Сповільнення" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Заблоковано" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Привіт, світе!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "Текст(и) для перекладу" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Код мови оригіналу" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Код мови перекладу" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "текст" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Формат вихідного тексту:\n" +" * `text` - Звичайний текст\n" +" * `html` - HTML розмітка\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "Бажана кількість альтернативних перекладів" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API ключ" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Перекласти файл з однієї мови на іншу" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Перекладений файл" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Файл для перекладу" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Визначити мову окремого тексту" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Визначення" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Помилка визначення" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Текст для визначення" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Отримати специфічні налаштування інтерфейсу" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "налаштування інтерфейсу" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "інтерфейс" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Подати пропозицію щодо покращення перекладу" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Успіх" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Не авторизовано" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Оригінальний текст" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Запропонований переклад" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Мова оригінального тексту" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Мова запропонованого перекладу" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "зворотний зв'язок" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Код мови" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Назва мовою, зрозумілою для людини (англійською)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Підтримувані коди мов перекладу" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "Перекладений(і) текст(и)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Повідомлення про помилку" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Причина сповільнення" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "URL-адреса перекладеного файлу" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Рівень достовірності" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" +"Обмеження на введення символів для цієї мови (-1 означає відсутність " +"обмежень)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Перевищено час очікування перекладу інтерфейсу" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Чи увімкнено базу даних API ключів." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Чи потрібен API ключ." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Чи увімкнено подання пропозицій." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Підтримувані формати файлів" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Чи була заявка успішною" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Скопіювати текст" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Не вдається завантажити %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Невідома помилка" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Скопійовано" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" +"Дякуємо за виправлення. Зверніть увагу, що пропозиція не набуде чинності " +"одразу." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Немає доступних мов. Чи правильно ви встановили моделі?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Введіть свій API ключ. Якщо вам потрібен API ключ, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "натисніть на посилання \"Отримати API ключ\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "зв'язатися з оператором сервера." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "Безкоштовний API машинного перекладу з відкритим вихідним кодом" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"Безкоштовний API машинного перекладу з відкритим вихідним кодом. " +"Самостійне розміщення, можливість роботи в офлайн режимі та простота " +"налаштування. Запустіть власний API сервер всього за кілька хвилин." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "переклад" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Документація до API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Отримати API ключ" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Встановити API ключ" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Змінити мову" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Редагувати" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Перемкнути темну/світлу тему" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Відмовитись" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API для перекладу" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Переклад тексту" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Переклад файлів" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Перекласти з" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Поміняти мови місцями" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Перекласти на" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Текст для перекладу" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Видалити текст" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Запропонувати переклад" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Скасувати" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Надіслати" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Підтримувані формати файлів:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Файл" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Видалити файл" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Перекласти" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Завантажити" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Запит" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Відповідь" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API машинного перекладу з відкритим вихідним кодом" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" +"Самостійне розміщення. Можливість роботи в офлайн режимі. Простота " +"налаштування." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Ліцензія:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Зроблено з %(heart)s %(contributors)s та працює на базі %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Спільнотою %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "мультипарт/форм-дані" + +#~ msgid "Vietnamese" +#~ msgstr "В'єтнамська" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "Цей публічний API слід використовувати " +#~ "для тестування, особистого або нечастого " +#~ "використання. Якщо ви збираєтесь запустити " +#~ "застосунок у виробництво, будь ласка, " +#~ "%(host_server)s чи %(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "розмістіть на своєму власному сервері" + +#~ msgid "get an API key" +#~ msgstr "отримайте API ключ" diff --git a/libretranslate/locales/uk/meta.json b/libretranslate/locales/uk/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..28a6f528ac509af1541427f8fd62ec106e0cf33b --- /dev/null +++ b/libretranslate/locales/uk/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Ukrainian", + "reviewed": true +} diff --git a/libretranslate/locales/ur/LC_MESSAGES/messages.po b/libretranslate/locales/ur/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..ef575fa7d4da955f06bc4b48c2694cb48c3f709c --- /dev/null +++ b/libretranslate/locales/ur/LC_MESSAGES/messages.po @@ -0,0 +1,737 @@ +# Urdu translations for LibreTranslate. +# Copyright (C) 2024 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2024. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.6.1\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-08-08 13:03-0400\n" +"Last-Translator: FULL NAME \n" +"Language-Team: ur \n" +"Language: ur\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "ایس " + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "خود کار ڈیکاٹ" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "غیر درج شدہ" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "بہت سے طلبہ کی خلاف ورزی کی حدود ہیں۔" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "اہم تجاویز" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "براہ کرم سرور آپریٹر سے رابطہ کریں" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "ملاقات %(url)s ایک ایپی کلید حاصل کرنے کے لئے" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "غلطی:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "غیر متصل سوال: %(name)s پیرامیٹر" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "غیر متصل درخواست: %(name)s پیرامیٹر نمبر نہیں ہے" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "غیر متصل درخواست: %(name)s پیرامیٹر لازمی ہے. %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "بے پناہ درخواست (انگریزی:%(size)s) متن حد سے تجاوز کرتا ہے۔%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s اور ان کی مدد نہیں کی جائے گی" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s فارمیٹ کی مدد نہیں کی جاسکتی" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from %(sname)s " +"(%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) سے مراد زبان کے طور پر دستیاب نہیں ہے۔ %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "ترجمہ: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "فائل کا ترجمہ اس سرور پر معذور ہے۔." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "محفوظ درخواست: خالی فائل" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "محفوظ درخواست: فائل کی معاونت نہیں ہے" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "نقل‌مکانی" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "اس سرور پر خدمات معطل ہیں۔." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "انگریزی" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "البانیا" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "عربي" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "آذربائیجان" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "بسک" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "بنگالی" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "بلغاریہ" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "کتالان" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "چین" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "چینی (انگریزی:" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "چیک" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "دانش" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "ڈچ" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "ایسپرانتو" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "ايستان" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "فِش" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "فر انس" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "جلیان" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "جرمني" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "یونانی" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "عبرانی" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "ہندی" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "ه رات" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "انڈونیشیا" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "آئرش" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "اطالوی" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "جاپاني" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "کوریا" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "لٹو يا" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "لتھووینیا" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "ملے" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "ناري" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "فارسی" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "پولش" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "فر انس" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "رومي" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "رو ن" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "سلواک" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "سلووینیا" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "اندلس" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "سو ڈا ني" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "غیر متصل" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "تھائی" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "ترکي" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "یورینس" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "اُردو" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "سر گري" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "یوکرین" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "ویتنام" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "معاون زبانوں کی فہرست" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "یہ فہرست زبانوں (List of languages) ہے۔" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "ترجمہ" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "زبان سے دوسری زبان تک عبارت" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "نقل و حمل" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "غیر متصل درخواست" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "ترجمہ غلطی" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "بند" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "بائٹس" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "ہیلو دنیا!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "ترجمہ کرنے کے لئے متن(s)" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "ماخذ زبان کوڈ" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "زبانوں کا کوڈ" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "متن" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "حمیل" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"ماخذ متناسقات:\n" +"*\n" +"*'html' - ایچ ٹی ایم ایل مارک اپ -\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "متعدد متبادل ترجمے" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "کلید" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "زبان سے دوسرے تک فائل" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "فائل حذف کی جارہی ہے" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "فائل کا ترجمہ" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "ايک متن کي زبان کي نقل کريں" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "حقائق" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "ڈیٹنگ غلطی" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "معلوم کرنے کے لئے متن" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "حفاظتی مخصوص ترتیبات" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "پیشگی ترتیبات" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "آمنے سامنے" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "ترجمے کو بہتر بنانے کی تجویز پیش کریں" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "کامیابی" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "اجازت نہیں دی گئی" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "اصل متن" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "ترجمہ" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "اصل متن کی زبان" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "ترجمے کی تجویز" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "جواب" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "زبان کا کوڈ" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "انسانی قابل زبان نام (انگریزی میں)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "نشان زدہ زبان کے کوڈ کی حمایت کی۔" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "نقل و حمل (s)" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "خامی پیام" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "سست کرنے کی وجہ" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "فائل رولر" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "اعتماد کی اہمیت" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "حروف تہجی اس زبان کے لیے حدیث (-1 کوئی حدیث نہیں)۔" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "وقت کا غلط استعمال" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "چاہے اے پی آئی کی کلید ڈیٹا بیس کے قابل ہو۔." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "چاہے آپ کسی ایپی کلید کی ضرورت ہو ۔." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "خواہ پیش کرنے والے تجاویز قابلِ‌بھروسا ہیں ۔." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "فائلوں کی معاونت" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "خواہ اسلام کامیاب رہا" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "متن نقل کریں" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "لوڈ نہیں ہوسکتا %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "نامعلوم" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "کوس" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect right " +"away." +msgstr "آپ کی اصلاح کا شکریہ. اِس سلسلے میں ایک مثال پر غور کریں ۔." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "کوئی زبان دستیاب نہیں۔ آپ نے ماڈلز کو درست طور پر نصب کیا؟?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" +"قسم اپنی ایپی کلید میں. آپ کو ایک ایپی کلید کی ضرورت ہے تو، %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "\"پی اے کلید\" لنک پر زور دیں." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "سرور آپریٹر سے رابطہ کریں." + +#: libretranslate/templates/index.html:9 +#: libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "آزاد اور کھلے ماخذ مشین اے پی آئی" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline capable " +"and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"آزاد اور اوپن ماخذ مشین اے پی آئی۔ خود غرضی، بے قاعدہ صلاحیت اور آسانی سے " +"نصب کرنے کے لئے. صرف چند منٹ میں اپنے ذاتی ایپی سرور چلا." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "ترجمہ" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "پانی" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "اپریل" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "توجہ حاصل کریں کلید" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "جٹوب" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "خیال کریں کلید" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "زبان تبدیل کریں" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "مرتب" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "تاریکی / روشنی کا موڈ" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "تفریق" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "ترجمہ" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "متن" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "فائلیں" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "عبارت سے" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "سواپ ماخذ اور ہدف زبانیں ہیں۔" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "داخل ہوں گے" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "ترجمہ کرنے کے لئے متن" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "حذف" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "ترجمہ" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "منسوخ" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "بھیجو" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "معاون فائل فارمیٹ:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "فائل" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "فائل حذف کریں" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "عبارت" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "اوپر لکھیں" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "درخواست" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "دوبارہ شروع" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "دستیاب مشینوں کا ترجمہ اے پی آئی" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "خود مختار ہو گیا۔ ممکن ہے. تیار کرنے کے لئے آسان." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "لبرٹی" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "اجازت نامہ:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" +"ساتھ بنایا گیا ہے %(heart)s قسم %(contributors)s جو بڑا زور آور ہے " +"%(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s نقل و حمل" diff --git a/libretranslate/locales/ur/meta.json b/libretranslate/locales/ur/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..7b0946894571c720c54110d15e6423b9f872eb37 --- /dev/null +++ b/libretranslate/locales/ur/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Urdu", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/vi/LC_MESSAGES/messages.po b/libretranslate/locales/vi/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..c4649683233bcbe2a40b8bb0172e03ecd76bbb70 --- /dev/null +++ b/libretranslate/locales/vi/LC_MESSAGES/messages.po @@ -0,0 +1,763 @@ +# Vietnamese translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-06-14 16:33+0000\n" +"Last-Translator: Dương Nguyễn Võ Quốc \n" +"Language: vi\n" +"Language-Team: Vietnamese " +"\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "Không đúng định dạng dữ liệu JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "Tự động phát hiện" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "Truy cập không hợp lệ." + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "Quá nhiều yêu cầu vượt giới hạn" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "Mã API không hợp lệ" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "Hãy liên hệ với người quản trị máy chủ để nhận mã API" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "Vào %(url)s để lấy mã API" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "Chậm lại:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "Yêu cầu không hợp lệ: thiếu tham số %(name)s" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" +"Yêu cầu không hợp lệ: kích thước yêu cầu %(size)s vượt quá giới hạn chữ " +"(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s không được hỗ trợ" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "định dạng %(format)s không được hỗ trợ" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" +"%(tname)s (%(tcode)s) không có sẵn làm ngôn ngữ đích từ %(sname)s " +"(%(scode)s)" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "Không thể dịch văn bản: %(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "Dịch tệp tin bị tắt trên máy chủ này." + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "Yêu cầu không hợp lệ: tệp tin trống" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "Yêu cầu không hợp lệ: định dạng tệp tin không được hỗ trợ" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "Tên tệp tin không hợp lệ" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "Những gợi ý bị tắt trên máy chủ này." + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "Tiếng Anh" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "Ả Rập" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "Azerbaijan" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "Trung Quốc" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "Séc" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "Đan Mạch" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "Hà Lan" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "Esperanto (Quốc tế ngữ)" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "Phần Lan" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "Pháp" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "Đức" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "Hy Lạp" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "Do Thái" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "Hindi" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "Hungary" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "Indonesia" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "irish" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "Ý" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "Nhật" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "Hàn" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "Ba Tư" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "Ba Lan" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "Bồ Đào Nha" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "Nga" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "Slovak" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "Tây Ban Nha" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "Thụy Điển" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "Thổ nhỉ kỳ" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "Ukraina" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "Lấy danh sách ngôn ngữ được hỗ trợ" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "Danh sách ngôn ngữ" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "dịch" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "Dịch từ sang một ngôn ngữ khác" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "Văn bản đã dịch" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "Yêu cầu không hợp lệ" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "Lỗi dịch" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "Chậm lại" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "Đã bị cấm" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "Xin chào thế giới!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "(Các) văn bản cần dịch" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "Mã ngôn ngữ nguồn" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "Mã ngôn ngữ đích" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "chữ" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"Định dạng văn bản nguồn:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "Mã API" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "Dịch tệp tin sang ngôn ngữ khác" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "Tệp tin đã dịch" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "Tệp để dịch" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "Phát hiện ngôn ngữ của một đoạn chữ" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "Các phát hiện" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "Lỗi phát hiện" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "Chữ để phát hiện" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "Lấy cài đặt về giao diện" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "các cài đặt giao diện" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "giao diện" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "Gửi gợi ý để cải thiện bản dịch" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "Thành công" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "Không được phép" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "Chữ gốc" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "Bản dịch đề xuất" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "Ngôn ngữ của văn bản gốc" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "Ngôn ngữ của bản dịch đề xuất" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "phản hồi" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "Mã ngôn ngữ" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "Tên ngôn ngữ con người có thể đọc được (bằng tiếng Anh)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "Các mã ngôn ngữ đích được hỗ trợ" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "(Các) văn bản đã dịch" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "Thông điệp lỗi" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "Lý do phải chậm lại" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "Dịch url tệp tin" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "Giá trị tin cậy" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "Giới hạn ký tự đầu vào cho ngôn ngữ này (-1 nghĩa là không giới hạn)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "Quá hạn đợi bản dịch" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "Cơ sở dữ liệu mã API có được bật không." + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "Có bắt buộc mã API hay không." + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "Có cho phép gửi đề xuất hay không." + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "Các định dạng tệp tin được hỗ trợ" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "Đã gửi thành công hay chưa" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "Sao chép chữ" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "Không thể tải %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "Lỗi không rõ" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "Đã sao chép" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "Cảm ơn đã sửa. Lưu ý đề xuất sẽ không có tác dụng ngay lập tức." + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "Không có ngôn ngữ có sẵn. Bạn đã cài đặt các mô hình một cách chính xác?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "Nhập mã API của bạn. Nếu bạn cần lấy mã API, %(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "nhấn liên kết \"Lấy mã API\"." + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "liên hệ với người quản trị máy chủ." + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "API dịch thuật máy miễn phí và mã nguồn mở" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" +"API dịch thuật máy miễn phí và nguồn mở. Tự lưu trữ, có thể sử dụng ngoại" +" tuyến và dễ cài đặt. Tự chạy máy chủ API của bạn chỉ trong vài phút." + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "dịch" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "api" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "Tài liệu API" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "Lấy Mã API" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "Đặt Mã API" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "Thay đổi ngôn ngữ" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "Sửa" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "Chuyển chế độ sáng/tối" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "Bỏ" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "API dịch" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "Dịch văn bản" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "Dịch tệp tin" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "Dịch từ" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "Hoán đổi ngôn ngữ nguồn và đích" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "Dịch sang" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "Chữ để dịch" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "Xóa chữ" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "Đề xuất dịch" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "Hủy" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "Gửi" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "Các định dạng tệp tin được hỗ trợ:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "Tệp tin" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "Bỏ tệp tin" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "Dịch" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "Tải về" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "Yêu cầu" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "Trả lời" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "API Dịch Máy Mã Nguồn Mở" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "Tự lưu trữ. Có thể dùng ngoại tuyến. Dễ cài đặt." + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "Giấy phép:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "Tạo ra với %(heart)s bởi %(contributors)s và chạy bằng %(engine)s" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "Các cộng tác viên %(libretranslate)s" + +#~ msgid "multipart/form-data" +#~ msgstr "đa phần dữ liệu" + +#~ msgid "Vietnamese" +#~ msgstr "Tiếng Việt" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "API công khai này chỉ nên dùng " +#~ "để thử nghiệm, sử dụng cá nhân " +#~ "hay không thường xuyên. Nếu bạn " +#~ "muốn chạy ứng dụng cho quá trình" +#~ " sản xuất, hãy %(host_server)s hoặc " +#~ "%(get_api_key)s." + +#~ msgid "host your own server" +#~ msgstr "lưu trữ máy chủ của chính bạn" + +#~ msgid "get an API key" +#~ msgstr "lấy mã API" + diff --git a/libretranslate/locales/vi/meta.json b/libretranslate/locales/vi/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..d2c96c6d75c24076f943140b1098bf03faff5819 --- /dev/null +++ b/libretranslate/locales/vi/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Vietnamese", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/zgh/LC_MESSAGES/messages.po b/libretranslate/locales/zgh/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..5bef3fb36bc2aa6937fcee803171e8ab235c10eb --- /dev/null +++ b/libretranslate/locales/zgh/LC_MESSAGES/messages.po @@ -0,0 +1,745 @@ +# Standard Moroccan Tamazight translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2023-01-28 14:45+0000\n" +"Last-Translator: ⵣⵓⵀⵉⵔ ⴰⵎⴰⵣⵉⵖ ZOUHIR DEHBI \n" +"Language: zgh\n" +"Language-Team: Tamazight (Standard Moroccan) " +"\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "ⵓⵔ ⵜⵎⵙⴰⵙⴰ ⵜⵍⵖⴰ ⵏ JSON" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "ⵉⵕⵉⵕⴹ ⴰⵡⵓⵔⵎⴰⵏ" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "ⵡⴰⵔ ⵜⵓⵔⴰⴳⵜ" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "" + +#~ msgid "Vietnamese" +#~ msgstr "" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" + +#~ msgid "host your own server" +#~ msgstr "" + +#~ msgid "get an API key" +#~ msgstr "" + diff --git a/libretranslate/locales/zgh/meta.json b/libretranslate/locales/zgh/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..479eca9b6733561b1cd59b461c90aea67b53b306 --- /dev/null +++ b/libretranslate/locales/zgh/meta.json @@ -0,0 +1,4 @@ +{ + "name": "zgh", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/locales/zh/LC_MESSAGES/messages.po b/libretranslate/locales/zh/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..4f6686c58c28a6db30693a4c46785ce6a3acf478 --- /dev/null +++ b/libretranslate/locales/zh/LC_MESSAGES/messages.po @@ -0,0 +1,753 @@ +# Chinese translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2025-01-22 05:16+0000\n" +"Last-Translator: Poesty Li \n" +"Language-Team: Chinese (Simplified Han script) \n" +"Language: zh\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.10-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "无效的 JSON 格式" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "自动检测" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "未经授权" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "请求次数过多超过限制" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "无效的 API 密钥" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "请联系管理员以获取 API 密钥" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "访问 %(url)s 以获取 API 密钥" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "慢一点:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "无效的请求:丢失 %(name)s 参数" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "无效的请求 : 参数%(name)s不是数字" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "无效的请求 : %(name)s 参数必须 <= %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "无效的请求:请求(%(size)s)超过文本限制(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "%(lang)s 不受支持" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "%(format)s 格式不受支持" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "%(tname)s(%(tcode)s)不能作为 %(sname)s (%(scode)s)的目标语言" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "无法翻译文本:%(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "文件翻译在此服务器上被禁用。" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "无效的请求:空文件" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "无效的请求:文件格式不受支持" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "无效的文件名" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "该服务器已禁用建议功能。" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "英语" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "阿尔巴尼亚语" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "阿拉伯语" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "阿塞拜疆语" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "巴斯克语" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "孟加拉语" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "保加利亚语" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "加泰罗尼亚语" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "简体中文" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "繁体中文" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "捷克语" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "丹麦语" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "荷兰语" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "世界语" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "爱沙尼亚语" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "芬兰语" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "法语" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "加利西亚语" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "德语" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "希腊语" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "希伯来语" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "印地语" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "匈牙利语" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "印度尼西亚语" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "爱尔兰语" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "意大利语" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "日语" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "韩语" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "拉脱维亚语" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "立陶宛语" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "马来语" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "挪威语" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "波斯语" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "波兰语" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "葡萄牙语" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "罗马尼亚语" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "俄语" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "斯洛伐克语" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "斯洛文尼亚语" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "西班牙语" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "瑞典语" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "标记" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "泰国语" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "土耳其语" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "乌克兰语" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "乌尔都语" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "塞尔维亚语" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "乌克兰语" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "越南语" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "检索支持语言的列表" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "语言列表" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "翻译" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "将文本从一种语言翻译成另一种语言" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "已翻译文本" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "无效的请求" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "翻译出错" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "慢一点" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "已封禁" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "你好世界!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "需要翻译的文本" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "语言来源代码" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "目标语言代码" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "文本" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"源文本的格式:\n" +" *`text` - 纯文本\n" +" *`html` - html 标记\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "首选译名数" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API密钥" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "将文件从一种语言翻译成另一种语言" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "已翻译文件" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "需要翻译的文件" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "检测单个文本的语言" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "检测" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "检测出错" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "需要检测的文本" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "检索前端特定设置" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "前端设置" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "前端" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "提交建议以改善翻译" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "成功" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "未经授权" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "原文" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "建议译文" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "原始文本的语言" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "建议译文的语言" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "反馈" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "语言代码" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "人类可读的语言名称(英文)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "支持的目标语言代码" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "已翻译文本" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "错误信息" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "速度减缓的原因" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "已翻译文件的链接" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "置信度" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "此语言的字符输入限制(-1表示没有限制)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "前端翻译超时" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "是否启用了API密钥数据库。" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "是否需要API密钥。" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "是否启用了支持提交建议。" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "支持的文件格式" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "提交是否成功" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "复制文本" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "无法加载 %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "未知错误" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "复制" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "感谢您的更正。注意此建议不会立即生效。" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "无可用的语言。您是否正确安装了模型?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "输入您的API密钥。如果您需要API密钥,%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "点击“获取API密钥”链接。" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "联系服务器管理员。" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "免费开源的机器翻译API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "免费开源的机器翻译API。自我托管,支持离线且易于设置。只需几分钟就可以运行你自己的API服务器。" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "翻译" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "API" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API文档" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "获取API密钥" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "设置API密钥" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "改变语言" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "编辑" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "切换暗黑/明亮模式" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "忽略" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "翻译API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "翻译文本" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "翻译文件" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "翻译自" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "交换来源语言与目标语言" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "翻译为" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "需要翻译的文本" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "删除文本" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "建议译文" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "取消" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "发送" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "支持的文件格式:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "文件" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "删除文件" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "命令, 例如\"翻译\"" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "下载" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "请求" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "响应" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "开源的机器翻译API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "自我托管。支持离线。易于设置。" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "许可:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "由 %(contributors)s 用 %(heart)s 制作并且由 %(engine)s 驱动" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s 贡献者" + +#~ msgid "multipart/form-data" +#~ msgstr "多部分/非正式数据" + +#~ msgid "Vietnamese" +#~ msgstr "越南语" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "此公共API仅适用于测试,个人或不频繁的使用。如果您要在生产环境中运行应用程序,请 %(host_server)s " +#~ "或 %(get_api_key)s。" + +#~ msgid "host your own server" +#~ msgstr "搭建自己的服务器" + +#~ msgid "get an API key" +#~ msgstr "获取API密钥" diff --git a/libretranslate/locales/zh/meta.json b/libretranslate/locales/zh/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..6604fc517fddf9661fca562e9ea676012b7b3e0d --- /dev/null +++ b/libretranslate/locales/zh/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Chinese", + "reviewed": true +} diff --git a/libretranslate/locales/zh_Hant/LC_MESSAGES/messages.po b/libretranslate/locales/zh_Hant/LC_MESSAGES/messages.po new file mode 100644 index 0000000000000000000000000000000000000000..2b502612eee12b4420b061ca057e16437595e428 --- /dev/null +++ b/libretranslate/locales/zh_Hant/LC_MESSAGES/messages.po @@ -0,0 +1,750 @@ +# Chinese (Traditional) translations for LibreTranslate. +# Copyright (C) 2023 LibreTranslate Authors +# This file is distributed under the same license as the LibreTranslate +# project. +# FIRST AUTHOR , 2023. +# +msgid "" +msgstr "" +"Project-Id-Version: LibreTranslate 1.3.9\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2024-10-16 23:47+0200\n" +"PO-Revision-Date: 2024-11-12 22:23+0000\n" +"Last-Translator: Sauce \n" +"Language-Team: Chinese (Traditional Han script) \n" +"Language: zh_Hant\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.9-dev\n" +"Generated-By: Babel 2.16.0\n" + +#: libretranslate/app.py:80 +msgid "Invalid JSON format" +msgstr "無效的 JSON 格式" + +#: libretranslate/app.py:180 libretranslate/templates/app.js.template:467 +msgid "Auto Detect" +msgstr "自動偵測" + +#: libretranslate/app.py:273 +msgid "Unauthorized" +msgstr "未經授權" + +#: libretranslate/app.py:291 +msgid "Too many request limits violations" +msgstr "請求次數過多超過限制" + +#: libretranslate/app.py:298 +msgid "Invalid API key" +msgstr "無效的 API 金鑰" + +#: libretranslate/app.py:324 +msgid "Please contact the server operator to get an API key" +msgstr "請聯絡伺服器管理員以取得 API 金鑰" + +#: libretranslate/app.py:326 +#, python-format +msgid "Visit %(url)s to get an API key" +msgstr "造訪 %(url)s 以取得 API 金鑰" + +#: libretranslate/app.py:373 +msgid "Slowdown:" +msgstr "慢一點:" + +#: libretranslate/app.py:606 libretranslate/app.py:608 +#: libretranslate/app.py:610 libretranslate/app.py:819 +#: libretranslate/app.py:821 libretranslate/app.py:823 +#: libretranslate/app.py:980 libretranslate/app.py:1137 +#: libretranslate/app.py:1139 libretranslate/app.py:1141 +#: libretranslate/app.py:1143 +#, python-format +msgid "Invalid request: missing %(name)s parameter" +msgstr "無效的請求:遺失 %(name)s 參數" + +#: libretranslate/app.py:615 +#, python-format +msgid "Invalid request: %(name)s parameter is not a number" +msgstr "無效的請求:%(name)s 參數不是數字" + +#: libretranslate/app.py:618 +#, python-format +msgid "Invalid request: %(name)s parameter must be <= %(value)s" +msgstr "無效的請求:%(name)s 參數必須小於或等於 %(value)s" + +#: libretranslate/app.py:635 libretranslate/app.py:645 +#, python-format +msgid "Invalid request: request (%(size)s) exceeds text limit (%(limit)s)" +msgstr "無效的請求:請求(%(size)s)超過文字限制(%(limit)s)" + +#: libretranslate/app.py:660 libretranslate/app.py:665 +#: libretranslate/app.py:834 libretranslate/app.py:839 +#, python-format +msgid "%(lang)s is not supported" +msgstr "不支援 %(lang)s" + +#: libretranslate/app.py:671 +#, python-format +msgid "%(format)s format is not supported" +msgstr "不支援 %(format)s 格式" + +#: libretranslate/app.py:680 libretranslate/app.py:704 +#, python-format +msgid "" +"%(tname)s (%(tcode)s) is not available as a target language from " +"%(sname)s (%(scode)s)" +msgstr "%(tname)s(%(tcode)s)不能作為 %(sname)s(%(scode)s)的目標語言" + +#: libretranslate/app.py:724 +#, python-format +msgid "Cannot translate text: %(text)s" +msgstr "無法翻譯文字:%(text)s" + +#: libretranslate/app.py:811 libretranslate/app.py:872 +msgid "Files translation are disabled on this server." +msgstr "此伺服器上已停用檔案翻譯功能。" + +#: libretranslate/app.py:826 +msgid "Invalid request: empty file" +msgstr "無效的請求:空檔案" + +#: libretranslate/app.py:829 +msgid "Invalid request: file format not supported" +msgstr "無效的請求:不支援的檔案格式" + +#: libretranslate/app.py:880 +msgid "Invalid filename" +msgstr "無效的檔案名稱" + +#: libretranslate/app.py:1122 +msgid "Suggestions are disabled on this server." +msgstr "此伺服器上已停用建議功能。" + +#: libretranslate/locales/.langs.py:1 +msgid "English" +msgstr "英文" + +#: libretranslate/locales/.langs.py:2 +msgid "Albanian" +msgstr "阿爾巴尼亞文" + +#: libretranslate/locales/.langs.py:3 +msgid "Arabic" +msgstr "阿拉伯文" + +#: libretranslate/locales/.langs.py:4 +msgid "Azerbaijani" +msgstr "阿塞拜疆語" + +#: libretranslate/locales/.langs.py:5 +msgid "Basque" +msgstr "巴斯克語" + +#: libretranslate/locales/.langs.py:6 +msgid "Bengali" +msgstr "孟加拉文" + +#: libretranslate/locales/.langs.py:7 +msgid "Bulgarian" +msgstr "保加利亞文" + +#: libretranslate/locales/.langs.py:8 +msgid "Catalan" +msgstr "加泰隆尼亞文" + +#: libretranslate/locales/.langs.py:9 +msgid "Chinese" +msgstr "中文" + +#: libretranslate/locales/.langs.py:10 +msgid "Chinese (traditional)" +msgstr "正體中文(臺灣)" + +#: libretranslate/locales/.langs.py:11 +msgid "Czech" +msgstr "捷克語" + +#: libretranslate/locales/.langs.py:12 +msgid "Danish" +msgstr "丹麥文" + +#: libretranslate/locales/.langs.py:13 +msgid "Dutch" +msgstr "荷蘭文" + +#: libretranslate/locales/.langs.py:14 +msgid "Esperanto" +msgstr "世界語" + +#: libretranslate/locales/.langs.py:15 +msgid "Estonian" +msgstr "愛沙尼亞文" + +#: libretranslate/locales/.langs.py:16 +msgid "Finnish" +msgstr "芬蘭文" + +#: libretranslate/locales/.langs.py:17 +msgid "French" +msgstr "法文" + +#: libretranslate/locales/.langs.py:18 +msgid "Galician" +msgstr "加利西亞語" + +#: libretranslate/locales/.langs.py:19 +msgid "German" +msgstr "德文" + +#: libretranslate/locales/.langs.py:20 +msgid "Greek" +msgstr "希臘文" + +#: libretranslate/locales/.langs.py:21 +msgid "Hebrew" +msgstr "希伯來文" + +#: libretranslate/locales/.langs.py:22 +msgid "Hindi" +msgstr "印地語" + +#: libretranslate/locales/.langs.py:23 +msgid "Hungarian" +msgstr "匈牙利文" + +#: libretranslate/locales/.langs.py:24 +msgid "Indonesian" +msgstr "印尼文" + +#: libretranslate/locales/.langs.py:25 +msgid "Irish" +msgstr "愛爾蘭文" + +#: libretranslate/locales/.langs.py:26 +msgid "Italian" +msgstr "意大利文" + +#: libretranslate/locales/.langs.py:27 +msgid "Japanese" +msgstr "日文" + +#: libretranslate/locales/.langs.py:28 +msgid "Korean" +msgstr "韓文" + +#: libretranslate/locales/.langs.py:29 +msgid "Latvian" +msgstr "拉脫維亞文" + +#: libretranslate/locales/.langs.py:30 +msgid "Lithuanian" +msgstr "立陶宛文" + +#: libretranslate/locales/.langs.py:31 +msgid "Malay" +msgstr "馬來文" + +#: libretranslate/locales/.langs.py:32 +msgid "Norwegian" +msgstr "挪威文" + +#: libretranslate/locales/.langs.py:33 +msgid "Persian" +msgstr "波斯文" + +#: libretranslate/locales/.langs.py:34 +msgid "Polish" +msgstr "波蘭文" + +#: libretranslate/locales/.langs.py:35 +msgid "Portuguese" +msgstr "葡萄牙文" + +#: libretranslate/locales/.langs.py:36 +msgid "Romanian" +msgstr "羅馬尼亞文" + +#: libretranslate/locales/.langs.py:37 +msgid "Russian" +msgstr "俄文" + +#: libretranslate/locales/.langs.py:38 +msgid "Slovak" +msgstr "斯洛伐克語" + +#: libretranslate/locales/.langs.py:39 +msgid "Slovenian" +msgstr "斯洛維尼亞文" + +#: libretranslate/locales/.langs.py:40 +msgid "Spanish" +msgstr "西班牙文" + +#: libretranslate/locales/.langs.py:41 +msgid "Swedish" +msgstr "瑞典文" + +#: libretranslate/locales/.langs.py:42 +msgid "Tagalog" +msgstr "塔加洛文" + +#: libretranslate/locales/.langs.py:43 +msgid "Thai" +msgstr "泰文" + +#: libretranslate/locales/.langs.py:44 +msgid "Turkish" +msgstr "土耳其文" + +#: libretranslate/locales/.langs.py:45 +msgid "Ukranian" +msgstr "烏克蘭文" + +#: libretranslate/locales/.langs.py:46 +msgid "Urdu" +msgstr "烏爾都文" + +#: libretranslate/locales/.langs.py:47 +msgid "Serbian" +msgstr "塞爾維亞文" + +#: libretranslate/locales/.langs.py:48 +msgid "Ukrainian" +msgstr "烏克蘭文" + +#: libretranslate/locales/.langs.py:49 +msgid "Vietnamese" +msgstr "越南文" + +#: libretranslate/locales/.swag.py:1 +msgid "Retrieve list of supported languages" +msgstr "檢索支援語言的列表" + +#: libretranslate/locales/.swag.py:2 +msgid "List of languages" +msgstr "語言列表" + +#: libretranslate/locales/.swag.py:3 +msgid "translate" +msgstr "翻譯" + +#: libretranslate/locales/.swag.py:4 +msgid "Translate text from a language to another" +msgstr "將文字從一種語言翻譯成另一種語言" + +#: libretranslate/locales/.swag.py:5 libretranslate/templates/index.html:224 +msgid "Translated text" +msgstr "已翻譯文字" + +#: libretranslate/locales/.swag.py:6 +msgid "Invalid request" +msgstr "無效的請求" + +#: libretranslate/locales/.swag.py:7 +msgid "Translation error" +msgstr "翻譯錯誤" + +#: libretranslate/locales/.swag.py:8 +msgid "Slow down" +msgstr "慢一點" + +#: libretranslate/locales/.swag.py:9 +msgid "Banned" +msgstr "已封鎖" + +#: libretranslate/locales/.swag.py:10 +msgid "Hello world!" +msgstr "你好世界!" + +#: libretranslate/locales/.swag.py:11 +msgid "Text(s) to translate" +msgstr "需要翻譯的文字" + +#: libretranslate/locales/.swag.py:12 +msgid "Source language code" +msgstr "來源語言代碼" + +#: libretranslate/locales/.swag.py:13 +msgid "Target language code" +msgstr "目標語言代碼" + +#: libretranslate/locales/.swag.py:14 +msgid "text" +msgstr "文字" + +#: libretranslate/locales/.swag.py:15 +msgid "html" +msgstr "html" + +#: libretranslate/locales/.swag.py:16 +msgid "" +"Format of source text:\n" +" * `text` - Plain text\n" +" * `html` - HTML markup\n" +msgstr "" +"來源文字的格式:\n" +" *`text` - 純文字\n" +" *`html` - html 標記\n" + +#: libretranslate/locales/.swag.py:17 +msgid "Preferred number of alternative translations" +msgstr "偏好的替代翻譯數量" + +#: libretranslate/locales/.swag.py:18 +msgid "API key" +msgstr "API 金鑰" + +#: libretranslate/locales/.swag.py:19 +msgid "Translate file from a language to another" +msgstr "將檔案從一種語言翻譯成另一種語言" + +#: libretranslate/locales/.swag.py:20 +msgid "Translated file" +msgstr "已翻譯檔案" + +#: libretranslate/locales/.swag.py:21 +msgid "File to translate" +msgstr "需要翻譯的檔案" + +#: libretranslate/locales/.swag.py:22 +msgid "Detect the language of a single text" +msgstr "檢測單一文字的語言" + +#: libretranslate/locales/.swag.py:23 +msgid "Detections" +msgstr "偵測" + +#: libretranslate/locales/.swag.py:24 +msgid "Detection error" +msgstr "錯誤偵測" + +#: libretranslate/locales/.swag.py:25 +msgid "Text to detect" +msgstr "需要檢測的文字" + +#: libretranslate/locales/.swag.py:26 +msgid "Retrieve frontend specific settings" +msgstr "檢索前端特定設定" + +#: libretranslate/locales/.swag.py:27 +msgid "frontend settings" +msgstr "前端設定" + +#: libretranslate/locales/.swag.py:28 +msgid "frontend" +msgstr "前端" + +#: libretranslate/locales/.swag.py:29 +msgid "Submit a suggestion to improve a translation" +msgstr "提交建議以改善翻譯" + +#: libretranslate/locales/.swag.py:30 +msgid "Success" +msgstr "成功" + +#: libretranslate/locales/.swag.py:31 +msgid "Not authorized" +msgstr "未經授權" + +#: libretranslate/locales/.swag.py:32 +msgid "Original text" +msgstr "原文" + +#: libretranslate/locales/.swag.py:33 +msgid "Suggested translation" +msgstr "建議譯文" + +#: libretranslate/locales/.swag.py:34 +msgid "Language of original text" +msgstr "原始文字的語言" + +#: libretranslate/locales/.swag.py:35 +msgid "Language of suggested translation" +msgstr "建議譯文的語言" + +#: libretranslate/locales/.swag.py:36 +msgid "feedback" +msgstr "意見回饋" + +#: libretranslate/locales/.swag.py:37 +msgid "Language code" +msgstr "語言代碼" + +#: libretranslate/locales/.swag.py:38 +msgid "Human-readable language name (in English)" +msgstr "人類可讀的語言名稱(英文)" + +#: libretranslate/locales/.swag.py:39 +msgid "Supported target language codes" +msgstr "支援的目標語言代碼" + +#: libretranslate/locales/.swag.py:40 +msgid "Translated text(s)" +msgstr "已翻譯文字" + +#: libretranslate/locales/.swag.py:41 +msgid "Error message" +msgstr "錯誤訊息" + +#: libretranslate/locales/.swag.py:42 +msgid "Reason for slow down" +msgstr "速度下降的原因" + +#: libretranslate/locales/.swag.py:43 +msgid "Translated file url" +msgstr "已翻譯檔案的連結" + +#: libretranslate/locales/.swag.py:44 +msgid "Confidence value" +msgstr "信心值" + +#: libretranslate/locales/.swag.py:45 +msgid "Character input limit for this language (-1 indicates no limit)" +msgstr "此語言的字元輸入限制(-1 表示無限制)" + +#: libretranslate/locales/.swag.py:46 +msgid "Frontend translation timeout" +msgstr "前端翻譯逾時" + +#: libretranslate/locales/.swag.py:47 +msgid "Whether the API key database is enabled." +msgstr "是否啟用了 API 金鑰資料庫。" + +#: libretranslate/locales/.swag.py:48 +msgid "Whether an API key is required." +msgstr "是否需要 API 金鑰。" + +#: libretranslate/locales/.swag.py:49 +msgid "Whether submitting suggestions is enabled." +msgstr "是否啟用了支援提交建議。" + +#: libretranslate/locales/.swag.py:50 +msgid "Supported files format" +msgstr "支援的檔案格式" + +#: libretranslate/locales/.swag.py:51 +msgid "Whether submission was successful" +msgstr "送出是否成功" + +#: libretranslate/templates/app.js.template:31 +#: libretranslate/templates/app.js.template:294 +#: libretranslate/templates/app.js.template:298 +msgid "Copy text" +msgstr "複製文字" + +#: libretranslate/templates/app.js.template:80 +#: libretranslate/templates/app.js.template:86 +#: libretranslate/templates/app.js.template:91 +#: libretranslate/templates/app.js.template:281 +#: libretranslate/templates/app.js.template:351 +#: libretranslate/templates/app.js.template:439 +#: libretranslate/templates/app.js.template:487 +#, python-format +msgid "Cannot load %(url)s" +msgstr "無法載入 %(url)s" + +#: libretranslate/templates/app.js.template:272 +#: libretranslate/templates/app.js.template:342 +#: libretranslate/templates/app.js.template:420 +#: libretranslate/templates/app.js.template:431 +msgid "Unknown error" +msgstr "未知錯誤" + +#: libretranslate/templates/app.js.template:295 +msgid "Copied" +msgstr "已複製" + +#: libretranslate/templates/app.js.template:339 +msgid "" +"Thanks for your correction. Note the suggestion will not take effect " +"right away." +msgstr "感謝您的更正。注意此建議將不會立即生效。" + +#: libretranslate/templates/app.js.template:463 +msgid "No languages available. Did you install the models correctly?" +msgstr "無可用的語言。您是否正確安裝了模型?" + +#: libretranslate/templates/app.js.template:530 +#, python-format +msgid "Type in your API Key. If you need an API key, %(instructions)s" +msgstr "輸入您的 API 金鑰。如果您需要 API 金鑰,%(instructions)s" + +#: libretranslate/templates/app.js.template:530 +msgid "press the \"Get API Key\" link." +msgstr "點選“取得 API 金鑰”連結。" + +#: libretranslate/templates/app.js.template:530 +msgid "contact the server operator." +msgstr "聯絡伺服器管理員。" + +#: libretranslate/templates/index.html:9 libretranslate/templates/index.html:27 +#: libretranslate/templates/index.html:338 +msgid "Free and Open Source Machine Translation API" +msgstr "免費開源的機器翻譯 API" + +#: libretranslate/templates/index.html:10 +#: libretranslate/templates/index.html:31 +msgid "" +"Free and Open Source Machine Translation API. Self-hosted, offline " +"capable and easy to setup. Run your own API server in just a few minutes." +msgstr "免費開源的機器翻譯 API。自建,支援離線且易於設定。只需幾分鐘即可運行您自己的 API 伺服器。" + +#: libretranslate/templates/index.html:11 +msgid "translation" +msgstr "翻譯" + +#: libretranslate/templates/index.html:11 +msgid "api" +msgstr "API" + +#: libretranslate/templates/index.html:67 +msgid "API Docs" +msgstr "API 文件" + +#: libretranslate/templates/index.html:69 +msgid "Get API Key" +msgstr "取得 API 金鑰" + +#: libretranslate/templates/index.html:71 +msgid "GitHub" +msgstr "GitHub" + +#: libretranslate/templates/index.html:73 +msgid "Set API Key" +msgstr "設定 API 金鑰" + +#: libretranslate/templates/index.html:75 +msgid "Change language" +msgstr "更改語言" + +#: libretranslate/templates/index.html:81 +msgid "Edit" +msgstr "編輯" + +#: libretranslate/templates/index.html:83 +msgid "Toggle dark/light mode" +msgstr "切換深色/淺色模式" + +#: libretranslate/templates/index.html:159 +msgid "Dismiss" +msgstr "忽略" + +#: libretranslate/templates/index.html:173 +msgid "Translation API" +msgstr "翻譯 API" + +#: libretranslate/templates/index.html:177 +msgid "Translate Text" +msgstr "翻譯文字" + +#: libretranslate/templates/index.html:181 +msgid "Translate Files" +msgstr "翻譯檔案" + +#: libretranslate/templates/index.html:187 +msgid "Translate from" +msgstr "翻譯自" + +#: libretranslate/templates/index.html:197 +msgid "Swap source and target languages" +msgstr "來源語言與目標語言互換" + +#: libretranslate/templates/index.html:200 +msgid "Translate into" +msgstr "翻譯成" + +#: libretranslate/templates/index.html:212 +msgid "Text to translate" +msgstr "需要翻譯的文字" + +#: libretranslate/templates/index.html:215 +msgid "Delete text" +msgstr "刪除文字" + +#: libretranslate/templates/index.html:228 +msgid "Suggest translation" +msgstr "建議翻譯" + +#: libretranslate/templates/index.html:232 +msgid "Cancel" +msgstr "取消" + +#: libretranslate/templates/index.html:235 +msgid "Send" +msgstr "送出" + +#: libretranslate/templates/index.html:251 +msgid "Supported file formats:" +msgstr "支援的檔案格式:" + +#: libretranslate/templates/index.html:255 +msgid "File" +msgstr "檔案" + +#: libretranslate/templates/index.html:270 +msgid "Remove file" +msgstr "移除檔案" + +#: libretranslate/templates/index.html:277 +msgid "Translate" +msgstr "翻譯" + +#: libretranslate/templates/index.html:278 +#: libretranslate/templates/index.html:322 +msgid "Download" +msgstr "下載" + +#: libretranslate/templates/index.html:297 +msgid "Request" +msgstr "請求" + +#: libretranslate/templates/index.html:302 +msgid "Response" +msgstr "回應" + +#: libretranslate/templates/index.html:317 +msgid "Open Source Machine Translation API" +msgstr "開源的機器翻譯 API" + +#: libretranslate/templates/index.html:318 +msgid "Self-Hosted. Offline Capable. Easy to Setup." +msgstr "自建。可離線。容易設定。" + +#: libretranslate/templates/index.html:337 +msgid "LibreTranslate" +msgstr "LibreTranslate" + +#: libretranslate/templates/index.html:339 +msgid "License:" +msgstr "授權:" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "Made with %(heart)s by %(contributors)s and powered by %(engine)s" +msgstr "由 %(contributors)s 用 %(heart)s 製作並且由 %(engine)s 驅動" + +#: libretranslate/templates/index.html:345 +#, python-format +msgid "%(libretranslate)s Contributors" +msgstr "%(libretranslate)s 貢獻者" + +#~ msgid "Vietnamese" +#~ msgstr "越南文" + +#~ msgid "" +#~ "This public API should be used for" +#~ " testing, personal or infrequent use. " +#~ "If you're going to run an " +#~ "application in production, please " +#~ "%(host_server)s or %(get_api_key)s." +#~ msgstr "" +#~ "此公共 API 僅適用於測試、個人或不經常使用。如果您將在正式環境中使用,請 " +#~ "%(host_server)s 或 %(get_api_key)s。" + +#~ msgid "host your own server" +#~ msgstr "建立自己的伺服器" + +#~ msgid "get an API key" +#~ msgstr "取得 API 金鑰" diff --git a/libretranslate/locales/zh_Hant/meta.json b/libretranslate/locales/zh_Hant/meta.json new file mode 100644 index 0000000000000000000000000000000000000000..73e357e9d219285f4f64da412b9784a55deac760 --- /dev/null +++ b/libretranslate/locales/zh_Hant/meta.json @@ -0,0 +1,4 @@ +{ + "name": "Chinese (Traditional)", + "reviewed": false +} \ No newline at end of file diff --git a/libretranslate/main.py b/libretranslate/main.py new file mode 100644 index 0000000000000000000000000000000000000000..b6b6a0326dcf6dccc37f790062baf27ad8508ef1 --- /dev/null +++ b/libretranslate/main.py @@ -0,0 +1,253 @@ +import argparse +import operator +import sys + +from libretranslate.app import create_app +from libretranslate.default_values import DEFAULT_ARGUMENTS as DEFARGS + + +def get_args(): + parser = argparse.ArgumentParser( + description="LibreTranslate - Free and Open Source Translation API" + ) + parser.add_argument( + "--host", type=str, help="Hostname (%(default)s)", default=DEFARGS['HOST'] + ) + parser.add_argument("--port", type=int, help="Port (%(default)s)", default=DEFARGS['PORT']) + parser.add_argument( + "--char-limit", + default=DEFARGS['CHAR_LIMIT'], + type=int, + metavar="", + help="Set character limit (%(default)s)", + ) + parser.add_argument( + "--req-limit", + default=DEFARGS['REQ_LIMIT'], + type=int, + metavar="", + help="Set the default maximum number of requests per minute per client (%(default)s)", + ) + parser.add_argument( + "--req-limit-storage", + default=DEFARGS['REQ_LIMIT_STORAGE'], + type=str, + metavar="", + help="Storage URI to use for request limit data storage. See https://flask-limiter.readthedocs.io/en/stable/configuration.html. (%(default)s)", + ) + parser.add_argument( + "--hourly-req-limit", + default=DEFARGS['HOURLY_REQ_LIMIT'], + type=int, + metavar="", + help="Set the default maximum number of requests per hour per client, in addition to req-limit. (%(default)s)", + ) + parser.add_argument( + "--hourly-req-limit-decay", + default=DEFARGS['HOURLY_REQ_LIMIT_DECAY'], + type=int, + metavar="", + help="When used in combination with hourly-req-limit, adds additional hourly restrictions that logaritmically decrease for each additional hour. (%(default)s)", + ) + parser.add_argument( + "--daily-req-limit", + default=DEFARGS['DAILY_REQ_LIMIT'], + type=int, + metavar="", + help="Set the default maximum number of requests per day per client, in addition to req-limit. (%(default)s)", + ) + parser.add_argument( + "--req-flood-threshold", + default=DEFARGS['REQ_FLOOD_THRESHOLD'], + type=int, + metavar="", + help="Set the maximum number of request limit offences that a client can exceed before being banned. (%(default)s)", + ) + parser.add_argument( + "--req-time-cost", + default=DEFARGS['REQ_TIME_COST'], + type=int, + metavar="", + help="Considers a time cost (in seconds) for request limiting purposes. If a request takes 10 seconds and this value is set to 5, the request cost is either 2 or the actual request cost (whichever is greater). (%(default)s)", + ) + parser.add_argument( + "--batch-limit", + default=DEFARGS['BATCH_LIMIT'], + type=int, + metavar="", + help="Set maximum number of texts to translate in a batch request (%(default)s)", + ) + parser.add_argument( + "--ga-id", + type=str, + default=DEFARGS['GA_ID'], + metavar="", + help="Enable Google Analytics on the API client page by providing an ID (%(default)s)", + ) + parser.add_argument( + "--debug", default=DEFARGS['DEBUG'], action="store_true", help="Enable debug environment" + ) + parser.add_argument( + "--ssl", default=DEFARGS['SSL'], action="store_true", help="Whether to enable SSL" + ) + parser.add_argument( + "--frontend-language-source", + type=str, + default=DEFARGS['FRONTEND_LANGUAGE_SOURCE'], + metavar="", + help="Set frontend default language - source (%(default)s)", + ) + parser.add_argument( + "--frontend-language-target", + type=str, + default=DEFARGS['FRONTEND_LANGUAGE_TARGET'], + metavar="", + help="Set frontend default language - target (%(default)s)", + ) + parser.add_argument( + "--frontend-timeout", + type=int, + default=DEFARGS['FRONTEND_TIMEOUT'], + metavar="", + help="Set frontend translation timeout (%(default)s)", + ) + parser.add_argument( + "--api-keys", + default=DEFARGS['API_KEYS'], + action="store_true", + help="Enable API keys database for per-user rate limits lookup", + ) + parser.add_argument( + "--api-keys-db-path", + default=DEFARGS['API_KEYS_DB_PATH'], + type=str, + help="Use a specific path inside the container for the local database. Can be absolute or relative (%(default)s)", + ) + parser.add_argument( + "--api-keys-remote", + default=DEFARGS['API_KEYS_REMOTE'], + type=str, + help="Use this remote endpoint to query for valid API keys instead of using the local database", + ) + parser.add_argument( + "--get-api-key-link", + default=DEFARGS['GET_API_KEY_LINK'], + type=str, + help="Show a link in the UI where to direct users to get an API key", + ) + parser.add_argument( + "--require-api-key-origin", + type=str, + default=DEFARGS['REQUIRE_API_KEY_ORIGIN'], + help="Require use of an API key for programmatic access to the API, unless the request origin matches this domain", + ) + parser.add_argument( + "--require-api-key-secret", + default=DEFARGS['REQUIRE_API_KEY_SECRET'], + action="store_true", + help="Require use of an API key for programmatic access to the API, unless the client also sends a secret match", + ) + parser.add_argument( + "--shared-storage", + type=str, + default=DEFARGS['SHARED_STORAGE'], + metavar="", + help="Shared storage URI to use for multi-process data sharing (e.g. via gunicorn)", + ) + parser.add_argument( + "--secondary", + default=DEFARGS['SECONDARY'], + action="store_true", + help="Mark this instance as a secondary instance to avoid conflicts with the primary node in multi-node setups", + ) + parser.add_argument( + "--load-only", + type=operator.methodcaller("split", ","), + default=DEFARGS['LOAD_ONLY'], + metavar="", + help="Set available languages (ar,de,en,es,fr,ga,hi,it,ja,ko,pt,ru,zh)", + ) + parser.add_argument( + "--alternatives-limit", + default=DEFARGS['ALTERNATIVES_LIMIT'], + type=int, + metavar="", + help="Set the maximum number of supported alternative translations (%(default)s)", + ) + parser.add_argument( + "--threads", + default=DEFARGS['THREADS'], + type=int, + metavar="", + help="Set number of threads (%(default)s)", + ) + parser.add_argument( + "--suggestions", default=DEFARGS['SUGGESTIONS'], action="store_true", help="Allow user suggestions" + ) + parser.add_argument( + "--disable-files-translation", default=DEFARGS['DISABLE_FILES_TRANSLATION'], action="store_true", + help="Disable files translation" + ) + parser.add_argument( + "--disable-web-ui", default=DEFARGS['DISABLE_WEB_UI'], action="store_true", help="Disable web ui" + ) + parser.add_argument( + "--update-models", default=DEFARGS['UPDATE_MODELS'], action="store_true", help="Update language models at startup" + ) + parser.add_argument( + "--force-update-models", default=DEFARGS['FORCE_UPDATE_MODELS'], action="store_true", help="Install/Reinstall language models at startup" + ) + parser.add_argument( + "--metrics", + default=DEFARGS['METRICS'], + action="store_true", + help="Enable the /metrics endpoint for exporting Prometheus usage metrics", + ) + parser.add_argument( + "--metrics-auth-token", + default=DEFARGS['METRICS_AUTH_TOKEN'], + type=str, + help="Protect the /metrics endpoint by allowing only clients that have a valid Authorization Bearer token (%(default)s)", + ) + parser.add_argument( + "--url-prefix", + default=DEFARGS['URL_PREFIX'], + type=str, + help="Add prefix to URL: example.com:5000/url-prefix/", + ) + args = parser.parse_args() + if args.url_prefix and not args.url_prefix.startswith('/'): + args.url_prefix = '/' + args.url_prefix + return args + + +def main(): + args = get_args() + app = create_app(args) + + if '--wsgi' in sys.argv: + return app + else: + if args.debug and args.host == "*": + # '::' will listen on both ipv6 and ipv4 + args.host = "::" + + if args.debug: + app.run(host=args.host, port=args.port) + else: + from waitress import serve + + url_scheme = "https" if args.ssl else "http" + print(f"Running on {url_scheme}://{args.host}:{args.port}{args.url_prefix}") + + serve( + app, + host=args.host, + port=args.port, + url_scheme=url_scheme, + threads=args.threads + ) + + +if __name__ == "__main__": + main() diff --git a/libretranslate/manage.py b/libretranslate/manage.py new file mode 100644 index 0000000000000000000000000000000000000000..5ba8fd45c2145d11a598abfb153ff940053f5cd4 --- /dev/null +++ b/libretranslate/manage.py @@ -0,0 +1,63 @@ +import argparse +import os + +from libretranslate.api_keys import Database +from libretranslate.default_values import DEFAULT_ARGUMENTS as DEFARGS + + +def manage(): + parser = argparse.ArgumentParser(description="LibreTranslate Manage Tools") + subparsers = parser.add_subparsers( + help="", dest="command", required=True, title="Command List" + ) + + keys_parser = subparsers.add_parser("keys", help="Manage API keys database") + keys_parser.add_argument( + "--api-keys-db-path", + default=DEFARGS['API_KEYS_DB_PATH'], + type=str, + help="Use a specific path inside the container for the local database", + ) + keys_subparser = keys_parser.add_subparsers( + help="", dest="sub_command", title="Command List" + ) + + keys_add_parser = keys_subparser.add_parser("add", help="Add API keys to database") + keys_add_parser.add_argument( + "req_limit", type=int, help="Request Limits (per minute)" + ) + keys_add_parser.add_argument( + "--key", type=str, default="auto", required=False, help="API Key" + ) + keys_add_parser.add_argument( + "--char-limit", type=int, default=0, required=False, help="Character limit" + ) + + keys_remove_parser = keys_subparser.add_parser( + "remove", help="Remove API keys to database" + ) + keys_remove_parser.add_argument("key", type=str, help="API Key") + + args = parser.parse_args() + + if args.command == "keys": + if not os.path.exists(args.api_keys_db_path): + print("No such database: %s" % args.api_keys_db_path) + exit(1) + db = Database(args.api_keys_db_path) + if args.sub_command is None: + # Print keys + keys = db.all() + if not keys: + print("There are no API keys") + else: + for item in keys: + print("{}: {}".format(*item)) + + elif args.sub_command == "add": + print(db.add(args.req_limit, args.key, args.char_limit)[0]) + elif args.sub_command == "remove": + print(db.remove(args.key)) + else: + parser.print_help() + exit(1) diff --git a/libretranslate/no_limiter.py b/libretranslate/no_limiter.py new file mode 100644 index 0000000000000000000000000000000000000000..28d895e9610b57d4e09aa31123a13c33c37e9e06 --- /dev/null +++ b/libretranslate/no_limiter.py @@ -0,0 +1,13 @@ +from functools import wraps + + +class Limiter: + def exempt(self, f): + @wraps(f) + def wrapper(*args, **kwargs): + return f(*args, **kwargs) + + return wrapper + + def init_app(self, app): + pass diff --git a/libretranslate/remove_translated_files.py b/libretranslate/remove_translated_files.py new file mode 100644 index 0000000000000000000000000000000000000000..c354b1aba4dd7bf470c2df7be0372e7e17cfca5e --- /dev/null +++ b/libretranslate/remove_translated_files.py @@ -0,0 +1,26 @@ +import atexit +import os +import time +from datetime import datetime + +from apscheduler.schedulers.background import BackgroundScheduler + + +def remove_translated_files(upload_dir: str): + now = time.mktime(datetime.now().timetuple()) + + for f in os.listdir(upload_dir): + f = os.path.join(upload_dir, f) + if os.path.isfile(f): + f_time = os.path.getmtime(f) + if (now - f_time) > 1800: # 30 minutes + os.remove(f) + + +def setup(upload_dir): + scheduler = BackgroundScheduler(daemon=True) + scheduler.add_job(remove_translated_files, "interval", minutes=30, kwargs={'upload_dir': upload_dir}) + scheduler.start() + + # Shut down the scheduler when exiting the app + atexit.register(lambda: scheduler.shutdown()) diff --git a/libretranslate/scheduler.py b/libretranslate/scheduler.py new file mode 100644 index 0000000000000000000000000000000000000000..836a3eab822c1e7d8afb3869792965727a730db2 --- /dev/null +++ b/libretranslate/scheduler.py @@ -0,0 +1,25 @@ +import atexit + +from apscheduler.schedulers.background import BackgroundScheduler + +scheduler = None + +def setup(args): + from libretranslate.flood import forgive_banned + from libretranslate.secret import rotate_secrets + + global scheduler + + if scheduler is None: + scheduler = BackgroundScheduler() + + if not args.secondary and args.req_flood_threshold > 0: + scheduler.add_job(func=forgive_banned, trigger="interval", minutes=10) + + if not args.secondary and args.api_keys and args.require_api_key_secret: + scheduler.add_job(func=rotate_secrets, trigger="interval", minutes=30) + + scheduler.start() + + # Shut down the scheduler when exiting the app + atexit.register(lambda: scheduler.shutdown()) \ No newline at end of file diff --git a/libretranslate/secret.py b/libretranslate/secret.py new file mode 100644 index 0000000000000000000000000000000000000000..c8f278a1afe8972498ed95873b4acb1a8ebf152b --- /dev/null +++ b/libretranslate/secret.py @@ -0,0 +1,121 @@ +import base64 +import random +import string +from functools import lru_cache + +from libretranslate.storage import get_storage + + +def to_base(n, b): + if n == 0: + return 0 + if n < 0: + sign = -1 + else: + sign = 1 + + n *= sign + digits = [] + while n: + digits.append(str(n % b)) + n //= b + return int(''.join(digits[::-1])) * sign + +@lru_cache(maxsize=4) +def obfuscate(input_str): + encoded = [ord(ch) for ch in input_str] + ops = ['+', '-', '*', ''] + parts = [] + + for c in encoded: + num = random.randint(1, 100) + op = random.choice(ops) + if op == '+': + v = c + num + op = '-' + elif op == '-': + v = c - num + op = '+' + if random.randint(0, 1) == 0: + op = '+false+' + elif op == '*': + v = c * num + op = '/' + if random.randint(0, 1) == 0: + op = '/**\\/*//' + + use_dec = random.randint(0, 1) == 0 + base = random.randint(4, 7) + + if op == '': + if use_dec: + parts.append(f'_({c})') + else: + parts.append(f'_(p({to_base(c, base)},{base}))') + else: + if use_dec: + parts.append(f'_({v}{op}{num})') + else: + parts.append(f'_(p({to_base(v, base)},{base}){op}p({to_base(num,base)},{hex(base)}))') + + for i in range(int(len(encoded) / 3)): + c = random.randint(1, 100) + parts.insert(random.randint(0, len(parts)), f"_(/*_({c})*/)") + for i in range(int(len(encoded) / 3)): + parts.insert(random.randint(0, len(parts)), f"\n[]\n") + + code = '(_=String.fromCharCode,p=parseInt,' + '+'.join(parts) + ')' + return code + +def generate_secret(): + return ''.join(random.choices(string.ascii_uppercase + string.digits, k=7)) + +def rotate_secrets(): + s = get_storage() + secret_1 = s.get_str("secret_1") + s.set_str("secret_0", secret_1) + s.set_str("secret_1", generate_secret()) + +def secret_match(secret): + s = get_storage() + return secret == s.get_str("secret_0") or secret == s.get_str("secret_1") + +def secret_bogus_match(secret): + if random.randint(0, 1) == 0: + return secret == get_bogus_secret() + return False + +def get_current_secret(): + return get_storage().get_str("secret_1") + +def get_current_secret_b64(): + return base64.b64encode(get_current_secret().encode("utf-8")).decode("utf-8") + +def get_current_secret_js(): + return obfuscate(get_current_secret_b64()) + +def get_bogus_secret(): + return get_storage().get_str("secret_bogus") + +def get_bogus_secret_b64(): + return base64.b64encode(get_bogus_secret().encode("utf-8")).decode("utf-8") + +def get_bogus_secret_js(): + return obfuscate(get_bogus_secret_b64()) + +@lru_cache(maxsize=1) +def get_emoji(): + return random.choice(["😂", "🤪", "😜", "🤣", "😹", "🐒", "🙈", "🤡", "🥸", "😆", "🥴", "🐸", "🐤", "🐒🙊", "👀", "💩", "🤯", "😛", "🤥", "👻"]) + +def setup(args): + if args.api_keys and args.require_api_key_secret: + s = get_storage() + + if not s.exists("secret_0"): + s.set_str("secret_0", generate_secret()) + + if not s.exists("secret_1"): + s.set_str("secret_1", generate_secret()) + + if not s.exists("secret_bogus"): + s.set_str("secret_bogus", generate_secret()) diff --git a/libretranslate/security.py b/libretranslate/security.py new file mode 100644 index 0000000000000000000000000000000000000000..7163a839f58912677f870daabc176a8a48a0a9be --- /dev/null +++ b/libretranslate/security.py @@ -0,0 +1,16 @@ +import os + + +class SuspiciousFileOperationError(Exception): + pass + + +def path_traversal_check(unsafe_path, known_safe_path): + known_safe_path = os.path.abspath(known_safe_path) + unsafe_path = os.path.abspath(unsafe_path) + + if (os.path.commonprefix([known_safe_path, unsafe_path]) != known_safe_path): + raise SuspiciousFileOperationError(f"{unsafe_path} is not safe") + + # Passes the check + return unsafe_path diff --git a/libretranslate/static/css/main.css b/libretranslate/static/css/main.css new file mode 100644 index 0000000000000000000000000000000000000000..a77c212bdcd9522154a6ea172f690ddb4affdec1 --- /dev/null +++ b/libretranslate/static/css/main.css @@ -0,0 +1,484 @@ +/* Custom styles for LibreTranslate page */ + +:root { + --pri-bg-color: #fff; + --sec-bg-color: #f3f3f3; + --code-bg-color: #fbfbfb; + --border-color: #ccc; + --fg-color: #000; + --nav-fg-color: #fff; + --accent-color: #1565c0; +} + +@media (prefers-color-scheme: dark) { + :root { + --pri-bg-color: #111; + --sec-bg-color: #222; + --code-bg-color: #222; + --border-color: #444; + --fg-color: #fff; + } + + .token.atrule, .token.attr-value, .token.keyword { + color: #40b5e8; + } + + .language-css .token.string, .style .token.string, + .token.entity, .token.operator, .token.url { + color: #eecfab; + background: hsla(0,0%, 15%, .5); + } + + .token.attr-name, .token.builtin, .token.char, + .token.inserted, .token.selector, .token.string { + color: #acd25f; + } + + .token.boolean, .token.constant, .token.deleted, .token.number, + .token.property, .token.symbol, .token.tag { + color: #ff8bcc; + } + + .token.class-name, .token.function { + color: #ff7994; + } +} + +html, body, select { + font-size: 16px; + font-family: Arial, Helvetica, sans-serif !important; +} + +body { + background-color: var(--pri-bg-color); + color: var(--fg-color); +} + +nav, #nav, #nav-mobile, .locale-panel, .page-footer { + background-color: var(--accent-color); +} + +nav, nav .material-icons { + color: var(--nav-fg-color); +} + +.material-icons { + color: var(--fg-color); +} + +a:not(.noline) { + text-decoration: underline; +} + +#app { + min-height: 80vh; +} + +.component{ + visibility: hidden; +} + +#app.loaded .component{ + visibility: visible; +} + +h3.header { + margin-bottom: 2.5rem; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mb-1 { + margin-bottom: 1rem; +} + +.position-relative { + position: relative; +} + +.top-nav .locale-panel { + position: absolute; + top: 64px; + height: 68px; + right: 0; + padding: 0 16px; + width: 240px; + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 0 2px 2px 0 rgb(0 0 0 / 14%), 0 3px 1px -2px rgb(0 0 0 / 12%), 0px 4px 5px 0 rgb(0 0 0 / 20%); +} + +.locale-panel{ + display: none; +} + +.change-language.clicked + .locale-panel{ + display: block; +} + +.locale-panel select { + display: block; + height: 32px; + font-size: 14px; + color: var(--fg-color); + background-color: var(--pri-bg-color); + border: none; +} + +.locale-panel a{ + line-height: normal; + font-size: 90%; + padding: 0; + margin-top: 6px; + text-align: right; + text-decoration: none; + height: 28px; +} + +.locale-panel a:hover{ + text-decoration: underline; +} + +.locale-panel a i.material-icons{ + display: inline-block; + line-height: initial; + line-height: 14px; + font-size: 100%; + position: relative; + top: 2px; + left: 2px; +} + +.locale-panel a:hover{ + background-color: transparent !important; +} + +#nav-mobile .locale-panel{ + color: rgba(0,0,0,0.87); + padding: 0 32px; + padding-top: 12px; +} + +#nav-mobile a, #nav-mobile a i.material-icons{ + color: #fff; +} + +#nav-mobile .locale-panel a{ + padding: 0; +} + +#nav-mobile .locale-panel a i.material-icons{ + float: none; +} + +select { + color: var(--fg-color); + background-color: var(--pri-bg-color); +} + +.language-select { + display: inline-flex; + align-items: center; + justify-content: flex-start; +} + +.language-select select { + border: none; + width: auto; + cursor: pointer; + font-weight: 600; + text-decoration: underline; + -webkit-appearance: none; + appearance: none; + padding: 0; + text-indent: 0.01px; + text-overflow: ""; + margin: 0; + margin-left: 6px; + height: 2rem; + line-height: inherit; + outline: none; + position: relative; +} + +.language-select:after { + content: ""; + width: 0.5em; + height: 0.5em; + margin: 0 0 0.25rem -0.75rem; + border: solid var(--fg-color); + border-width: 0 2px 2px 0; + display: inline-block; + padding: 3px; + transform: rotate(45deg); + z-index: -1; +} + +.btn-switch-language { + color: black; + margin-left: -1.5rem; + margin-right: 1rem; +} + +.textarea-container { + margin-top: 0; + position: relative; +} + +.textarea-container .material-icons { + color: #666; +} + +.btn-delete-text { + position: absolute; + right: 1.5rem; + top: 0.75rem; + border: 0; + background: none; + padding: 0; + cursor: pointer; + color: #666; +} + +.btn-delete-text:focus, +.btn-action:focus { + background: none !important; +} + +.characters-limit-container { + position: absolute; + right: 2rem; + bottom: 1rem; + color: #666; + pointer-events: none; +} +.actions { + position: absolute; + right: 1.25rem; + bottom: 1rem; + display: flex; +} + +.btn-switch-type { + background-color: var(--sec-bg-color); + color: var(--fg-color); + display: flex; + align-items: center; + margin: .5rem; +} + +.btn-switch-type:focus { + background-color: inherit; +} + +.btn-switch-type:hover { + background-color: var(--sec-bg-color); +} + +.btn-switch-type.active { + background-color: var(--accent-color); + color: #FFF; +} + +.btn-switch-type.active .material-icons { + color: #FFF; +} + +.file-dropzone { + font-size: 1.1rem; + background: var(--sec-bg-color); + border: 1px solid var(--border-color); + padding: 1rem 2rem 1rem 1.5rem; + min-height: 220px; + position: relative; +} + +.dropzone-content { + position: absolute; + top: 50%; + left: 50%; + + transform: translate(-50%, -50%); +} + +.btn-action { + display: flex; + align-items: center; + color: #666; + font-size: 0.85rem; + background: none; + border: none; + cursor: pointer; +} + +.btn-blue { + color: #1565C0; +} + +.btn-action:disabled { + color: #666; +} + +.btn-action span { + padding-right: 0.5rem; +} + +.btn-action .material-icons { + font-size: 1.35rem; +} + +#translation-type-btns { + display: flex; + flex-wrap: wrap; + justify-content: center; + margin: -.5rem; +} + +.btn-text { + display: none; + margin-left: 1em; +} + +#translation-form { + padding-top: 1em; +} + +.progress { + background-color: #f3f3f3; +} + +.progress.translate { + position: absolute; +} + +.progress .indeterminate { + background-color: steelblue; +} + +.textarea-container textarea { + font-size: 1.25rem; + resize: none; + color: var(--fg-color); + background: var(--sec-bg-color); + border: 1px solid var(--border-color); + padding: 1rem 2rem 1rem 1.5rem; + overflow-y: hidden; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.code-row-wrapper { + display: flex; + flex-wrap: wrap; +} + +.code-box { + display: flex; + flex-direction: column; +} + +.code { + font-size: 90%; + padding: 1rem 1.5rem; + background: var(--code-bg-color); + border: 1px solid var(--border-color); + overflow: auto; + font-family: monospace; + min-height: 280px; + width: 100%; + overflow: auto; + flex-grow: 1; +} + +code[class*="language-"], pre[class*="language-"] { + color: var(--fg-color); + text-shadow: 0 1px var(--pri-bg-color); +} + +.page-footer .footer-copyright { + justify-content: center; + padding: 0.5rem 1rem; +} + +#logo-container { + height: 100%; +} + +.logo { + height: 32px; +} + +.brand-logo { + text-decoration: none; +} + +.sidenav-trigger { + background-color: transparent; + border: none; + color: white; +} + +#download-btn-wrapper { + display: flex; + justify-content: center; + margin: 2em 0; +} + +#download-btn { + display: flex; + align-items: center; + text-decoration: none; +} + +#download-btn i{ + color: #fff; +} + +.card-content { + background-color: var(--pri-bg-color); +} + +.card-stacked, .card-stacked .card-content { + background-color: var(--sec-bg-color) +} + +@media (min-width: 280px) { + .btn-text { + display: inline; + } +} + +@media (max-width: 760px) { + .language-select select { + text-align: center; + margin: auto; + padding: 0; + } + .language-select:after { + content: none; + } + .language-select span { + display: none; + } +} + +@media (min-width: 993px) { + nav button.sidenav-trigger { + display: none; + } +} diff --git a/libretranslate/static/css/material-icons.css b/libretranslate/static/css/material-icons.css new file mode 100644 index 0000000000000000000000000000000000000000..b19d665c9aad4a20a2c9868492aae4efb283215a --- /dev/null +++ b/libretranslate/static/css/material-icons.css @@ -0,0 +1,36 @@ +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: url('../fonts/MaterialIcons-Regular.eot'); /* For IE6-8 */ + src: local('Material Icons'), + local('MaterialIcons-Regular'), + url('../fonts/MaterialIcons-Regular.woff2') format('woff2'), + url('../fonts/MaterialIcons-Regular.woff') format('woff'), + url('../fonts/MaterialIcons-Regular.ttf') format('truetype'); +} + +.material-icons { + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; /* Preferred icon size */ + display: inline-block; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + font-feature-settings: 'liga'; +} diff --git a/libretranslate/static/css/materialize.min.css b/libretranslate/static/css/materialize.min.css new file mode 100644 index 0000000000000000000000000000000000000000..74b1741b62ee5a7e575b0f2df568cf3c4d5428cb --- /dev/null +++ b/libretranslate/static/css/materialize.min.css @@ -0,0 +1,13 @@ +/*! + * Materialize v1.0.0 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darken-4{color:#4a148c !important}.purple.accent-1{background-color:#ea80fc !important}.purple-text.text-accent-1{color:#ea80fc !important}.purple.accent-2{background-color:#e040fb !important}.purple-text.text-accent-2{color:#e040fb !important}.purple.accent-3{background-color:#d500f9 !important}.purple-text.text-accent-3{color:#d500f9 !important}.purple.accent-4{background-color:#a0f !important}.purple-text.text-accent-4{color:#a0f !important}.deep-purple{background-color:#673ab7 !important}.deep-purple-text{color:#673ab7 !important}.deep-purple.lighten-5{background-color:#ede7f6 !important}.deep-purple-text.text-lighten-5{color:#ede7f6 !important}.deep-purple.lighten-4{background-color:#d1c4e9 !important}.deep-purple-text.text-lighten-4{color:#d1c4e9 !important}.deep-purple.lighten-3{background-color:#b39ddb !important}.deep-purple-text.text-lighten-3{color:#b39ddb !important}.deep-purple.lighten-2{background-color:#9575cd !important}.deep-purple-text.text-lighten-2{color:#9575cd !important}.deep-purple.lighten-1{background-color:#7e57c2 !important}.deep-purple-text.text-lighten-1{color:#7e57c2 !important}.deep-purple.darken-1{background-color:#5e35b1 !important}.deep-purple-text.text-darken-1{color:#5e35b1 !important}.deep-purple.darken-2{background-color:#512da8 !important}.deep-purple-text.text-darken-2{color:#512da8 !important}.deep-purple.darken-3{background-color:#4527a0 !important}.deep-purple-text.text-darken-3{color:#4527a0 !important}.deep-purple.darken-4{background-color:#311b92 !important}.deep-purple-text.text-darken-4{color:#311b92 !important}.deep-purple.accent-1{background-color:#b388ff !important}.deep-purple-text.text-accent-1{color:#b388ff !important}.deep-purple.accent-2{background-color:#7c4dff !important}.deep-purple-text.text-accent-2{color:#7c4dff !important}.deep-purple.accent-3{background-color:#651fff !important}.deep-purple-text.text-accent-3{color:#651fff !important}.deep-purple.accent-4{background-color:#6200ea !important}.deep-purple-text.text-accent-4{color:#6200ea !important}.indigo{background-color:#3f51b5 !important}.indigo-text{color:#3f51b5 !important}.indigo.lighten-5{background-color:#e8eaf6 !important}.indigo-text.text-lighten-5{color:#e8eaf6 !important}.indigo.lighten-4{background-color:#c5cae9 !important}.indigo-text.text-lighten-4{color:#c5cae9 !important}.indigo.lighten-3{background-color:#9fa8da !important}.indigo-text.text-lighten-3{color:#9fa8da !important}.indigo.lighten-2{background-color:#7986cb !important}.indigo-text.text-lighten-2{color:#7986cb !important}.indigo.lighten-1{background-color:#5c6bc0 !important}.indigo-text.text-lighten-1{color:#5c6bc0 !important}.indigo.darken-1{background-color:#3949ab !important}.indigo-text.text-darken-1{color:#3949ab !important}.indigo.darken-2{background-color:#303f9f !important}.indigo-text.text-darken-2{color:#303f9f !important}.indigo.darken-3{background-color:#283593 !important}.indigo-text.text-darken-3{color:#283593 !important}.indigo.darken-4{background-color:#1a237e !important}.indigo-text.text-darken-4{color:#1a237e !important}.indigo.accent-1{background-color:#8c9eff !important}.indigo-text.text-accent-1{color:#8c9eff !important}.indigo.accent-2{background-color:#536dfe !important}.indigo-text.text-accent-2{color:#536dfe !important}.indigo.accent-3{background-color:#3d5afe !important}.indigo-text.text-accent-3{color:#3d5afe !important}.indigo.accent-4{background-color:#304ffe !important}.indigo-text.text-accent-4{color:#304ffe !important}.blue{background-color:#2196F3 !important}.blue-text{color:#2196F3 !important}.blue.lighten-5{background-color:#E3F2FD !important}.blue-text.text-lighten-5{color:#E3F2FD !important}.blue.lighten-4{background-color:#BBDEFB !important}.blue-text.text-lighten-4{color:#BBDEFB !important}.blue.lighten-3{background-color:#90CAF9 !important}.blue-text.text-lighten-3{color:#90CAF9 !important}.blue.lighten-2{background-color:#64B5F6 !important}.blue-text.text-lighten-2{color:#64B5F6 !important}.blue.lighten-1{background-color:#42A5F5 !important}.blue-text.text-lighten-1{color:#42A5F5 !important}.blue.darken-1{background-color:#1E88E5 !important}.blue-text.text-darken-1{color:#1E88E5 !important}.blue.darken-2{background-color:#1976D2 !important}.blue-text.text-darken-2{color:#1976D2 !important}.blue.darken-3{background-color:#1565C0 !important}.blue-text.text-darken-3{color:#1565C0 !important}.blue.darken-4{background-color:#0D47A1 !important}.blue-text.text-darken-4{color:#0D47A1 !important}.blue.accent-1{background-color:#82B1FF !important}.blue-text.text-accent-1{color:#82B1FF !important}.blue.accent-2{background-color:#448AFF !important}.blue-text.text-accent-2{color:#448AFF !important}.blue.accent-3{background-color:#2979FF !important}.blue-text.text-accent-3{color:#2979FF !important}.blue.accent-4{background-color:#2962FF !important}.blue-text.text-accent-4{color:#2962FF !important}.light-blue{background-color:#03a9f4 !important}.light-blue-text{color:#03a9f4 !important}.light-blue.lighten-5{background-color:#e1f5fe !important}.light-blue-text.text-lighten-5{color:#e1f5fe !important}.light-blue.lighten-4{background-color:#b3e5fc !important}.light-blue-text.text-lighten-4{color:#b3e5fc !important}.light-blue.lighten-3{background-color:#81d4fa !important}.light-blue-text.text-lighten-3{color:#81d4fa !important}.light-blue.lighten-2{background-color:#4fc3f7 !important}.light-blue-text.text-lighten-2{color:#4fc3f7 !important}.light-blue.lighten-1{background-color:#29b6f6 !important}.light-blue-text.text-lighten-1{color:#29b6f6 !important}.light-blue.darken-1{background-color:#039be5 !important}.light-blue-text.text-darken-1{color:#039be5 !important}.light-blue.darken-2{background-color:#0288d1 !important}.light-blue-text.text-darken-2{color:#0288d1 !important}.light-blue.darken-3{background-color:#0277bd !important}.light-blue-text.text-darken-3{color:#0277bd !important}.light-blue.darken-4{background-color:#01579b !important}.light-blue-text.text-darken-4{color:#01579b !important}.light-blue.accent-1{background-color:#80d8ff !important}.light-blue-text.text-accent-1{color:#80d8ff !important}.light-blue.accent-2{background-color:#40c4ff !important}.light-blue-text.text-accent-2{color:#40c4ff !important}.light-blue.accent-3{background-color:#00b0ff !important}.light-blue-text.text-accent-3{color:#00b0ff !important}.light-blue.accent-4{background-color:#0091ea !important}.light-blue-text.text-accent-4{color:#0091ea !important}.cyan{background-color:#00bcd4 !important}.cyan-text{color:#00bcd4 !important}.cyan.lighten-5{background-color:#e0f7fa !important}.cyan-text.text-lighten-5{color:#e0f7fa !important}.cyan.lighten-4{background-color:#b2ebf2 !important}.cyan-text.text-lighten-4{color:#b2ebf2 !important}.cyan.lighten-3{background-color:#80deea !important}.cyan-text.text-lighten-3{color:#80deea !important}.cyan.lighten-2{background-color:#4dd0e1 !important}.cyan-text.text-lighten-2{color:#4dd0e1 !important}.cyan.lighten-1{background-color:#26c6da !important}.cyan-text.text-lighten-1{color:#26c6da !important}.cyan.darken-1{background-color:#00acc1 !important}.cyan-text.text-darken-1{color:#00acc1 !important}.cyan.darken-2{background-color:#0097a7 !important}.cyan-text.text-darken-2{color:#0097a7 !important}.cyan.darken-3{background-color:#00838f !important}.cyan-text.text-darken-3{color:#00838f !important}.cyan.darken-4{background-color:#006064 !important}.cyan-text.text-darken-4{color:#006064 !important}.cyan.accent-1{background-color:#84ffff !important}.cyan-text.text-accent-1{color:#84ffff !important}.cyan.accent-2{background-color:#18ffff !important}.cyan-text.text-accent-2{color:#18ffff !important}.cyan.accent-3{background-color:#00e5ff !important}.cyan-text.text-accent-3{color:#00e5ff !important}.cyan.accent-4{background-color:#00b8d4 !important}.cyan-text.text-accent-4{color:#00b8d4 !important}.teal{background-color:#009688 !important}.teal-text{color:#009688 !important}.teal.lighten-5{background-color:#e0f2f1 !important}.teal-text.text-lighten-5{color:#e0f2f1 !important}.teal.lighten-4{background-color:#b2dfdb !important}.teal-text.text-lighten-4{color:#b2dfdb !important}.teal.lighten-3{background-color:#80cbc4 !important}.teal-text.text-lighten-3{color:#80cbc4 !important}.teal.lighten-2{background-color:#4db6ac !important}.teal-text.text-lighten-2{color:#4db6ac !important}.teal.lighten-1{background-color:#26a69a !important}.teal-text.text-lighten-1{color:#26a69a !important}.teal.darken-1{background-color:#00897b !important}.teal-text.text-darken-1{color:#00897b !important}.teal.darken-2{background-color:#00796b !important}.teal-text.text-darken-2{color:#00796b !important}.teal.darken-3{background-color:#00695c !important}.teal-text.text-darken-3{color:#00695c !important}.teal.darken-4{background-color:#004d40 !important}.teal-text.text-darken-4{color:#004d40 !important}.teal.accent-1{background-color:#a7ffeb !important}.teal-text.text-accent-1{color:#a7ffeb !important}.teal.accent-2{background-color:#64ffda !important}.teal-text.text-accent-2{color:#64ffda !important}.teal.accent-3{background-color:#1de9b6 !important}.teal-text.text-accent-3{color:#1de9b6 !important}.teal.accent-4{background-color:#00bfa5 !important}.teal-text.text-accent-4{color:#00bfa5 !important}.green{background-color:#4CAF50 !important}.green-text{color:#4CAF50 !important}.green.lighten-5{background-color:#E8F5E9 !important}.green-text.text-lighten-5{color:#E8F5E9 !important}.green.lighten-4{background-color:#C8E6C9 !important}.green-text.text-lighten-4{color:#C8E6C9 !important}.green.lighten-3{background-color:#A5D6A7 !important}.green-text.text-lighten-3{color:#A5D6A7 !important}.green.lighten-2{background-color:#81C784 !important}.green-text.text-lighten-2{color:#81C784 !important}.green.lighten-1{background-color:#66BB6A !important}.green-text.text-lighten-1{color:#66BB6A !important}.green.darken-1{background-color:#43A047 !important}.green-text.text-darken-1{color:#43A047 !important}.green.darken-2{background-color:#388E3C !important}.green-text.text-darken-2{color:#388E3C !important}.green.darken-3{background-color:#2E7D32 !important}.green-text.text-darken-3{color:#2E7D32 !important}.green.darken-4{background-color:#1B5E20 !important}.green-text.text-darken-4{color:#1B5E20 !important}.green.accent-1{background-color:#B9F6CA !important}.green-text.text-accent-1{color:#B9F6CA !important}.green.accent-2{background-color:#69F0AE !important}.green-text.text-accent-2{color:#69F0AE !important}.green.accent-3{background-color:#00E676 !important}.green-text.text-accent-3{color:#00E676 !important}.green.accent-4{background-color:#00C853 !important}.green-text.text-accent-4{color:#00C853 !important}.light-green{background-color:#8bc34a !important}.light-green-text{color:#8bc34a !important}.light-green.lighten-5{background-color:#f1f8e9 !important}.light-green-text.text-lighten-5{color:#f1f8e9 !important}.light-green.lighten-4{background-color:#dcedc8 !important}.light-green-text.text-lighten-4{color:#dcedc8 !important}.light-green.lighten-3{background-color:#c5e1a5 !important}.light-green-text.text-lighten-3{color:#c5e1a5 !important}.light-green.lighten-2{background-color:#aed581 !important}.light-green-text.text-lighten-2{color:#aed581 !important}.light-green.lighten-1{background-color:#9ccc65 !important}.light-green-text.text-lighten-1{color:#9ccc65 !important}.light-green.darken-1{background-color:#7cb342 !important}.light-green-text.text-darken-1{color:#7cb342 !important}.light-green.darken-2{background-color:#689f38 !important}.light-green-text.text-darken-2{color:#689f38 !important}.light-green.darken-3{background-color:#558b2f !important}.light-green-text.text-darken-3{color:#558b2f !important}.light-green.darken-4{background-color:#33691e !important}.light-green-text.text-darken-4{color:#33691e !important}.light-green.accent-1{background-color:#ccff90 !important}.light-green-text.text-accent-1{color:#ccff90 !important}.light-green.accent-2{background-color:#b2ff59 !important}.light-green-text.text-accent-2{color:#b2ff59 !important}.light-green.accent-3{background-color:#76ff03 !important}.light-green-text.text-accent-3{color:#76ff03 !important}.light-green.accent-4{background-color:#64dd17 !important}.light-green-text.text-accent-4{color:#64dd17 !important}.lime{background-color:#cddc39 !important}.lime-text{color:#cddc39 !important}.lime.lighten-5{background-color:#f9fbe7 !important}.lime-text.text-lighten-5{color:#f9fbe7 !important}.lime.lighten-4{background-color:#f0f4c3 !important}.lime-text.text-lighten-4{color:#f0f4c3 !important}.lime.lighten-3{background-color:#e6ee9c !important}.lime-text.text-lighten-3{color:#e6ee9c !important}.lime.lighten-2{background-color:#dce775 !important}.lime-text.text-lighten-2{color:#dce775 !important}.lime.lighten-1{background-color:#d4e157 !important}.lime-text.text-lighten-1{color:#d4e157 !important}.lime.darken-1{background-color:#c0ca33 !important}.lime-text.text-darken-1{color:#c0ca33 !important}.lime.darken-2{background-color:#afb42b !important}.lime-text.text-darken-2{color:#afb42b !important}.lime.darken-3{background-color:#9e9d24 !important}.lime-text.text-darken-3{color:#9e9d24 !important}.lime.darken-4{background-color:#827717 !important}.lime-text.text-darken-4{color:#827717 !important}.lime.accent-1{background-color:#f4ff81 !important}.lime-text.text-accent-1{color:#f4ff81 !important}.lime.accent-2{background-color:#eeff41 !important}.lime-text.text-accent-2{color:#eeff41 !important}.lime.accent-3{background-color:#c6ff00 !important}.lime-text.text-accent-3{color:#c6ff00 !important}.lime.accent-4{background-color:#aeea00 !important}.lime-text.text-accent-4{color:#aeea00 !important}.yellow{background-color:#ffeb3b !important}.yellow-text{color:#ffeb3b !important}.yellow.lighten-5{background-color:#fffde7 !important}.yellow-text.text-lighten-5{color:#fffde7 !important}.yellow.lighten-4{background-color:#fff9c4 !important}.yellow-text.text-lighten-4{color:#fff9c4 !important}.yellow.lighten-3{background-color:#fff59d !important}.yellow-text.text-lighten-3{color:#fff59d !important}.yellow.lighten-2{background-color:#fff176 !important}.yellow-text.text-lighten-2{color:#fff176 !important}.yellow.lighten-1{background-color:#ffee58 !important}.yellow-text.text-lighten-1{color:#ffee58 !important}.yellow.darken-1{background-color:#fdd835 !important}.yellow-text.text-darken-1{color:#fdd835 !important}.yellow.darken-2{background-color:#fbc02d !important}.yellow-text.text-darken-2{color:#fbc02d !important}.yellow.darken-3{background-color:#f9a825 !important}.yellow-text.text-darken-3{color:#f9a825 !important}.yellow.darken-4{background-color:#f57f17 !important}.yellow-text.text-darken-4{color:#f57f17 !important}.yellow.accent-1{background-color:#ffff8d !important}.yellow-text.text-accent-1{color:#ffff8d !important}.yellow.accent-2{background-color:#ff0 !important}.yellow-text.text-accent-2{color:#ff0 !important}.yellow.accent-3{background-color:#ffea00 !important}.yellow-text.text-accent-3{color:#ffea00 !important}.yellow.accent-4{background-color:#ffd600 !important}.yellow-text.text-accent-4{color:#ffd600 !important}.amber{background-color:#ffc107 !important}.amber-text{color:#ffc107 !important}.amber.lighten-5{background-color:#fff8e1 !important}.amber-text.text-lighten-5{color:#fff8e1 !important}.amber.lighten-4{background-color:#ffecb3 !important}.amber-text.text-lighten-4{color:#ffecb3 !important}.amber.lighten-3{background-color:#ffe082 !important}.amber-text.text-lighten-3{color:#ffe082 !important}.amber.lighten-2{background-color:#ffd54f !important}.amber-text.text-lighten-2{color:#ffd54f !important}.amber.lighten-1{background-color:#ffca28 !important}.amber-text.text-lighten-1{color:#ffca28 !important}.amber.darken-1{background-color:#ffb300 !important}.amber-text.text-darken-1{color:#ffb300 !important}.amber.darken-2{background-color:#ffa000 !important}.amber-text.text-darken-2{color:#ffa000 !important}.amber.darken-3{background-color:#ff8f00 !important}.amber-text.text-darken-3{color:#ff8f00 !important}.amber.darken-4{background-color:#ff6f00 !important}.amber-text.text-darken-4{color:#ff6f00 !important}.amber.accent-1{background-color:#ffe57f !important}.amber-text.text-accent-1{color:#ffe57f !important}.amber.accent-2{background-color:#ffd740 !important}.amber-text.text-accent-2{color:#ffd740 !important}.amber.accent-3{background-color:#ffc400 !important}.amber-text.text-accent-3{color:#ffc400 !important}.amber.accent-4{background-color:#ffab00 !important}.amber-text.text-accent-4{color:#ffab00 !important}.orange{background-color:#ff9800 !important}.orange-text{color:#ff9800 !important}.orange.lighten-5{background-color:#fff3e0 !important}.orange-text.text-lighten-5{color:#fff3e0 !important}.orange.lighten-4{background-color:#ffe0b2 !important}.orange-text.text-lighten-4{color:#ffe0b2 !important}.orange.lighten-3{background-color:#ffcc80 !important}.orange-text.text-lighten-3{color:#ffcc80 !important}.orange.lighten-2{background-color:#ffb74d !important}.orange-text.text-lighten-2{color:#ffb74d !important}.orange.lighten-1{background-color:#ffa726 !important}.orange-text.text-lighten-1{color:#ffa726 !important}.orange.darken-1{background-color:#fb8c00 !important}.orange-text.text-darken-1{color:#fb8c00 !important}.orange.darken-2{background-color:#f57c00 !important}.orange-text.text-darken-2{color:#f57c00 !important}.orange.darken-3{background-color:#ef6c00 !important}.orange-text.text-darken-3{color:#ef6c00 !important}.orange.darken-4{background-color:#e65100 !important}.orange-text.text-darken-4{color:#e65100 !important}.orange.accent-1{background-color:#ffd180 !important}.orange-text.text-accent-1{color:#ffd180 !important}.orange.accent-2{background-color:#ffab40 !important}.orange-text.text-accent-2{color:#ffab40 !important}.orange.accent-3{background-color:#ff9100 !important}.orange-text.text-accent-3{color:#ff9100 !important}.orange.accent-4{background-color:#ff6d00 !important}.orange-text.text-accent-4{color:#ff6d00 !important}.deep-orange{background-color:#ff5722 !important}.deep-orange-text{color:#ff5722 !important}.deep-orange.lighten-5{background-color:#fbe9e7 !important}.deep-orange-text.text-lighten-5{color:#fbe9e7 !important}.deep-orange.lighten-4{background-color:#ffccbc !important}.deep-orange-text.text-lighten-4{color:#ffccbc !important}.deep-orange.lighten-3{background-color:#ffab91 !important}.deep-orange-text.text-lighten-3{color:#ffab91 !important}.deep-orange.lighten-2{background-color:#ff8a65 !important}.deep-orange-text.text-lighten-2{color:#ff8a65 !important}.deep-orange.lighten-1{background-color:#ff7043 !important}.deep-orange-text.text-lighten-1{color:#ff7043 !important}.deep-orange.darken-1{background-color:#f4511e !important}.deep-orange-text.text-darken-1{color:#f4511e !important}.deep-orange.darken-2{background-color:#e64a19 !important}.deep-orange-text.text-darken-2{color:#e64a19 !important}.deep-orange.darken-3{background-color:#d84315 !important}.deep-orange-text.text-darken-3{color:#d84315 !important}.deep-orange.darken-4{background-color:#bf360c !important}.deep-orange-text.text-darken-4{color:#bf360c !important}.deep-orange.accent-1{background-color:#ff9e80 !important}.deep-orange-text.text-accent-1{color:#ff9e80 !important}.deep-orange.accent-2{background-color:#ff6e40 !important}.deep-orange-text.text-accent-2{color:#ff6e40 !important}.deep-orange.accent-3{background-color:#ff3d00 !important}.deep-orange-text.text-accent-3{color:#ff3d00 !important}.deep-orange.accent-4{background-color:#dd2c00 !important}.deep-orange-text.text-accent-4{color:#dd2c00 !important}.brown{background-color:#795548 !important}.brown-text{color:#795548 !important}.brown.lighten-5{background-color:#efebe9 !important}.brown-text.text-lighten-5{color:#efebe9 !important}.brown.lighten-4{background-color:#d7ccc8 !important}.brown-text.text-lighten-4{color:#d7ccc8 !important}.brown.lighten-3{background-color:#bcaaa4 !important}.brown-text.text-lighten-3{color:#bcaaa4 !important}.brown.lighten-2{background-color:#a1887f !important}.brown-text.text-lighten-2{color:#a1887f !important}.brown.lighten-1{background-color:#8d6e63 !important}.brown-text.text-lighten-1{color:#8d6e63 !important}.brown.darken-1{background-color:#6d4c41 !important}.brown-text.text-darken-1{color:#6d4c41 !important}.brown.darken-2{background-color:#5d4037 !important}.brown-text.text-darken-2{color:#5d4037 !important}.brown.darken-3{background-color:#4e342e !important}.brown-text.text-darken-3{color:#4e342e !important}.brown.darken-4{background-color:#3e2723 !important}.brown-text.text-darken-4{color:#3e2723 !important}.blue-grey{background-color:#607d8b !important}.blue-grey-text{color:#607d8b !important}.blue-grey.lighten-5{background-color:#eceff1 !important}.blue-grey-text.text-lighten-5{color:#eceff1 !important}.blue-grey.lighten-4{background-color:#cfd8dc !important}.blue-grey-text.text-lighten-4{color:#cfd8dc !important}.blue-grey.lighten-3{background-color:#b0bec5 !important}.blue-grey-text.text-lighten-3{color:#b0bec5 !important}.blue-grey.lighten-2{background-color:#90a4ae !important}.blue-grey-text.text-lighten-2{color:#90a4ae !important}.blue-grey.lighten-1{background-color:#78909c !important}.blue-grey-text.text-lighten-1{color:#78909c !important}.blue-grey.darken-1{background-color:#546e7a !important}.blue-grey-text.text-darken-1{color:#546e7a !important}.blue-grey.darken-2{background-color:#455a64 !important}.blue-grey-text.text-darken-2{color:#455a64 !important}.blue-grey.darken-3{background-color:#37474f !important}.blue-grey-text.text-darken-3{color:#37474f !important}.blue-grey.darken-4{background-color:#263238 !important}.blue-grey-text.text-darken-4{color:#263238 !important}.grey{background-color:#9e9e9e !important}.grey-text{color:#9e9e9e !important}.grey.lighten-5{background-color:#fafafa !important}.grey-text.text-lighten-5{color:#fafafa !important}.grey.lighten-4{background-color:#f5f5f5 !important}.grey-text.text-lighten-4{color:#f5f5f5 !important}.grey.lighten-3{background-color:#eee !important}.grey-text.text-lighten-3{color:#eee !important}.grey.lighten-2{background-color:#e0e0e0 !important}.grey-text.text-lighten-2{color:#e0e0e0 !important}.grey.lighten-1{background-color:#bdbdbd !important}.grey-text.text-lighten-1{color:#bdbdbd !important}.grey.darken-1{background-color:#757575 !important}.grey-text.text-darken-1{color:#757575 !important}.grey.darken-2{background-color:#616161 !important}.grey-text.text-darken-2{color:#616161 !important}.grey.darken-3{background-color:#424242 !important}.grey-text.text-darken-3{color:#424242 !important}.grey.darken-4{background-color:#212121 !important}.grey-text.text-darken-4{color:#212121 !important}.black{background-color:#000 !important}.black-text{color:#000 !important}.white{background-color:#fff !important}.white-text{color:#fff !important}.transparent{background-color:rgba(0,0,0,0) !important}.transparent-text{color:rgba(0,0,0,0) !important}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;box-sizing:inherit}button,input,optgroup,select,textarea{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}ul:not(.browser-default){padding-left:0;list-style-type:none}ul:not(.browser-default)>li{list-style-type:none}a{color:#039be5;text-decoration:none;-webkit-tap-highlight-color:transparent}.valign-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.clearfix{clear:both}.z-depth-0{-webkit-box-shadow:none !important;box-shadow:none !important}.z-depth-1,nav,.card-panel,.card,.toast,.btn,.btn-large,.btn-small,.btn-floating,.dropdown-content,.collapsible,.sidenav{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2)}.z-depth-1-half,.btn:hover,.btn-large:hover,.btn-small:hover,.btn-floating:hover{-webkit-box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2);box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2)}.z-depth-2{-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3);box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3)}.z-depth-3{-webkit-box-shadow:0 8px 17px 2px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.2);box-shadow:0 8px 17px 2px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.2)}.z-depth-4{-webkit-box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -7px rgba(0,0,0,0.2);box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -7px rgba(0,0,0,0.2)}.z-depth-5,.modal{-webkit-box-shadow:0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12),0 11px 15px -7px rgba(0,0,0,0.2);box-shadow:0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12),0 11px 15px -7px rgba(0,0,0,0.2)}.hoverable{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s}.hoverable:hover{-webkit-box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.divider{height:1px;overflow:hidden;background-color:#e0e0e0}blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #ee6e73}i{line-height:inherit}i.left{float:left;margin-right:15px}i.right{float:right;margin-left:15px}i.tiny{font-size:1rem}i.small{font-size:2rem}i.medium{font-size:4rem}i.large{font-size:6rem}img.responsive-img,video.responsive-video{max-width:100%;height:auto}.pagination li{display:inline-block;border-radius:2px;text-align:center;vertical-align:top;height:30px}.pagination li a{color:#444;display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px}.pagination li.active a{color:#fff}.pagination li.active{background-color:#ee6e73}.pagination li.disabled a{cursor:default;color:#999}.pagination li i{font-size:2rem}.pagination li.pages ul li{display:inline-block;float:none}@media only screen and (max-width: 992px){.pagination{width:100%}.pagination li.prev,.pagination li.next{width:10%}.pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}}.breadcrumb{font-size:18px;color:rgba(255,255,255,0.7)}.breadcrumb i,.breadcrumb [class^="mdi-"],.breadcrumb [class*="mdi-"],.breadcrumb i.material-icons{display:inline-block;float:left;font-size:24px}.breadcrumb:before{content:'\E5CC';color:rgba(255,255,255,0.7);vertical-align:top;display:inline-block;font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:25px;margin:0 10px 0 8px;-webkit-font-smoothing:antialiased}.breadcrumb:first-child:before{display:none}.breadcrumb:last-child{color:#fff}.parallax-container{position:relative;overflow:hidden;height:500px}.parallax-container .parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.parallax-container .parallax img{opacity:0;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);-webkit-transform:translateX(-50%);transform:translateX(-50%)}.pin-top,.pin-bottom{position:relative}.pinned{position:fixed !important}ul.staggered-list li{opacity:0}.fade-in{opacity:0;-webkit-transform-origin:0 50%;transform-origin:0 50%}@media only screen and (max-width: 600px){.hide-on-small-only,.hide-on-small-and-down{display:none !important}}@media only screen and (max-width: 992px){.hide-on-med-and-down{display:none !important}}@media only screen and (min-width: 601px){.hide-on-med-and-up{display:none !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.hide-on-med-only{display:none !important}}@media only screen and (min-width: 993px){.hide-on-large-only{display:none !important}}@media only screen and (min-width: 1201px){.hide-on-extra-large-only{display:none !important}}@media only screen and (min-width: 1201px){.show-on-extra-large{display:block !important}}@media only screen and (min-width: 993px){.show-on-large{display:block !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.show-on-medium{display:block !important}}@media only screen and (max-width: 600px){.show-on-small{display:block !important}}@media only screen and (min-width: 601px){.show-on-medium-and-up{display:block !important}}@media only screen and (max-width: 992px){.show-on-medium-and-down{display:block !important}}@media only screen and (max-width: 600px){.center-on-small-only{text-align:center}}.page-footer{padding-top:20px;color:#fff;background-color:#ee6e73}.page-footer .footer-copyright{overflow:hidden;min-height:50px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:10px 0px;color:rgba(255,255,255,0.8);background-color:rgba(51,51,51,0.08)}table,th,td{border:none}table{width:100%;display:table;border-collapse:collapse;border-spacing:0}table.striped tr{border-bottom:none}table.striped>tbody>tr:nth-child(odd){background-color:rgba(242,242,242,0.5)}table.striped>tbody>tr>td{border-radius:0}table.highlight>tbody>tr{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}table.highlight>tbody>tr:hover{background-color:rgba(242,242,242,0.5)}table.centered thead tr th,table.centered tbody tr td{text-align:center}tr{border-bottom:1px solid rgba(0,0,0,0.12)}td,th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width: 992px){table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}table.responsive-table td:empty:before{content:'\00a0'}table.responsive-table th,table.responsive-table td{margin:0;vertical-align:top}table.responsive-table th{text-align:left}table.responsive-table thead{display:block;float:left}table.responsive-table thead tr{display:block;padding:0 10px 0 0}table.responsive-table thead tr th::before{content:"\00a0"}table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}table.responsive-table tbody tr{display:inline-block;vertical-align:top}table.responsive-table th{display:block;text-align:right}table.responsive-table td{display:block;min-height:1.25em;text-align:left}table.responsive-table tr{border-bottom:none;padding:0 10px}table.responsive-table thead{border:0;border-right:1px solid rgba(0,0,0,0.12)}}.collection{margin:.5rem 0 1rem 0;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.collection .collection-item.avatar:not(.circle-clipper)>.circle,.collection .collection-item.avatar :not(.circle-clipper)>.circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.collection .collection-item.avatar .title{font-size:16px}.collection .collection-item.avatar p{margin:0}.collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.collection .collection-item:last-child{border-bottom:none}.collection .collection-item.active{background-color:#26a69a;color:#eafaf9}.collection .collection-item.active .secondary-content{color:#fff}.collection a.collection-item{display:block;-webkit-transition:.25s;transition:.25s;color:#26a69a}.collection a.collection-item:not(.active):hover{background-color:#ddd}.collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.collection.with-header .collection-item{padding-left:30px}.collection.with-header .collection-item.avatar{padding-left:72px}.secondary-content{float:right;color:#26a69a}.collapsible .collection{margin:0;border:none}.video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.video-container iframe,.video-container object,.video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.progress{position:relative;height:4px;display:block;width:100%;background-color:#acece6;border-radius:2px;margin:.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:#26a69a;-webkit-transition:width .3s linear;transition:width .3s linear}.progress .indeterminate{background-color:#26a69a}.progress .indeterminate:before{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate:after{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}.hide{display:none !important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left !important}.right{float:right !important}.no-select,input[type=range],input[type=range]+.thumb{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.circle{border-radius:50%}.center-block{display:block;margin-left:auto;margin-right:auto}.truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-padding{padding:0 !important}span.badge{min-width:3rem;padding:0 6px;margin-left:14px;text-align:center;font-size:1rem;line-height:22px;height:22px;color:#757575;float:right;-webkit-box-sizing:border-box;box-sizing:border-box}span.badge.new{font-weight:300;font-size:0.8rem;color:#fff;background-color:#26a69a;border-radius:2px}span.badge.new:after{content:" new"}span.badge[data-badge-caption]::after{content:" " attr(data-badge-caption)}nav ul a span.badge{display:inline-block;float:none;margin-left:4px;line-height:22px;height:22px;-webkit-font-smoothing:auto}.collection-item span.badge{margin-top:calc(.75rem - 11px)}.collapsible span.badge{margin-left:auto}.sidenav span.badge{margin-top:calc(24px - 11px)}table span.badge{display:inline-block;float:none;margin-left:auto}.material-icons{text-rendering:optimizeLegibility;-webkit-font-feature-settings:'liga';-moz-font-feature-settings:'liga';font-feature-settings:'liga'}.container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width: 601px){.container{width:85%}}@media only screen and (min-width: 993px){.container{width:70%}}.col .row{margin-left:-.75rem;margin-right:-.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 .75rem;min-height:1px}.row .col[class*="push-"],.row .col[class*="pull-"]{position:relative}.row .col.s1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.s4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.s7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.s10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-s1{margin-left:8.3333333333%}.row .col.pull-s1{right:8.3333333333%}.row .col.push-s1{left:8.3333333333%}.row .col.offset-s2{margin-left:16.6666666667%}.row .col.pull-s2{right:16.6666666667%}.row .col.push-s2{left:16.6666666667%}.row .col.offset-s3{margin-left:25%}.row .col.pull-s3{right:25%}.row .col.push-s3{left:25%}.row .col.offset-s4{margin-left:33.3333333333%}.row .col.pull-s4{right:33.3333333333%}.row .col.push-s4{left:33.3333333333%}.row .col.offset-s5{margin-left:41.6666666667%}.row .col.pull-s5{right:41.6666666667%}.row .col.push-s5{left:41.6666666667%}.row .col.offset-s6{margin-left:50%}.row .col.pull-s6{right:50%}.row .col.push-s6{left:50%}.row .col.offset-s7{margin-left:58.3333333333%}.row .col.pull-s7{right:58.3333333333%}.row .col.push-s7{left:58.3333333333%}.row .col.offset-s8{margin-left:66.6666666667%}.row .col.pull-s8{right:66.6666666667%}.row .col.push-s8{left:66.6666666667%}.row .col.offset-s9{margin-left:75%}.row .col.pull-s9{right:75%}.row .col.push-s9{left:75%}.row .col.offset-s10{margin-left:83.3333333333%}.row .col.pull-s10{right:83.3333333333%}.row .col.push-s10{left:83.3333333333%}.row .col.offset-s11{margin-left:91.6666666667%}.row .col.pull-s11{right:91.6666666667%}.row .col.push-s11{left:91.6666666667%}.row .col.offset-s12{margin-left:100%}.row .col.pull-s12{right:100%}.row .col.push-s12{left:100%}@media only screen and (min-width: 601px){.row .col.m1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.m4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.m7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.m10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-m1{margin-left:8.3333333333%}.row .col.pull-m1{right:8.3333333333%}.row .col.push-m1{left:8.3333333333%}.row .col.offset-m2{margin-left:16.6666666667%}.row .col.pull-m2{right:16.6666666667%}.row .col.push-m2{left:16.6666666667%}.row .col.offset-m3{margin-left:25%}.row .col.pull-m3{right:25%}.row .col.push-m3{left:25%}.row .col.offset-m4{margin-left:33.3333333333%}.row .col.pull-m4{right:33.3333333333%}.row .col.push-m4{left:33.3333333333%}.row .col.offset-m5{margin-left:41.6666666667%}.row .col.pull-m5{right:41.6666666667%}.row .col.push-m5{left:41.6666666667%}.row .col.offset-m6{margin-left:50%}.row .col.pull-m6{right:50%}.row .col.push-m6{left:50%}.row .col.offset-m7{margin-left:58.3333333333%}.row .col.pull-m7{right:58.3333333333%}.row .col.push-m7{left:58.3333333333%}.row .col.offset-m8{margin-left:66.6666666667%}.row .col.pull-m8{right:66.6666666667%}.row .col.push-m8{left:66.6666666667%}.row .col.offset-m9{margin-left:75%}.row .col.pull-m9{right:75%}.row .col.push-m9{left:75%}.row .col.offset-m10{margin-left:83.3333333333%}.row .col.pull-m10{right:83.3333333333%}.row .col.push-m10{left:83.3333333333%}.row .col.offset-m11{margin-left:91.6666666667%}.row .col.pull-m11{right:91.6666666667%}.row .col.push-m11{left:91.6666666667%}.row .col.offset-m12{margin-left:100%}.row .col.pull-m12{right:100%}.row .col.push-m12{left:100%}}@media only screen and (min-width: 993px){.row .col.l1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.l4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.l7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.l10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-l1{margin-left:8.3333333333%}.row .col.pull-l1{right:8.3333333333%}.row .col.push-l1{left:8.3333333333%}.row .col.offset-l2{margin-left:16.6666666667%}.row .col.pull-l2{right:16.6666666667%}.row .col.push-l2{left:16.6666666667%}.row .col.offset-l3{margin-left:25%}.row .col.pull-l3{right:25%}.row .col.push-l3{left:25%}.row .col.offset-l4{margin-left:33.3333333333%}.row .col.pull-l4{right:33.3333333333%}.row .col.push-l4{left:33.3333333333%}.row .col.offset-l5{margin-left:41.6666666667%}.row .col.pull-l5{right:41.6666666667%}.row .col.push-l5{left:41.6666666667%}.row .col.offset-l6{margin-left:50%}.row .col.pull-l6{right:50%}.row .col.push-l6{left:50%}.row .col.offset-l7{margin-left:58.3333333333%}.row .col.pull-l7{right:58.3333333333%}.row .col.push-l7{left:58.3333333333%}.row .col.offset-l8{margin-left:66.6666666667%}.row .col.pull-l8{right:66.6666666667%}.row .col.push-l8{left:66.6666666667%}.row .col.offset-l9{margin-left:75%}.row .col.pull-l9{right:75%}.row .col.push-l9{left:75%}.row .col.offset-l10{margin-left:83.3333333333%}.row .col.pull-l10{right:83.3333333333%}.row .col.push-l10{left:83.3333333333%}.row .col.offset-l11{margin-left:91.6666666667%}.row .col.pull-l11{right:91.6666666667%}.row .col.push-l11{left:91.6666666667%}.row .col.offset-l12{margin-left:100%}.row .col.pull-l12{right:100%}.row .col.push-l12{left:100%}}@media only screen and (min-width: 1201px){.row .col.xl1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.xl4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.xl7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.xl10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-xl1{margin-left:8.3333333333%}.row .col.pull-xl1{right:8.3333333333%}.row .col.push-xl1{left:8.3333333333%}.row .col.offset-xl2{margin-left:16.6666666667%}.row .col.pull-xl2{right:16.6666666667%}.row .col.push-xl2{left:16.6666666667%}.row .col.offset-xl3{margin-left:25%}.row .col.pull-xl3{right:25%}.row .col.push-xl3{left:25%}.row .col.offset-xl4{margin-left:33.3333333333%}.row .col.pull-xl4{right:33.3333333333%}.row .col.push-xl4{left:33.3333333333%}.row .col.offset-xl5{margin-left:41.6666666667%}.row .col.pull-xl5{right:41.6666666667%}.row .col.push-xl5{left:41.6666666667%}.row .col.offset-xl6{margin-left:50%}.row .col.pull-xl6{right:50%}.row .col.push-xl6{left:50%}.row .col.offset-xl7{margin-left:58.3333333333%}.row .col.pull-xl7{right:58.3333333333%}.row .col.push-xl7{left:58.3333333333%}.row .col.offset-xl8{margin-left:66.6666666667%}.row .col.pull-xl8{right:66.6666666667%}.row .col.push-xl8{left:66.6666666667%}.row .col.offset-xl9{margin-left:75%}.row .col.pull-xl9{right:75%}.row .col.push-xl9{left:75%}.row .col.offset-xl10{margin-left:83.3333333333%}.row .col.pull-xl10{right:83.3333333333%}.row .col.push-xl10{left:83.3333333333%}.row .col.offset-xl11{margin-left:91.6666666667%}.row .col.pull-xl11{right:91.6666666667%}.row .col.push-xl11{left:91.6666666667%}.row .col.offset-xl12{margin-left:100%}.row .col.pull-xl12{right:100%}.row .col.push-xl12{left:100%}}nav{color:#fff;background-color:#ee6e73;width:100%;height:56px;line-height:56px}nav.nav-extended{height:auto}nav.nav-extended .nav-wrapper{min-height:56px;height:auto}nav.nav-extended .nav-content{position:relative;line-height:normal}nav a{color:#fff}nav i,nav [class^="mdi-"],nav [class*="mdi-"],nav i.material-icons{display:block;font-size:24px;height:56px;line-height:56px}nav .nav-wrapper{position:relative;height:100%}@media only screen and (min-width: 993px){nav a.sidenav-trigger{display:none}}nav .sidenav-trigger{float:left;position:relative;z-index:1;height:56px;margin:0 18px}nav .sidenav-trigger i{height:56px;line-height:56px}nav .brand-logo{position:absolute;color:#fff;display:inline-block;font-size:2.1rem;padding:0}nav .brand-logo.center{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}@media only screen and (max-width: 992px){nav .brand-logo{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}nav .brand-logo.left,nav .brand-logo.right{padding:0;-webkit-transform:none;transform:none}nav .brand-logo.left{left:0.5rem}nav .brand-logo.right{right:0.5rem;left:auto}}nav .brand-logo.right{right:0.5rem;padding:0}nav .brand-logo i,nav .brand-logo [class^="mdi-"],nav .brand-logo [class*="mdi-"],nav .brand-logo i.material-icons{float:left;margin-right:15px}nav .nav-title{display:inline-block;font-size:32px;padding:28px 0}nav ul{margin:0}nav ul li{-webkit-transition:background-color .3s;transition:background-color .3s;float:left;padding:0}nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{-webkit-transition:background-color .3s;transition:background-color .3s;font-size:1rem;color:#fff;display:block;padding:0 15px;cursor:pointer}nav ul a.btn,nav ul a.btn-large,nav ul a.btn-small,nav ul a.btn-large,nav ul a.btn-flat,nav ul a.btn-floating{margin-top:-2px;margin-left:15px;margin-right:15px}nav ul a.btn>.material-icons,nav ul a.btn-large>.material-icons,nav ul a.btn-small>.material-icons,nav ul a.btn-large>.material-icons,nav ul a.btn-flat>.material-icons,nav ul a.btn-floating>.material-icons{height:inherit;line-height:inherit}nav ul a:hover{background-color:rgba(0,0,0,0.1)}nav ul.left{float:left}nav form{height:100%}nav .input-field{margin:0;height:100%}nav .input-field input{height:100%;font-size:1.2rem;border:none;padding-left:2rem}nav .input-field input:focus,nav .input-field input[type=text]:valid,nav .input-field input[type=password]:valid,nav .input-field input[type=email]:valid,nav .input-field input[type=url]:valid,nav .input-field input[type=date]:valid{border:none;-webkit-box-shadow:none;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);-webkit-transition:color .3s;transition:color .3s}nav .input-field label.active i{color:#fff}.navbar-fixed{position:relative;height:56px;z-index:997}.navbar-fixed nav{position:fixed}@media only screen and (min-width: 601px){nav.nav-extended .nav-wrapper{min-height:64px}nav,nav .nav-wrapper i,nav a.sidenav-trigger,nav a.sidenav-trigger i{height:64px;line-height:64px}.navbar-fixed{height:64px}}a{text-decoration:none}html{line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-weight:normal;color:rgba(0,0,0,0.87)}@media only screen and (min-width: 0){html{font-size:14px}}@media only screen and (min-width: 992px){html{font-size:14.5px}}@media only screen and (min-width: 1200px){html{font-size:15px}}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.3}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;line-height:110%;margin:2.8rem 0 1.68rem 0}h2{font-size:3.56rem;line-height:110%;margin:2.3733333333rem 0 1.424rem 0}h3{font-size:2.92rem;line-height:110%;margin:1.9466666667rem 0 1.168rem 0}h4{font-size:2.28rem;line-height:110%;margin:1.52rem 0 .912rem 0}h5{font-size:1.64rem;line-height:110%;margin:1.0933333333rem 0 .656rem 0}h6{font-size:1.15rem;line-height:110%;margin:.7666666667rem 0 .46rem 0}em{font-style:italic}strong{font-weight:500}small{font-size:75%}.light{font-weight:300}.thin{font-weight:200}@media only screen and (min-width: 360px){.flow-text{font-size:1.2rem}}@media only screen and (min-width: 390px){.flow-text{font-size:1.224rem}}@media only screen and (min-width: 420px){.flow-text{font-size:1.248rem}}@media only screen and (min-width: 450px){.flow-text{font-size:1.272rem}}@media only screen and (min-width: 480px){.flow-text{font-size:1.296rem}}@media only screen and (min-width: 510px){.flow-text{font-size:1.32rem}}@media only screen and (min-width: 540px){.flow-text{font-size:1.344rem}}@media only screen and (min-width: 570px){.flow-text{font-size:1.368rem}}@media only screen and (min-width: 600px){.flow-text{font-size:1.392rem}}@media only screen and (min-width: 630px){.flow-text{font-size:1.416rem}}@media only screen and (min-width: 660px){.flow-text{font-size:1.44rem}}@media only screen and (min-width: 690px){.flow-text{font-size:1.464rem}}@media only screen and (min-width: 720px){.flow-text{font-size:1.488rem}}@media only screen and (min-width: 750px){.flow-text{font-size:1.512rem}}@media only screen and (min-width: 780px){.flow-text{font-size:1.536rem}}@media only screen and (min-width: 810px){.flow-text{font-size:1.56rem}}@media only screen and (min-width: 840px){.flow-text{font-size:1.584rem}}@media only screen and (min-width: 870px){.flow-text{font-size:1.608rem}}@media only screen and (min-width: 900px){.flow-text{font-size:1.632rem}}@media only screen and (min-width: 930px){.flow-text{font-size:1.656rem}}@media only screen and (min-width: 960px){.flow-text{font-size:1.68rem}}@media only screen and (max-width: 360px){.flow-text{font-size:1.2rem}}.scale-transition{-webkit-transition:-webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:-webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63), -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important}.scale-transition.scale-out{-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform .2s !important;transition:-webkit-transform .2s !important;transition:transform .2s !important;transition:transform .2s, -webkit-transform .2s !important}.scale-transition.scale-in{-webkit-transform:scale(1);transform:scale(1)}.card-panel{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s;padding:24px;margin:.5rem 0 1rem 0;border-radius:2px;background-color:#fff}.card{position:relative;margin:.5rem 0 1rem 0;background-color:#fff;-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s;border-radius:2px}.card .card-title{font-size:24px;font-weight:300}.card .card-title.activator{cursor:pointer}.card.small,.card.medium,.card.large{position:relative}.card.small .card-image,.card.medium .card-image,.card.large .card-image{max-height:60%;overflow:hidden}.card.small .card-image+.card-content,.card.medium .card-image+.card-content,.card.large .card-image+.card-content{max-height:40%}.card.small .card-content,.card.medium .card-content,.card.large .card-content{max-height:100%;overflow:hidden}.card.small .card-action,.card.medium .card-action,.card.large .card-action{position:absolute;bottom:0;left:0;right:0}.card.small{height:300px}.card.medium{height:400px}.card.large{height:500px}.card.horizontal{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.card.horizontal.small .card-image,.card.horizontal.medium .card-image,.card.horizontal.large .card-image{height:100%;max-height:none;overflow:visible}.card.horizontal.small .card-image img,.card.horizontal.medium .card-image img,.card.horizontal.large .card-image img{height:100%}.card.horizontal .card-image{max-width:50%}.card.horizontal .card-image img{border-radius:2px 0 0 2px;max-width:100%;width:auto}.card.horizontal .card-stacked{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.card.horizontal .card-stacked .card-content{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.card.sticky-action .card-action{z-index:2}.card.sticky-action .card-reveal{z-index:1;padding-bottom:64px}.card .card-image{position:relative}.card .card-image img{display:block;border-radius:2px 2px 0 0;position:relative;left:0;right:0;top:0;bottom:0;width:100%}.card .card-image .card-title{color:#fff;position:absolute;bottom:0;left:0;max-width:100%;padding:24px}.card .card-content{padding:24px;border-radius:0 0 2px 2px}.card .card-content p{margin:0}.card .card-content .card-title{display:block;line-height:32px;margin-bottom:8px}.card .card-content .card-title i{line-height:32px}.card .card-action{background-color:inherit;border-top:1px solid rgba(160,160,160,0.2);position:relative;padding:16px 24px}.card .card-action:last-child{border-radius:0 0 2px 2px}.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating){color:#ffab40;margin-right:24px;-webkit-transition:color .3s ease;transition:color .3s ease;text-transform:uppercase}.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover{color:#ffd8a6}.card .card-reveal{padding:24px;position:absolute;background-color:#fff;width:100%;overflow-y:auto;left:0;top:100%;height:100%;z-index:3;display:none}.card .card-reveal .card-title{cursor:pointer;display:block}#toast-container{display:block;position:fixed;z-index:10000}@media only screen and (max-width: 600px){#toast-container{min-width:100%;bottom:0%}}@media only screen and (min-width: 601px) and (max-width: 992px){#toast-container{left:5%;bottom:7%;max-width:90%}}@media only screen and (min-width: 993px){#toast-container{top:10%;right:7%;max-width:86%}}.toast{border-radius:2px;top:35px;width:auto;margin-top:10px;position:relative;max-width:100%;height:auto;min-height:48px;line-height:1.5em;background-color:#323232;padding:10px 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;cursor:default}.toast .toast-action{color:#eeff41;font-weight:500;margin-right:-25px;margin-left:3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width: 600px){.toast{width:100%;border-radius:0}}.tabs{position:relative;overflow-x:auto;overflow-y:hidden;height:48px;width:100%;background-color:#fff;margin:0 auto;white-space:nowrap}.tabs.tabs-transparent{background-color:transparent}.tabs.tabs-transparent .tab a,.tabs.tabs-transparent .tab.disabled a,.tabs.tabs-transparent .tab.disabled a:hover{color:rgba(255,255,255,0.7)}.tabs.tabs-transparent .tab a:hover,.tabs.tabs-transparent .tab a.active{color:#fff}.tabs.tabs-transparent .indicator{background-color:#fff}.tabs.tabs-fixed-width{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tabs.tabs-fixed-width .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab{display:inline-block;text-align:center;line-height:48px;height:48px;padding:0;margin:0;text-transform:uppercase}.tabs .tab a{color:rgba(238,110,115,0.7);display:block;width:100%;height:100%;padding:0 24px;font-size:14px;text-overflow:ellipsis;overflow:hidden;-webkit-transition:color .28s ease, background-color .28s ease;transition:color .28s ease, background-color .28s ease}.tabs .tab a:focus,.tabs .tab a:focus.active{background-color:rgba(246,178,181,0.2);outline:none}.tabs .tab a:hover,.tabs .tab a.active{background-color:transparent;color:#ee6e73}.tabs .tab.disabled a,.tabs .tab.disabled a:hover{color:rgba(238,110,115,0.4);cursor:default}.tabs .indicator{position:absolute;bottom:0;height:2px;background-color:#f6b2b5;will-change:left, right}@media only screen and (max-width: 992px){.tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tabs .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab a{padding:0 12px}}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:2000;background-color:transparent;border-radius:2px;color:#fff;min-height:36px;line-height:120%;opacity:0;position:absolute;text-align:center;max-width:calc(100% - 4px);overflow:hidden;left:0;top:0;pointer-events:none;visibility:hidden;background-color:#323232}.backdrop{position:absolute;opacity:0;height:7px;width:14px;border-radius:0 0 50% 50%;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 0%;transform-origin:50% 0%;visibility:hidden}.btn,.btn-large,.btn-small,.btn-flat{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;padding:0 16px;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.btn.disabled,.disabled.btn-large,.disabled.btn-small,.btn-floating.disabled,.btn-large.disabled,.btn-small.disabled,.btn-flat.disabled,.btn:disabled,.btn-large:disabled,.btn-small:disabled,.btn-floating:disabled,.btn-large:disabled,.btn-small:disabled,.btn-flat:disabled,.btn[disabled],.btn-large[disabled],.btn-small[disabled],.btn-floating[disabled],.btn-large[disabled],.btn-small[disabled],.btn-flat[disabled]{pointer-events:none;background-color:#DFDFDF !important;-webkit-box-shadow:none;box-shadow:none;color:#9F9F9F !important;cursor:default}.btn.disabled:hover,.disabled.btn-large:hover,.disabled.btn-small:hover,.btn-floating.disabled:hover,.btn-large.disabled:hover,.btn-small.disabled:hover,.btn-flat.disabled:hover,.btn:disabled:hover,.btn-large:disabled:hover,.btn-small:disabled:hover,.btn-floating:disabled:hover,.btn-large:disabled:hover,.btn-small:disabled:hover,.btn-flat:disabled:hover,.btn[disabled]:hover,.btn-large[disabled]:hover,.btn-small[disabled]:hover,.btn-floating[disabled]:hover,.btn-large[disabled]:hover,.btn-small[disabled]:hover,.btn-flat[disabled]:hover{background-color:#DFDFDF !important;color:#9F9F9F !important}.btn,.btn-large,.btn-small,.btn-floating,.btn-large,.btn-small,.btn-flat{font-size:14px;outline:0}.btn i,.btn-large i,.btn-small i,.btn-floating i,.btn-large i,.btn-small i,.btn-flat i{font-size:1.3rem;line-height:inherit}.btn:focus,.btn-large:focus,.btn-small:focus,.btn-floating:focus{background-color:#1d7d74}.btn,.btn-large,.btn-small{text-decoration:none;color:#fff;background-color:#26a69a;text-align:center;letter-spacing:.5px;-webkit-transition:background-color .2s ease-out;transition:background-color .2s ease-out;cursor:pointer}.btn:hover,.btn-large:hover,.btn-small:hover{background-color:#2bbbad}.btn-floating{display:inline-block;color:#fff;position:relative;overflow:hidden;z-index:1;width:40px;height:40px;line-height:40px;padding:0;background-color:#26a69a;border-radius:50%;-webkit-transition:background-color .3s;transition:background-color .3s;cursor:pointer;vertical-align:middle}.btn-floating:hover{background-color:#26a69a}.btn-floating:before{border-radius:0}.btn-floating.btn-large{width:56px;height:56px;padding:0}.btn-floating.btn-large.halfway-fab{bottom:-28px}.btn-floating.btn-large i{line-height:56px}.btn-floating.btn-small{width:32.4px;height:32.4px}.btn-floating.btn-small.halfway-fab{bottom:-16.2px}.btn-floating.btn-small i{line-height:32.4px}.btn-floating.halfway-fab{position:absolute;right:24px;bottom:-20px}.btn-floating.halfway-fab.left{right:auto;left:24px}.btn-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:40px}button.btn-floating{border:none}.fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:997}.fixed-action-btn.active ul{visibility:visible}.fixed-action-btn.direction-left,.fixed-action-btn.direction-right{padding:0 0 0 15px}.fixed-action-btn.direction-left ul,.fixed-action-btn.direction-right ul{text-align:right;right:64px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:100%;left:auto;width:500px}.fixed-action-btn.direction-left ul li,.fixed-action-btn.direction-right ul li{display:inline-block;margin:7.5px 15px 0 0}.fixed-action-btn.direction-right{padding:0 15px 0 0}.fixed-action-btn.direction-right ul{text-align:left;direction:rtl;left:64px;right:auto}.fixed-action-btn.direction-right ul li{margin:7.5px 0 0 15px}.fixed-action-btn.direction-bottom{padding:0 0 15px 0}.fixed-action-btn.direction-bottom ul{top:64px;bottom:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.fixed-action-btn.direction-bottom ul li{margin:15px 0 0 0}.fixed-action-btn.toolbar{padding:0;height:56px}.fixed-action-btn.toolbar.active>a i{opacity:0}.fixed-action-btn.toolbar ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;top:0;bottom:0;z-index:1}.fixed-action-btn.toolbar ul li{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;display:inline-block;margin:0;height:100%;-webkit-transition:none;transition:none}.fixed-action-btn.toolbar ul li a{display:block;overflow:hidden;position:relative;width:100%;height:100%;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;color:#fff;line-height:56px;z-index:1}.fixed-action-btn.toolbar ul li a i{line-height:inherit}.fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0;visibility:hidden}.fixed-action-btn ul li{margin-bottom:15px}.fixed-action-btn ul a.btn-floating{opacity:0}.fixed-action-btn .fab-backdrop{position:absolute;top:0;left:0;z-index:-1;width:40px;height:40px;background-color:#26a69a;border-radius:50%;-webkit-transform:scale(0);transform:scale(0)}.btn-flat{-webkit-box-shadow:none;box-shadow:none;background-color:transparent;color:#343434;cursor:pointer;-webkit-transition:background-color .2s;transition:background-color .2s}.btn-flat:focus,.btn-flat:hover{-webkit-box-shadow:none;box-shadow:none}.btn-flat:focus{background-color:rgba(0,0,0,0.1)}.btn-flat.disabled,.btn-flat.btn-flat[disabled]{background-color:transparent !important;color:#b3b2b2 !important;cursor:default}.btn-large{height:54px;line-height:54px;font-size:15px;padding:0 28px}.btn-large i{font-size:1.6rem}.btn-small{height:32.4px;line-height:32.4px;font-size:13px}.btn-small i{font-size:1.2rem}.btn-block{display:block}.dropdown-content{background-color:#fff;margin:0;display:none;min-width:100px;overflow-y:auto;opacity:0;position:absolute;left:0;top:0;z-index:9999;-webkit-transform-origin:0 0;transform-origin:0 0}.dropdown-content:focus{outline:0}.dropdown-content li{clear:both;color:rgba(0,0,0,0.87);cursor:pointer;min-height:50px;line-height:1.5rem;width:100%;text-align:left}.dropdown-content li:hover,.dropdown-content li.active{background-color:#eee}.dropdown-content li:focus{outline:none}.dropdown-content li.divider{min-height:0;height:1px}.dropdown-content li>a,.dropdown-content li>span{font-size:16px;color:#26a69a;display:block;line-height:22px;padding:14px 16px}.dropdown-content li>span>label{top:1px;left:0;height:18px}.dropdown-content li>a>i{height:inherit;line-height:inherit;float:left;margin:0 24px 0 0;width:24px}body.keyboard-focused .dropdown-content li:focus{background-color:#dadada}.input-field.col .dropdown-content [type="checkbox"]+label{top:1px;left:0;height:18px;-webkit-transform:none;transform:none}.dropdown-trigger{cursor:pointer}/*! + * Waves v0.6.0 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */.waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;-webkit-transition:.3s ease-out;transition:.3s ease-out}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,0.2);-webkit-transition:all 0.7s ease-out;transition:all 0.7s ease-out;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, -webkit-transform;transition-property:transform, opacity;transition-property:transform, opacity, -webkit-transform;-webkit-transform:scale(0);transform:scale(0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,0.45)}.waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,0.7)}.waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,0.7)}.waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,0.7)}.waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,0.7)}.waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,0.7)}.waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,0.7)}.waves-effect input[type="button"],.waves-effect input[type="reset"],.waves-effect input[type="submit"]{border:0;font-style:normal;font-size:inherit;text-transform:inherit;background:none}.waves-effect img{position:relative;z-index:-1}.waves-notransition{-webkit-transition:none !important;transition:none !important}.waves-circle{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, white 100%, black 100%)}.waves-input-wrapper{border-radius:0.2em;vertical-align:bottom}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.waves-block{display:block}.waves-effect .waves-ripple{z-index:-1}.modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top, opacity}.modal:focus{outline:none}@media only screen and (max-width: 992px){.modal{width:80%}}.modal h1,.modal h2,.modal h3,.modal h4{margin-top:0}.modal .modal-content{padding:24px}.modal .modal-close{cursor:pointer}.modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%;text-align:right}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-small,.modal .modal-footer .btn-flat{margin:6px 0}.modal-overlay{position:fixed;z-index:999;top:-25%;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none;will-change:opacity}.modal.modal-fixed-footer{padding:0;height:70%}.modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 56px);max-height:100%;width:100%;overflow-y:auto}.modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,0.1);position:absolute;bottom:0}.modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom, opacity}.collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:.5rem 0 1rem 0}.collapsible-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer;-webkit-tap-highlight-color:transparent;line-height:1.5;padding:1rem;background-color:#fff;border-bottom:1px solid #ddd}.collapsible-header:focus{outline:0}.collapsible-header i{width:2rem;font-size:1.6rem;display:inline-block;text-align:center;margin-right:1rem}.keyboard-focused .collapsible-header:focus{background-color:#eee}.collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;box-sizing:border-box;padding:2rem}.sidenav .collapsible,.sidenav.fixed .collapsible{border:none;-webkit-box-shadow:none;box-shadow:none}.sidenav .collapsible li,.sidenav.fixed .collapsible li{padding:0}.sidenav .collapsible-header,.sidenav.fixed .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;padding:0 16px}.sidenav .collapsible-header:hover,.sidenav.fixed .collapsible-header:hover{background-color:rgba(0,0,0,0.05)}.sidenav .collapsible-header i,.sidenav.fixed .collapsible-header i{line-height:inherit}.sidenav .collapsible-body,.sidenav.fixed .collapsible-body{border:0;background-color:#fff}.sidenav .collapsible-body li a,.sidenav.fixed .collapsible-body li a{padding:0 23.5px 0 31px}.collapsible.popout{border:none;-webkit-box-shadow:none;box-shadow:none}.collapsible.popout>li{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);margin:0 24px;-webkit-transition:margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);transition:margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.collapsible.popout>li.active{-webkit-box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);margin:16px 0}.chip{display:inline-block;height:32px;font-size:13px;font-weight:500;color:rgba(0,0,0,0.6);line-height:32px;padding:0 12px;border-radius:16px;background-color:#e4e4e4;margin-bottom:5px;margin-right:5px}.chip:focus{outline:none;background-color:#26a69a;color:#fff}.chip>img{float:left;margin:0 8px 0 -12px;height:32px;width:32px;border-radius:50%}.chip .close{cursor:pointer;float:right;font-size:16px;line-height:32px;padding-left:8px}.chips{border:none;border-bottom:1px solid #9e9e9e;-webkit-box-shadow:none;box-shadow:none;margin:0 0 8px 0;min-height:45px;outline:none;-webkit-transition:all .3s;transition:all .3s}.chips.focus{border-bottom:1px solid #26a69a;-webkit-box-shadow:0 1px 0 0 #26a69a;box-shadow:0 1px 0 0 #26a69a}.chips:hover{cursor:text}.chips .input{background:none;border:0;color:rgba(0,0,0,0.6);display:inline-block;font-size:16px;height:3rem;line-height:32px;outline:0;margin:0;padding:0 !important;width:120px !important}.chips .input:focus{border:0 !important;-webkit-box-shadow:none !important;box-shadow:none !important}.chips .autocomplete-content{margin-top:0;margin-bottom:0}.prefix ~ .chips{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.chips:empty ~ label{font-size:0.8rem;-webkit-transform:translateY(-140%);transform:translateY(-140%)}.materialboxed{display:block;cursor:-webkit-zoom-in;cursor:zoom-in;position:relative;-webkit-transition:opacity .4s;transition:opacity .4s;-webkit-backface-visibility:hidden}.materialboxed:hover:not(.active){opacity:.8}.materialboxed.active{cursor:-webkit-zoom-out;cursor:zoom-out}#materialbox-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#292929;z-index:1000;will-change:opacity}.materialbox-caption{position:fixed;display:none;color:#fff;line-height:50px;bottom:0;left:0;width:100%;text-align:center;padding:0% 15%;height:50px;z-index:1000;-webkit-font-smoothing:antialiased}select:focus{outline:1px solid #c9f3ef}button:focus{outline:none;background-color:#2ab7a9}label{font-size:.8rem;color:#9e9e9e}::-webkit-input-placeholder{color:#d1d1d1}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}::-ms-input-placeholder{color:#d1d1d1}::placeholder{color:#d1d1d1}input:not([type]),input[type=text]:not(.browser-default),input[type=password]:not(.browser-default),input[type=email]:not(.browser-default),input[type=url]:not(.browser-default),input[type=time]:not(.browser-default),input[type=date]:not(.browser-default),input[type=datetime]:not(.browser-default),input[type=datetime-local]:not(.browser-default),input[type=tel]:not(.browser-default),input[type=number]:not(.browser-default),input[type=search]:not(.browser-default),textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:3rem;width:100%;font-size:16px;margin:0 0 8px 0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-transition:border .3s, -webkit-box-shadow .3s;transition:border .3s, -webkit-box-shadow .3s;transition:box-shadow .3s, border .3s;transition:box-shadow .3s, border .3s, -webkit-box-shadow .3s}input:not([type]):disabled,input:not([type])[readonly="readonly"],input[type=text]:not(.browser-default):disabled,input[type=text]:not(.browser-default)[readonly="readonly"],input[type=password]:not(.browser-default):disabled,input[type=password]:not(.browser-default)[readonly="readonly"],input[type=email]:not(.browser-default):disabled,input[type=email]:not(.browser-default)[readonly="readonly"],input[type=url]:not(.browser-default):disabled,input[type=url]:not(.browser-default)[readonly="readonly"],input[type=time]:not(.browser-default):disabled,input[type=time]:not(.browser-default)[readonly="readonly"],input[type=date]:not(.browser-default):disabled,input[type=date]:not(.browser-default)[readonly="readonly"],input[type=datetime]:not(.browser-default):disabled,input[type=datetime]:not(.browser-default)[readonly="readonly"],input[type=datetime-local]:not(.browser-default):disabled,input[type=datetime-local]:not(.browser-default)[readonly="readonly"],input[type=tel]:not(.browser-default):disabled,input[type=tel]:not(.browser-default)[readonly="readonly"],input[type=number]:not(.browser-default):disabled,input[type=number]:not(.browser-default)[readonly="readonly"],input[type=search]:not(.browser-default):disabled,input[type=search]:not(.browser-default)[readonly="readonly"],textarea.materialize-textarea:disabled,textarea.materialize-textarea[readonly="readonly"]{color:rgba(0,0,0,0.42);border-bottom:1px dotted rgba(0,0,0,0.42)}input:not([type]):disabled+label,input:not([type])[readonly="readonly"]+label,input[type=text]:not(.browser-default):disabled+label,input[type=text]:not(.browser-default)[readonly="readonly"]+label,input[type=password]:not(.browser-default):disabled+label,input[type=password]:not(.browser-default)[readonly="readonly"]+label,input[type=email]:not(.browser-default):disabled+label,input[type=email]:not(.browser-default)[readonly="readonly"]+label,input[type=url]:not(.browser-default):disabled+label,input[type=url]:not(.browser-default)[readonly="readonly"]+label,input[type=time]:not(.browser-default):disabled+label,input[type=time]:not(.browser-default)[readonly="readonly"]+label,input[type=date]:not(.browser-default):disabled+label,input[type=date]:not(.browser-default)[readonly="readonly"]+label,input[type=datetime]:not(.browser-default):disabled+label,input[type=datetime]:not(.browser-default)[readonly="readonly"]+label,input[type=datetime-local]:not(.browser-default):disabled+label,input[type=datetime-local]:not(.browser-default)[readonly="readonly"]+label,input[type=tel]:not(.browser-default):disabled+label,input[type=tel]:not(.browser-default)[readonly="readonly"]+label,input[type=number]:not(.browser-default):disabled+label,input[type=number]:not(.browser-default)[readonly="readonly"]+label,input[type=search]:not(.browser-default):disabled+label,input[type=search]:not(.browser-default)[readonly="readonly"]+label,textarea.materialize-textarea:disabled+label,textarea.materialize-textarea[readonly="readonly"]+label{color:rgba(0,0,0,0.42)}input:not([type]):focus:not([readonly]),input[type=text]:not(.browser-default):focus:not([readonly]),input[type=password]:not(.browser-default):focus:not([readonly]),input[type=email]:not(.browser-default):focus:not([readonly]),input[type=url]:not(.browser-default):focus:not([readonly]),input[type=time]:not(.browser-default):focus:not([readonly]),input[type=date]:not(.browser-default):focus:not([readonly]),input[type=datetime]:not(.browser-default):focus:not([readonly]),input[type=datetime-local]:not(.browser-default):focus:not([readonly]),input[type=tel]:not(.browser-default):focus:not([readonly]),input[type=number]:not(.browser-default):focus:not([readonly]),input[type=search]:not(.browser-default):focus:not([readonly]),textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #26a69a;-webkit-box-shadow:0 1px 0 0 #26a69a;box-shadow:0 1px 0 0 #26a69a}input:not([type]):focus:not([readonly])+label,input[type=text]:not(.browser-default):focus:not([readonly])+label,input[type=password]:not(.browser-default):focus:not([readonly])+label,input[type=email]:not(.browser-default):focus:not([readonly])+label,input[type=url]:not(.browser-default):focus:not([readonly])+label,input[type=time]:not(.browser-default):focus:not([readonly])+label,input[type=date]:not(.browser-default):focus:not([readonly])+label,input[type=datetime]:not(.browser-default):focus:not([readonly])+label,input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,input[type=tel]:not(.browser-default):focus:not([readonly])+label,input[type=number]:not(.browser-default):focus:not([readonly])+label,input[type=search]:not(.browser-default):focus:not([readonly])+label,textarea.materialize-textarea:focus:not([readonly])+label{color:#26a69a}input:not([type]):focus.valid ~ label,input[type=text]:not(.browser-default):focus.valid ~ label,input[type=password]:not(.browser-default):focus.valid ~ label,input[type=email]:not(.browser-default):focus.valid ~ label,input[type=url]:not(.browser-default):focus.valid ~ label,input[type=time]:not(.browser-default):focus.valid ~ label,input[type=date]:not(.browser-default):focus.valid ~ label,input[type=datetime]:not(.browser-default):focus.valid ~ label,input[type=datetime-local]:not(.browser-default):focus.valid ~ label,input[type=tel]:not(.browser-default):focus.valid ~ label,input[type=number]:not(.browser-default):focus.valid ~ label,input[type=search]:not(.browser-default):focus.valid ~ label,textarea.materialize-textarea:focus.valid ~ label{color:#4CAF50}input:not([type]):focus.invalid ~ label,input[type=text]:not(.browser-default):focus.invalid ~ label,input[type=password]:not(.browser-default):focus.invalid ~ label,input[type=email]:not(.browser-default):focus.invalid ~ label,input[type=url]:not(.browser-default):focus.invalid ~ label,input[type=time]:not(.browser-default):focus.invalid ~ label,input[type=date]:not(.browser-default):focus.invalid ~ label,input[type=datetime]:not(.browser-default):focus.invalid ~ label,input[type=datetime-local]:not(.browser-default):focus.invalid ~ label,input[type=tel]:not(.browser-default):focus.invalid ~ label,input[type=number]:not(.browser-default):focus.invalid ~ label,input[type=search]:not(.browser-default):focus.invalid ~ label,textarea.materialize-textarea:focus.invalid ~ label{color:#F44336}input:not([type]).validate+label,input[type=text]:not(.browser-default).validate+label,input[type=password]:not(.browser-default).validate+label,input[type=email]:not(.browser-default).validate+label,input[type=url]:not(.browser-default).validate+label,input[type=time]:not(.browser-default).validate+label,input[type=date]:not(.browser-default).validate+label,input[type=datetime]:not(.browser-default).validate+label,input[type=datetime-local]:not(.browser-default).validate+label,input[type=tel]:not(.browser-default).validate+label,input[type=number]:not(.browser-default).validate+label,input[type=search]:not(.browser-default).validate+label,textarea.materialize-textarea.validate+label{width:100%}input.valid:not([type]),input.valid:not([type]):focus,input.valid[type=text]:not(.browser-default),input.valid[type=text]:not(.browser-default):focus,input.valid[type=password]:not(.browser-default),input.valid[type=password]:not(.browser-default):focus,input.valid[type=email]:not(.browser-default),input.valid[type=email]:not(.browser-default):focus,input.valid[type=url]:not(.browser-default),input.valid[type=url]:not(.browser-default):focus,input.valid[type=time]:not(.browser-default),input.valid[type=time]:not(.browser-default):focus,input.valid[type=date]:not(.browser-default),input.valid[type=date]:not(.browser-default):focus,input.valid[type=datetime]:not(.browser-default),input.valid[type=datetime]:not(.browser-default):focus,input.valid[type=datetime-local]:not(.browser-default),input.valid[type=datetime-local]:not(.browser-default):focus,input.valid[type=tel]:not(.browser-default),input.valid[type=tel]:not(.browser-default):focus,input.valid[type=number]:not(.browser-default),input.valid[type=number]:not(.browser-default):focus,input.valid[type=search]:not(.browser-default),input.valid[type=search]:not(.browser-default):focus,textarea.materialize-textarea.valid,textarea.materialize-textarea.valid:focus,.select-wrapper.valid>input.select-dropdown{border-bottom:1px solid #4CAF50;-webkit-box-shadow:0 1px 0 0 #4CAF50;box-shadow:0 1px 0 0 #4CAF50}input.invalid:not([type]),input.invalid:not([type]):focus,input.invalid[type=text]:not(.browser-default),input.invalid[type=text]:not(.browser-default):focus,input.invalid[type=password]:not(.browser-default),input.invalid[type=password]:not(.browser-default):focus,input.invalid[type=email]:not(.browser-default),input.invalid[type=email]:not(.browser-default):focus,input.invalid[type=url]:not(.browser-default),input.invalid[type=url]:not(.browser-default):focus,input.invalid[type=time]:not(.browser-default),input.invalid[type=time]:not(.browser-default):focus,input.invalid[type=date]:not(.browser-default),input.invalid[type=date]:not(.browser-default):focus,input.invalid[type=datetime]:not(.browser-default),input.invalid[type=datetime]:not(.browser-default):focus,input.invalid[type=datetime-local]:not(.browser-default),input.invalid[type=datetime-local]:not(.browser-default):focus,input.invalid[type=tel]:not(.browser-default),input.invalid[type=tel]:not(.browser-default):focus,input.invalid[type=number]:not(.browser-default),input.invalid[type=number]:not(.browser-default):focus,input.invalid[type=search]:not(.browser-default),input.invalid[type=search]:not(.browser-default):focus,textarea.materialize-textarea.invalid,textarea.materialize-textarea.invalid:focus,.select-wrapper.invalid>input.select-dropdown,.select-wrapper.invalid>input.select-dropdown:focus{border-bottom:1px solid #F44336;-webkit-box-shadow:0 1px 0 0 #F44336;box-shadow:0 1px 0 0 #F44336}input:not([type]).valid ~ .helper-text[data-success],input:not([type]):focus.valid ~ .helper-text[data-success],input:not([type]).invalid ~ .helper-text[data-error],input:not([type]):focus.invalid ~ .helper-text[data-error],input[type=text]:not(.browser-default).valid ~ .helper-text[data-success],input[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=text]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=password]:not(.browser-default).valid ~ .helper-text[data-success],input[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=password]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=email]:not(.browser-default).valid ~ .helper-text[data-success],input[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=email]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=url]:not(.browser-default).valid ~ .helper-text[data-success],input[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=url]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=time]:not(.browser-default).valid ~ .helper-text[data-success],input[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=time]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=date]:not(.browser-default).valid ~ .helper-text[data-success],input[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=date]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success],input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success],input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=tel]:not(.browser-default).valid ~ .helper-text[data-success],input[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=number]:not(.browser-default).valid ~ .helper-text[data-success],input[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=number]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=search]:not(.browser-default).valid ~ .helper-text[data-success],input[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=search]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error],textarea.materialize-textarea.valid ~ .helper-text[data-success],textarea.materialize-textarea:focus.valid ~ .helper-text[data-success],textarea.materialize-textarea.invalid ~ .helper-text[data-error],textarea.materialize-textarea:focus.invalid ~ .helper-text[data-error],.select-wrapper.valid .helper-text[data-success],.select-wrapper.invalid ~ .helper-text[data-error]{color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}input:not([type]).valid ~ .helper-text:after,input:not([type]):focus.valid ~ .helper-text:after,input[type=text]:not(.browser-default).valid ~ .helper-text:after,input[type=text]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=password]:not(.browser-default).valid ~ .helper-text:after,input[type=password]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=email]:not(.browser-default).valid ~ .helper-text:after,input[type=email]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=url]:not(.browser-default).valid ~ .helper-text:after,input[type=url]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=time]:not(.browser-default).valid ~ .helper-text:after,input[type=time]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=date]:not(.browser-default).valid ~ .helper-text:after,input[type=date]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=datetime]:not(.browser-default).valid ~ .helper-text:after,input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=tel]:not(.browser-default).valid ~ .helper-text:after,input[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=number]:not(.browser-default).valid ~ .helper-text:after,input[type=number]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=search]:not(.browser-default).valid ~ .helper-text:after,input[type=search]:not(.browser-default):focus.valid ~ .helper-text:after,textarea.materialize-textarea.valid ~ .helper-text:after,textarea.materialize-textarea:focus.valid ~ .helper-text:after,.select-wrapper.valid ~ .helper-text:after{content:attr(data-success);color:#4CAF50}input:not([type]).invalid ~ .helper-text:after,input:not([type]):focus.invalid ~ .helper-text:after,input[type=text]:not(.browser-default).invalid ~ .helper-text:after,input[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=password]:not(.browser-default).invalid ~ .helper-text:after,input[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=email]:not(.browser-default).invalid ~ .helper-text:after,input[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=url]:not(.browser-default).invalid ~ .helper-text:after,input[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=time]:not(.browser-default).invalid ~ .helper-text:after,input[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=date]:not(.browser-default).invalid ~ .helper-text:after,input[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=datetime]:not(.browser-default).invalid ~ .helper-text:after,input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=tel]:not(.browser-default).invalid ~ .helper-text:after,input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=number]:not(.browser-default).invalid ~ .helper-text:after,input[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=search]:not(.browser-default).invalid ~ .helper-text:after,input[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after,textarea.materialize-textarea.invalid ~ .helper-text:after,textarea.materialize-textarea:focus.invalid ~ .helper-text:after,.select-wrapper.invalid ~ .helper-text:after{content:attr(data-error);color:#F44336}input:not([type])+label:after,input[type=text]:not(.browser-default)+label:after,input[type=password]:not(.browser-default)+label:after,input[type=email]:not(.browser-default)+label:after,input[type=url]:not(.browser-default)+label:after,input[type=time]:not(.browser-default)+label:after,input[type=date]:not(.browser-default)+label:after,input[type=datetime]:not(.browser-default)+label:after,input[type=datetime-local]:not(.browser-default)+label:after,input[type=tel]:not(.browser-default)+label:after,input[type=number]:not(.browser-default)+label:after,input[type=search]:not(.browser-default)+label:after,textarea.materialize-textarea+label:after,.select-wrapper+label:after{display:block;content:"";position:absolute;top:100%;left:0;opacity:0;-webkit-transition:.2s opacity ease-out, .2s color ease-out;transition:.2s opacity ease-out, .2s color ease-out}.input-field{position:relative;margin-top:1rem;margin-bottom:1rem}.input-field.inline{display:inline-block;vertical-align:middle;margin-left:5px}.input-field.inline input,.input-field.inline .select-dropdown{margin-bottom:1rem}.input-field.col label{left:.75rem}.input-field.col .prefix ~ label,.input-field.col .prefix ~ .validate ~ label{width:calc(100% - 3rem - 1.5rem)}.input-field>label{color:#9e9e9e;position:absolute;top:0;left:0;font-size:1rem;cursor:text;-webkit-transition:color .2s ease-out, -webkit-transform .2s ease-out;transition:color .2s ease-out, -webkit-transform .2s ease-out;transition:transform .2s ease-out, color .2s ease-out;transition:transform .2s ease-out, color .2s ease-out, -webkit-transform .2s ease-out;-webkit-transform-origin:0% 100%;transform-origin:0% 100%;text-align:initial;-webkit-transform:translateY(12px);transform:translateY(12px)}.input-field>label:not(.label-icon).active{-webkit-transform:translateY(-14px) scale(0.8);transform:translateY(-14px) scale(0.8);-webkit-transform-origin:0 0;transform-origin:0 0}.input-field>input[type]:-webkit-autofill:not(.browser-default):not([type="search"])+label,.input-field>input[type=date]:not(.browser-default)+label,.input-field>input[type=time]:not(.browser-default)+label{-webkit-transform:translateY(-14px) scale(0.8);transform:translateY(-14px) scale(0.8);-webkit-transform-origin:0 0;transform-origin:0 0}.input-field .helper-text{position:relative;min-height:18px;display:block;font-size:12px;color:rgba(0,0,0,0.54)}.input-field .helper-text::after{opacity:1;position:absolute;top:0;left:0}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;-webkit-transition:color .2s;transition:color .2s;top:.5rem}.input-field .prefix.active{color:#26a69a}.input-field .prefix ~ input,.input-field .prefix ~ textarea,.input-field .prefix ~ label,.input-field .prefix ~ .validate ~ label,.input-field .prefix ~ .helper-text,.input-field .prefix ~ .autocomplete-content{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.input-field .prefix ~ label{margin-left:3rem}@media only screen and (max-width: 992px){.input-field .prefix ~ input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width: 600px){.input-field .prefix ~ input{width:80%;width:calc(100% - 3rem)}}.input-field input[type=search]{display:block;line-height:inherit;-webkit-transition:.3s background-color;transition:.3s background-color}.nav-wrapper .input-field input[type=search]{height:inherit;padding-left:4rem;width:calc(100% - 4rem);border:0;-webkit-box-shadow:none;box-shadow:none}.input-field input[type=search]:focus:not(.browser-default){background-color:#fff;border:0;-webkit-box-shadow:none;box-shadow:none;color:#444}.input-field input[type=search]:focus:not(.browser-default)+label i,.input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close,.input-field input[type=search]:focus:not(.browser-default) ~ .material-icons{color:#444}.input-field input[type=search]+.label-icon{-webkit-transform:none;transform:none;left:1rem}.input-field input[type=search] ~ .mdi-navigation-close,.input-field input[type=search] ~ .material-icons{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;-webkit-transition:.3s color;transition:.3s color}textarea{width:100%;height:3rem;background-color:transparent}textarea.materialize-textarea{line-height:normal;overflow-y:hidden;padding:.8rem 0 .8rem 0;resize:none;min-height:3rem;-webkit-box-sizing:border-box;box-sizing:border-box}.hiddendiv{visibility:hidden;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem;position:absolute;top:0;z-index:-1}.autocomplete-content li .highlight{color:#444}.autocomplete-content li img{height:40px;width:40px;margin:5px 15px}.character-counter{min-height:18px}[type="radio"]:not(:checked),[type="radio"]:checked{position:absolute;opacity:0;pointer-events:none}[type="radio"]:not(:checked)+span,[type="radio"]:checked+span{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="radio"]+span:before,[type="radio"]+span:after{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;transition:.28s ease}[type="radio"]:not(:checked)+span:before,[type="radio"]:not(:checked)+span:after,[type="radio"]:checked+span:before,[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:before,[type="radio"].with-gap:checked+span:after{border-radius:50%}[type="radio"]:not(:checked)+span:before,[type="radio"]:not(:checked)+span:after{border:2px solid #5a5a5a}[type="radio"]:not(:checked)+span:after{-webkit-transform:scale(0);transform:scale(0)}[type="radio"]:checked+span:before{border:2px solid transparent}[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:before,[type="radio"].with-gap:checked+span:after{border:2px solid #26a69a}[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:after{background-color:#26a69a}[type="radio"]:checked+span:after{-webkit-transform:scale(1.02);transform:scale(1.02)}[type="radio"].with-gap:checked+span:after{-webkit-transform:scale(0.5);transform:scale(0.5)}[type="radio"].tabbed:focus+span:before{-webkit-box-shadow:0 0 0 10px rgba(0,0,0,0.1);box-shadow:0 0 0 10px rgba(0,0,0,0.1)}[type="radio"].with-gap:disabled:checked+span:before{border:2px solid rgba(0,0,0,0.42)}[type="radio"].with-gap:disabled:checked+span:after{border:none;background-color:rgba(0,0,0,0.42)}[type="radio"]:disabled:not(:checked)+span:before,[type="radio"]:disabled:checked+span:before{background-color:transparent;border-color:rgba(0,0,0,0.42)}[type="radio"]:disabled+span{color:rgba(0,0,0,0.42)}[type="radio"]:disabled:not(:checked)+span:before{border-color:rgba(0,0,0,0.42)}[type="radio"]:disabled:checked+span:after{background-color:rgba(0,0,0,0.42);border-color:#949494}[type="checkbox"]:not(:checked),[type="checkbox"]:checked{position:absolute;opacity:0;pointer-events:none}[type="checkbox"]+span:not(.lever){position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="checkbox"]+span:not(.lever):before,[type="checkbox"]:not(.filled-in)+span:not(.lever):after{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:3px;-webkit-transition:.2s;transition:.2s}[type="checkbox"]:not(.filled-in)+span:not(.lever):after{border:0;-webkit-transform:scale(0);transform:scale(0)}[type="checkbox"]:not(:checked):disabled+span:not(.lever):before{border:none;background-color:rgba(0,0,0,0.42)}[type="checkbox"].tabbed:focus+span:not(.lever):after{-webkit-transform:scale(1);transform:scale(1);border:0;border-radius:50%;-webkit-box-shadow:0 0 0 10px rgba(0,0,0,0.1);box-shadow:0 0 0 10px rgba(0,0,0,0.1);background-color:rgba(0,0,0,0.1)}[type="checkbox"]:checked+span:not(.lever):before{top:-4px;left:-5px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #26a69a;border-bottom:2px solid #26a69a;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:checked:disabled+span:before{border-right:2px solid rgba(0,0,0,0.42);border-bottom:2px solid rgba(0,0,0,0.42)}[type="checkbox"]:indeterminate+span:not(.lever):before{top:-11px;left:-12px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #26a69a;border-bottom:none;-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:indeterminate:disabled+span:not(.lever):before{border-right:2px solid rgba(0,0,0,0.42);background-color:transparent}[type="checkbox"].filled-in+span:not(.lever):after{border-radius:2px}[type="checkbox"].filled-in+span:not(.lever):before,[type="checkbox"].filled-in+span:not(.lever):after{content:'';left:0;position:absolute;-webkit-transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;z-index:1}[type="checkbox"].filled-in:not(:checked)+span:not(.lever):before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:not(:checked)+span:not(.lever):after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0px;z-index:0}[type="checkbox"].filled-in:checked+span:not(.lever):before{top:0;left:1px;width:8px;height:13px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:checked+span:not(.lever):after{top:0;width:20px;height:20px;border:2px solid #26a69a;background-color:#26a69a;z-index:0}[type="checkbox"].filled-in.tabbed:focus+span:not(.lever):after{border-radius:2px;border-color:#5a5a5a;background-color:rgba(0,0,0,0.1)}[type="checkbox"].filled-in.tabbed:checked:focus+span:not(.lever):after{border-radius:2px;background-color:#26a69a;border-color:#26a69a}[type="checkbox"].filled-in:disabled:not(:checked)+span:not(.lever):before{background-color:transparent;border:2px solid transparent}[type="checkbox"].filled-in:disabled:not(:checked)+span:not(.lever):after{border-color:transparent;background-color:#949494}[type="checkbox"].filled-in:disabled:checked+span:not(.lever):before{background-color:transparent}[type="checkbox"].filled-in:disabled:checked+span:not(.lever):after{background-color:#949494;border-color:#949494}.switch,.switch *{-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{cursor:pointer}.switch label input[type=checkbox]{opacity:0;width:0;height:0}.switch label input[type=checkbox]:checked+.lever{background-color:#84c7c1}.switch label input[type=checkbox]:checked+.lever:before,.switch label input[type=checkbox]:checked+.lever:after{left:18px}.switch label input[type=checkbox]:checked+.lever:after{background-color:#26a69a}.switch label .lever{content:"";display:inline-block;position:relative;width:36px;height:14px;background-color:rgba(0,0,0,0.38);border-radius:15px;margin-right:10px;-webkit-transition:background 0.3s ease;transition:background 0.3s ease;vertical-align:middle;margin:0 16px}.switch label .lever:before,.switch label .lever:after{content:"";position:absolute;display:inline-block;width:20px;height:20px;border-radius:50%;left:0;top:-3px;-webkit-transition:left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease;transition:left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease;transition:left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease;transition:left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease}.switch label .lever:before{background-color:rgba(38,166,154,0.15)}.switch label .lever:after{background-color:#F1F1F1;-webkit-box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12);box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before{-webkit-transform:scale(2.4);transform:scale(2.4);background-color:rgba(38,166,154,0.15)}input[type=checkbox]:not(:disabled) ~ .lever:active:before,input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before{-webkit-transform:scale(2.4);transform:scale(2.4);background-color:rgba(0,0,0,0.08)}.switch input[type=checkbox][disabled]+.lever{cursor:default;background-color:rgba(0,0,0,0.12)}.switch label input[type=checkbox][disabled]+.lever:after,.switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#949494}select{display:none}select.browser-default{display:block}select{background-color:rgba(255,255,255,0.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.select-label{position:absolute}.select-wrapper{position:relative}.select-wrapper.valid+label,.select-wrapper.invalid+label{width:100%;pointer-events:none}.select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;outline:none;height:3rem;line-height:3rem;width:100%;font-size:16px;margin:0 0 8px 0;padding:0;display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1}.select-wrapper input.select-dropdown:focus{border-bottom:1px solid #26a69a}.select-wrapper .caret{position:absolute;right:0;top:0;bottom:0;margin:auto 0;z-index:0;fill:rgba(0,0,0,0.87)}.select-wrapper+label{position:absolute;top:-26px;font-size:.8rem}select:disabled{color:rgba(0,0,0,0.42)}.select-wrapper.disabled+label{color:rgba(0,0,0,0.42)}.select-wrapper.disabled .caret{fill:rgba(0,0,0,0.42)}.select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,0.42);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-wrapper i{color:rgba(0,0,0,0.3)}.select-dropdown li.disabled,.select-dropdown li.disabled>span,.select-dropdown li.optgroup{color:rgba(0,0,0,0.3);background-color:transparent}body.keyboard-focused .select-dropdown.dropdown-content li:focus{background-color:rgba(0,0,0,0.08)}.select-dropdown.dropdown-content li:hover{background-color:rgba(0,0,0,0.08)}.select-dropdown.dropdown-content li.selected{background-color:rgba(0,0,0,0.03)}.prefix ~ .select-wrapper{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.prefix ~ label{margin-left:3rem}.select-dropdown li img{height:40px;width:40px;margin:5px 15px;float:right}.select-dropdown li.optgroup{border-top:1px solid #eee}.select-dropdown li.optgroup.selected>span{color:rgba(0,0,0,0.7)}.select-dropdown li.optgroup>span{color:rgba(0,0,0,0.4)}.select-dropdown li.optgroup ~ li.optgroup-option{padding-left:1rem}.file-field{position:relative}.file-field .file-path-wrapper{overflow:hidden;padding-left:10px}.file-field input.file-path{width:100%}.file-field .btn,.file-field .btn-large,.file-field .btn-small{float:left;height:3rem;line-height:3rem}.file-field span{cursor:pointer}.file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.file-field input[type=file]::-webkit-file-upload-button{display:none}.range-field{position:relative}input[type=range],input[type=range]+.thumb{cursor:pointer}input[type=range]{position:relative;background-color:transparent;border:none;outline:none;width:100%;margin:15px 0;padding:0}input[type=range]:focus{outline:none}input[type=range]+.thumb{position:absolute;top:10px;left:0;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;margin-left:7px;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#26a69a;font-size:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}input[type=range]{-webkit-appearance:none}input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-webkit-slider-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s;-webkit-appearance:none;background-color:#26a69a;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;margin:-5px 0 0 0}.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 10px rgba(38,166,154,0.26);box-shadow:0 0 0 10px rgba(38,166,154,0.26)}input[type=range]{border:1px solid white}input[type=range]::-moz-range-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-moz-focus-inner{border:0}input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s;margin-top:-5px}input[type=range]:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(38,166,154,0.26)}input[type=range]::-ms-track{height:3px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input[type=range]::-ms-fill-lower{background:#777}input[type=range]::-ms-fill-upper{background:#ddd}input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s}.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb{box-shadow:0 0 0 10px rgba(38,166,154,0.26)}.table-of-contents.fixed{position:fixed}.table-of-contents li{padding:2px 0}.table-of-contents a{display:inline-block;font-weight:300;color:#757575;padding-left:16px;height:1.5rem;line-height:1.5rem;letter-spacing:.4;display:inline-block}.table-of-contents a:hover{color:#a8a8a8;padding-left:15px;border-left:1px solid #ee6e73}.table-of-contents a.active{font-weight:500;padding-left:14px;border-left:2px solid #ee6e73}.sidenav{position:fixed;width:300px;left:0;top:0;margin:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);height:100%;height:calc(100% + 60px);height:-moz-calc(100%);padding-bottom:60px;background-color:#fff;z-index:999;overflow-y:auto;will-change:transform;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(-105%);transform:translateX(-105%)}.sidenav.right-aligned{right:0;-webkit-transform:translateX(105%);transform:translateX(105%);left:auto;-webkit-transform:translateX(100%);transform:translateX(100%)}.sidenav .collapsible{margin:0}.sidenav li{float:none;line-height:48px}.sidenav li.active{background-color:rgba(0,0,0,0.05)}.sidenav li>a{color:rgba(0,0,0,0.87);display:block;font-size:14px;font-weight:500;height:48px;line-height:48px;padding:0 32px}.sidenav li>a:hover{background-color:rgba(0,0,0,0.05)}.sidenav li>a.btn,.sidenav li>a.btn-large,.sidenav li>a.btn-small,.sidenav li>a.btn-large,.sidenav li>a.btn-flat,.sidenav li>a.btn-floating{margin:10px 15px}.sidenav li>a.btn,.sidenav li>a.btn-large,.sidenav li>a.btn-small,.sidenav li>a.btn-large,.sidenav li>a.btn-floating{color:#fff}.sidenav li>a.btn-flat{color:#343434}.sidenav li>a.btn:hover,.sidenav li>a.btn-large:hover,.sidenav li>a.btn-small:hover,.sidenav li>a.btn-large:hover{background-color:#2bbbad}.sidenav li>a.btn-floating:hover{background-color:#26a69a}.sidenav li>a>i,.sidenav li>a>[class^="mdi-"],.sidenav li>a li>a>[class*="mdi-"],.sidenav li>a>i.material-icons{float:left;height:48px;line-height:48px;margin:0 32px 0 0;width:24px;color:rgba(0,0,0,0.54)}.sidenav .divider{margin:8px 0 0 0}.sidenav .subheader{cursor:initial;pointer-events:none;color:rgba(0,0,0,0.54);font-size:14px;font-weight:500;line-height:48px}.sidenav .subheader:hover{background-color:transparent}.sidenav .user-view{position:relative;padding:32px 32px 0;margin-bottom:8px}.sidenav .user-view>a{height:auto;padding:0}.sidenav .user-view>a:hover{background-color:transparent}.sidenav .user-view .background{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.sidenav .user-view .circle,.sidenav .user-view .name,.sidenav .user-view .email{display:block}.sidenav .user-view .circle{height:64px;width:64px}.sidenav .user-view .name,.sidenav .user-view .email{font-size:14px;line-height:24px}.sidenav .user-view .name{margin-top:16px;font-weight:500}.sidenav .user-view .email{padding-bottom:16px;font-weight:400}.drag-target{height:100%;width:10px;position:fixed;top:0;z-index:998}.drag-target.right-aligned{right:0}.sidenav.sidenav-fixed{left:0;-webkit-transform:translateX(0);transform:translateX(0);position:fixed}.sidenav.sidenav-fixed.right-aligned{right:0;left:auto}@media only screen and (max-width: 992px){.sidenav.sidenav-fixed{-webkit-transform:translateX(-105%);transform:translateX(-105%)}.sidenav.sidenav-fixed.right-aligned{-webkit-transform:translateX(105%);transform:translateX(105%)}.sidenav>a{padding:0 16px}.sidenav .user-view{padding:16px 16px 0}}.sidenav .collapsible-body>ul:not(.collapsible)>li.active,.sidenav.sidenav-fixed .collapsible-body>ul:not(.collapsible)>li.active{background-color:#ee6e73}.sidenav .collapsible-body>ul:not(.collapsible)>li.active a,.sidenav.sidenav-fixed .collapsible-body>ul:not(.collapsible)>li.active a{color:#fff}.sidenav .collapsible-body{padding:0}.sidenav-overlay{position:fixed;top:0;left:0;right:0;opacity:0;height:120vh;background-color:rgba(0,0,0,0.5);z-index:997;display:none}.preloader-wrapper{display:inline-block;position:relative;width:50px;height:50px}.preloader-wrapper.small{width:36px;height:36px}.preloader-wrapper.big{width:64px;height:64px}.preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0;border-color:#26a69a}.spinner-blue,.spinner-blue-only{border-color:#4285f4}.spinner-red,.spinner-red-only{border-color:#db4437}.spinner-yellow,.spinner-yellow-only{border-color:#f4b400}.spinner-green,.spinner-green-only{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer,.active .spinner-layer.spinner-blue-only,.active .spinner-layer.spinner-red-only,.active .spinner-layer.spinner-yellow-only,.active .spinner-layer.spinner-green-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gap-patch .circle{width:1000%;left:-450%}.circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.circle-clipper.left .circle{left:0;border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}#spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.slider{position:relative;height:400px;width:100%}.slider.fullscreen{height:100%;width:100%;position:absolute;top:0;left:0;right:0;bottom:0}.slider.fullscreen ul.slides{height:100%}.slider.fullscreen ul.indicators{z-index:2;bottom:30px}.slider .slides{background-color:#9e9e9e;margin:0;height:400px}.slider .slides li{opacity:0;position:absolute;top:0;left:0;z-index:1;width:100%;height:inherit;overflow:hidden}.slider .slides li img{height:100%;width:100%;background-size:cover;background-position:center}.slider .slides li .caption{color:#fff;position:absolute;top:15%;left:15%;width:70%;opacity:0}.slider .slides li .caption p{color:#e0e0e0}.slider .slides li.active{z-index:2}.slider .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.slider .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:16px;width:16px;margin:0 12px;background-color:#e0e0e0;-webkit-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.slider .indicators .indicator-item.active{background-color:#4CAF50}.carousel{overflow:hidden;position:relative;width:100%;height:400px;-webkit-perspective:500px;perspective:500px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform-origin:0% 50%;transform-origin:0% 50%}.carousel.carousel-slider{top:0;left:0}.carousel.carousel-slider .carousel-fixed-item{position:absolute;left:0;right:0;bottom:20px;z-index:1}.carousel.carousel-slider .carousel-fixed-item.with-indicators{bottom:68px}.carousel.carousel-slider .carousel-item{width:100%;height:100%;min-height:400px;position:absolute;top:0;left:0}.carousel.carousel-slider .carousel-item h2{font-size:24px;font-weight:500;line-height:32px}.carousel.carousel-slider .carousel-item p{font-size:15px}.carousel .carousel-item{visibility:hidden;width:200px;height:200px;position:absolute;top:0;left:0}.carousel .carousel-item>img{width:100%}.carousel .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.carousel .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:8px;width:8px;margin:24px 4px;background-color:rgba(255,255,255,0.5);-webkit-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.carousel .indicators .indicator-item.active{background-color:#fff}.carousel.scrolling .carousel-item .materialboxed,.carousel .carousel-item:not(.active) .materialboxed{pointer-events:none}.tap-target-wrapper{width:800px;height:800px;position:fixed;z-index:1000;visibility:hidden;-webkit-transition:visibility 0s .3s;transition:visibility 0s .3s}.tap-target-wrapper.open{visibility:visible;-webkit-transition:visibility 0s;transition:visibility 0s}.tap-target-wrapper.open .tap-target{-webkit-transform:scale(1);transform:scale(1);opacity:.95;-webkit-transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1)}.tap-target-wrapper.open .tap-target-wave::before{-webkit-transform:scale(1);transform:scale(1)}.tap-target-wrapper.open .tap-target-wave::after{visibility:visible;-webkit-animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;-webkit-transition:opacity .3s, visibility 0s 1s, -webkit-transform .3s;transition:opacity .3s, visibility 0s 1s, -webkit-transform .3s;transition:opacity .3s, transform .3s, visibility 0s 1s;transition:opacity .3s, transform .3s, visibility 0s 1s, -webkit-transform .3s}.tap-target{position:absolute;font-size:1rem;border-radius:50%;background-color:#ee6e73;-webkit-box-shadow:0 20px 20px 0 rgba(0,0,0,0.14),0 10px 50px 0 rgba(0,0,0,0.12),0 30px 10px -20px rgba(0,0,0,0.2);box-shadow:0 20px 20px 0 rgba(0,0,0,0.14),0 10px 50px 0 rgba(0,0,0,0.12),0 30px 10px -20px rgba(0,0,0,0.2);width:100%;height:100%;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1)}.tap-target-content{position:relative;display:table-cell}.tap-target-wave{position:absolute;border-radius:50%;z-index:10001}.tap-target-wave::before,.tap-target-wave::after{content:'';display:block;position:absolute;width:100%;height:100%;border-radius:50%;background-color:#ffffff}.tap-target-wave::before{-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s}.tap-target-wave::after{visibility:hidden;-webkit-transition:opacity .3s, visibility 0s, -webkit-transform .3s;transition:opacity .3s, visibility 0s, -webkit-transform .3s;transition:opacity .3s, transform .3s, visibility 0s;transition:opacity .3s, transform .3s, visibility 0s, -webkit-transform .3s;z-index:-1}.tap-target-origin{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);z-index:10002;position:absolute !important}.tap-target-origin:not(.btn):not(.btn-large):not(.btn-small),.tap-target-origin:not(.btn):not(.btn-large):not(.btn-small):hover{background:none}@media only screen and (max-width: 600px){.tap-target,.tap-target-wrapper{width:600px;height:600px}}.pulse{overflow:visible;position:relative}.pulse::before{content:'';display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:inherit;border-radius:inherit;-webkit-transition:opacity .3s, -webkit-transform .3s;transition:opacity .3s, -webkit-transform .3s;transition:opacity .3s, transform .3s;transition:opacity .3s, transform .3s, -webkit-transform .3s;-webkit-animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;z-index:-1}@-webkit-keyframes pulse-animation{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}100%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}}@keyframes pulse-animation{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}100%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}}.datepicker-modal{max-width:325px;min-width:300px;max-height:none}.datepicker-container.modal-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:0}.datepicker-controls{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:280px;margin:0 auto}.datepicker-controls .selects-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.datepicker-controls .select-wrapper input{border-bottom:none;text-align:center;margin:0}.datepicker-controls .select-wrapper input:focus{border-bottom:none}.datepicker-controls .select-wrapper .caret{display:none}.datepicker-controls .select-year input{width:50px}.datepicker-controls .select-month input{width:70px}.month-prev,.month-next{margin-top:4px;cursor:pointer;background-color:transparent;border:none}.datepicker-date-display{-webkit-box-flex:1;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;background-color:#26a69a;color:#fff;padding:20px 22px;font-weight:500}.datepicker-date-display .year-text{display:block;font-size:1.5rem;line-height:25px;color:rgba(255,255,255,0.7)}.datepicker-date-display .date-text{display:block;font-size:2.8rem;line-height:47px;font-weight:500}.datepicker-calendar-container{-webkit-box-flex:2.5;-webkit-flex:2.5 auto;-ms-flex:2.5 auto;flex:2.5 auto}.datepicker-table{width:280px;font-size:1rem;margin:0 auto}.datepicker-table thead{border-bottom:none}.datepicker-table th{padding:10px 5px;text-align:center}.datepicker-table tr{border:none}.datepicker-table abbr{text-decoration:none;color:#999}.datepicker-table td{border-radius:50%;padding:0}.datepicker-table td.is-today{color:#26a69a}.datepicker-table td.is-selected{background-color:#26a69a;color:#fff}.datepicker-table td.is-outside-current-month,.datepicker-table td.is-disabled{color:rgba(0,0,0,0.3);pointer-events:none}.datepicker-day-button{background-color:transparent;border:none;line-height:38px;display:block;width:100%;border-radius:50%;padding:0 5px;cursor:pointer;color:inherit}.datepicker-day-button:focus{background-color:rgba(43,161,150,0.25)}.datepicker-footer{width:280px;margin:0 auto;padding-bottom:5px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.datepicker-cancel,.datepicker-clear,.datepicker-today,.datepicker-done{color:#26a69a;padding:0 1rem}.datepicker-clear{color:#F44336}@media only screen and (min-width: 601px){.datepicker-modal{max-width:625px}.datepicker-container.modal-content{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.datepicker-date-display{-webkit-box-flex:0;-webkit-flex:0 1 270px;-ms-flex:0 1 270px;flex:0 1 270px}.datepicker-controls,.datepicker-table,.datepicker-footer{width:320px}.datepicker-day-button{line-height:44px}}.timepicker-modal{max-width:325px;max-height:none}.timepicker-container.modal-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:0}.text-primary{color:#fff}.timepicker-digital-display{-webkit-box-flex:1;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;background-color:#26a69a;padding:10px;font-weight:300}.timepicker-text-container{font-size:4rem;font-weight:bold;text-align:center;color:rgba(255,255,255,0.6);font-weight:400;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.timepicker-span-hours,.timepicker-span-minutes,.timepicker-span-am-pm div{cursor:pointer}.timepicker-span-hours{margin-right:3px}.timepicker-span-minutes{margin-left:3px}.timepicker-display-am-pm{font-size:1.3rem;position:absolute;right:1rem;bottom:1rem;font-weight:400}.timepicker-analog-display{-webkit-box-flex:2.5;-webkit-flex:2.5 auto;-ms-flex:2.5 auto;flex:2.5 auto}.timepicker-plate{background-color:#eee;border-radius:50%;width:270px;height:270px;overflow:visible;position:relative;margin:auto;margin-top:25px;margin-bottom:5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.timepicker-canvas,.timepicker-dial{position:absolute;left:0;right:0;top:0;bottom:0}.timepicker-minutes{visibility:hidden}.timepicker-tick{border-radius:50%;color:rgba(0,0,0,0.87);line-height:40px;text-align:center;width:40px;height:40px;position:absolute;cursor:pointer;font-size:15px}.timepicker-tick.active,.timepicker-tick:hover{background-color:rgba(38,166,154,0.25)}.timepicker-dial{-webkit-transition:opacity 350ms, -webkit-transform 350ms;transition:opacity 350ms, -webkit-transform 350ms;transition:transform 350ms, opacity 350ms;transition:transform 350ms, opacity 350ms, -webkit-transform 350ms}.timepicker-dial-out{opacity:0}.timepicker-dial-out.timepicker-hours{-webkit-transform:scale(1.1, 1.1);transform:scale(1.1, 1.1)}.timepicker-dial-out.timepicker-minutes{-webkit-transform:scale(0.8, 0.8);transform:scale(0.8, 0.8)}.timepicker-canvas{-webkit-transition:opacity 175ms;transition:opacity 175ms}.timepicker-canvas line{stroke:#26a69a;stroke-width:4;stroke-linecap:round}.timepicker-canvas-out{opacity:0.25}.timepicker-canvas-bearing{stroke:none;fill:#26a69a}.timepicker-canvas-bg{stroke:none;fill:#26a69a}.timepicker-footer{margin:0 auto;padding:5px 1rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.timepicker-clear{color:#F44336}.timepicker-close{color:#26a69a}.timepicker-clear,.timepicker-close{padding:0 20px}@media only screen and (min-width: 601px){.timepicker-modal{max-width:600px}.timepicker-container.modal-content{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.timepicker-text-container{top:32%}.timepicker-display-am-pm{position:relative;right:auto;bottom:auto;text-align:center;margin-top:1.2rem}} diff --git a/libretranslate/static/css/prism.min.css b/libretranslate/static/css/prism.min.css new file mode 100644 index 0000000000000000000000000000000000000000..8c4cc0576b3bcaab878c4e04c231aa8f4d74d2a8 --- /dev/null +++ b/libretranslate/static/css/prism.min.css @@ -0,0 +1 @@ +code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help} \ No newline at end of file diff --git a/libretranslate/static/favicon.ico b/libretranslate/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5f01dc6383172df2ba1ee0c46aae7d2b2aed604d Binary files /dev/null and b/libretranslate/static/favicon.ico differ diff --git a/libretranslate/static/fonts/MaterialIcons-Regular.eot b/libretranslate/static/fonts/MaterialIcons-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..70508ebabc9992e64f1314f866b2d7ab90438c58 Binary files /dev/null and b/libretranslate/static/fonts/MaterialIcons-Regular.eot differ diff --git a/libretranslate/static/fonts/MaterialIcons-Regular.ttf b/libretranslate/static/fonts/MaterialIcons-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7015564ad166a3e9d88c82f17829f0cc01ebe29a Binary files /dev/null and b/libretranslate/static/fonts/MaterialIcons-Regular.ttf differ diff --git a/libretranslate/static/fonts/MaterialIcons-Regular.woff b/libretranslate/static/fonts/MaterialIcons-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..b648a3eea2d16b6ce783906d6b7d5f251b9eb56c Binary files /dev/null and b/libretranslate/static/fonts/MaterialIcons-Regular.woff differ diff --git a/libretranslate/static/fonts/MaterialIcons-Regular.woff2 b/libretranslate/static/fonts/MaterialIcons-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9fa211252080046a23b2449dbdced6abc2b0bb34 Binary files /dev/null and b/libretranslate/static/fonts/MaterialIcons-Regular.woff2 differ diff --git a/libretranslate/static/icon.svg b/libretranslate/static/icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..76e3e2a64ab269f3c0bc259b3ddf11b2da9a6af3 --- /dev/null +++ b/libretranslate/static/icon.svg @@ -0,0 +1,83 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/libretranslate/static/js/materialize.min.js b/libretranslate/static/js/materialize.min.js new file mode 100644 index 0000000000000000000000000000000000000000..7d80c9375b2778e8b01e65bce4a84d22ec8d493b --- /dev/null +++ b/libretranslate/static/js/materialize.min.js @@ -0,0 +1,6 @@ +/*! + * Materialize v1.0.0 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +var _get=function t(e,i,n){null===e&&(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,i);if(void 0===s){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,i,n)}if("value"in s)return s.value;var a=s.get;return void 0!==a?a.call(n):void 0},_createClass=function(){function n(t,e){for(var i=0;i/,p=/^\w+$/;function v(t,e){e=e||o;var i=u.test(t)?e.getElementsByClassName(t.slice(1)):p.test(t)?e.getElementsByTagName(t):e.querySelectorAll(t);return i}function f(t){if(!i){var e=(i=o.implementation.createHTMLDocument(null)).createElement("base");e.href=o.location.href,i.head.appendChild(e)}return i.body.innerHTML=t,i.body.childNodes}function m(t){"loading"!==o.readyState?t():o.addEventListener("DOMContentLoaded",t)}function g(t,e){if(!t)return this;if(t.cash&&t!==a)return t;var i,n=t,s=0;if(d(t))n=l.test(t)?o.getElementById(t.slice(1)):c.test(t)?f(t):v(t,e);else if(h(t))return m(t),this;if(!n)return this;if(n.nodeType||n===a)this[0]=n,this.length=1;else for(i=this.length=n.length;ss.right-i||l+e.width>window.innerWidth-i)&&(n.right=!0),(ho-i||h+e.height>window.innerHeight-i)&&(n.bottom=!0),n},M.checkPossibleAlignments=function(t,e,i,n){var s={top:!0,right:!0,bottom:!0,left:!0,spaceOnTop:null,spaceOnRight:null,spaceOnBottom:null,spaceOnLeft:null},o="visible"===getComputedStyle(e).overflow,a=e.getBoundingClientRect(),r=Math.min(a.height,window.innerHeight),l=Math.min(a.width,window.innerWidth),h=t.getBoundingClientRect(),d=e.scrollLeft,u=e.scrollTop,c=i.left-d,p=i.top-u,v=i.top+h.height-u;return s.spaceOnRight=o?window.innerWidth-(h.left+i.width):l-(c+i.width),s.spaceOnRight<0&&(s.left=!1),s.spaceOnLeft=o?h.right-i.width:c-i.width+h.width,s.spaceOnLeft<0&&(s.right=!1),s.spaceOnBottom=o?window.innerHeight-(h.top+i.height+n):r-(p+i.height+n),s.spaceOnBottom<0&&(s.top=!1),s.spaceOnTop=o?h.bottom-(i.height+n):v-(i.height-n),s.spaceOnTop<0&&(s.bottom=!1),s},M.getOverflowParent=function(t){return null==t?null:t===document.body||"visible"!==getComputedStyle(t).overflow?t:M.getOverflowParent(t.parentElement)},M.getIdFromTrigger=function(t){var e=t.getAttribute("data-target");return e||(e=(e=t.getAttribute("href"))?e.slice(1):""),e},M.getDocumentScrollTop=function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},M.getDocumentScrollLeft=function(){return window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0};var getTime=Date.now||function(){return(new Date).getTime()};M.throttle=function(i,n,s){var o=void 0,a=void 0,r=void 0,l=null,h=0;s||(s={});var d=function(){h=!1===s.leading?0:getTime(),l=null,r=i.apply(o,a),o=a=null};return function(){var t=getTime();h||!1!==s.leading||(h=t);var e=n-(t-h);return o=this,a=arguments,e<=0?(clearTimeout(l),l=null,h=t,r=i.apply(o,a),o=a=null):l||!1===s.trailing||(l=setTimeout(d,e)),r}};var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,i){if(i.get||i.set)throw new TypeError("ES3 does not support getters and setters.");t!=Array.prototype&&t!=Object.prototype&&(t[e]=i.value)},$jscomp.getGlobal=function(t){return"undefined"!=typeof window&&window===t?t:"undefined"!=typeof global&&null!=global?global:t},$jscomp.global=$jscomp.getGlobal(this),$jscomp.SYMBOL_PREFIX="jscomp_symbol_",$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){},$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)},$jscomp.symbolCounter_=0,$jscomp.Symbol=function(t){return $jscomp.SYMBOL_PREFIX+(t||"")+$jscomp.symbolCounter_++},$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var t=$jscomp.global.Symbol.iterator;t||(t=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator")),"function"!=typeof Array.prototype[t]&&$jscomp.defineProperty(Array.prototype,t,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}}),$jscomp.initSymbolIterator=function(){}},$jscomp.arrayIterator=function(t){var e=0;return $jscomp.iteratorPrototype(function(){return e=k.currentTime)for(var h=0;ht&&(s.duration=e.duration),s.children.push(e)}),s.seek(0),s.reset(),s.autoplay&&s.restart(),s},s},O.random=function(t,e){return Math.floor(Math.random()*(e-t+1))+t},O}(),function(r,l){"use strict";var e={accordion:!0,onOpenStart:void 0,onOpenEnd:void 0,onCloseStart:void 0,onCloseEnd:void 0,inDuration:300,outDuration:300},t=function(t){function s(t,e){_classCallCheck(this,s);var i=_possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this,s,t,e));(i.el.M_Collapsible=i).options=r.extend({},s.defaults,e),i.$headers=i.$el.children("li").children(".collapsible-header"),i.$headers.attr("tabindex",0),i._setupEventHandlers();var n=i.$el.children("li.active").children(".collapsible-body");return i.options.accordion?n.first().css("display","block"):n.css("display","block"),i}return _inherits(s,Component),_createClass(s,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Collapsible=void 0}},{key:"_setupEventHandlers",value:function(){var e=this;this._handleCollapsibleClickBound=this._handleCollapsibleClick.bind(this),this._handleCollapsibleKeydownBound=this._handleCollapsibleKeydown.bind(this),this.el.addEventListener("click",this._handleCollapsibleClickBound),this.$headers.each(function(t){t.addEventListener("keydown",e._handleCollapsibleKeydownBound)})}},{key:"_removeEventHandlers",value:function(){var e=this;this.el.removeEventListener("click",this._handleCollapsibleClickBound),this.$headers.each(function(t){t.removeEventListener("keydown",e._handleCollapsibleKeydownBound)})}},{key:"_handleCollapsibleClick",value:function(t){var e=r(t.target).closest(".collapsible-header");if(t.target&&e.length){var i=e.closest(".collapsible");if(i[0]===this.el){var n=e.closest("li"),s=i.children("li"),o=n[0].classList.contains("active"),a=s.index(n);o?this.close(a):this.open(a)}}}},{key:"_handleCollapsibleKeydown",value:function(t){13===t.keyCode&&this._handleCollapsibleClickBound(t)}},{key:"_animateIn",value:function(t){var e=this,i=this.$el.children("li").eq(t);if(i.length){var n=i.children(".collapsible-body");l.remove(n[0]),n.css({display:"block",overflow:"hidden",height:0,paddingTop:"",paddingBottom:""});var s=n.css("padding-top"),o=n.css("padding-bottom"),a=n[0].scrollHeight;n.css({paddingTop:0,paddingBottom:0}),l({targets:n[0],height:a,paddingTop:s,paddingBottom:o,duration:this.options.inDuration,easing:"easeInOutCubic",complete:function(t){n.css({overflow:"",paddingTop:"",paddingBottom:"",height:""}),"function"==typeof e.options.onOpenEnd&&e.options.onOpenEnd.call(e,i[0])}})}}},{key:"_animateOut",value:function(t){var e=this,i=this.$el.children("li").eq(t);if(i.length){var n=i.children(".collapsible-body");l.remove(n[0]),n.css("overflow","hidden"),l({targets:n[0],height:0,paddingTop:0,paddingBottom:0,duration:this.options.outDuration,easing:"easeInOutCubic",complete:function(){n.css({height:"",overflow:"",padding:"",display:""}),"function"==typeof e.options.onCloseEnd&&e.options.onCloseEnd.call(e,i[0])}})}}},{key:"open",value:function(t){var i=this,e=this.$el.children("li").eq(t);if(e.length&&!e[0].classList.contains("active")){if("function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,e[0]),this.options.accordion){var n=this.$el.children("li");this.$el.children("li.active").each(function(t){var e=n.index(r(t));i.close(e)})}e[0].classList.add("active"),this._animateIn(t)}}},{key:"close",value:function(t){var e=this.$el.children("li").eq(t);e.length&&e[0].classList.contains("active")&&("function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,e[0]),e[0].classList.remove("active"),this._animateOut(t))}}],[{key:"init",value:function(t,e){return _get(s.__proto__||Object.getPrototypeOf(s),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Collapsible}},{key:"defaults",get:function(){return e}}]),s}();M.Collapsible=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"collapsible","M_Collapsible")}(cash,M.anime),function(h,i){"use strict";var e={alignment:"left",autoFocus:!0,constrainWidth:!0,container:null,coverTrigger:!0,closeOnClick:!0,hover:!1,inDuration:150,outDuration:250,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,onItemClick:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return i.el.M_Dropdown=i,n._dropdowns.push(i),i.id=M.getIdFromTrigger(t),i.dropdownEl=document.getElementById(i.id),i.$dropdownEl=h(i.dropdownEl),i.options=h.extend({},n.defaults,e),i.isOpen=!1,i.isScrollable=!1,i.isTouchMoving=!1,i.focusedIndex=-1,i.filterQuery=[],i.options.container?h(i.options.container).append(i.dropdownEl):i.$el.after(i.dropdownEl),i._makeDropdownFocusable(),i._resetFilterQueryBound=i._resetFilterQuery.bind(i),i._handleDocumentClickBound=i._handleDocumentClick.bind(i),i._handleDocumentTouchmoveBound=i._handleDocumentTouchmove.bind(i),i._handleDropdownClickBound=i._handleDropdownClick.bind(i),i._handleDropdownKeydownBound=i._handleDropdownKeydown.bind(i),i._handleTriggerKeydownBound=i._handleTriggerKeydown.bind(i),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._resetDropdownStyles(),this._removeEventHandlers(),n._dropdowns.splice(n._dropdowns.indexOf(this),1),this.el.M_Dropdown=void 0}},{key:"_setupEventHandlers",value:function(){this.el.addEventListener("keydown",this._handleTriggerKeydownBound),this.dropdownEl.addEventListener("click",this._handleDropdownClickBound),this.options.hover?(this._handleMouseEnterBound=this._handleMouseEnter.bind(this),this.el.addEventListener("mouseenter",this._handleMouseEnterBound),this._handleMouseLeaveBound=this._handleMouseLeave.bind(this),this.el.addEventListener("mouseleave",this._handleMouseLeaveBound),this.dropdownEl.addEventListener("mouseleave",this._handleMouseLeaveBound)):(this._handleClickBound=this._handleClick.bind(this),this.el.addEventListener("click",this._handleClickBound))}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("keydown",this._handleTriggerKeydownBound),this.dropdownEl.removeEventListener("click",this._handleDropdownClickBound),this.options.hover?(this.el.removeEventListener("mouseenter",this._handleMouseEnterBound),this.el.removeEventListener("mouseleave",this._handleMouseLeaveBound),this.dropdownEl.removeEventListener("mouseleave",this._handleMouseLeaveBound)):this.el.removeEventListener("click",this._handleClickBound)}},{key:"_setupTemporaryEventHandlers",value:function(){document.body.addEventListener("click",this._handleDocumentClickBound,!0),document.body.addEventListener("touchend",this._handleDocumentClickBound),document.body.addEventListener("touchmove",this._handleDocumentTouchmoveBound),this.dropdownEl.addEventListener("keydown",this._handleDropdownKeydownBound)}},{key:"_removeTemporaryEventHandlers",value:function(){document.body.removeEventListener("click",this._handleDocumentClickBound,!0),document.body.removeEventListener("touchend",this._handleDocumentClickBound),document.body.removeEventListener("touchmove",this._handleDocumentTouchmoveBound),this.dropdownEl.removeEventListener("keydown",this._handleDropdownKeydownBound)}},{key:"_handleClick",value:function(t){t.preventDefault(),this.open()}},{key:"_handleMouseEnter",value:function(){this.open()}},{key:"_handleMouseLeave",value:function(t){var e=t.toElement||t.relatedTarget,i=!!h(e).closest(".dropdown-content").length,n=!1,s=h(e).closest(".dropdown-trigger");s.length&&s[0].M_Dropdown&&s[0].M_Dropdown.isOpen&&(n=!0),n||i||this.close()}},{key:"_handleDocumentClick",value:function(t){var e=this,i=h(t.target);this.options.closeOnClick&&i.closest(".dropdown-content").length&&!this.isTouchMoving?setTimeout(function(){e.close()},0):!i.closest(".dropdown-trigger").length&&i.closest(".dropdown-content").length||setTimeout(function(){e.close()},0),this.isTouchMoving=!1}},{key:"_handleTriggerKeydown",value:function(t){t.which!==M.keys.ARROW_DOWN&&t.which!==M.keys.ENTER||this.isOpen||(t.preventDefault(),this.open())}},{key:"_handleDocumentTouchmove",value:function(t){h(t.target).closest(".dropdown-content").length&&(this.isTouchMoving=!0)}},{key:"_handleDropdownClick",value:function(t){if("function"==typeof this.options.onItemClick){var e=h(t.target).closest("li")[0];this.options.onItemClick.call(this,e)}}},{key:"_handleDropdownKeydown",value:function(t){if(t.which===M.keys.TAB)t.preventDefault(),this.close();else if(t.which!==M.keys.ARROW_DOWN&&t.which!==M.keys.ARROW_UP||!this.isOpen)if(t.which===M.keys.ENTER&&this.isOpen){var e=this.dropdownEl.children[this.focusedIndex],i=h(e).find("a, button").first();i.length?i[0].click():e&&e.click()}else t.which===M.keys.ESC&&this.isOpen&&(t.preventDefault(),this.close());else{t.preventDefault();var n=t.which===M.keys.ARROW_DOWN?1:-1,s=this.focusedIndex,o=!1;do{if(s+=n,this.dropdownEl.children[s]&&-1!==this.dropdownEl.children[s].tabIndex){o=!0;break}}while(sl.spaceOnBottom?(h="bottom",i+=l.spaceOnTop,o-=l.spaceOnTop):i+=l.spaceOnBottom)),!l[d]){var u="left"===d?"right":"left";l[u]?d=u:l.spaceOnLeft>l.spaceOnRight?(d="right",n+=l.spaceOnLeft,s-=l.spaceOnLeft):(d="left",n+=l.spaceOnRight)}return"bottom"===h&&(o=o-e.height+(this.options.coverTrigger?t.height:0)),"right"===d&&(s=s-e.width+t.width),{x:s,y:o,verticalAlignment:h,horizontalAlignment:d,height:i,width:n}}},{key:"_animateIn",value:function(){var e=this;i.remove(this.dropdownEl),i({targets:this.dropdownEl,opacity:{value:[0,1],easing:"easeOutQuad"},scaleX:[.3,1],scaleY:[.3,1],duration:this.options.inDuration,easing:"easeOutQuint",complete:function(t){e.options.autoFocus&&e.dropdownEl.focus(),"function"==typeof e.options.onOpenEnd&&e.options.onOpenEnd.call(e,e.el)}})}},{key:"_animateOut",value:function(){var e=this;i.remove(this.dropdownEl),i({targets:this.dropdownEl,opacity:{value:0,easing:"easeOutQuint"},scaleX:.3,scaleY:.3,duration:this.options.outDuration,easing:"easeOutQuint",complete:function(t){e._resetDropdownStyles(),"function"==typeof e.options.onCloseEnd&&e.options.onCloseEnd.call(e,e.el)}})}},{key:"_placeDropdown",value:function(){var t=this.options.constrainWidth?this.el.getBoundingClientRect().width:this.dropdownEl.getBoundingClientRect().width;this.dropdownEl.style.width=t+"px";var e=this._getDropdownPosition();this.dropdownEl.style.left=e.x+"px",this.dropdownEl.style.top=e.y+"px",this.dropdownEl.style.height=e.height+"px",this.dropdownEl.style.width=e.width+"px",this.dropdownEl.style.transformOrigin=("left"===e.horizontalAlignment?"0":"100%")+" "+("top"===e.verticalAlignment?"0":"100%")}},{key:"open",value:function(){this.isOpen||(this.isOpen=!0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el),this._resetDropdownStyles(),this.dropdownEl.style.display="block",this._placeDropdown(),this._animateIn(),this._setupTemporaryEventHandlers())}},{key:"close",value:function(){this.isOpen&&(this.isOpen=!1,this.focusedIndex=-1,"function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,this.el),this._animateOut(),this._removeTemporaryEventHandlers(),this.options.autoFocus&&this.el.focus())}},{key:"recalculateDimensions",value:function(){this.isOpen&&(this.$dropdownEl.css({width:"",height:"",left:"",top:"","transform-origin":""}),this._placeDropdown())}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Dropdown}},{key:"defaults",get:function(){return e}}]),n}();t._dropdowns=[],M.Dropdown=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"dropdown","M_Dropdown")}(cash,M.anime),function(s,i){"use strict";var e={opacity:.5,inDuration:250,outDuration:250,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,preventScrolling:!0,dismissible:!0,startingTop:"4%",endingTop:"10%"},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Modal=i).options=s.extend({},n.defaults,e),i.isOpen=!1,i.id=i.$el.attr("id"),i._openingTrigger=void 0,i.$overlay=s(''),i.el.tabIndex=0,i._nthModalOpened=0,n._count++,i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){n._count--,this._removeEventHandlers(),this.el.removeAttribute("style"),this.$overlay.remove(),this.el.M_Modal=void 0}},{key:"_setupEventHandlers",value:function(){this._handleOverlayClickBound=this._handleOverlayClick.bind(this),this._handleModalCloseClickBound=this._handleModalCloseClick.bind(this),1===n._count&&document.body.addEventListener("click",this._handleTriggerClick),this.$overlay[0].addEventListener("click",this._handleOverlayClickBound),this.el.addEventListener("click",this._handleModalCloseClickBound)}},{key:"_removeEventHandlers",value:function(){0===n._count&&document.body.removeEventListener("click",this._handleTriggerClick),this.$overlay[0].removeEventListener("click",this._handleOverlayClickBound),this.el.removeEventListener("click",this._handleModalCloseClickBound)}},{key:"_handleTriggerClick",value:function(t){var e=s(t.target).closest(".modal-trigger");if(e.length){var i=M.getIdFromTrigger(e[0]),n=document.getElementById(i).M_Modal;n&&n.open(e),t.preventDefault()}}},{key:"_handleOverlayClick",value:function(){this.options.dismissible&&this.close()}},{key:"_handleModalCloseClick",value:function(t){s(t.target).closest(".modal-close").length&&this.close()}},{key:"_handleKeydown",value:function(t){27===t.keyCode&&this.options.dismissible&&this.close()}},{key:"_handleFocus",value:function(t){this.el.contains(t.target)||this._nthModalOpened!==n._modalsOpen||this.el.focus()}},{key:"_animateIn",value:function(){var t=this;s.extend(this.el.style,{display:"block",opacity:0}),s.extend(this.$overlay[0].style,{display:"block",opacity:0}),i({targets:this.$overlay[0],opacity:this.options.opacity,duration:this.options.inDuration,easing:"easeOutQuad"});var e={targets:this.el,duration:this.options.inDuration,easing:"easeOutCubic",complete:function(){"function"==typeof t.options.onOpenEnd&&t.options.onOpenEnd.call(t,t.el,t._openingTrigger)}};this.el.classList.contains("bottom-sheet")?s.extend(e,{bottom:0,opacity:1}):s.extend(e,{top:[this.options.startingTop,this.options.endingTop],opacity:1,scaleX:[.8,1],scaleY:[.8,1]}),i(e)}},{key:"_animateOut",value:function(){var t=this;i({targets:this.$overlay[0],opacity:0,duration:this.options.outDuration,easing:"easeOutQuart"});var e={targets:this.el,duration:this.options.outDuration,easing:"easeOutCubic",complete:function(){t.el.style.display="none",t.$overlay.remove(),"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t,t.el)}};this.el.classList.contains("bottom-sheet")?s.extend(e,{bottom:"-100%",opacity:0}):s.extend(e,{top:[this.options.endingTop,this.options.startingTop],opacity:0,scaleX:.8,scaleY:.8}),i(e)}},{key:"open",value:function(t){if(!this.isOpen)return this.isOpen=!0,n._modalsOpen++,this._nthModalOpened=n._modalsOpen,this.$overlay[0].style.zIndex=1e3+2*n._modalsOpen,this.el.style.zIndex=1e3+2*n._modalsOpen+1,this._openingTrigger=t?t[0]:void 0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el,this._openingTrigger),this.options.preventScrolling&&(document.body.style.overflow="hidden"),this.el.classList.add("open"),this.el.insertAdjacentElement("afterend",this.$overlay[0]),this.options.dismissible&&(this._handleKeydownBound=this._handleKeydown.bind(this),this._handleFocusBound=this._handleFocus.bind(this),document.addEventListener("keydown",this._handleKeydownBound),document.addEventListener("focus",this._handleFocusBound,!0)),i.remove(this.el),i.remove(this.$overlay[0]),this._animateIn(),this.el.focus(),this}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,n._modalsOpen--,this._nthModalOpened=0,"function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,this.el),this.el.classList.remove("open"),0===n._modalsOpen&&(document.body.style.overflow=""),this.options.dismissible&&(document.removeEventListener("keydown",this._handleKeydownBound),document.removeEventListener("focus",this._handleFocusBound,!0)),i.remove(this.el),i.remove(this.$overlay[0]),this._animateOut(),this}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Modal}},{key:"defaults",get:function(){return e}}]),n}();t._modalsOpen=0,t._count=0,M.Modal=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"modal","M_Modal")}(cash,M.anime),function(o,a){"use strict";var e={inDuration:275,outDuration:200,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Materialbox=i).options=o.extend({},n.defaults,e),i.overlayActive=!1,i.doneAnimating=!0,i.placeholder=o("
").addClass("material-placeholder"),i.originalWidth=0,i.originalHeight=0,i.originInlineStyles=i.$el.attr("style"),i.caption=i.el.getAttribute("data-caption")||"",i.$el.before(i.placeholder),i.placeholder.append(i.$el),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Materialbox=void 0,o(this.placeholder).after(this.el).remove(),this.$el.removeAttr("style")}},{key:"_setupEventHandlers",value:function(){this._handleMaterialboxClickBound=this._handleMaterialboxClick.bind(this),this.el.addEventListener("click",this._handleMaterialboxClickBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleMaterialboxClickBound)}},{key:"_handleMaterialboxClick",value:function(t){!1===this.doneAnimating||this.overlayActive&&this.doneAnimating?this.close():this.open()}},{key:"_handleWindowScroll",value:function(){this.overlayActive&&this.close()}},{key:"_handleWindowResize",value:function(){this.overlayActive&&this.close()}},{key:"_handleWindowEscape",value:function(t){27===t.keyCode&&this.doneAnimating&&this.overlayActive&&this.close()}},{key:"_makeAncestorsOverflowVisible",value:function(){this.ancestorsChanged=o();for(var t=this.placeholder[0].parentNode;null!==t&&!o(t).is(document);){var e=o(t);"visible"!==e.css("overflow")&&(e.css("overflow","visible"),void 0===this.ancestorsChanged?this.ancestorsChanged=e:this.ancestorsChanged=this.ancestorsChanged.add(e)),t=t.parentNode}}},{key:"_animateImageIn",value:function(){var t=this,e={targets:this.el,height:[this.originalHeight,this.newHeight],width:[this.originalWidth,this.newWidth],left:M.getDocumentScrollLeft()+this.windowWidth/2-this.placeholder.offset().left-this.newWidth/2,top:M.getDocumentScrollTop()+this.windowHeight/2-this.placeholder.offset().top-this.newHeight/2,duration:this.options.inDuration,easing:"easeOutQuad",complete:function(){t.doneAnimating=!0,"function"==typeof t.options.onOpenEnd&&t.options.onOpenEnd.call(t,t.el)}};this.maxWidth=this.$el.css("max-width"),this.maxHeight=this.$el.css("max-height"),"none"!==this.maxWidth&&(e.maxWidth=this.newWidth),"none"!==this.maxHeight&&(e.maxHeight=this.newHeight),a(e)}},{key:"_animateImageOut",value:function(){var t=this,e={targets:this.el,width:this.originalWidth,height:this.originalHeight,left:0,top:0,duration:this.options.outDuration,easing:"easeOutQuad",complete:function(){t.placeholder.css({height:"",width:"",position:"",top:"",left:""}),t.attrWidth&&t.$el.attr("width",t.attrWidth),t.attrHeight&&t.$el.attr("height",t.attrHeight),t.$el.removeAttr("style"),t.originInlineStyles&&t.$el.attr("style",t.originInlineStyles),t.$el.removeClass("active"),t.doneAnimating=!0,t.ancestorsChanged.length&&t.ancestorsChanged.css("overflow",""),"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t,t.el)}};a(e)}},{key:"_updateVars",value:function(){this.windowWidth=window.innerWidth,this.windowHeight=window.innerHeight,this.caption=this.el.getAttribute("data-caption")||""}},{key:"open",value:function(){var t=this;this._updateVars(),this.originalWidth=this.el.getBoundingClientRect().width,this.originalHeight=this.el.getBoundingClientRect().height,this.doneAnimating=!1,this.$el.addClass("active"),this.overlayActive=!0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el),this.placeholder.css({width:this.placeholder[0].getBoundingClientRect().width+"px",height:this.placeholder[0].getBoundingClientRect().height+"px",position:"relative",top:0,left:0}),this._makeAncestorsOverflowVisible(),this.$el.css({position:"absolute","z-index":1e3,"will-change":"left, top, width, height"}),this.attrWidth=this.$el.attr("width"),this.attrHeight=this.$el.attr("height"),this.attrWidth&&(this.$el.css("width",this.attrWidth+"px"),this.$el.removeAttr("width")),this.attrHeight&&(this.$el.css("width",this.attrHeight+"px"),this.$el.removeAttr("height")),this.$overlay=o('
').css({opacity:0}).one("click",function(){t.doneAnimating&&t.close()}),this.$el.before(this.$overlay);var e=this.$overlay[0].getBoundingClientRect();this.$overlay.css({width:this.windowWidth+"px",height:this.windowHeight+"px",left:-1*e.left+"px",top:-1*e.top+"px"}),a.remove(this.el),a.remove(this.$overlay[0]),a({targets:this.$overlay[0],opacity:1,duration:this.options.inDuration,easing:"easeOutQuad"}),""!==this.caption&&(this.$photocaption&&a.remove(this.$photoCaption[0]),this.$photoCaption=o('
'),this.$photoCaption.text(this.caption),o("body").append(this.$photoCaption),this.$photoCaption.css({display:"inline"}),a({targets:this.$photoCaption[0],opacity:1,duration:this.options.inDuration,easing:"easeOutQuad"}));var i=0,n=this.originalWidth/this.windowWidth,s=this.originalHeight/this.windowHeight;this.newWidth=0,this.newHeight=0,si.options.responsiveThreshold,i.$img=i.$el.find("img").first(),i.$img.each(function(){this.complete&&s(this).trigger("load")}),i._updateParallax(),i._setupEventHandlers(),i._setupStyles(),n._parallaxes.push(i),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){n._parallaxes.splice(n._parallaxes.indexOf(this),1),this.$img[0].style.transform="",this._removeEventHandlers(),this.$el[0].M_Parallax=void 0}},{key:"_setupEventHandlers",value:function(){this._handleImageLoadBound=this._handleImageLoad.bind(this),this.$img[0].addEventListener("load",this._handleImageLoadBound),0===n._parallaxes.length&&(n._handleScrollThrottled=M.throttle(n._handleScroll,5),window.addEventListener("scroll",n._handleScrollThrottled),n._handleWindowResizeThrottled=M.throttle(n._handleWindowResize,5),window.addEventListener("resize",n._handleWindowResizeThrottled))}},{key:"_removeEventHandlers",value:function(){this.$img[0].removeEventListener("load",this._handleImageLoadBound),0===n._parallaxes.length&&(window.removeEventListener("scroll",n._handleScrollThrottled),window.removeEventListener("resize",n._handleWindowResizeThrottled))}},{key:"_setupStyles",value:function(){this.$img[0].style.opacity=1}},{key:"_handleImageLoad",value:function(){this._updateParallax()}},{key:"_updateParallax",value:function(){var t=0e.options.responsiveThreshold}}},{key:"defaults",get:function(){return e}}]),n}();t._parallaxes=[],M.Parallax=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"parallax","M_Parallax")}(cash),function(a,s){"use strict";var e={duration:300,onShow:null,swipeable:!1,responsiveThreshold:1/0},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Tabs=i).options=a.extend({},n.defaults,e),i.$tabLinks=i.$el.children("li.tab").children("a"),i.index=0,i._setupActiveTabLink(),i.options.swipeable?i._setupSwipeableTabs():i._setupNormalTabs(),i._setTabsAndTabWidth(),i._createIndicator(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this._indicator.parentNode.removeChild(this._indicator),this.options.swipeable?this._teardownSwipeableTabs():this._teardownNormalTabs(),this.$el[0].M_Tabs=void 0}},{key:"_setupEventHandlers",value:function(){this._handleWindowResizeBound=this._handleWindowResize.bind(this),window.addEventListener("resize",this._handleWindowResizeBound),this._handleTabClickBound=this._handleTabClick.bind(this),this.el.addEventListener("click",this._handleTabClickBound)}},{key:"_removeEventHandlers",value:function(){window.removeEventListener("resize",this._handleWindowResizeBound),this.el.removeEventListener("click",this._handleTabClickBound)}},{key:"_handleWindowResize",value:function(){this._setTabsAndTabWidth(),0!==this.tabWidth&&0!==this.tabsWidth&&(this._indicator.style.left=this._calcLeftPos(this.$activeTabLink)+"px",this._indicator.style.right=this._calcRightPos(this.$activeTabLink)+"px")}},{key:"_handleTabClick",value:function(t){var e=this,i=a(t.target).closest("li.tab"),n=a(t.target).closest("a");if(n.length&&n.parent().hasClass("tab"))if(i.hasClass("disabled"))t.preventDefault();else if(!n.attr("target")){this.$activeTabLink.removeClass("active");var s=this.$content;this.$activeTabLink=n,this.$content=a(M.escapeHash(n[0].hash)),this.$tabLinks=this.$el.children("li.tab").children("a"),this.$activeTabLink.addClass("active");var o=this.index;this.index=Math.max(this.$tabLinks.index(n),0),this.options.swipeable?this._tabsCarousel&&this._tabsCarousel.set(this.index,function(){"function"==typeof e.options.onShow&&e.options.onShow.call(e,e.$content[0])}):this.$content.length&&(this.$content[0].style.display="block",this.$content.addClass("active"),"function"==typeof this.options.onShow&&this.options.onShow.call(this,this.$content[0]),s.length&&!s.is(this.$content)&&(s[0].style.display="none",s.removeClass("active"))),this._setTabsAndTabWidth(),this._animateIndicator(o),t.preventDefault()}}},{key:"_createIndicator",value:function(){var t=this,e=document.createElement("li");e.classList.add("indicator"),this.el.appendChild(e),this._indicator=e,setTimeout(function(){t._indicator.style.left=t._calcLeftPos(t.$activeTabLink)+"px",t._indicator.style.right=t._calcRightPos(t.$activeTabLink)+"px"},0)}},{key:"_setupActiveTabLink",value:function(){this.$activeTabLink=a(this.$tabLinks.filter('[href="'+location.hash+'"]')),0===this.$activeTabLink.length&&(this.$activeTabLink=this.$el.children("li.tab").children("a.active").first()),0===this.$activeTabLink.length&&(this.$activeTabLink=this.$el.children("li.tab").children("a").first()),this.$tabLinks.removeClass("active"),this.$activeTabLink[0].classList.add("active"),this.index=Math.max(this.$tabLinks.index(this.$activeTabLink),0),this.$activeTabLink.length&&(this.$content=a(M.escapeHash(this.$activeTabLink[0].hash)),this.$content.addClass("active"))}},{key:"_setupSwipeableTabs",value:function(){var i=this;window.innerWidth>this.options.responsiveThreshold&&(this.options.swipeable=!1);var n=a();this.$tabLinks.each(function(t){var e=a(M.escapeHash(t.hash));e.addClass("carousel-item"),n=n.add(e)});var t=a('');n.first().before(t),t.append(n),n[0].style.display="";var e=this.$activeTabLink.closest(".tab").index();this._tabsCarousel=M.Carousel.init(t[0],{fullWidth:!0,noWrap:!0,onCycleTo:function(t){var e=i.index;i.index=a(t).index(),i.$activeTabLink.removeClass("active"),i.$activeTabLink=i.$tabLinks.eq(i.index),i.$activeTabLink.addClass("active"),i._animateIndicator(e),"function"==typeof i.options.onShow&&i.options.onShow.call(i,i.$content[0])}}),this._tabsCarousel.set(e)}},{key:"_teardownSwipeableTabs",value:function(){var t=this._tabsCarousel.$el;this._tabsCarousel.destroy(),t.after(t.children()),t.remove()}},{key:"_setupNormalTabs",value:function(){this.$tabLinks.not(this.$activeTabLink).each(function(t){if(t.hash){var e=a(M.escapeHash(t.hash));e.length&&(e[0].style.display="none")}})}},{key:"_teardownNormalTabs",value:function(){this.$tabLinks.each(function(t){if(t.hash){var e=a(M.escapeHash(t.hash));e.length&&(e[0].style.display="")}})}},{key:"_setTabsAndTabWidth",value:function(){this.tabsWidth=this.$el.width(),this.tabWidth=Math.max(this.tabsWidth,this.el.scrollWidth)/this.$tabLinks.length}},{key:"_calcRightPos",value:function(t){return Math.ceil(this.tabsWidth-t.position().left-t[0].getBoundingClientRect().width)}},{key:"_calcLeftPos",value:function(t){return Math.floor(t.position().left)}},{key:"updateTabIndicator",value:function(){this._setTabsAndTabWidth(),this._animateIndicator(this.index)}},{key:"_animateIndicator",value:function(t){var e=0,i=0;0<=this.index-t?e=90:i=90;var n={targets:this._indicator,left:{value:this._calcLeftPos(this.$activeTabLink),delay:e},right:{value:this._calcRightPos(this.$activeTabLink),delay:i},duration:this.options.duration,easing:"easeOutQuad"};s.remove(this._indicator),s(n)}},{key:"select",value:function(t){var e=this.$tabLinks.filter('[href="#'+t+'"]');e.length&&e.trigger("click")}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Tabs}},{key:"defaults",get:function(){return e}}]),n}();M.Tabs=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"tabs","M_Tabs")}(cash,M.anime),function(d,e){"use strict";var i={exitDelay:200,enterDelay:0,html:null,margin:5,inDuration:250,outDuration:200,position:"bottom",transitionMovement:10},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Tooltip=i).options=d.extend({},n.defaults,e),i.isOpen=!1,i.isHovered=!1,i.isFocused=!1,i._appendTooltipEl(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){d(this.tooltipEl).remove(),this._removeEventHandlers(),this.el.M_Tooltip=void 0}},{key:"_appendTooltipEl",value:function(){var t=document.createElement("div");t.classList.add("material-tooltip"),this.tooltipEl=t;var e=document.createElement("div");e.classList.add("tooltip-content"),e.innerHTML=this.options.html,t.appendChild(e),document.body.appendChild(t)}},{key:"_updateTooltipContent",value:function(){this.tooltipEl.querySelector(".tooltip-content").innerHTML=this.options.html}},{key:"_setupEventHandlers",value:function(){this._handleMouseEnterBound=this._handleMouseEnter.bind(this),this._handleMouseLeaveBound=this._handleMouseLeave.bind(this),this._handleFocusBound=this._handleFocus.bind(this),this._handleBlurBound=this._handleBlur.bind(this),this.el.addEventListener("mouseenter",this._handleMouseEnterBound),this.el.addEventListener("mouseleave",this._handleMouseLeaveBound),this.el.addEventListener("focus",this._handleFocusBound,!0),this.el.addEventListener("blur",this._handleBlurBound,!0)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("mouseenter",this._handleMouseEnterBound),this.el.removeEventListener("mouseleave",this._handleMouseLeaveBound),this.el.removeEventListener("focus",this._handleFocusBound,!0),this.el.removeEventListener("blur",this._handleBlurBound,!0)}},{key:"open",value:function(t){this.isOpen||(t=void 0===t||void 0,this.isOpen=!0,this.options=d.extend({},this.options,this._getAttributeOptions()),this._updateTooltipContent(),this._setEnterDelayTimeout(t))}},{key:"close",value:function(){this.isOpen&&(this.isHovered=!1,this.isFocused=!1,this.isOpen=!1,this._setExitDelayTimeout())}},{key:"_setExitDelayTimeout",value:function(){var t=this;clearTimeout(this._exitDelayTimeout),this._exitDelayTimeout=setTimeout(function(){t.isHovered||t.isFocused||t._animateOut()},this.options.exitDelay)}},{key:"_setEnterDelayTimeout",value:function(t){var e=this;clearTimeout(this._enterDelayTimeout),this._enterDelayTimeout=setTimeout(function(){(e.isHovered||e.isFocused||t)&&e._animateIn()},this.options.enterDelay)}},{key:"_positionTooltip",value:function(){var t,e=this.el,i=this.tooltipEl,n=e.offsetHeight,s=e.offsetWidth,o=i.offsetHeight,a=i.offsetWidth,r=this.options.margin,l=void 0,h=void 0;this.xMovement=0,this.yMovement=0,l=e.getBoundingClientRect().top+M.getDocumentScrollTop(),h=e.getBoundingClientRect().left+M.getDocumentScrollLeft(),"top"===this.options.position?(l+=-o-r,h+=s/2-a/2,this.yMovement=-this.options.transitionMovement):"right"===this.options.position?(l+=n/2-o/2,h+=s+r,this.xMovement=this.options.transitionMovement):"left"===this.options.position?(l+=n/2-o/2,h+=-a-r,this.xMovement=-this.options.transitionMovement):(l+=n+r,h+=s/2-a/2,this.yMovement=this.options.transitionMovement),t=this._repositionWithinScreen(h,l,a,o),d(i).css({top:t.y+"px",left:t.x+"px"})}},{key:"_repositionWithinScreen",value:function(t,e,i,n){var s=M.getDocumentScrollLeft(),o=M.getDocumentScrollTop(),a=t-s,r=e-o,l={left:a,top:r,width:i,height:n},h=this.options.margin+this.options.transitionMovement,d=M.checkWithinContainer(document.body,l,h);return d.left?a=h:d.right&&(a-=a+i-window.innerWidth),d.top?r=h:d.bottom&&(r-=r+n-window.innerHeight),{x:a+s,y:r+o}}},{key:"_animateIn",value:function(){this._positionTooltip(),this.tooltipEl.style.visibility="visible",e.remove(this.tooltipEl),e({targets:this.tooltipEl,opacity:1,translateX:this.xMovement,translateY:this.yMovement,duration:this.options.inDuration,easing:"easeOutCubic"})}},{key:"_animateOut",value:function(){e.remove(this.tooltipEl),e({targets:this.tooltipEl,opacity:0,translateX:0,translateY:0,duration:this.options.outDuration,easing:"easeOutCubic"})}},{key:"_handleMouseEnter",value:function(){this.isHovered=!0,this.isFocused=!1,this.open(!1)}},{key:"_handleMouseLeave",value:function(){this.isHovered=!1,this.isFocused=!1,this.close()}},{key:"_handleFocus",value:function(){M.tabPressed&&(this.isFocused=!0,this.open(!1))}},{key:"_handleBlur",value:function(){this.isFocused=!1,this.close()}},{key:"_getAttributeOptions",value:function(){var t={},e=this.el.getAttribute("data-tooltip"),i=this.el.getAttribute("data-position");return e&&(t.html=e),i&&(t.position=i),t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Tooltip}},{key:"defaults",get:function(){return i}}]),n}();M.Tooltip=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"tooltip","M_Tooltip")}(cash,M.anime),function(i){"use strict";var t=t||{},e=document.querySelectorAll.bind(document);function m(t){var e="";for(var i in t)t.hasOwnProperty(i)&&(e+=i+":"+t[i]+";");return e}var g={duration:750,show:function(t,e){if(2===t.button)return!1;var i=e||this,n=document.createElement("div");n.className="waves-ripple",i.appendChild(n);var s,o,a,r,l,h,d,u=(h={top:0,left:0},d=(s=i)&&s.ownerDocument,o=d.documentElement,void 0!==s.getBoundingClientRect&&(h=s.getBoundingClientRect()),a=null!==(l=r=d)&&l===l.window?r:9===r.nodeType&&r.defaultView,{top:h.top+a.pageYOffset-o.clientTop,left:h.left+a.pageXOffset-o.clientLeft}),c=t.pageY-u.top,p=t.pageX-u.left,v="scale("+i.clientWidth/100*10+")";"touches"in t&&(c=t.touches[0].pageY-u.top,p=t.touches[0].pageX-u.left),n.setAttribute("data-hold",Date.now()),n.setAttribute("data-scale",v),n.setAttribute("data-x",p),n.setAttribute("data-y",c);var f={top:c+"px",left:p+"px"};n.className=n.className+" waves-notransition",n.setAttribute("style",m(f)),n.className=n.className.replace("waves-notransition",""),f["-webkit-transform"]=v,f["-moz-transform"]=v,f["-ms-transform"]=v,f["-o-transform"]=v,f.transform=v,f.opacity="1",f["-webkit-transition-duration"]=g.duration+"ms",f["-moz-transition-duration"]=g.duration+"ms",f["-o-transition-duration"]=g.duration+"ms",f["transition-duration"]=g.duration+"ms",f["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",n.setAttribute("style",m(f))},hide:function(t){l.touchup(t);var e=this,i=(e.clientWidth,null),n=e.getElementsByClassName("waves-ripple");if(!(0i||1"+o+""+a+""+r+""),i.length&&e.prepend(i)}},{key:"_resetCurrentElement",value:function(){this.activeIndex=-1,this.$active.removeClass("active")}},{key:"_resetAutocomplete",value:function(){h(this.container).empty(),this._resetCurrentElement(),this.oldVal=null,this.isOpen=!1,this._mousedown=!1}},{key:"selectOption",value:function(t){var e=t.text().trim();this.el.value=e,this.$el.trigger("change"),this._resetAutocomplete(),this.close(),"function"==typeof this.options.onAutocomplete&&this.options.onAutocomplete.call(this,e)}},{key:"_renderDropdown",value:function(t,i){var n=this;this._resetAutocomplete();var e=[];for(var s in t)if(t.hasOwnProperty(s)&&-1!==s.toLowerCase().indexOf(i)){if(this.count>=this.options.limit)break;var o={data:t[s],key:s};e.push(o),this.count++}if(this.options.sortFunction){e.sort(function(t,e){return n.options.sortFunction(t.key.toLowerCase(),e.key.toLowerCase(),i.toLowerCase())})}for(var a=0;a");r.data?l.append(''+r.key+""):l.append(""+r.key+""),h(this.container).append(l),this._highlight(i,l)}}},{key:"open",value:function(){var t=this.el.value.toLowerCase();this._resetAutocomplete(),t.length>=this.options.minLength&&(this.isOpen=!0,this._renderDropdown(this.options.data,t)),this.dropdown.isOpen?this.dropdown.recalculateDimensions():this.dropdown.open()}},{key:"close",value:function(){this.dropdown.close()}},{key:"updateData",value:function(t){var e=this.el.value.toLowerCase();this.options.data=t,this.isOpen&&this._renderDropdown(t,e)}}],[{key:"init",value:function(t,e){return _get(s.__proto__||Object.getPrototypeOf(s),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Autocomplete}},{key:"defaults",get:function(){return e}}]),s}();t._keydown=!1,M.Autocomplete=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"autocomplete","M_Autocomplete")}(cash),function(d){M.updateTextFields=function(){d("input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], input[type=date], input[type=time], textarea").each(function(t,e){var i=d(this);0'),d("body").append(e));var i=t.css("font-family"),n=t.css("font-size"),s=t.css("line-height"),o=t.css("padding-top"),a=t.css("padding-right"),r=t.css("padding-bottom"),l=t.css("padding-left");n&&e.css("font-size",n),i&&e.css("font-family",i),s&&e.css("line-height",s),o&&e.css("padding-top",o),a&&e.css("padding-right",a),r&&e.css("padding-bottom",r),l&&e.css("padding-left",l),t.data("original-height")||t.data("original-height",t.height()),"off"===t.attr("wrap")&&e.css("overflow-wrap","normal").css("white-space","pre"),e.text(t[0].value+"\n");var h=e.html().replace(/\n/g,"
");e.html(h),0'),this.$slides.each(function(t,e){var i=s('
  • ');n.$indicators.append(i[0])}),this.$el.append(this.$indicators[0]),this.$indicators=this.$indicators.children("li.indicator-item"))}},{key:"_removeIndicators",value:function(){this.$el.find("ul.indicators").remove()}},{key:"set",value:function(t){var e=this;if(t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.activeIndex!=t){this.$active=this.$slides.eq(this.activeIndex);var i=this.$active.find(".caption");this.$active.removeClass("active"),o({targets:this.$active[0],opacity:0,duration:this.options.duration,easing:"easeOutQuad",complete:function(){e.$slides.not(".active").each(function(t){o({targets:t,opacity:0,translateX:0,translateY:0,duration:0,easing:"easeOutQuad"})})}}),this._animateCaptionIn(i[0],this.options.duration),this.options.indicators&&(this.$indicators.eq(this.activeIndex).removeClass("active"),this.$indicators.eq(t).addClass("active")),o({targets:this.$slides.eq(t)[0],opacity:1,duration:this.options.duration,easing:"easeOutQuad"}),o({targets:this.$slides.eq(t).find(".caption")[0],opacity:1,translateX:0,translateY:0,duration:this.options.duration,delay:this.options.duration,easing:"easeOutQuad"}),this.$slides.eq(t).addClass("active"),this.activeIndex=t,this.start()}}},{key:"pause",value:function(){clearInterval(this.interval)}},{key:"start",value:function(){clearInterval(this.interval),this.interval=setInterval(this._handleIntervalBound,this.options.duration+this.options.interval)}},{key:"next",value:function(){var t=this.activeIndex+1;t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.set(t)}},{key:"prev",value:function(){var t=this.activeIndex-1;t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.set(t)}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Slider}},{key:"defaults",get:function(){return e}}]),n}();M.Slider=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"slider","M_Slider")}(cash,M.anime),function(n,s){n(document).on("click",".card",function(t){if(n(this).children(".card-reveal").length){var i=n(t.target).closest(".card");void 0===i.data("initialOverflow")&&i.data("initialOverflow",void 0===i.css("overflow")?"":i.css("overflow"));var e=n(this).find(".card-reveal");n(t.target).is(n(".card-reveal .card-title"))||n(t.target).is(n(".card-reveal .card-title i"))?s({targets:e[0],translateY:0,duration:225,easing:"easeInOutQuad",complete:function(t){var e=t.animatables[0].target;n(e).css({display:"none"}),i.css("overflow",i.data("initialOverflow"))}}):(n(t.target).is(n(".card .activator"))||n(t.target).is(n(".card .activator i")))&&(i.css("overflow","hidden"),e.css({display:"block"}),s({targets:e[0],translateY:"-100%",duration:300,easing:"easeInOutQuad"}))}})}(cash,M.anime),function(h){"use strict";var e={data:[],placeholder:"",secondaryPlaceholder:"",autocompleteOptions:{},limit:1/0,onChipAdd:null,onChipSelect:null,onChipDelete:null},t=function(t){function l(t,e){_classCallCheck(this,l);var i=_possibleConstructorReturn(this,(l.__proto__||Object.getPrototypeOf(l)).call(this,l,t,e));return(i.el.M_Chips=i).options=h.extend({},l.defaults,e),i.$el.addClass("chips input-field"),i.chipsData=[],i.$chips=h(),i._setupInput(),i.hasAutocomplete=0"),this.$el.append(this.$input)),this.$input.addClass("input")}},{key:"_setupLabel",value:function(){this.$label=this.$el.find("label"),this.$label.length&&this.$label.setAttribute("for",this.$input.attr("id"))}},{key:"_setPlaceholder",value:function(){void 0!==this.chipsData&&!this.chipsData.length&&this.options.placeholder?h(this.$input).prop("placeholder",this.options.placeholder):(void 0===this.chipsData||this.chipsData.length)&&this.options.secondaryPlaceholder&&h(this.$input).prop("placeholder",this.options.secondaryPlaceholder)}},{key:"_isValid",value:function(t){if(t.hasOwnProperty("tag")&&""!==t.tag){for(var e=!1,i=0;i=this.options.limit)){var e=this._renderChip(t);this.$chips.add(e),this.chipsData.push(t),h(this.$input).before(e),this._setPlaceholder(),"function"==typeof this.options.onChipAdd&&this.options.onChipAdd.call(this,this.$el,e)}}},{key:"deleteChip",value:function(t){var e=this.$chips.eq(t);this.$chips.eq(t).remove(),this.$chips=this.$chips.filter(function(t){return 0<=h(t).index()}),this.chipsData.splice(t,1),this._setPlaceholder(),"function"==typeof this.options.onChipDelete&&this.options.onChipDelete.call(this,this.$el,e[0])}},{key:"selectChip",value:function(t){var e=this.$chips.eq(t);(this._selectedChip=e)[0].focus(),"function"==typeof this.options.onChipSelect&&this.options.onChipSelect.call(this,this.$el,e[0])}}],[{key:"init",value:function(t,e){return _get(l.__proto__||Object.getPrototypeOf(l),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Chips}},{key:"_handleChipsKeydown",value:function(t){l._keydown=!0;var e=h(t.target).closest(".chips"),i=t.target&&e.length;if(!h(t.target).is("input, textarea")&&i){var n=e[0].M_Chips;if(8===t.keyCode||46===t.keyCode){t.preventDefault();var s=n.chipsData.length;if(n._selectedChip){var o=n._selectedChip.index();n.deleteChip(o),n._selectedChip=null,s=Math.max(o-1,0)}n.chipsData.length&&n.selectChip(s)}else if(37===t.keyCode){if(n._selectedChip){var a=n._selectedChip.index()-1;if(a<0)return;n.selectChip(a)}}else if(39===t.keyCode&&n._selectedChip){var r=n._selectedChip.index()+1;r>=n.chipsData.length?n.$input[0].focus():n.selectChip(r)}}}},{key:"_handleChipsKeyup",value:function(t){l._keydown=!1}},{key:"_handleChipsBlur",value:function(t){l._keydown||(h(t.target).closest(".chips")[0].M_Chips._selectedChip=null)}},{key:"defaults",get:function(){return e}}]),l}();t._keydown=!1,M.Chips=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"chips","M_Chips"),h(document).ready(function(){h(document.body).on("click",".chip .close",function(){var t=h(this).closest(".chips");t.length&&t[0].M_Chips||h(this).closest(".chip").remove()})})}(cash),function(s){"use strict";var e={top:0,bottom:1/0,offset:0,onPositionChange:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Pushpin=i).options=s.extend({},n.defaults,e),i.originalOffset=i.el.offsetTop,n._pushpins.push(i),i._setupEventHandlers(),i._updatePosition(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this.el.style.top=null,this._removePinClasses(),this._removeEventHandlers();var t=n._pushpins.indexOf(this);n._pushpins.splice(t,1)}},{key:"_setupEventHandlers",value:function(){document.addEventListener("scroll",n._updateElements)}},{key:"_removeEventHandlers",value:function(){document.removeEventListener("scroll",n._updateElements)}},{key:"_updatePosition",value:function(){var t=M.getDocumentScrollTop()+this.options.offset;this.options.top<=t&&this.options.bottom>=t&&!this.el.classList.contains("pinned")&&(this._removePinClasses(),this.el.style.top=this.options.offset+"px",this.el.classList.add("pinned"),"function"==typeof this.options.onPositionChange&&this.options.onPositionChange.call(this,"pinned")),tthis.options.bottom&&!this.el.classList.contains("pin-bottom")&&(this._removePinClasses(),this.el.classList.add("pin-bottom"),this.el.style.top=this.options.bottom-this.originalOffset+"px","function"==typeof this.options.onPositionChange&&this.options.onPositionChange.call(this,"pin-bottom"))}},{key:"_removePinClasses",value:function(){this.el.classList.remove("pin-top"),this.el.classList.remove("pinned"),this.el.classList.remove("pin-bottom")}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Pushpin}},{key:"_updateElements",value:function(){for(var t in n._pushpins){n._pushpins[t]._updatePosition()}}},{key:"defaults",get:function(){return e}}]),n}();t._pushpins=[],M.Pushpin=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"pushpin","M_Pushpin")}(cash),function(r,s){"use strict";var e={direction:"top",hoverEnabled:!0,toolbarEnabled:!1};r.fn.reverse=[].reverse;var t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_FloatingActionButton=i).options=r.extend({},n.defaults,e),i.isOpen=!1,i.$anchor=i.$el.children("a").first(),i.$menu=i.$el.children("ul").first(),i.$floatingBtns=i.$el.find("ul .btn-floating"),i.$floatingBtnsReverse=i.$el.find("ul .btn-floating").reverse(),i.offsetY=0,i.offsetX=0,i.$el.addClass("direction-"+i.options.direction),"top"===i.options.direction?i.offsetY=40:"right"===i.options.direction?i.offsetX=-40:"bottom"===i.options.direction?i.offsetY=-40:i.offsetX=40,i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_FloatingActionButton=void 0}},{key:"_setupEventHandlers",value:function(){this._handleFABClickBound=this._handleFABClick.bind(this),this._handleOpenBound=this.open.bind(this),this._handleCloseBound=this.close.bind(this),this.options.hoverEnabled&&!this.options.toolbarEnabled?(this.el.addEventListener("mouseenter",this._handleOpenBound),this.el.addEventListener("mouseleave",this._handleCloseBound)):this.el.addEventListener("click",this._handleFABClickBound)}},{key:"_removeEventHandlers",value:function(){this.options.hoverEnabled&&!this.options.toolbarEnabled?(this.el.removeEventListener("mouseenter",this._handleOpenBound),this.el.removeEventListener("mouseleave",this._handleCloseBound)):this.el.removeEventListener("click",this._handleFABClickBound)}},{key:"_handleFABClick",value:function(){this.isOpen?this.close():this.open()}},{key:"_handleDocumentClick",value:function(t){r(t.target).closest(this.$menu).length||this.close()}},{key:"open",value:function(){this.isOpen||(this.options.toolbarEnabled?this._animateInToolbar():this._animateInFAB(),this.isOpen=!0)}},{key:"close",value:function(){this.isOpen&&(this.options.toolbarEnabled?(window.removeEventListener("scroll",this._handleCloseBound,!0),document.body.removeEventListener("click",this._handleDocumentClickBound,!0),this._animateOutToolbar()):this._animateOutFAB(),this.isOpen=!1)}},{key:"_animateInFAB",value:function(){var e=this;this.$el.addClass("active");var i=0;this.$floatingBtnsReverse.each(function(t){s({targets:t,opacity:1,scale:[.4,1],translateY:[e.offsetY,0],translateX:[e.offsetX,0],duration:275,delay:i,easing:"easeInOutQuad"}),i+=40})}},{key:"_animateOutFAB",value:function(){var e=this;this.$floatingBtnsReverse.each(function(t){s.remove(t),s({targets:t,opacity:0,scale:.4,translateY:e.offsetY,translateX:e.offsetX,duration:175,easing:"easeOutQuad",complete:function(){e.$el.removeClass("active")}})})}},{key:"_animateInToolbar",value:function(){var t,e=this,i=window.innerWidth,n=window.innerHeight,s=this.el.getBoundingClientRect(),o=r('
    '),a=this.$anchor.css("background-color");this.$anchor.append(o),this.offsetX=s.left-i/2+s.width/2,this.offsetY=n-s.bottom,t=i/o[0].clientWidth,this.btnBottom=s.bottom,this.btnLeft=s.left,this.btnWidth=s.width,this.$el.addClass("active"),this.$el.css({"text-align":"center",width:"100%",bottom:0,left:0,transform:"translateX("+this.offsetX+"px)",transition:"none"}),this.$anchor.css({transform:"translateY("+-this.offsetY+"px)",transition:"none"}),o.css({"background-color":a}),setTimeout(function(){e.$el.css({transform:"",transition:"transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s"}),e.$anchor.css({overflow:"visible",transform:"",transition:"transform .2s"}),setTimeout(function(){e.$el.css({overflow:"hidden","background-color":a}),o.css({transform:"scale("+t+")",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"}),e.$menu.children("li").children("a").css({opacity:1}),e._handleDocumentClickBound=e._handleDocumentClick.bind(e),window.addEventListener("scroll",e._handleCloseBound,!0),document.body.addEventListener("click",e._handleDocumentClickBound,!0)},100)},0)}},{key:"_animateOutToolbar",value:function(){var t=this,e=window.innerWidth,i=window.innerHeight,n=this.$el.find(".fab-backdrop"),s=this.$anchor.css("background-color");this.offsetX=this.btnLeft-e/2+this.btnWidth/2,this.offsetY=i-this.btnBottom,this.$el.removeClass("active"),this.$el.css({"background-color":"transparent",transition:"none"}),this.$anchor.css({transition:"none"}),n.css({transform:"scale(0)","background-color":s}),this.$menu.children("li").children("a").css({opacity:""}),setTimeout(function(){n.remove(),t.$el.css({"text-align":"",width:"",bottom:"",left:"",overflow:"","background-color":"",transform:"translate3d("+-t.offsetX+"px,0,0)"}),t.$anchor.css({overflow:"",transform:"translate3d(0,"+t.offsetY+"px,0)"}),setTimeout(function(){t.$el.css({transform:"translate3d(0,0,0)",transition:"transform .2s"}),t.$anchor.css({transform:"translate3d(0,0,0)",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"})},20)},200)}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_FloatingActionButton}},{key:"defaults",get:function(){return e}}]),n}();M.FloatingActionButton=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"floatingActionButton","M_FloatingActionButton")}(cash,M.anime),function(g){"use strict";var e={autoClose:!1,format:"mmm dd, yyyy",parse:null,defaultDate:null,setDefaultDate:!1,disableWeekends:!1,disableDayFn:null,firstDay:0,minDate:null,maxDate:null,yearRange:10,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,container:null,showClearBtn:!1,i18n:{cancel:"Cancel",clear:"Clear",done:"Ok",previousMonth:"‹",nextMonth:"›",months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysAbbrev:["S","M","T","W","T","F","S"]},events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null},t=function(t){function B(t,e){_classCallCheck(this,B);var i=_possibleConstructorReturn(this,(B.__proto__||Object.getPrototypeOf(B)).call(this,B,t,e));(i.el.M_Datepicker=i).options=g.extend({},B.defaults,e),e&&e.hasOwnProperty("i18n")&&"object"==typeof e.i18n&&(i.options.i18n=g.extend({},B.defaults.i18n,e.i18n)),i.options.minDate&&i.options.minDate.setHours(0,0,0,0),i.options.maxDate&&i.options.maxDate.setHours(0,0,0,0),i.id=M.guid(),i._setupVariables(),i._insertHTMLIntoDOM(),i._setupModal(),i._setupEventHandlers(),i.options.defaultDate||(i.options.defaultDate=new Date(Date.parse(i.el.value)));var n=i.options.defaultDate;return B._isDate(n)?i.options.setDefaultDate?(i.setDate(n,!0),i.setInputValue()):i.gotoDate(n):i.gotoDate(new Date),i.isOpen=!1,i}return _inherits(B,Component),_createClass(B,[{key:"destroy",value:function(){this._removeEventHandlers(),this.modal.destroy(),g(this.modalEl).remove(),this.destroySelects(),this.el.M_Datepicker=void 0}},{key:"destroySelects",value:function(){var t=this.calendarEl.querySelector(".orig-select-year");t&&M.FormSelect.getInstance(t).destroy();var e=this.calendarEl.querySelector(".orig-select-month");e&&M.FormSelect.getInstance(e).destroy()}},{key:"_insertHTMLIntoDOM",value:function(){this.options.showClearBtn&&(g(this.clearBtn).css({visibility:""}),this.clearBtn.innerHTML=this.options.i18n.clear),this.doneBtn.innerHTML=this.options.i18n.done,this.cancelBtn.innerHTML=this.options.i18n.cancel,this.options.container?this.$modalEl.appendTo(this.options.container):this.$modalEl.insertBefore(this.el)}},{key:"_setupModal",value:function(){var t=this;this.modalEl.id="modal-"+this.id,this.modal=M.Modal.init(this.modalEl,{onCloseEnd:function(){t.isOpen=!1}})}},{key:"toString",value:function(t){var e=this;return t=t||this.options.format,B._isDate(this.date)?t.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g).map(function(t){return e.formats[t]?e.formats[t]():t}).join(""):""}},{key:"setDate",value:function(t,e){if(!t)return this.date=null,this._renderDateDisplay(),this.draw();if("string"==typeof t&&(t=new Date(Date.parse(t))),B._isDate(t)){var i=this.options.minDate,n=this.options.maxDate;B._isDate(i)&&tn.maxDate||n.disableWeekends&&B._isWeekend(y)||n.disableDayFn&&n.disableDayFn(y),isEmpty:C,isStartRange:x,isEndRange:L,isInRange:T,showDaysInNextAndPreviousMonths:n.showDaysInNextAndPreviousMonths};l.push(this.renderDay($)),7==++_&&(r.push(this.renderRow(l,n.isRTL,m)),_=0,m=!(l=[]))}return this.renderTable(n,r,i)}},{key:"renderDay",value:function(t){var e=[],i="false";if(t.isEmpty){if(!t.showDaysInNextAndPreviousMonths)return'';e.push("is-outside-current-month"),e.push("is-selection-disabled")}return t.isDisabled&&e.push("is-disabled"),t.isToday&&e.push("is-today"),t.isSelected&&(e.push("is-selected"),i="true"),t.hasEvent&&e.push("has-event"),t.isInRange&&e.push("is-inrange"),t.isStartRange&&e.push("is-startrange"),t.isEndRange&&e.push("is-endrange"),'"}},{key:"renderRow",value:function(t,e,i){return''+(e?t.reverse():t).join("")+""}},{key:"renderTable",value:function(t,e,i){return'
    '+this.renderHead(t)+this.renderBody(e)+"
    "}},{key:"renderHead",value:function(t){var e=void 0,i=[];for(e=0;e<7;e++)i.push(''+this.renderDayName(t,e,!0)+"");return""+(t.isRTL?i.reverse():i).join("")+""}},{key:"renderBody",value:function(t){return""+t.join("")+""}},{key:"renderTitle",value:function(t,e,i,n,s,o){var a,r,l=void 0,h=void 0,d=void 0,u=this.options,c=i===u.minYear,p=i===u.maxYear,v='
    ',f=!0,m=!0;for(d=[],l=0;l<12;l++)d.push('");for(a='",g.isArray(u.yearRange)?(l=u.yearRange[0],h=u.yearRange[1]+1):(l=i-u.yearRange,h=1+i+u.yearRange),d=[];l=u.minYear&&d.push('");r='";v+='',v+='
    ',u.showMonthAfterYear?v+=r+a:v+=a+r,v+="
    ",c&&(0===n||u.minMonth>=n)&&(f=!1),p&&(11===n||u.maxMonth<=n)&&(m=!1);return(v+='')+"
    "}},{key:"draw",value:function(t){if(this.isOpen||t){var e,i=this.options,n=i.minYear,s=i.maxYear,o=i.minMonth,a=i.maxMonth,r="";this._y<=n&&(this._y=n,!isNaN(o)&&this._m=s&&(this._y=s,!isNaN(a)&&this._m>a&&(this._m=a)),e="datepicker-title-"+Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,2);for(var l=0;l<1;l++)this._renderDateDisplay(),r+=this.renderTitle(this,l,this.calendars[l].year,this.calendars[l].month,this.calendars[0].year,e)+this.render(this.calendars[l].year,this.calendars[l].month,e);this.destroySelects(),this.calendarEl.innerHTML=r;var h=this.calendarEl.querySelector(".orig-select-year"),d=this.calendarEl.querySelector(".orig-select-month");M.FormSelect.init(h,{classes:"select-year",dropdownOptions:{container:document.body,constrainWidth:!1}}),M.FormSelect.init(d,{classes:"select-month",dropdownOptions:{container:document.body,constrainWidth:!1}}),h.addEventListener("change",this._handleYearChange.bind(this)),d.addEventListener("change",this._handleMonthChange.bind(this)),"function"==typeof this.options.onDraw&&this.options.onDraw(this)}}},{key:"_setupEventHandlers",value:function(){this._handleInputKeydownBound=this._handleInputKeydown.bind(this),this._handleInputClickBound=this._handleInputClick.bind(this),this._handleInputChangeBound=this._handleInputChange.bind(this),this._handleCalendarClickBound=this._handleCalendarClick.bind(this),this._finishSelectionBound=this._finishSelection.bind(this),this._handleMonthChange=this._handleMonthChange.bind(this),this._closeBound=this.close.bind(this),this.el.addEventListener("click",this._handleInputClickBound),this.el.addEventListener("keydown",this._handleInputKeydownBound),this.el.addEventListener("change",this._handleInputChangeBound),this.calendarEl.addEventListener("click",this._handleCalendarClickBound),this.doneBtn.addEventListener("click",this._finishSelectionBound),this.cancelBtn.addEventListener("click",this._closeBound),this.options.showClearBtn&&(this._handleClearClickBound=this._handleClearClick.bind(this),this.clearBtn.addEventListener("click",this._handleClearClickBound))}},{key:"_setupVariables",value:function(){var e=this;this.$modalEl=g(B._template),this.modalEl=this.$modalEl[0],this.calendarEl=this.modalEl.querySelector(".datepicker-calendar"),this.yearTextEl=this.modalEl.querySelector(".year-text"),this.dateTextEl=this.modalEl.querySelector(".date-text"),this.options.showClearBtn&&(this.clearBtn=this.modalEl.querySelector(".datepicker-clear")),this.doneBtn=this.modalEl.querySelector(".datepicker-done"),this.cancelBtn=this.modalEl.querySelector(".datepicker-cancel"),this.formats={d:function(){return e.date.getDate()},dd:function(){var t=e.date.getDate();return(t<10?"0":"")+t},ddd:function(){return e.options.i18n.weekdaysShort[e.date.getDay()]},dddd:function(){return e.options.i18n.weekdays[e.date.getDay()]},m:function(){return e.date.getMonth()+1},mm:function(){var t=e.date.getMonth()+1;return(t<10?"0":"")+t},mmm:function(){return e.options.i18n.monthsShort[e.date.getMonth()]},mmmm:function(){return e.options.i18n.months[e.date.getMonth()]},yy:function(){return(""+e.date.getFullYear()).slice(2)},yyyy:function(){return e.date.getFullYear()}}}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleInputClickBound),this.el.removeEventListener("keydown",this._handleInputKeydownBound),this.el.removeEventListener("change",this._handleInputChangeBound),this.calendarEl.removeEventListener("click",this._handleCalendarClickBound)}},{key:"_handleInputClick",value:function(){this.open()}},{key:"_handleInputKeydown",value:function(t){t.which===M.keys.ENTER&&(t.preventDefault(),this.open())}},{key:"_handleCalendarClick",value:function(t){if(this.isOpen){var e=g(t.target);e.hasClass("is-disabled")||(!e.hasClass("datepicker-day-button")||e.hasClass("is-empty")||e.parent().hasClass("is-disabled")?e.closest(".month-prev").length?this.prevMonth():e.closest(".month-next").length&&this.nextMonth():(this.setDate(new Date(t.target.getAttribute("data-year"),t.target.getAttribute("data-month"),t.target.getAttribute("data-day"))),this.options.autoClose&&this._finishSelection()))}}},{key:"_handleClearClick",value:function(){this.date=null,this.setInputValue(),this.close()}},{key:"_handleMonthChange",value:function(t){this.gotoMonth(t.target.value)}},{key:"_handleYearChange",value:function(t){this.gotoYear(t.target.value)}},{key:"gotoMonth",value:function(t){isNaN(t)||(this.calendars[0].month=parseInt(t,10),this.adjustCalendars())}},{key:"gotoYear",value:function(t){isNaN(t)||(this.calendars[0].year=parseInt(t,10),this.adjustCalendars())}},{key:"_handleInputChange",value:function(t){var e=void 0;t.firedBy!==this&&(e=this.options.parse?this.options.parse(this.el.value,this.options.format):new Date(Date.parse(this.el.value)),B._isDate(e)&&this.setDate(e))}},{key:"renderDayName",value:function(t,e,i){for(e+=t.firstDay;7<=e;)e-=7;return i?t.i18n.weekdaysAbbrev[e]:t.i18n.weekdays[e]}},{key:"_finishSelection",value:function(){this.setInputValue(),this.close()}},{key:"open",value:function(){if(!this.isOpen)return this.isOpen=!0,"function"==typeof this.options.onOpen&&this.options.onOpen.call(this),this.draw(),this.modal.open(),this}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,"function"==typeof this.options.onClose&&this.options.onClose.call(this),this.modal.close(),this}}],[{key:"init",value:function(t,e){return _get(B.__proto__||Object.getPrototypeOf(B),"init",this).call(this,this,t,e)}},{key:"_isDate",value:function(t){return/Date/.test(Object.prototype.toString.call(t))&&!isNaN(t.getTime())}},{key:"_isWeekend",value:function(t){var e=t.getDay();return 0===e||6===e}},{key:"_setToStartOfDay",value:function(t){B._isDate(t)&&t.setHours(0,0,0,0)}},{key:"_getDaysInMonth",value:function(t,e){return[31,B._isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]}},{key:"_isLeapYear",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:"_compareDates",value:function(t,e){return t.getTime()===e.getTime()}},{key:"_setToStartOfDay",value:function(t){B._isDate(t)&&t.setHours(0,0,0,0)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Datepicker}},{key:"defaults",get:function(){return e}}]),B}();t._template=['"].join(""),M.Datepicker=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"datepicker","M_Datepicker")}(cash),function(h){"use strict";var e={dialRadius:135,outerRadius:105,innerRadius:70,tickRadius:20,duration:350,container:null,defaultTime:"now",fromNow:0,showClearBtn:!1,i18n:{cancel:"Cancel",clear:"Clear",done:"Ok"},autoClose:!1,twelveHour:!0,vibrate:!0,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,onSelect:null},t=function(t){function f(t,e){_classCallCheck(this,f);var i=_possibleConstructorReturn(this,(f.__proto__||Object.getPrototypeOf(f)).call(this,f,t,e));return(i.el.M_Timepicker=i).options=h.extend({},f.defaults,e),i.id=M.guid(),i._insertHTMLIntoDOM(),i._setupModal(),i._setupVariables(),i._setupEventHandlers(),i._clockSetup(),i._pickerSetup(),i}return _inherits(f,Component),_createClass(f,[{key:"destroy",value:function(){this._removeEventHandlers(),this.modal.destroy(),h(this.modalEl).remove(),this.el.M_Timepicker=void 0}},{key:"_setupEventHandlers",value:function(){this._handleInputKeydownBound=this._handleInputKeydown.bind(this),this._handleInputClickBound=this._handleInputClick.bind(this),this._handleClockClickStartBound=this._handleClockClickStart.bind(this),this._handleDocumentClickMoveBound=this._handleDocumentClickMove.bind(this),this._handleDocumentClickEndBound=this._handleDocumentClickEnd.bind(this),this.el.addEventListener("click",this._handleInputClickBound),this.el.addEventListener("keydown",this._handleInputKeydownBound),this.plate.addEventListener("mousedown",this._handleClockClickStartBound),this.plate.addEventListener("touchstart",this._handleClockClickStartBound),h(this.spanHours).on("click",this.showView.bind(this,"hours")),h(this.spanMinutes).on("click",this.showView.bind(this,"minutes"))}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleInputClickBound),this.el.removeEventListener("keydown",this._handleInputKeydownBound)}},{key:"_handleInputClick",value:function(){this.open()}},{key:"_handleInputKeydown",value:function(t){t.which===M.keys.ENTER&&(t.preventDefault(),this.open())}},{key:"_handleClockClickStart",value:function(t){t.preventDefault();var e=this.plate.getBoundingClientRect(),i=e.left,n=e.top;this.x0=i+this.options.dialRadius,this.y0=n+this.options.dialRadius,this.moved=!1;var s=f._Pos(t);this.dx=s.x-this.x0,this.dy=s.y-this.y0,this.setHand(this.dx,this.dy,!1),document.addEventListener("mousemove",this._handleDocumentClickMoveBound),document.addEventListener("touchmove",this._handleDocumentClickMoveBound),document.addEventListener("mouseup",this._handleDocumentClickEndBound),document.addEventListener("touchend",this._handleDocumentClickEndBound)}},{key:"_handleDocumentClickMove",value:function(t){t.preventDefault();var e=f._Pos(t),i=e.x-this.x0,n=e.y-this.y0;this.moved=!0,this.setHand(i,n,!1,!0)}},{key:"_handleDocumentClickEnd",value:function(t){var e=this;t.preventDefault(),document.removeEventListener("mouseup",this._handleDocumentClickEndBound),document.removeEventListener("touchend",this._handleDocumentClickEndBound);var i=f._Pos(t),n=i.x-this.x0,s=i.y-this.y0;this.moved&&n===this.dx&&s===this.dy&&this.setHand(n,s),"hours"===this.currentView?this.showView("minutes",this.options.duration/2):this.options.autoClose&&(h(this.minutesView).addClass("timepicker-dial-out"),setTimeout(function(){e.done()},this.options.duration/2)),"function"==typeof this.options.onSelect&&this.options.onSelect.call(this,this.hours,this.minutes),document.removeEventListener("mousemove",this._handleDocumentClickMoveBound),document.removeEventListener("touchmove",this._handleDocumentClickMoveBound)}},{key:"_insertHTMLIntoDOM",value:function(){this.$modalEl=h(f._template),this.modalEl=this.$modalEl[0],this.modalEl.id="modal-"+this.id;var t=document.querySelector(this.options.container);this.options.container&&t?this.$modalEl.appendTo(t):this.$modalEl.insertBefore(this.el)}},{key:"_setupModal",value:function(){var t=this;this.modal=M.Modal.init(this.modalEl,{onOpenStart:this.options.onOpenStart,onOpenEnd:this.options.onOpenEnd,onCloseStart:this.options.onCloseStart,onCloseEnd:function(){"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t),t.isOpen=!1}})}},{key:"_setupVariables",value:function(){this.currentView="hours",this.vibrate=navigator.vibrate?"vibrate":navigator.webkitVibrate?"webkitVibrate":null,this._canvas=this.modalEl.querySelector(".timepicker-canvas"),this.plate=this.modalEl.querySelector(".timepicker-plate"),this.hoursView=this.modalEl.querySelector(".timepicker-hours"),this.minutesView=this.modalEl.querySelector(".timepicker-minutes"),this.spanHours=this.modalEl.querySelector(".timepicker-span-hours"),this.spanMinutes=this.modalEl.querySelector(".timepicker-span-minutes"),this.spanAmPm=this.modalEl.querySelector(".timepicker-span-am-pm"),this.footer=this.modalEl.querySelector(".timepicker-footer"),this.amOrPm="PM"}},{key:"_pickerSetup",value:function(){var t=h('").appendTo(this.footer).on("click",this.clear.bind(this));this.options.showClearBtn&&t.css({visibility:""});var e=h('
    ');h('").appendTo(e).on("click",this.close.bind(this)),h('").appendTo(e).on("click",this.done.bind(this)),e.appendTo(this.footer)}},{key:"_clockSetup",value:function(){this.options.twelveHour&&(this.$amBtn=h('
    AM
    '),this.$pmBtn=h('
    PM
    '),this.$amBtn.on("click",this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm),this.$pmBtn.on("click",this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm)),this._buildHoursView(),this._buildMinutesView(),this._buildSVGClock()}},{key:"_buildSVGClock",value:function(){var t=this.options.dialRadius,e=this.options.tickRadius,i=2*t,n=f._createSVGEl("svg");n.setAttribute("class","timepicker-svg"),n.setAttribute("width",i),n.setAttribute("height",i);var s=f._createSVGEl("g");s.setAttribute("transform","translate("+t+","+t+")");var o=f._createSVGEl("circle");o.setAttribute("class","timepicker-canvas-bearing"),o.setAttribute("cx",0),o.setAttribute("cy",0),o.setAttribute("r",4);var a=f._createSVGEl("line");a.setAttribute("x1",0),a.setAttribute("y1",0);var r=f._createSVGEl("circle");r.setAttribute("class","timepicker-canvas-bg"),r.setAttribute("r",e),s.appendChild(a),s.appendChild(r),s.appendChild(o),n.appendChild(s),this._canvas.appendChild(n),this.hand=a,this.bg=r,this.bearing=o,this.g=s}},{key:"_buildHoursView",value:function(){var t=h('
    ');if(this.options.twelveHour)for(var e=1;e<13;e+=1){var i=t.clone(),n=e/6*Math.PI,s=this.options.outerRadius;i.css({left:this.options.dialRadius+Math.sin(n)*s-this.options.tickRadius+"px",top:this.options.dialRadius-Math.cos(n)*s-this.options.tickRadius+"px"}),i.html(0===e?"00":e),this.hoursView.appendChild(i[0])}else for(var o=0;o<24;o+=1){var a=t.clone(),r=o/6*Math.PI,l=0'),e=0;e<60;e+=5){var i=t.clone(),n=e/30*Math.PI;i.css({left:this.options.dialRadius+Math.sin(n)*this.options.outerRadius-this.options.tickRadius+"px",top:this.options.dialRadius-Math.cos(n)*this.options.outerRadius-this.options.tickRadius+"px"}),i.html(f._addLeadingZero(e)),this.minutesView.appendChild(i[0])}}},{key:"_handleAmPmClick",value:function(t){var e=h(t.target);this.amOrPm=e.hasClass("am-btn")?"AM":"PM",this._updateAmPmView()}},{key:"_updateAmPmView",value:function(){this.options.twelveHour&&(this.$amBtn.toggleClass("text-primary","AM"===this.amOrPm),this.$pmBtn.toggleClass("text-primary","PM"===this.amOrPm))}},{key:"_updateTimeFromInput",value:function(){var t=((this.el.value||this.options.defaultTime||"")+"").split(":");if(this.options.twelveHour&&void 0!==t[1]&&(0','",""].join(""),M.Timepicker=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"timepicker","M_Timepicker")}(cash),function(s){"use strict";var e={},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_CharacterCounter=i).options=s.extend({},n.defaults,e),i.isInvalid=!1,i.isValidLength=!1,i._setupCounter(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.CharacterCounter=void 0,this._removeCounter()}},{key:"_setupEventHandlers",value:function(){this._handleUpdateCounterBound=this.updateCounter.bind(this),this.el.addEventListener("focus",this._handleUpdateCounterBound,!0),this.el.addEventListener("input",this._handleUpdateCounterBound,!0)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("focus",this._handleUpdateCounterBound,!0),this.el.removeEventListener("input",this._handleUpdateCounterBound,!0)}},{key:"_setupCounter",value:function(){this.counterEl=document.createElement("span"),s(this.counterEl).addClass("character-counter").css({float:"right","font-size":"12px",height:1}),this.$el.parent().append(this.counterEl)}},{key:"_removeCounter",value:function(){s(this.counterEl).remove()}},{key:"updateCounter",value:function(){var t=+this.$el.attr("data-length"),e=this.el.value.length;this.isValidLength=e<=t;var i=e;t&&(i+="/"+t,this._validateInput()),s(this.counterEl).html(i)}},{key:"_validateInput",value:function(){this.isValidLength&&this.isInvalid?(this.isInvalid=!1,this.$el.removeClass("invalid")):this.isValidLength||this.isInvalid||(this.isInvalid=!0,this.$el.removeClass("valid"),this.$el.addClass("invalid"))}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_CharacterCounter}},{key:"defaults",get:function(){return e}}]),n}();M.CharacterCounter=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"characterCounter","M_CharacterCounter")}(cash),function(b){"use strict";var e={duration:200,dist:-100,shift:0,padding:0,numVisible:5,fullWidth:!1,indicators:!1,noWrap:!1,onCycleTo:null},t=function(t){function i(t,e){_classCallCheck(this,i);var n=_possibleConstructorReturn(this,(i.__proto__||Object.getPrototypeOf(i)).call(this,i,t,e));return(n.el.M_Carousel=n).options=b.extend({},i.defaults,e),n.hasMultipleSlides=1'),n.$el.find(".carousel-item").each(function(t,e){if(n.images.push(t),n.showIndicators){var i=b('
  • ');0===e&&i[0].classList.add("active"),n.$indicators.append(i)}}),n.showIndicators&&n.$el.append(n.$indicators),n.count=n.images.length,n.options.numVisible=Math.min(n.count,n.options.numVisible),n.xform="transform",["webkit","Moz","O","ms"].every(function(t){var e=t+"Transform";return void 0===document.body.style[e]||(n.xform=e,!1)}),n._setupEventHandlers(),n._scroll(n.offset),n}return _inherits(i,Component),_createClass(i,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Carousel=void 0}},{key:"_setupEventHandlers",value:function(){var i=this;this._handleCarouselTapBound=this._handleCarouselTap.bind(this),this._handleCarouselDragBound=this._handleCarouselDrag.bind(this),this._handleCarouselReleaseBound=this._handleCarouselRelease.bind(this),this._handleCarouselClickBound=this._handleCarouselClick.bind(this),void 0!==window.ontouchstart&&(this.el.addEventListener("touchstart",this._handleCarouselTapBound),this.el.addEventListener("touchmove",this._handleCarouselDragBound),this.el.addEventListener("touchend",this._handleCarouselReleaseBound)),this.el.addEventListener("mousedown",this._handleCarouselTapBound),this.el.addEventListener("mousemove",this._handleCarouselDragBound),this.el.addEventListener("mouseup",this._handleCarouselReleaseBound),this.el.addEventListener("mouseleave",this._handleCarouselReleaseBound),this.el.addEventListener("click",this._handleCarouselClickBound),this.showIndicators&&this.$indicators&&(this._handleIndicatorClickBound=this._handleIndicatorClick.bind(this),this.$indicators.find(".indicator-item").each(function(t,e){t.addEventListener("click",i._handleIndicatorClickBound)}));var t=M.throttle(this._handleResize,200);this._handleThrottledResizeBound=t.bind(this),window.addEventListener("resize",this._handleThrottledResizeBound)}},{key:"_removeEventHandlers",value:function(){var i=this;void 0!==window.ontouchstart&&(this.el.removeEventListener("touchstart",this._handleCarouselTapBound),this.el.removeEventListener("touchmove",this._handleCarouselDragBound),this.el.removeEventListener("touchend",this._handleCarouselReleaseBound)),this.el.removeEventListener("mousedown",this._handleCarouselTapBound),this.el.removeEventListener("mousemove",this._handleCarouselDragBound),this.el.removeEventListener("mouseup",this._handleCarouselReleaseBound),this.el.removeEventListener("mouseleave",this._handleCarouselReleaseBound),this.el.removeEventListener("click",this._handleCarouselClickBound),this.showIndicators&&this.$indicators&&this.$indicators.find(".indicator-item").each(function(t,e){t.removeEventListener("click",i._handleIndicatorClickBound)}),window.removeEventListener("resize",this._handleThrottledResizeBound)}},{key:"_handleCarouselTap",value:function(t){"mousedown"===t.type&&b(t.target).is("img")&&t.preventDefault(),this.pressed=!0,this.dragged=!1,this.verticalDragged=!1,this.reference=this._xpos(t),this.referenceY=this._ypos(t),this.velocity=this.amplitude=0,this.frame=this.offset,this.timestamp=Date.now(),clearInterval(this.ticker),this.ticker=setInterval(this._trackBound,100)}},{key:"_handleCarouselDrag",value:function(t){var e=void 0,i=void 0,n=void 0;if(this.pressed)if(e=this._xpos(t),i=this._ypos(t),n=this.reference-e,Math.abs(this.referenceY-i)<30&&!this.verticalDragged)(2=this.dim*(this.count-1)?this.target=this.dim*(this.count-1):this.target<0&&(this.target=0)),this.amplitude=this.target-this.offset,this.timestamp=Date.now(),requestAnimationFrame(this._autoScrollBound),this.dragged&&(t.preventDefault(),t.stopPropagation()),!1}},{key:"_handleCarouselClick",value:function(t){if(this.dragged)return t.preventDefault(),t.stopPropagation(),!1;if(!this.options.fullWidth){var e=b(t.target).closest(".carousel-item").index();0!==this._wrap(this.center)-e&&(t.preventDefault(),t.stopPropagation()),this._cycleTo(e)}}},{key:"_handleIndicatorClick",value:function(t){t.stopPropagation();var e=b(t.target).closest(".indicator-item");e.length&&this._cycleTo(e.index())}},{key:"_handleResize",value:function(t){this.options.fullWidth?(this.itemWidth=this.$el.find(".carousel-item").first().innerWidth(),this.imageHeight=this.$el.find(".carousel-item.active").height(),this.dim=2*this.itemWidth+this.options.padding,this.offset=2*this.center*this.itemWidth,this.target=this.offset,this._setCarouselHeight(!0)):this._scroll()}},{key:"_setCarouselHeight",value:function(t){var i=this,e=this.$el.find(".carousel-item.active").length?this.$el.find(".carousel-item.active").first():this.$el.find(".carousel-item").first(),n=e.find("img").first();if(n.length)if(n[0].complete){var s=n.height();if(0=this.count?t%this.count:t<0?this._wrap(this.count+t%this.count):t}},{key:"_track",value:function(){var t,e,i,n;e=(t=Date.now())-this.timestamp,this.timestamp=t,i=this.offset-this.frame,this.frame=this.offset,n=1e3*i/(1+e),this.velocity=.8*n+.2*this.velocity}},{key:"_autoScroll",value:function(){var t=void 0,e=void 0;this.amplitude&&(t=Date.now()-this.timestamp,2<(e=this.amplitude*Math.exp(-t/this.options.duration))||e<-2?(this._scroll(this.target-e),requestAnimationFrame(this._autoScrollBound)):this._scroll(this.target))}},{key:"_scroll",value:function(t){var e=this;this.$el.hasClass("scrolling")||this.el.classList.add("scrolling"),null!=this.scrollingTimeout&&window.clearTimeout(this.scrollingTimeout),this.scrollingTimeout=window.setTimeout(function(){e.$el.removeClass("scrolling")},this.options.duration);var i,n,s,o,a=void 0,r=void 0,l=void 0,h=void 0,d=void 0,u=void 0,c=this.center,p=1/this.options.numVisible;if(this.offset="number"==typeof t?t:this.offset,this.center=Math.floor((this.offset+this.dim/2)/this.dim),o=-(s=(n=this.offset-this.center*this.dim)<0?1:-1)*n*2/this.dim,i=this.count>>1,this.options.fullWidth?(l="translateX(0)",u=1):(l="translateX("+(this.el.clientWidth-this.itemWidth)/2+"px) ",l+="translateY("+(this.el.clientHeight-this.itemHeight)/2+"px)",u=1-p*o),this.showIndicators){var v=this.center%this.count,f=this.$indicators.find(".indicator-item.active");f.index()!==v&&(f.removeClass("active"),this.$indicators.find(".indicator-item").eq(v)[0].classList.add("active"))}if(!this.noWrap||0<=this.center&&this.center=this.count||e<0){if(this.noWrap)return;e=this._wrap(e)}this._cycleTo(e)}},{key:"prev",value:function(t){(void 0===t||isNaN(t))&&(t=1);var e=this.center-t;if(e>=this.count||e<0){if(this.noWrap)return;e=this._wrap(e)}this._cycleTo(e)}},{key:"set",value:function(t,e){if((void 0===t||isNaN(t))&&(t=0),t>this.count||t<0){if(this.noWrap)return;t=this._wrap(t)}this._cycleTo(t,e)}}],[{key:"init",value:function(t,e){return _get(i.__proto__||Object.getPrototypeOf(i),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Carousel}},{key:"defaults",get:function(){return e}}]),i}();M.Carousel=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"carousel","M_Carousel")}(cash),function(S){"use strict";var e={onOpen:void 0,onClose:void 0},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_TapTarget=i).options=S.extend({},n.defaults,e),i.isOpen=!1,i.$origin=S("#"+i.$el.attr("data-target")),i._setup(),i._calculatePositioning(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.TapTarget=void 0}},{key:"_setupEventHandlers",value:function(){this._handleDocumentClickBound=this._handleDocumentClick.bind(this),this._handleTargetClickBound=this._handleTargetClick.bind(this),this._handleOriginClickBound=this._handleOriginClick.bind(this),this.el.addEventListener("click",this._handleTargetClickBound),this.originEl.addEventListener("click",this._handleOriginClickBound);var t=M.throttle(this._handleResize,200);this._handleThrottledResizeBound=t.bind(this),window.addEventListener("resize",this._handleThrottledResizeBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleTargetClickBound),this.originEl.removeEventListener("click",this._handleOriginClickBound),window.removeEventListener("resize",this._handleThrottledResizeBound)}},{key:"_handleTargetClick",value:function(t){this.open()}},{key:"_handleOriginClick",value:function(t){this.close()}},{key:"_handleResize",value:function(t){this._calculatePositioning()}},{key:"_handleDocumentClick",value:function(t){S(t.target).closest(".tap-target-wrapper").length||(this.close(),t.preventDefault(),t.stopPropagation())}},{key:"_setup",value:function(){this.wrapper=this.$el.parent()[0],this.waveEl=S(this.wrapper).find(".tap-target-wave")[0],this.originEl=S(this.wrapper).find(".tap-target-origin")[0],this.contentEl=this.$el.find(".tap-target-content")[0],S(this.wrapper).hasClass(".tap-target-wrapper")||(this.wrapper=document.createElement("div"),this.wrapper.classList.add("tap-target-wrapper"),this.$el.before(S(this.wrapper)),this.wrapper.append(this.el)),this.contentEl||(this.contentEl=document.createElement("div"),this.contentEl.classList.add("tap-target-content"),this.$el.append(this.contentEl)),this.waveEl||(this.waveEl=document.createElement("div"),this.waveEl.classList.add("tap-target-wave"),this.originEl||(this.originEl=this.$origin.clone(!0,!0),this.originEl.addClass("tap-target-origin"),this.originEl.removeAttr("id"),this.originEl.removeAttr("style"),this.originEl=this.originEl[0],this.waveEl.append(this.originEl)),this.wrapper.append(this.waveEl))}},{key:"_calculatePositioning",value:function(){var t="fixed"===this.$origin.css("position");if(!t)for(var e=this.$origin.parents(),i=0;i'+t.getAttribute("label")+"")[0]),i.each(function(t){var e=n._appendOptionWithIcon(n.$el,t,"optgroup-option");n._addOptionToValueDict(t,e)})}}),this.$el.after(this.dropdownOptions),this.input=document.createElement("input"),d(this.input).addClass("select-dropdown dropdown-trigger"),this.input.setAttribute("type","text"),this.input.setAttribute("readonly","true"),this.input.setAttribute("data-target",this.dropdownOptions.id),this.el.disabled&&d(this.input).prop("disabled","true"),this.$el.before(this.input),this._setValueToInput();var t=d('');if(this.$el.before(t[0]),!this.el.disabled){var e=d.extend({},this.options.dropdownOptions);e.onOpenEnd=function(t){var e=d(n.dropdownOptions).find(".selected").first();if(e.length&&(M.keyDown=!0,n.dropdown.focusedIndex=e.index(),n.dropdown._focusFocusedItem(),M.keyDown=!1,n.dropdown.isScrollable)){var i=e[0].getBoundingClientRect().top-n.dropdownOptions.getBoundingClientRect().top;i-=n.dropdownOptions.clientHeight/2,n.dropdownOptions.scrollTop=i}},this.isMultiple&&(e.closeOnClick=!1),this.dropdown=M.Dropdown.init(this.input,e)}this._setSelectedStates()}},{key:"_addOptionToValueDict",value:function(t,e){var i=Object.keys(this._valueDict).length,n=this.dropdownOptions.id+i,s={};e.id=n,s.el=t,s.optionEl=e,this._valueDict[n]=s}},{key:"_removeDropdown",value:function(){d(this.wrapper).find(".caret").remove(),d(this.input).remove(),d(this.dropdownOptions).remove(),d(this.wrapper).before(this.$el),d(this.wrapper).remove()}},{key:"_appendOptionWithIcon",value:function(t,e,i){var n=e.disabled?"disabled ":"",s="optgroup-option"===i?"optgroup-option ":"",o=this.isMultiple?'":e.innerHTML,a=d("
  • "),r=d("");r.html(o),a.addClass(n+" "+s),a.append(r);var l=e.getAttribute("data-icon");if(l){var h=d('');a.prepend(h)}return d(this.dropdownOptions).append(a[0]),a[0]}},{key:"_toggleEntryFromArray",value:function(t){var e=!this._keysSelected.hasOwnProperty(t),i=d(this._valueDict[t].optionEl);return e?this._keysSelected[t]=!0:delete this._keysSelected[t],i.toggleClass("selected",e),i.find('input[type="checkbox"]').prop("checked",e),i.prop("selected",e),e}},{key:"_setValueToInput",value:function(){var i=[];if(this.$el.find("option").each(function(t){if(d(t).prop("selected")){var e=d(t).text();i.push(e)}}),!i.length){var t=this.$el.find("option:disabled").eq(0);t.length&&""===t[0].value&&i.push(t.text())}this.input.value=i.join(", ")}},{key:"_setSelectedStates",value:function(){for(var t in this._keysSelected={},this._valueDict){var e=this._valueDict[t],i=d(e.el).prop("selected");d(e.optionEl).find('input[type="checkbox"]').prop("checked",i),i?(this._activateOption(d(this.dropdownOptions),d(e.optionEl)),this._keysSelected[t]=!0):d(e.optionEl).removeClass("selected")}}},{key:"_activateOption",value:function(t,e){e&&(this.isMultiple||t.find("li.selected").removeClass("selected"),d(e).addClass("selected"))}},{key:"getSelectedValues",value:function(){var t=[];for(var e in this._keysSelected)t.push(this._valueDict[e].el.value);return t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_FormSelect}},{key:"defaults",get:function(){return e}}]),n}();M.FormSelect=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"formSelect","M_FormSelect")}(cash),function(s,e){"use strict";var i={},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Range=i).options=s.extend({},n.defaults,e),i._mousedown=!1,i._setupThumb(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this._removeThumb(),this.el.M_Range=void 0}},{key:"_setupEventHandlers",value:function(){this._handleRangeChangeBound=this._handleRangeChange.bind(this),this._handleRangeMousedownTouchstartBound=this._handleRangeMousedownTouchstart.bind(this),this._handleRangeInputMousemoveTouchmoveBound=this._handleRangeInputMousemoveTouchmove.bind(this),this._handleRangeMouseupTouchendBound=this._handleRangeMouseupTouchend.bind(this),this._handleRangeBlurMouseoutTouchleaveBound=this._handleRangeBlurMouseoutTouchleave.bind(this),this.el.addEventListener("change",this._handleRangeChangeBound),this.el.addEventListener("mousedown",this._handleRangeMousedownTouchstartBound),this.el.addEventListener("touchstart",this._handleRangeMousedownTouchstartBound),this.el.addEventListener("input",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("mousemove",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("touchmove",this._handleRangeInputMousemoveTouchmoveBound),this.el.addEventListener("mouseup",this._handleRangeMouseupTouchendBound),this.el.addEventListener("touchend",this._handleRangeMouseupTouchendBound),this.el.addEventListener("blur",this._handleRangeBlurMouseoutTouchleaveBound),this.el.addEventListener("mouseout",this._handleRangeBlurMouseoutTouchleaveBound),this.el.addEventListener("touchleave",this._handleRangeBlurMouseoutTouchleaveBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("change",this._handleRangeChangeBound),this.el.removeEventListener("mousedown",this._handleRangeMousedownTouchstartBound),this.el.removeEventListener("touchstart",this._handleRangeMousedownTouchstartBound),this.el.removeEventListener("input",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("mousemove",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("touchmove",this._handleRangeInputMousemoveTouchmoveBound),this.el.removeEventListener("mouseup",this._handleRangeMouseupTouchendBound),this.el.removeEventListener("touchend",this._handleRangeMouseupTouchendBound),this.el.removeEventListener("blur",this._handleRangeBlurMouseoutTouchleaveBound),this.el.removeEventListener("mouseout",this._handleRangeBlurMouseoutTouchleaveBound),this.el.removeEventListener("touchleave",this._handleRangeBlurMouseoutTouchleaveBound)}},{key:"_handleRangeChange",value:function(){s(this.value).html(this.$el.val()),s(this.thumb).hasClass("active")||this._showRangeBubble();var t=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",t+"px")}},{key:"_handleRangeMousedownTouchstart",value:function(t){if(s(this.value).html(this.$el.val()),this._mousedown=!0,this.$el.addClass("active"),s(this.thumb).hasClass("active")||this._showRangeBubble(),"input"!==t.type){var e=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",e+"px")}}},{key:"_handleRangeInputMousemoveTouchmove",value:function(){if(this._mousedown){s(this.thumb).hasClass("active")||this._showRangeBubble();var t=this._calcRangeOffset();s(this.thumb).addClass("active").css("left",t+"px"),s(this.value).html(this.$el.val())}}},{key:"_handleRangeMouseupTouchend",value:function(){this._mousedown=!1,this.$el.removeClass("active")}},{key:"_handleRangeBlurMouseoutTouchleave",value:function(){if(!this._mousedown){var t=7+parseInt(this.$el.css("padding-left"))+"px";s(this.thumb).hasClass("active")&&(e.remove(this.thumb),e({targets:this.thumb,height:0,width:0,top:10,easing:"easeOutQuad",marginLeft:t,duration:100})),s(this.thumb).removeClass("active")}}},{key:"_setupThumb",value:function(){this.thumb=document.createElement("span"),this.value=document.createElement("span"),s(this.thumb).addClass("thumb"),s(this.value).addClass("value"),s(this.thumb).append(this.value),this.$el.after(this.thumb)}},{key:"_removeThumb",value:function(){s(this.thumb).remove()}},{key:"_showRangeBubble",value:function(){var t=-7+parseInt(s(this.thumb).parent().css("padding-left"))+"px";e.remove(this.thumb),e({targets:this.thumb,height:30,width:30,top:-30,marginLeft:t,duration:300,easing:"easeOutQuint"})}},{key:"_calcRangeOffset",value:function(){var t=this.$el.width()-15,e=parseFloat(this.$el.attr("max"))||100,i=parseFloat(this.$el.attr("min"))||0;return(parseFloat(this.$el.val())-i)/(e-i)*t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Range}},{key:"defaults",get:function(){return i}}]),n}();M.Range=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"range","M_Range"),t.init(s("input[type=range]"))}(cash,M.anime); \ No newline at end of file diff --git a/libretranslate/static/js/prism.min.js b/libretranslate/static/js/prism.min.js new file mode 100644 index 0000000000000000000000000000000000000000..fb1fd7bd7e06305fda4cc09474a6bdd7cfbb2efd --- /dev/null +++ b/libretranslate/static/js/prism.min.js @@ -0,0 +1 @@ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var g=/\blang(?:uage)?-([\w-]+)\b/i,t=0,z={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof T?new T(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=i.reach);b+=y.value.length,y=y.next){var F=y.value;if(n.length>t.length)return;if(!(F instanceof T)){var x,k,w,A,P,$,S=1;if(m&&y!=n.tail.prev){v.lastIndex=b;var _=v.exec(t);if(!_)break;var E=_.index+(p&&_[1]?_[1].length:0),j=_.index+_[0].length,C=b;for(C+=y.value.length;C<=E;)y=y.next,C+=y.value.length;if(C-=y.value.length,b=C,y.value instanceof T)continue;for(var O=y;O!==n.tail&&(Ci.reach&&(i.reach=A),P=y.prev,k&&(P=N(n,P,k),b+=k.length),L(n,P,S),$=new T(l,d?z.tokenize(x,d):x,f,x),y=N(n,P,$),w&&N(n,y,w),1"+r.content+""},!u.document)return u.addEventListener&&(z.disableWorkerMessageHandler||u.addEventListener("message",function(e){var t=JSON.parse(e.data),n=t.language,a=t.code,r=t.immediateClose;u.postMessage(z.highlight(a,z.languages[n],n)),r&&u.close()},!1)),z;var e,n=z.util.currentScript();function a(){z.manual||z.highlightAll()}return n&&(z.filename=n.src,n.hasAttribute("data-manual")&&(z.manual=!0)),z.manual||("loading"===(e=document.readyState)||"interactive"===e&&n&&n.defer?document.addEventListener("DOMContentLoaded",a):window.requestAnimationFrame?window.requestAnimationFrame(a):window.setTimeout(a,16)),z}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism),Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[\s\S]*?>)(?:))*\]\]>|(?!)/.source.replace(/__/g,function(){return e}),"i"),lookbehind:!0,greedy:!0,inside:a},Prism.languages.insertBefore("markup","cdata",r)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\((?!\s*\))\s*)(?:[^()]|\((?:[^()]|\([^()]*\))*\))+?(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:n.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:e.languages.css}},alias:"language-css"}},n.tag))}(Prism),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,function:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript,function(){var o,u,g,c,d,a,e;function p(e,t){var n=(n=e.className).replace(a," ")+" language-"+t;e.className=n.replace(/\s+/g," ").trim()}"undefined"!=typeof self&&self.Prism&&self.document&&(o=window.Prism,u={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"},d="pre[data-src]:not(["+(g="data-src-status")+'="loaded"]):not(['+g+'="'+(c="loading")+'"])',a=/\blang(?:uage)?-([\w-]+)\b/i,o.hooks.add("before-highlightall",function(e){e.selector+=", "+d}),o.hooks.add("before-sanity-check",function(e){var t,n,a,r,s,i,l=e.element;l.matches(d)&&(e.code="",l.setAttribute(g,c),(t=l.appendChild(document.createElement("CODE"))).textContent="Loading…",n=l.getAttribute("data-src"),"none"===(r=e.language)&&(a=(/\.(\w+)$/.exec(n)||[,"none"])[1],r=u[a]||a),p(t,r),p(l,r),(s=o.plugins.autoloader)&&s.loadLanguages(r),(i=new XMLHttpRequest).open("GET",n,!0),i.onreadystatechange=function(){4==i.readyState&&(i.status<400&&i.responseText?(l.setAttribute(g,"loaded"),t.textContent=i.responseText,o.highlightElement(t)):(l.setAttribute(g,"failed"),400<=i.status?t.textContent="✖ Error "+i.status+" while fetching file: "+i.statusText:t.textContent="✖ Error: File does not exist or is empty"))},i.send(null))}),e=!(o.plugins.fileHighlight={highlight:function(e){for(var t,n=(e||document).querySelectorAll(d),a=0;t=n[a++];)o.highlightElement(t)}}),o.fileHighlight=function(){e||(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),e=!0),o.plugins.fileHighlight.highlight.apply(this,arguments)})}(); \ No newline at end of file diff --git a/libretranslate/static/js/vue@2.js b/libretranslate/static/js/vue@2.js new file mode 100644 index 0000000000000000000000000000000000000000..d998ff72e4f663b2bc9deb1fd246142c550790c7 --- /dev/null +++ b/libretranslate/static/js/vue@2.js @@ -0,0 +1,6 @@ +/*! + * Vue.js v2.6.14 + * (c) 2014-2021 Evan You + * Released under the MIT License. + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){"use strict";var e=Object.freeze({});function t(e){return null==e}function n(e){return null!=e}function r(e){return!0===e}function i(e){return"string"==typeof e||"number"==typeof e||"symbol"==typeof e||"boolean"==typeof e}function o(e){return null!==e&&"object"==typeof e}var a=Object.prototype.toString;function s(e){return"[object Object]"===a.call(e)}function c(e){var t=parseFloat(String(e));return t>=0&&Math.floor(t)===t&&isFinite(e)}function u(e){return n(e)&&"function"==typeof e.then&&"function"==typeof e.catch}function l(e){return null==e?"":Array.isArray(e)||s(e)&&e.toString===a?JSON.stringify(e,null,2):String(e)}function f(e){var t=parseFloat(e);return isNaN(t)?e:t}function p(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i-1)return e.splice(n,1)}}var m=Object.prototype.hasOwnProperty;function y(e,t){return m.call(e,t)}function g(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}var _=/-(\w)/g,b=g(function(e){return e.replace(_,function(e,t){return t?t.toUpperCase():""})}),$=g(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),w=/\B([A-Z])/g,C=g(function(e){return e.replace(w,"-$1").toLowerCase()});var x=Function.prototype.bind?function(e,t){return e.bind(t)}:function(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n};function k(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function A(e,t){for(var n in t)e[n]=t[n];return e}function O(e){for(var t={},n=0;n0,Z=J&&J.indexOf("edge/")>0,G=(J&&J.indexOf("android"),J&&/iphone|ipad|ipod|ios/.test(J)||"ios"===K),X=(J&&/chrome\/\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\/(\d+)/)),Y={}.watch,Q=!1;if(V)try{var ee={};Object.defineProperty(ee,"passive",{get:function(){Q=!0}}),window.addEventListener("test-passive",null,ee)}catch(e){}var te=function(){return void 0===B&&(B=!V&&!z&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},ne=V&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return"function"==typeof e&&/native code/.test(e.toString())}var ie,oe="undefined"!=typeof Symbol&&re(Symbol)&&"undefined"!=typeof Reflect&&re(Reflect.ownKeys);ie="undefined"!=typeof Set&&re(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ae=S,se=0,ce=function(){this.id=se++,this.subs=[]};ce.prototype.addSub=function(e){this.subs.push(e)},ce.prototype.removeSub=function(e){h(this.subs,e)},ce.prototype.depend=function(){ce.target&&ce.target.addDep(this)},ce.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t-1)if(o&&!y(i,"default"))a=!1;else if(""===a||a===C(e)){var c=Re(String,i.type);(c<0||s0&&(ct((u=e(u,(a||"")+"_"+c))[0])&&ct(f)&&(s[l]=he(f.text+u[0].text),u.shift()),s.push.apply(s,u)):i(u)?ct(f)?s[l]=he(f.text+u):""!==u&&s.push(he(u)):ct(u)&&ct(f)?s[l]=he(f.text+u.text):(r(o._isVList)&&n(u.tag)&&t(u.key)&&n(a)&&(u.key="__vlist"+a+"_"+c+"__"),s.push(u)));return s}(e):void 0}function ct(e){return n(e)&&n(e.text)&&!1===e.isComment}function ut(e,t){if(e){for(var n=Object.create(null),r=oe?Reflect.ownKeys(e):Object.keys(e),i=0;i0,a=t?!!t.$stable:!o,s=t&&t.$key;if(t){if(t._normalized)return t._normalized;if(a&&r&&r!==e&&s===r.$key&&!o&&!r.$hasNormal)return r;for(var c in i={},t)t[c]&&"$"!==c[0]&&(i[c]=vt(n,c,t[c]))}else i={};for(var u in n)u in i||(i[u]=ht(n,u));return t&&Object.isExtensible(t)&&(t._normalized=i),R(i,"$stable",a),R(i,"$key",s),R(i,"$hasNormal",o),i}function vt(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({}),t=(e=e&&"object"==typeof e&&!Array.isArray(e)?[e]:st(e))&&e[0];return e&&(!t||1===e.length&&t.isComment&&!pt(t))?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function ht(e,t){return function(){return e[t]}}function mt(e,t){var r,i,a,s,c;if(Array.isArray(e)||"string"==typeof e)for(r=new Array(e.length),i=0,a=e.length;idocument.createEvent("Event").timeStamp&&(cn=function(){return un.now()})}function ln(){var e,t;for(sn=cn(),on=!0,en.sort(function(e,t){return e.id-t.id}),an=0;anan&&en[n].id>e.id;)n--;en.splice(n+1,0,e)}else en.push(e);rn||(rn=!0,Qe(ln))}}(this)},pn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||o(e)||this.deep){var t=this.value;if(this.value=e,this.user){var n='callback for watcher "'+this.expression+'"';Be(this.cb,this.vm,[e,t],this.vm,n)}else this.cb.call(this.vm,e,t)}}},pn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},pn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},pn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var dn={enumerable:!0,configurable:!0,get:S,set:S};function vn(e,t,n){dn.get=function(){return this[t][n]},dn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,dn)}function hn(e){e._watchers=[];var t=e.$options;t.props&&function(e,t){var n=e.$options.propsData||{},r=e._props={},i=e.$options._propKeys=[];e.$parent&&$e(!1);var o=function(o){i.push(o);var a=Ie(o,t,n,e);xe(r,o,a),o in e||vn(e,"_props",o)};for(var a in t)o(a);$e(!0)}(e,t.props),t.methods&&function(e,t){e.$options.props;for(var n in t)e[n]="function"!=typeof t[n]?S:x(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;s(t=e._data="function"==typeof t?function(e,t){le();try{return e.call(t,t)}catch(e){return He(e,t,"data()"),{}}finally{fe()}}(t,e):t||{})||(t={});var n=Object.keys(t),r=e.$options.props,i=(e.$options.methods,n.length);for(;i--;){var o=n[i];r&&y(r,o)||(a=void 0,36!==(a=(o+"").charCodeAt(0))&&95!==a&&vn(e,"_data",o))}var a;Ce(t,!0)}(e):Ce(e._data={},!0),t.computed&&function(e,t){var n=e._computedWatchers=Object.create(null),r=te();for(var i in t){var o=t[i],a="function"==typeof o?o:o.get;r||(n[i]=new pn(e,a||S,S,mn)),i in e||yn(e,i,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i-1:"string"==typeof e?e.split(",").indexOf(t)>-1:(n=e,"[object RegExp]"===a.call(n)&&e.test(t));var n}function On(e,t){var n=e.cache,r=e.keys,i=e._vnode;for(var o in n){var a=n[o];if(a){var s=a.name;s&&!t(s)&&Sn(n,o,r,i)}}}function Sn(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}!function(t){t.prototype._init=function(t){var n=this;n._uid=$n++,n._isVue=!0,t&&t._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),r=t._parentVnode;n.parent=t.parent,n._parentVnode=r;var i=r.componentOptions;n.propsData=i.propsData,n._parentListeners=i.listeners,n._renderChildren=i.children,n._componentTag=i.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(n,t):n.$options=De(wn(n.constructor),t||{},n),n._renderProxy=n,n._self=n,function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}(n),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Wt(e,t)}(n),function(t){t._vnode=null,t._staticTrees=null;var n=t.$options,r=t.$vnode=n._parentVnode,i=r&&r.context;t.$slots=lt(n._renderChildren,i),t.$scopedSlots=e,t._c=function(e,n,r,i){return Ht(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Ht(t,e,n,r,i,!0)};var o=r&&r.data;xe(t,"$attrs",o&&o.attrs||e,null,!0),xe(t,"$listeners",n._parentListeners||e,null,!0)}(n),Qt(n,"beforeCreate"),function(e){var t=ut(e.$options.inject,e);t&&($e(!1),Object.keys(t).forEach(function(n){xe(e,n,t[n])}),$e(!0))}(n),hn(n),function(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}(n),Qt(n,"created"),n.$options.el&&n.$mount(n.$options.el)}}(Cn),function(e){var t={get:function(){return this._data}},n={get:function(){return this._props}};Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=ke,e.prototype.$delete=Ae,e.prototype.$watch=function(e,t,n){if(s(t))return bn(this,e,t,n);(n=n||{}).user=!0;var r=new pn(this,e,t,n);if(n.immediate){var i='callback for immediate watcher "'+r.expression+'"';le(),Be(t,this,[r.value],this,i),fe()}return function(){r.teardown()}}}(Cn),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;if(Array.isArray(e))for(var i=0,o=e.length;i1?k(t):t;for(var n=k(arguments,1),r='event handler for "'+e+'"',i=0,o=t.length;iparseInt(this.max)&&Sn(e,t[0],t,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)Sn(this.cache,e,this.keys)},mounted:function(){var e=this;this.cacheVNode(),this.$watch("include",function(t){On(e,function(e){return An(t,e)})}),this.$watch("exclude",function(t){On(e,function(e){return!An(t,e)})})},updated:function(){this.cacheVNode()},render:function(){var e=this.$slots.default,t=zt(e),n=t&&t.componentOptions;if(n){var r=kn(n),i=this.include,o=this.exclude;if(i&&(!r||!An(i,r))||o&&r&&An(o,r))return t;var a=this.cache,s=this.keys,c=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;a[c]?(t.componentInstance=a[c].componentInstance,h(s,c),s.push(c)):(this.vnodeToCache=t,this.keyToCache=c),t.data.keepAlive=!0}return t||e&&e[0]}}};!function(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ae,extend:A,mergeOptions:De,defineReactive:xe},e.set=ke,e.delete=Ae,e.nextTick=Qe,e.observable=function(e){return Ce(e),e},e.options=Object.create(null),I.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,A(e.options.components,Nn),function(e){e.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(t.indexOf(e)>-1)return this;var n=k(arguments,1);return n.unshift(this),"function"==typeof e.install?e.install.apply(e,n):"function"==typeof e&&e.apply(null,n),t.push(e),this}}(e),function(e){e.mixin=function(e){return this.options=De(this.options,e),this}}(e),xn(e),function(e){I.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&s(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}(e)}(Cn),Object.defineProperty(Cn.prototype,"$isServer",{get:te}),Object.defineProperty(Cn.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(Cn,"FunctionalRenderContext",{value:Et}),Cn.version="2.6.14";var En=p("style,class"),jn=p("input,textarea,option,select,progress"),Dn=function(e,t,n){return"value"===n&&jn(e)&&"button"!==t||"selected"===n&&"option"===e||"checked"===n&&"input"===e||"muted"===n&&"video"===e},Ln=p("contenteditable,draggable,spellcheck"),In=p("events,caret,typing,plaintext-only"),Mn=function(e,t){return Bn(t)||"false"===t?"false":"contenteditable"===e&&In(t)?t:"true"},Fn=p("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Pn="http://www.w3.org/1999/xlink",Rn=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Hn=function(e){return Rn(e)?e.slice(6,e.length):""},Bn=function(e){return null==e||!1===e};function Un(e){for(var t=e.data,r=e,i=e;n(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(t=Vn(i.data,t));for(;n(r=r.parent);)r&&r.data&&(t=Vn(t,r.data));return function(e,t){if(n(e)||n(t))return zn(e,Kn(t));return""}(t.staticClass,t.class)}function Vn(e,t){return{staticClass:zn(e.staticClass,t.staticClass),class:n(e.class)?[e.class,t.class]:t.class}}function zn(e,t){return e?t?e+" "+t:e:t||""}function Kn(e){return Array.isArray(e)?function(e){for(var t,r="",i=0,o=e.length;i-1?mr(e,t,n):Fn(t)?Bn(n)?e.removeAttribute(t):(n="allowfullscreen"===t&&"EMBED"===e.tagName?"true":t,e.setAttribute(t,n)):Ln(t)?e.setAttribute(t,Mn(t,n)):Rn(t)?Bn(n)?e.removeAttributeNS(Pn,Hn(t)):e.setAttributeNS(Pn,t,n):mr(e,t,n)}function mr(e,t,n){if(Bn(n))e.removeAttribute(t);else{if(q&&!W&&"TEXTAREA"===e.tagName&&"placeholder"===t&&""!==n&&!e.__ieph){var r=function(t){t.stopImmediatePropagation(),e.removeEventListener("input",r)};e.addEventListener("input",r),e.__ieph=!0}e.setAttribute(t,n)}}var yr={create:vr,update:vr};function gr(e,r){var i=r.elm,o=r.data,a=e.data;if(!(t(o.staticClass)&&t(o.class)&&(t(a)||t(a.staticClass)&&t(a.class)))){var s=Un(r),c=i._transitionClasses;n(c)&&(s=zn(s,Kn(c))),s!==i._prevClass&&(i.setAttribute("class",s),i._prevClass=s)}}var _r,br,$r,wr,Cr,xr,kr={create:gr,update:gr},Ar=/[\w).+\-_$\]]/;function Or(e){var t,n,r,i,o,a=!1,s=!1,c=!1,u=!1,l=0,f=0,p=0,d=0;for(r=0;r=0&&" "===(h=e.charAt(v));v--);h&&Ar.test(h)||(u=!0)}}else void 0===i?(d=r+1,i=e.slice(0,r).trim()):m();function m(){(o||(o=[])).push(e.slice(d,r).trim()),d=r+1}if(void 0===i?i=e.slice(0,r).trim():0!==d&&m(),o)for(r=0;r-1?{exp:e.slice(0,wr),key:'"'+e.slice(wr+1)+'"'}:{exp:e,key:null};br=e,wr=Cr=xr=0;for(;!zr();)Kr($r=Vr())?qr($r):91===$r&&Jr($r);return{exp:e.slice(0,Cr),key:e.slice(Cr+1,xr)}}(e);return null===n.key?e+"="+t:"$set("+n.exp+", "+n.key+", "+t+")"}function Vr(){return br.charCodeAt(++wr)}function zr(){return wr>=_r}function Kr(e){return 34===e||39===e}function Jr(e){var t=1;for(Cr=wr;!zr();)if(Kr(e=Vr()))qr(e);else if(91===e&&t++,93===e&&t--,0===t){xr=wr;break}}function qr(e){for(var t=e;!zr()&&(e=Vr())!==t;);}var Wr,Zr="__r",Gr="__c";function Xr(e,t,n){var r=Wr;return function i(){null!==t.apply(null,arguments)&&ei(e,i,n,r)}}var Yr=Ke&&!(X&&Number(X[1])<=53);function Qr(e,t,n,r){if(Yr){var i=sn,o=t;t=o._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}}Wr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function ei(e,t,n,r){(r||Wr).removeEventListener(e,t._wrapper||t,n)}function ti(e,r){if(!t(e.data.on)||!t(r.data.on)){var i=r.data.on||{},o=e.data.on||{};Wr=r.elm,function(e){if(n(e[Zr])){var t=q?"change":"input";e[t]=[].concat(e[Zr],e[t]||[]),delete e[Zr]}n(e[Gr])&&(e.change=[].concat(e[Gr],e.change||[]),delete e[Gr])}(i),it(i,o,Qr,ei,Xr,r.context),Wr=void 0}}var ni,ri={create:ti,update:ti};function ii(e,r){if(!t(e.data.domProps)||!t(r.data.domProps)){var i,o,a=r.elm,s=e.data.domProps||{},c=r.data.domProps||{};for(i in n(c.__ob__)&&(c=r.data.domProps=A({},c)),s)i in c||(a[i]="");for(i in c){if(o=c[i],"textContent"===i||"innerHTML"===i){if(r.children&&(r.children.length=0),o===s[i])continue;1===a.childNodes.length&&a.removeChild(a.childNodes[0])}if("value"===i&&"PROGRESS"!==a.tagName){a._value=o;var u=t(o)?"":String(o);oi(a,u)&&(a.value=u)}else if("innerHTML"===i&&Wn(a.tagName)&&t(a.innerHTML)){(ni=ni||document.createElement("div")).innerHTML=""+o+"";for(var l=ni.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}else if(o!==s[i])try{a[i]=o}catch(e){}}}}function oi(e,t){return!e.composing&&("OPTION"===e.tagName||function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(e,t)||function(e,t){var r=e.value,i=e._vModifiers;if(n(i)){if(i.number)return f(r)!==f(t);if(i.trim)return r.trim()!==t.trim()}return r!==t}(e,t))}var ai={create:ii,update:ii},si=g(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\))/g).forEach(function(e){if(e){var r=e.split(n);r.length>1&&(t[r[0].trim()]=r[1].trim())}}),t});function ci(e){var t=ui(e.style);return e.staticStyle?A(e.staticStyle,t):t}function ui(e){return Array.isArray(e)?O(e):"string"==typeof e?si(e):e}var li,fi=/^--/,pi=/\s*!important$/,di=function(e,t,n){if(fi.test(t))e.style.setProperty(t,n);else if(pi.test(n))e.style.setProperty(C(t),n.replace(pi,""),"important");else{var r=hi(t);if(Array.isArray(n))for(var i=0,o=n.length;i-1?t.split(gi).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+(e.getAttribute("class")||"")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function bi(e,t){if(t&&(t=t.trim()))if(e.classList)t.indexOf(" ")>-1?t.split(gi).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t),e.classList.length||e.removeAttribute("class");else{for(var n=" "+(e.getAttribute("class")||"")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");(n=n.trim())?e.setAttribute("class",n):e.removeAttribute("class")}}function $i(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&A(t,wi(e.name||"v")),A(t,e),t}return"string"==typeof e?wi(e):void 0}}var wi=g(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),Ci=V&&!W,xi="transition",ki="animation",Ai="transition",Oi="transitionend",Si="animation",Ti="animationend";Ci&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ai="WebkitTransition",Oi="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Si="WebkitAnimation",Ti="webkitAnimationEnd"));var Ni=V?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function Ei(e){Ni(function(){Ni(e)})}function ji(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),_i(e,t))}function Di(e,t){e._transitionClasses&&h(e._transitionClasses,t),bi(e,t)}function Li(e,t,n){var r=Mi(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===xi?Oi:Ti,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c0&&(n=xi,l=a,f=o.length):t===ki?u>0&&(n=ki,l=u,f=c.length):f=(n=(l=Math.max(a,u))>0?a>u?xi:ki:null)?n===xi?o.length:c.length:0,{type:n,timeout:l,propCount:f,hasTransform:n===xi&&Ii.test(r[Ai+"Property"])}}function Fi(e,t){for(;e.length1}function Vi(e,t){!0!==t.data.show&&Ri(t)}var zi=function(e){var o,a,s={},c=e.modules,u=e.nodeOps;for(o=0;ov?_(e,t(i[y+1])?null:i[y+1].elm,i,d,y,o):d>y&&$(r,p,v)}(p,h,y,o,l):n(y)?(n(e.text)&&u.setTextContent(p,""),_(p,null,y,0,y.length-1,o)):n(h)?$(h,0,h.length-1):n(e.text)&&u.setTextContent(p,""):e.text!==i.text&&u.setTextContent(p,i.text),n(v)&&n(d=v.hook)&&n(d=d.postpatch)&&d(e,i)}}}function k(e,t,i){if(r(i)&&n(e.parent))e.parent.data.pendingInsert=t;else for(var o=0;o-1,a.selected!==o&&(a.selected=o);else if(E(Zi(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Wi(e,t){return t.every(function(t){return!E(t,e)})}function Zi(e){return"_value"in e?e._value:e.value}function Gi(e){e.target.composing=!0}function Xi(e){e.target.composing&&(e.target.composing=!1,Yi(e.target,"input"))}function Yi(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Qi(e){return!e.componentInstance||e.data&&e.data.transition?e:Qi(e.componentInstance._vnode)}var eo={model:Ki,show:{bind:function(e,t,n){var r=t.value,i=(n=Qi(n)).data&&n.data.transition,o=e.__vOriginalDisplay="none"===e.style.display?"":e.style.display;r&&i?(n.data.show=!0,Ri(n,function(){e.style.display=o})):e.style.display=r?o:"none"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=Qi(n)).data&&n.data.transition?(n.data.show=!0,r?Ri(n,function(){e.style.display=e.__vOriginalDisplay}):Hi(n,function(){e.style.display="none"})):e.style.display=r?e.__vOriginalDisplay:"none")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},to={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function no(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?no(zt(t.children)):e}function ro(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[b(o)]=i[o];return t}function io(e,t){if(/\d-keep-alive$/.test(t.tag))return e("keep-alive",{props:t.componentOptions.propsData})}var oo=function(e){return e.tag||pt(e)},ao=function(e){return"show"===e.name},so={name:"transition",props:to,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(oo)).length){var r=this.mode,o=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return!0}(this.$vnode))return o;var a=no(o);if(!a)return o;if(this._leaving)return io(e,o);var s="__transition-"+this._uid+"-";a.key=null==a.key?a.isComment?s+"comment":s+a.tag:i(a.key)?0===String(a.key).indexOf(s)?a.key:s+a.key:a.key;var c=(a.data||(a.data={})).transition=ro(this),u=this._vnode,l=no(u);if(a.data.directives&&a.data.directives.some(ao)&&(a.data.show=!0),l&&l.data&&!function(e,t){return t.key===e.key&&t.tag===e.tag}(a,l)&&!pt(l)&&(!l.componentInstance||!l.componentInstance._vnode.isComment)){var f=l.data.transition=A({},c);if("out-in"===r)return this._leaving=!0,ot(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),io(e,o);if("in-out"===r){if(pt(a))return u;var p,d=function(){p()};ot(c,"afterEnter",d),ot(c,"enterCancelled",d),ot(f,"delayLeave",function(e){p=e})}}return o}}},co=A({tag:String,moveClass:String},to);function uo(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function lo(e){e.data.newPos=e.elm.getBoundingClientRect()}function fo(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}delete co.mode;var po={Transition:so,TransitionGroup:{props:co,beforeMount:function(){var e=this,t=this._update;this._update=function(n,r){var i=Gt(e);e.__patch__(e._vnode,e.kept,!1,!0),e._vnode=e.kept,i(),t.call(e,n,r)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=ro(this),s=0;s-1?Xn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Xn[e]=/HTMLUnknownElement/.test(t.toString())},A(Cn.options.directives,eo),A(Cn.options.components,po),Cn.prototype.__patch__=V?zi:S,Cn.prototype.$mount=function(e,t){return function(e,t,n){var r;return e.$el=t,e.$options.render||(e.$options.render=ve),Qt(e,"beforeMount"),r=function(){e._update(e._render(),n)},new pn(e,r,S,{before:function(){e._isMounted&&!e._isDestroyed&&Qt(e,"beforeUpdate")}},!0),n=!1,null==e.$vnode&&(e._isMounted=!0,Qt(e,"mounted")),e}(this,e=e&&V?Qn(e):void 0,t)},V&&setTimeout(function(){F.devtools&&ne&&ne.emit("init",Cn)},0);var vo=/\{\{((?:.|\r?\n)+?)\}\}/g,ho=/[-.*+?^${}()|[\]\/\\]/g,mo=g(function(e){var t=e[0].replace(ho,"\\$&"),n=e[1].replace(ho,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")});var yo={staticKeys:["staticClass"],transformNode:function(e,t){t.warn;var n=Pr(e,"class");n&&(e.staticClass=JSON.stringify(n));var r=Fr(e,"class",!1);r&&(e.classBinding=r)},genData:function(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}};var go,_o={staticKeys:["staticStyle"],transformNode:function(e,t){t.warn;var n=Pr(e,"style");n&&(e.staticStyle=JSON.stringify(si(n)));var r=Fr(e,"style",!1);r&&(e.styleBinding=r)},genData:function(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}},bo=function(e){return(go=go||document.createElement("div")).innerHTML=e,go.textContent},$o=p("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr"),wo=p("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source"),Co=p("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track"),xo=/^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,ko=/^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/,Ao="[a-zA-Z_][\\-\\.0-9_a-zA-Z"+P.source+"]*",Oo="((?:"+Ao+"\\:)?"+Ao+")",So=new RegExp("^<"+Oo),To=/^\s*(\/?)>/,No=new RegExp("^<\\/"+Oo+"[^>]*>"),Eo=/^]+>/i,jo=/^",""":'"',"&":"&"," ":"\n"," ":"\t","'":"'"},Fo=/&(?:lt|gt|quot|amp|#39);/g,Po=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,Ro=p("pre,textarea",!0),Ho=function(e,t){return e&&Ro(e)&&"\n"===t[0]};function Bo(e,t){var n=t?Po:Fo;return e.replace(n,function(e){return Mo[e]})}var Uo,Vo,zo,Ko,Jo,qo,Wo,Zo,Go=/^@|^v-on:/,Xo=/^v-|^@|^:|^#/,Yo=/([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/,Qo=/,([^,\}\]]*)(?:,([^,\}\]]*))?$/,ea=/^\(|\)$/g,ta=/^\[.*\]$/,na=/:(.*)$/,ra=/^:|^\.|^v-bind:/,ia=/\.[^.\]]+(?=[^\]]*$)/g,oa=/^v-slot(:|$)|^#/,aa=/[\r\n]/,sa=/[ \f\t\r\n]+/g,ca=g(bo),ua="_empty_";function la(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:ya(t),rawAttrsMap:{},parent:n,children:[]}}function fa(e,t){Uo=t.warn||Tr,qo=t.isPreTag||T,Wo=t.mustUseProp||T,Zo=t.getTagNamespace||T;t.isReservedTag;zo=Nr(t.modules,"transformNode"),Ko=Nr(t.modules,"preTransformNode"),Jo=Nr(t.modules,"postTransformNode"),Vo=t.delimiters;var n,r,i=[],o=!1!==t.preserveWhitespace,a=t.whitespace,s=!1,c=!1;function u(e){if(l(e),s||e.processed||(e=pa(e,t)),i.length||e===n||n.if&&(e.elseif||e.else)&&va(n,{exp:e.elseif,block:e}),r&&!e.forbidden)if(e.elseif||e.else)a=e,(u=function(e){var t=e.length;for(;t--;){if(1===e[t].type)return e[t];e.pop()}}(r.children))&&u.if&&va(u,{exp:a.elseif,block:a});else{if(e.slotScope){var o=e.slotTarget||'"default"';(r.scopedSlots||(r.scopedSlots={}))[o]=e}r.children.push(e),e.parent=r}var a,u;e.children=e.children.filter(function(e){return!e.slotScope}),l(e),e.pre&&(s=!1),qo(e.tag)&&(c=!1);for(var f=0;f]*>)","i")),p=e.replace(f,function(e,n,r){return u=r.length,Lo(l)||"noscript"===l||(n=n.replace(//g,"$1").replace(//g,"$1")),Ho(l,n)&&(n=n.slice(1)),t.chars&&t.chars(n),""});c+=e.length-p.length,e=p,A(l,c-u,c)}else{var d=e.indexOf("<");if(0===d){if(jo.test(e)){var v=e.indexOf("--\x3e");if(v>=0){t.shouldKeepComment&&t.comment(e.substring(4,v),c,c+v+3),C(v+3);continue}}if(Do.test(e)){var h=e.indexOf("]>");if(h>=0){C(h+2);continue}}var m=e.match(Eo);if(m){C(m[0].length);continue}var y=e.match(No);if(y){var g=c;C(y[0].length),A(y[1],g,c);continue}var _=x();if(_){k(_),Ho(_.tagName,e)&&C(1);continue}}var b=void 0,$=void 0,w=void 0;if(d>=0){for($=e.slice(d);!(No.test($)||So.test($)||jo.test($)||Do.test($)||(w=$.indexOf("<",1))<0);)d+=w,$=e.slice(d);b=e.substring(0,d)}d<0&&(b=e),b&&C(b.length),t.chars&&b&&t.chars(b,c-b.length,c)}if(e===n){t.chars&&t.chars(e);break}}function C(t){c+=t,e=e.substring(t)}function x(){var t=e.match(So);if(t){var n,r,i={tagName:t[1],attrs:[],start:c};for(C(t[0].length);!(n=e.match(To))&&(r=e.match(ko)||e.match(xo));)r.start=c,C(r[0].length),r.end=c,i.attrs.push(r);if(n)return i.unarySlash=n[1],C(n[0].length),i.end=c,i}}function k(e){var n=e.tagName,c=e.unarySlash;o&&("p"===r&&Co(n)&&A(r),s(n)&&r===n&&A(n));for(var u=a(n)||!!c,l=e.attrs.length,f=new Array(l),p=0;p=0&&i[a].lowerCasedTag!==s;a--);else a=0;if(a>=0){for(var u=i.length-1;u>=a;u--)t.end&&t.end(i[u].tag,n,o);i.length=a,r=a&&i[a-1].tag}else"br"===s?t.start&&t.start(e,[],!0,n,o):"p"===s&&(t.start&&t.start(e,[],!1,n,o),t.end&&t.end(e,n,o))}A()}(e,{warn:Uo,expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,canBeLeftOpenTag:t.canBeLeftOpenTag,shouldDecodeNewlines:t.shouldDecodeNewlines,shouldDecodeNewlinesForHref:t.shouldDecodeNewlinesForHref,shouldKeepComment:t.comments,outputSourceRange:t.outputSourceRange,start:function(e,o,a,l,f){var p=r&&r.ns||Zo(e);q&&"svg"===p&&(o=function(e){for(var t=[],n=0;nc&&(s.push(o=e.slice(c,i)),a.push(JSON.stringify(o)));var u=Or(r[1].trim());a.push("_s("+u+")"),s.push({"@binding":u}),c=i+r[0].length}return c-1"+("true"===o?":("+t+")":":_q("+t+","+o+")")),Mr(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&("+Ur(t,"$$a.concat([$$v])")+")}else{$$i>-1&&("+Ur(t,"$$a.slice(0,$$i).concat($$a.slice($$i+1))")+")}}else{"+Ur(t,"$$c")+"}",null,!0)}(e,r,i);else if("input"===o&&"radio"===a)!function(e,t,n){var r=n&&n.number,i=Fr(e,"value")||"null";Er(e,"checked","_q("+t+","+(i=r?"_n("+i+")":i)+")"),Mr(e,"change",Ur(t,i),null,!0)}(e,r,i);else if("input"===o||"textarea"===o)!function(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=!o&&"range"!==r,u=o?"change":"range"===r?Zr:"input",l="$event.target.value";s&&(l="$event.target.value.trim()"),a&&(l="_n("+l+")");var f=Ur(t,l);c&&(f="if($event.target.composing)return;"+f),Er(e,"value","("+t+")"),Mr(e,u,f,null,!0),(s||a)&&Mr(e,"blur","$forceUpdate()")}(e,r,i);else if(!F.isReservedTag(o))return Br(e,r,i),!1;return!0},text:function(e,t){t.value&&Er(e,"textContent","_s("+t.value+")",t)},html:function(e,t){t.value&&Er(e,"innerHTML","_s("+t.value+")",t)}},isPreTag:function(e){return"pre"===e},isUnaryTag:$o,mustUseProp:Dn,canBeLeftOpenTag:wo,isReservedTag:Zn,getTagNamespace:Gn,staticKeys:function(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}($a)},ka=g(function(e){return p("type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap"+(e?","+e:""))});function Aa(e,t){e&&(wa=ka(t.staticKeys||""),Ca=t.isReservedTag||T,function e(t){t.static=function(e){if(2===e.type)return!1;if(3===e.type)return!0;return!(!e.pre&&(e.hasBindings||e.if||e.for||d(e.tag)||!Ca(e.tag)||function(e){for(;e.parent;){if("template"!==(e=e.parent).tag)return!1;if(e.for)return!0}return!1}(e)||!Object.keys(e).every(wa)))}(t);if(1===t.type){if(!Ca(t.tag)&&"slot"!==t.tag&&null==t.attrsMap["inline-template"])return;for(var n=0,r=t.children.length;n|^function(?:\s+[\w$]+)?\s*\(/,Sa=/\([^)]*?\);*$/,Ta=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/,Na={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},Ea={esc:["Esc","Escape"],tab:"Tab",enter:"Enter",space:[" ","Spacebar"],up:["Up","ArrowUp"],left:["Left","ArrowLeft"],right:["Right","ArrowRight"],down:["Down","ArrowDown"],delete:["Backspace","Delete","Del"]},ja=function(e){return"if("+e+")return null;"},Da={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:ja("$event.target !== $event.currentTarget"),ctrl:ja("!$event.ctrlKey"),shift:ja("!$event.shiftKey"),alt:ja("!$event.altKey"),meta:ja("!$event.metaKey"),left:ja("'button' in $event && $event.button !== 0"),middle:ja("'button' in $event && $event.button !== 1"),right:ja("'button' in $event && $event.button !== 2")};function La(e,t){var n=t?"nativeOn:":"on:",r="",i="";for(var o in e){var a=Ia(e[o]);e[o]&&e[o].dynamic?i+=o+","+a+",":r+='"'+o+'":'+a+","}return r="{"+r.slice(0,-1)+"}",i?n+"_d("+r+",["+i.slice(0,-1)+"])":n+r}function Ia(e){if(!e)return"function(){}";if(Array.isArray(e))return"["+e.map(function(e){return Ia(e)}).join(",")+"]";var t=Ta.test(e.value),n=Oa.test(e.value),r=Ta.test(e.value.replace(Sa,""));if(e.modifiers){var i="",o="",a=[];for(var s in e.modifiers)if(Da[s])o+=Da[s],Na[s]&&a.push(s);else if("exact"===s){var c=e.modifiers;o+=ja(["ctrl","shift","alt","meta"].filter(function(e){return!c[e]}).map(function(e){return"$event."+e+"Key"}).join("||"))}else a.push(s);return a.length&&(i+=function(e){return"if(!$event.type.indexOf('key')&&"+e.map(Ma).join("&&")+")return null;"}(a)),o&&(i+=o),"function($event){"+i+(t?"return "+e.value+".apply(null, arguments)":n?"return ("+e.value+").apply(null, arguments)":r?"return "+e.value:e.value)+"}"}return t||n?e.value:"function($event){"+(r?"return "+e.value:e.value)+"}"}function Ma(e){var t=parseInt(e,10);if(t)return"$event.keyCode!=="+t;var n=Na[e],r=Ea[e];return"_k($event.keyCode,"+JSON.stringify(e)+","+JSON.stringify(n)+",$event.key,"+JSON.stringify(r)+")"}var Fa={on:function(e,t){e.wrapListeners=function(e){return"_g("+e+","+t.value+")"}},bind:function(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+","+(t.modifiers&&t.modifiers.prop?"true":"false")+(t.modifiers&&t.modifiers.sync?",true":"")+")"}},cloak:S},Pa=function(e){this.options=e,this.warn=e.warn||Tr,this.transforms=Nr(e.modules,"transformCode"),this.dataGenFns=Nr(e.modules,"genData"),this.directives=A(A({},Fa),e.directives);var t=e.isReservedTag||T;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function Ra(e,t){var n=new Pa(t);return{render:"with(this){return "+(e?"script"===e.tag?"null":Ha(e,n):'_c("div")')+"}",staticRenderFns:n.staticRenderFns}}function Ha(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return Ba(e,t);if(e.once&&!e.onceProcessed)return Ua(e,t);if(e.for&&!e.forProcessed)return za(e,t);if(e.if&&!e.ifProcessed)return Va(e,t);if("template"!==e.tag||e.slotTarget||t.pre){if("slot"===e.tag)return function(e,t){var n=e.slotName||'"default"',r=Wa(e,t),i="_t("+n+(r?",function(){return "+r+"}":""),o=e.attrs||e.dynamicAttrs?Xa((e.attrs||[]).concat(e.dynamicAttrs||[]).map(function(e){return{name:b(e.name),value:e.value,dynamic:e.dynamic}})):null,a=e.attrsMap["v-bind"];!o&&!a||r||(i+=",null");o&&(i+=","+o);a&&(i+=(o?"":",null")+","+a);return i+")"}(e,t);var n;if(e.component)n=function(e,t,n){var r=t.inlineTemplate?null:Wa(t,n,!0);return"_c("+e+","+Ka(t,n)+(r?","+r:"")+")"}(e.component,e,t);else{var r;(!e.plain||e.pre&&t.maybeComponent(e))&&(r=Ka(e,t));var i=e.inlineTemplate?null:Wa(e,t,!0);n="_c('"+e.tag+"'"+(r?","+r:"")+(i?","+i:"")+")"}for(var o=0;o>>0}(a):"")+")"}(e,e.scopedSlots,t)+","),e.model&&(n+="model:{value:"+e.model.value+",callback:"+e.model.callback+",expression:"+e.model.expression+"},"),e.inlineTemplate){var o=function(e,t){var n=e.children[0];if(n&&1===n.type){var r=Ra(n,t.options);return"inlineTemplate:{render:function(){"+r.render+"},staticRenderFns:["+r.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}(e,t);o&&(n+=o+",")}return n=n.replace(/,$/,"")+"}",e.dynamicAttrs&&(n="_b("+n+',"'+e.tag+'",'+Xa(e.dynamicAttrs)+")"),e.wrapData&&(n=e.wrapData(n)),e.wrapListeners&&(n=e.wrapListeners(n)),n}function Ja(e){return 1===e.type&&("slot"===e.tag||e.children.some(Ja))}function qa(e,t){var n=e.attrsMap["slot-scope"];if(e.if&&!e.ifProcessed&&!n)return Va(e,t,qa,"null");if(e.for&&!e.forProcessed)return za(e,t,qa);var r=e.slotScope===ua?"":String(e.slotScope),i="function("+r+"){return "+("template"===e.tag?e.if&&n?"("+e.if+")?"+(Wa(e,t)||"undefined")+":undefined":Wa(e,t)||"undefined":Ha(e,t))+"}",o=r?"":",proxy:true";return"{key:"+(e.slotTarget||'"default"')+",fn:"+i+o+"}"}function Wa(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&"template"!==a.tag&&"slot"!==a.tag){var s=n?t.maybeComponent(a)?",1":",0":"";return""+(r||Ha)(a,t)+s}var c=n?function(e,t){for(var n=0,r=0;r':'
    ',ns.innerHTML.indexOf(" ")>0}var as=!!V&&os(!1),ss=!!V&&os(!0),cs=g(function(e){var t=Qn(e);return t&&t.innerHTML}),us=Cn.prototype.$mount;return Cn.prototype.$mount=function(e,t){if((e=e&&Qn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=cs(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));if(r){var i=is(r,{outputSourceRange:!1,shouldDecodeNewlines:as,shouldDecodeNewlinesForHref:ss,delimiters:n.delimiters,comments:n.comments},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return us.call(this,e,t)},Cn.compile=is,Cn}); \ No newline at end of file diff --git a/libretranslate/storage.py b/libretranslate/storage.py new file mode 100644 index 0000000000000000000000000000000000000000..46bd9c5776822478edccac35452ca9eeb14558dc --- /dev/null +++ b/libretranslate/storage.py @@ -0,0 +1,167 @@ +import redis + +storage = None +def get_storage(): + return storage + +class Storage: + def exists(self, key): + raise Exception("not implemented") + + def set_bool(self, key, value): + raise Exception("not implemented") + def get_bool(self, key): + raise Exception("not implemented") + + def set_int(self, key, value): + raise Exception("not implemented") + def get_int(self, key): + raise Exception("not implemented") + + def set_str(self, key, value): + raise Exception("not implemented") + def get_str(self, key): + raise Exception("not implemented") + + def set_hash_int(self, ns, key, value): + raise Exception("not implemented") + def get_hash_int(self, ns, key): + raise Exception("not implemented") + def inc_hash_int(self, ns, key): + raise Exception("not implemented") + def dec_hash_int(self, ns, key): + raise Exception("not implemented") + + def get_hash_keys(self, ns): + raise Exception("not implemented") + def del_hash(self, ns, key): + raise Exception("not implemented") + +class MemoryStorage(Storage): + def __init__(self): + self.store = {} + + def exists(self, key): + return key in self.store + + def set_bool(self, key, value): + self.store[key] = bool(value) + + def get_bool(self, key): + return bool(self.store[key]) + + def set_int(self, key, value): + self.store[key] = int(value) + + def get_int(self, key): + return int(self.store.get(key, 0)) + + def set_str(self, key, value): + self.store[key] = value + + def get_str(self, key): + return str(self.store.get(key, "")) + + def set_hash_int(self, ns, key, value): + if ns not in self.store: + self.store[ns] = {} + self.store[ns][key] = int(value) + + def get_hash_int(self, ns, key): + d = self.store.get(ns, {}) + return int(d.get(key, 0)) + + def inc_hash_int(self, ns, key): + if ns not in self.store: + self.store[ns] = {} + + if key not in self.store[ns]: + self.store[ns][key] = 0 + else: + self.store[ns][key] += 1 + + def dec_hash_int(self, ns, key): + if ns not in self.store: + self.store[ns] = {} + + if key not in self.store[ns]: + self.store[ns][key] = 0 + else: + self.store[ns][key] -= 1 + + def get_all_hash_int(self, ns): + if ns in self.store: + return [{str(k): int(v)} for k,v in self.store[ns].items()] + else: + return [] + + def del_hash(self, ns, key): + del self.store[ns][key] + + +class RedisStorage(Storage): + def __init__(self, redis_uri): + self.conn = redis.from_url(redis_uri) + self.conn.ping() + + def exists(self, key): + return bool(self.conn.exists(key)) + + def set_bool(self, key, value): + self.conn.set(key, "1" if value else "0") + + def get_bool(self, key): + return bool(self.conn.get(key)) + + def set_int(self, key, value): + self.conn.set(key, str(value)) + + def get_int(self, key): + v = self.conn.get(key) + if v is None: + return 0 + else: + return v + + def set_str(self, key, value): + self.conn.set(key, value) + + def get_str(self, key): + v = self.conn.get(key) + if v is None: + return "" + else: + return v.decode('utf-8') + + def get_hash_int(self, ns, key): + v = self.conn.hget(ns, key) + if v is None: + return 0 + else: + return int(v) + + def set_hash_int(self, ns, key, value): + self.conn.hset(ns, key, value) + + def inc_hash_int(self, ns, key): + return int(self.conn.hincrby(ns, key)) + + def dec_hash_int(self, ns, key): + return int(self.conn.hincrby(ns, key, -1)) + + def get_all_hash_int(self, ns): + return {k.decode("utf-8"): int(v) for k,v in self.conn.hgetall(ns).items()} + + def del_hash(self, ns, key): + self.conn.hdel(ns, key) + +def setup(storage_uri): + global storage + if storage_uri.startswith("memory://"): + storage = MemoryStorage() + elif storage_uri.startswith("redis://"): + storage = RedisStorage(storage_uri) + else: + raise Exception("Invalid storage URI: " + storage_uri) + + return storage \ No newline at end of file diff --git a/libretranslate/suggestions.py b/libretranslate/suggestions.py new file mode 100644 index 0000000000000000000000000000000000000000..73944dddc3e67ab6ed415d3550363b673a49aeee --- /dev/null +++ b/libretranslate/suggestions.py @@ -0,0 +1,39 @@ +import os +import sqlite3 + +from expiringdict import ExpiringDict + +DEFAULT_DB_PATH = "db/suggestions.db" + + +class Database: + def __init__(self, db_path=DEFAULT_DB_PATH, max_cache_len=1000, max_cache_age=30): + # Legacy check - this can be removed at some point in the near future + if os.path.isfile("suggestions.db") and not os.path.isfile("db/suggestions.db"): + print("Migrating {} to {}".format("suggestions.db", "db/suggestions.db")) + try: + os.rename("suggestions.db", "db/suggestions.db") + except Exception as e: + print(str(e)) + + self.db_path = db_path + self.cache = ExpiringDict(max_len=max_cache_len, max_age_seconds=max_cache_age) + + # Make sure to do data synchronization on writes! + self.c = sqlite3.connect(db_path, check_same_thread=False) + self.c.execute( + """CREATE TABLE IF NOT EXISTS suggestions ( + "q" TEXT NOT NULL, + "s" TEXT NOT NULL, + "source" TEXT NOT NULL, + "target" TEXT NOT NULL + );""" + ) + + def add(self, q, s, source, target): + self.c.execute( + "INSERT INTO suggestions (q, s, source, target) VALUES (?, ?, ?, ?)", + (q, s, source, target), + ) + self.c.commit() + return True diff --git a/libretranslate/templates/app.js.template b/libretranslate/templates/app.js.template new file mode 100644 index 0000000000000000000000000000000000000000..009352a9994465b008fbaed0af30153ca23880d1 --- /dev/null +++ b/libretranslate/templates/app.js.template @@ -0,0 +1,615 @@ +// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-3.0 +// API host/endpoint +var BaseUrl = window.location.protocol + "//" + window.location.host + "{{ url_prefix }}" ; +var htmlRegex = /<(.*)>.*?|<(.*)\/>/; +document.addEventListener('DOMContentLoaded', function(){ + var sidenavElems = document.querySelectorAll('.sidenav'); + var sidenavInstances = M.Sidenav.init(sidenavElems); + + var app = new Vue({ + el: '#app', + delimiters: ['[[',']]'], + data: { + BaseUrl: BaseUrl, + loading: true, + error: "", + langs: [], + settings: {}, + sourceLang: "", + targetLang: "", + + loadingTranslation: false, + inputText: "", + inputTextareaHeight: 250, + savedTanslatedText: "", + translatedText: "", + output: "", + charactersLimit: -1, + + detectedLangText: "", + + copyTextLabel: {{ _e("Copy text") }}, + + suggestions: false, + isSuggesting: false, + + supportedFilesFormat : [], + translationType: "text", + inputFile: false, + loadingFileTranslation: false, + translatedFileUrl: false, + filesTranslation: true, + frontendTimeout: 500, + + apiSecret: "{{ bogus_api_secret }}" + }, + mounted: function() { + const self = this; + self.$el.classList.add("loaded"); + + const settingsRequest = new XMLHttpRequest(); + settingsRequest.open("GET", BaseUrl + "/frontend/settings", true); + + const langsRequest = new XMLHttpRequest(); + langsRequest.open("GET", BaseUrl + "/languages", true); + + settingsRequest.onload = function() { + if (this.status >= 200 && this.status < 400) { + self.settings = JSON.parse(this.response); + self.sourceLang = self.settings.language.source.code; + self.targetLang = self.settings.language.target.code; + self.charactersLimit = self.settings.charLimit; + self.suggestions = self.settings.suggestions; + self.supportedFilesFormat = self.settings.supportedFilesFormat; + self.filesTranslation = self.settings.filesTranslation; + self.frontendTimeout = self.settings.frontendTimeout; + + if (langsRequest.response) { + handleLangsResponse(self, langsRequest); + } else { + langsRequest.onload = function() { + handleLangsResponse(self, this); + + var hostname = window.location.hostname.toLowerCase(); + if (hostname.indexOf("libretranslate.") === 0 && !hostname.endsWith(".com")){ + self.error = "This website might be in violation of our trademark guidelines: https://github.com/LibreTranslate/LibreTranslate/blob/main/TRADEMARK.md"; + } + } + } + } else { + self.error = {{ _e("Cannot load %(url)s", url="/frontend/settings") }}; + self.loading = false; + } + }; + + settingsRequest.onerror = function() { + self.error = {{ _e("Cannot load %(url)s", url="/frontend/settings") }}; + self.loading = false; + }; + + langsRequest.onerror = function() { + self.error = {{ _e("Cannot load %(url)s", url="/languages") }}; + self.loading = false; + }; + + settingsRequest.send(); + langsRequest.send(); + + {% if api_secret %}self[_=String.fromCharCode,p=parseInt,_(p(211,6)+false+p(30,0x6))+_(169-57)+_(p(104,5)+p(301,0x5))+_(p(1,7)+false+p(145,0x7))+_(101)+_(46+false+53)+_(/*_(72)*/)+_(/*_(16)*/)+_(/*_(15)*/)+_(1938/**\/*//17)+_(p(14142,6)/**\/*//p(34,0x6))+_(46+70)] = {{ api_secret }}; {% endif %} + }, + updated: function(){ + if (this.isSuggesting) return; + + M.FormSelect.init(this.$refs.sourceLangDropdown); + M.FormSelect.init(this.$refs.targetLangDropdown); + + if (this.$refs.inputTextarea){ + this.$refs.inputTextarea.focus() + + if (this.inputText === ""){ + this.$refs.inputTextarea.style.height = this.inputTextareaHeight + "px"; + this.$refs.translatedTextarea.style.height = this.inputTextareaHeight + "px"; + } else{ + this.$refs.inputTextarea.style.height = this.$refs.translatedTextarea.style.height = "1px"; + this.$refs.inputTextarea.style.height = Math.max(this.inputTextareaHeight, this.$refs.inputTextarea.scrollHeight + 32) + "px"; + this.$refs.translatedTextarea.style.height = Math.max(this.inputTextareaHeight, this.$refs.translatedTextarea.scrollHeight + 32) + "px"; + } + } + + // Update "selected" attribute (to overcome a vue.js limitation) + // but properly display checkmarks on supported browsers. + // Also change the + {% for l in available_locales %}{% endfor %} + + {{ _h("Edit") }}create + +
  • lightbulb_outline +
  • + {% endset %} + {{ menulinks }} + + + +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + warning

    [[ error ]]

    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    {{ _h("Translation API") }}

    +
    + + +
    +
    +
    +
    + {{ _h("Translate from") }} + [[ detectedLangText ]] + +
    + +
    + + swap_horiz + + {{ _h("Translate into") }} + +
    +
    + +
    +
    + + + +
    + +
    +
    +
    + + +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + {{ _h("Supported file formats:") }} [[ supportedFilesFormatFormatted ]] + +
    +
    + {{ _h("File") }} + +
    + +
    + +
    +
    +
    +
    +
    +
    + [[ inputFile.name ]] + +
    +
    +
    +
    + + {{ _h("Download") }} +
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +

    {{ _h("Request") }}

    +
    
    +							
    +
    +
    +

    {{ _h("Response") }}

    +
    
    +							
    +
    +
    + +
    +
    +
    +
    + {% if web_version %} +
    +
    +
    +
    +

    {{ _h("Open Source Machine Translation API") }}

    +

    {{ _h("Self-Hosted. Offline Capable. Easy to Setup.") }}

    + +
    +
    +
    +
    + {% endif %} +
    +
    + +
    +
    +
    +
    +
    {{ _h("LibreTranslate") }}
    +

    {{ _h("Free and Open Source Machine Translation API") }}

    +

    {{ _h("License:") }} AGPLv3

    +
    +
    +
    + +
    + + + + + + + diff --git a/libretranslate/tests/__init__.py b/libretranslate/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/libretranslate/tests/test_api/__init__.py b/libretranslate/tests/test_api/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/libretranslate/tests/test_api/conftest.py b/libretranslate/tests/test_api/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..3d7640f31161a47187132219f3b8277c7052721c --- /dev/null +++ b/libretranslate/tests/test_api/conftest.py @@ -0,0 +1,19 @@ +import sys + +import pytest + +from libretranslate.app import create_app +from libretranslate.main import get_args + + +@pytest.fixture() +def app(): + sys.argv = ['', '--load-only', 'en,es'] + app = create_app(get_args()) + + yield app + + +@pytest.fixture() +def client(app): + return app.test_client() diff --git a/libretranslate/tests/test_api/test_api_detect_language.py b/libretranslate/tests/test_api/test_api_detect_language.py new file mode 100644 index 0000000000000000000000000000000000000000..d85600c65c8a598609bfb21e127d5d707f488622 --- /dev/null +++ b/libretranslate/tests/test_api/test_api_detect_language.py @@ -0,0 +1,26 @@ +import json + + +def test_api_detect_language(client): + response = client.post("/detect", data={ + "q": "Hello" + }) + response_json = json.loads(response.data) + + assert "confidence" in response_json[0] and "language" in response_json[0] + assert len(response_json) >= 1 + assert response.status_code == 200 + + +def test_api_detect_language_must_fail_without_parameters(client): + response = client.post("/detect") + response_json = json.loads(response.data) + + assert "error" in response_json + assert response.status_code == 400 + + +def test_api_detect_language_must_fail_bad_request_type(client): + response = client.get("/detect") + + assert response.status_code == 405 diff --git a/libretranslate/tests/test_api/test_api_frontend_settings.py b/libretranslate/tests/test_api/test_api_frontend_settings.py new file mode 100644 index 0000000000000000000000000000000000000000..8c3070a09e1bab62697c7b74b107dc88eddcf4ac --- /dev/null +++ b/libretranslate/tests/test_api/test_api_frontend_settings.py @@ -0,0 +1,4 @@ +def test_api_get_frontend_settings(client): + response = client.get("/frontend/settings") + + assert response.status_code == 200 diff --git a/libretranslate/tests/test_api/test_api_get_languages.py b/libretranslate/tests/test_api/test_api_get_languages.py new file mode 100644 index 0000000000000000000000000000000000000000..d62517444940b626583a58ac555ab7125e32571e --- /dev/null +++ b/libretranslate/tests/test_api/test_api_get_languages.py @@ -0,0 +1,16 @@ +import json + + +def test_api_get_languages(client): + response = client.get("/languages") + response_json = json.loads(response.data) + + assert "code" in response_json[0] and "name" in response_json[0] + assert len(response_json) >= 1 + assert response.status_code == 200 + + +def test_api_get_languages_must_fail_bad_request_type(client): + response = client.post("/languages") + + assert response.status_code == 405 diff --git a/libretranslate/tests/test_api/test_api_spec.py b/libretranslate/tests/test_api/test_api_spec.py new file mode 100644 index 0000000000000000000000000000000000000000..3922c44ecb0986140a08c1704e52b947463166b6 --- /dev/null +++ b/libretranslate/tests/test_api/test_api_spec.py @@ -0,0 +1,10 @@ +def test_api_get_spec(client): + response = client.get("/spec") + + assert response.status_code == 200 + + +def test_api_get_spec_must_fail_bad_request_type(client): + response = client.post("/spec") + + assert response.status_code == 405 diff --git a/libretranslate/tests/test_api/test_api_translate.py b/libretranslate/tests/test_api/test_api_translate.py new file mode 100644 index 0000000000000000000000000000000000000000..ae08052f48c445f85e85afc70b7879cb864946ce --- /dev/null +++ b/libretranslate/tests/test_api/test_api_translate.py @@ -0,0 +1,61 @@ +import json + + +def test_api_translate(client): + response = client.post("/translate", data={ + "q": "Hello", + "source": "en", + "target": "es", + "format": "text" + }) + + response_json = json.loads(response.data) + + assert "translatedText" in response_json + assert response.status_code == 200 + + +def test_api_translate_batch(client): + + response = client.post("/translate", json={ + "q": ["Hello", "World"], + "source": "en", + "target": "es", + "format": "text" + }) + + response_json = json.loads(response.data) + + assert "translatedText" in response_json + assert isinstance(response_json["translatedText"], list) + assert len(response_json["translatedText"]) == 2 + assert response.status_code == 200 + + +def test_api_translate_unsupported_language(client): + response = client.post("/translate", data={ + "q": "Hello", + "source": "en", + "target": "zz", + "format": "text" + }) + + response_json = json.loads(response.data) + + assert "error" in response_json + assert response_json["error"] == "zz is not supported" + assert response.status_code == 400 + + +def test_api_translate_missing_parameter(client): + response = client.post("/translate", data={ + "source": "en", + "target": "es", + "format": "text" + }) + + response_json = json.loads(response.data) + + assert "error" in response_json + assert response_json["error"] == "Invalid request: missing q parameter" + assert response.status_code == 400 diff --git a/libretranslate/tests/test_init.py b/libretranslate/tests/test_init.py new file mode 100644 index 0000000000000000000000000000000000000000..cd796dfe76609bdcd636960010bf3d6ed778298d --- /dev/null +++ b/libretranslate/tests/test_init.py @@ -0,0 +1,10 @@ +from argostranslate import package + +from libretranslate.init import boot + + +def test_boot_argos(): + """Test Argos translate models initialization""" + boot(["en", "es"]) + + assert len(package.get_installed_packages()) >= 2 diff --git a/main.py b/main.py new file mode 100644 index 0000000000000000000000000000000000000000..5053db28fe287f74ed174cb97722a0269d5220f1 --- /dev/null +++ b/main.py @@ -0,0 +1,4 @@ +from libretranslate import main + +if __name__ == "__main__": + main() diff --git a/manage.py b/manage.py new file mode 100644 index 0000000000000000000000000000000000000000..66bda9b851f36f717c58259e418140a26d017f65 --- /dev/null +++ b/manage.py @@ -0,0 +1,4 @@ +from libretranslate import manage + +if __name__ == "__main__": + manage() diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..6b22172ac84758addfd31d8a22a9ec841c5efc39 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,140 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +requires-python = ">=3.8" +name = "libretranslate" +description = "Free and Open Source Machine Translation API. Self-hosted, no limits, no ties to proprietary services." +readme = "README.md" +license = { file = "LICENSE" } +authors = [ + { name = "Piero Toffanin", email = "pt@uav4geo.com" }, + { name = "LibreTranslate Authors" }, +] +maintainers = [ + { name = "Piero Toffanin", email = "pt@uav4geo.com" }, + { name = "LibreTranslate Authors" }, +] +keywords = [ + "Python", + "Translate", + "Translation", + "API", +] +classifiers = [ + "Operating System :: OS Independent", + "License :: OSI Approved :: GNU Affero General Public License v3", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10" +] +dynamic = ["version"] + +dependencies = [ + "argostranslate ==1.9.6", + "Flask ==2.2.5", + "flask-swagger ==0.2.14", + "flask-swagger-ui ==4.11.1", + "Flask-Limiter ==2.6.3", + "Flask-Babel ==3.1.0", + "Flask-Session ==0.4.0", + "waitress ==2.1.2", + "expiringdict ==1.2.2", + "langdetect==1.0.9", + "lexilang==1.0.4", + "morfessor ==2.0.6", + "appdirs ==1.4.4", + "APScheduler ==3.9.1", + "translatehtml ==1.5.2", + "argos-translate-files ==1.2.0", + "itsdangerous ==2.1.2", + "Werkzeug ==2.3.8", + "requests ==2.31.0", + "redis ==4.4.4", + "numpy <2", + "prometheus-client ==0.15.0", + "polib ==1.1.1", + "packaging ==23.1", + "torch ==2.2.0" +] + +[project.scripts] +libretranslate = "libretranslate.main:main" +ltmanage = "libretranslate.manage:manage" + + +[project.optional-dependencies] +test = [ + "pytest >=7.2.0", + "pytest-cov", + "pre-commit >=3.0.0", + "types-requests", + "pip-audit" +] + + +[project.urls] +Homepage = "https://libretranslate.com" +Source = "https://github.com/LibreTranslate/LibreTranslate" +Documentation = "https://github.com/LibreTranslate/LibreTranslate" +Tracker = "https://github.com/LibreTranslate/LibreTranslate/issues" +History = "https://github.com/LibreTranslate/LibreTranslate/releases" + +[tool.hatch.build] +artifacts = ["*.mo"] + +# ENVIRONMENTS AND SCRIPTS +[tool.hatch.envs.default] +features = [ + "test", +] +post-install-commands = [ + "pre-commit install", +] + + +[tool.hatch.envs.default.scripts] +dev = "python main.py {args}" +locales = "python scripts/compile_locales.py" +fmt = [ + "pre-commit run --all --all-files", +] +test = [ + "fmt", + "pytest {args}", +] +cov = [ + "pytest --cov-report html {args}", + "python -c 'import webbrowser; webbrowser.open(\"http://0.0.0.0:3000\")'", + "python -m http.server 3000 --directory ./htmlcov", +] + + +[[tool.hatch.envs.all.matrix]] +python = ["3.8", "3.9", "3.10", "3.11"] + + +# TOOLS +[tool.hatch.version] +path = "VERSION" +pattern = "^(?P[0-9]*.[0-9]*.[0-9]*)$" + + +[tool.pytest.ini_options] +addopts = [ + "-v", + "--cov=libretranslate", + "--color=yes", + "--cov-report=term-missing", +] + +ignore = [ + "E501", # line too long + "A003", # Class attribute is shadowing a python builtin + "S101", # Use of `assert` detected + "S311", # Standard pseudo-random generators are not suitable for cryptographic purposes + "T201", "T203", # remove print and pprint + "E402", # Module level import not at top of file +] diff --git a/run.bat b/run.bat new file mode 100644 index 0000000000000000000000000000000000000000..3e32b5f21f0a3cb51f44a6c455aa98e0ad9ed416 --- /dev/null +++ b/run.bat @@ -0,0 +1,41 @@ +@ECHO OFF + +SETLOCAL + +SET LT_PORT=5000 + +:loop +IF NOT "%1"=="" ( + IF "%1"=="--port" ( + SET LT_PORT=%2 + SHIFT + ) + IF "%1"=="--help" ( + echo Usage: run.bat [--port N] + echo: + echo Run LibreTranslate using docker. + echo: + GOTO :done + ) + IF "%1"=="--api-keys" ( + SET DB_VOLUME=-v lt-db:/app/db + SHIFT + ) + SHIFT + GOTO :loop +) + +WHERE /Q docker +IF %ERRORLEVEL% NEQ 0 GOTO :install_docker + +docker run -ti --rm -p %LT_PORT%:%LT_PORT% %DB_VOLUME% -v lt-local:/home/libretranslate/.local libretranslate/libretranslate %* + +GOTO :done + +:install_docker +ECHO Cannot find docker! Go to https://docs.docker.com/desktop/install/windows-install/ and install docker before running this script (pressing Enter will open the page) +pause +start "" https://docs.docker.com/desktop/install/windows-install/ +GOTO :done + +:done diff --git a/run.sh b/run.sh new file mode 100644 index 0000000000000000000000000000000000000000..fd275478e26beb9b941f1b31e0ad20b26a7686c3 --- /dev/null +++ b/run.sh @@ -0,0 +1,92 @@ +#!/bin/bash +set -eo pipefail +__dirname=$(cd "$(dirname "$0")"; pwd -P) +cd "${__dirname}" + +platform="Linux" # Assumed +uname=$(uname) +case $uname in + "Darwin") + platform="MacOS / OSX" + ;; + MINGW*) + platform="Windows" + ;; +esac + +usage(){ + echo "Usage: $0 [--port N]" + echo + echo "Run LibreTranslate using docker." + echo + exit +} + +export LT_PORT=5000 + +# Parse args for overrides +ARGS=() +while [[ $# -gt 0 ]] +do +key="$1" +case $key in + --port) + export LT_PORT="$2" + ARGS+=("$1") + ARGS+=("$2") # save it in an array for later + shift # past argument + shift # past value + ;; + --debug) + export LT_DEBUG=YES + ARGS+=("$1") + shift # past argument + ;; + --api-keys) + export DB_VOLUME="-v lt-db:/app/db" + ARGS+=("$1") + shift # past argument + ;; + --help) + usage + ;; + *) # unknown option + ARGS+=("$1") + shift # past argument + ;; +esac +done + +# $1 = command | $2 = help_text | $3 = install_command (optional) +check_command(){ + hash "$1" 2>/dev/null || not_found=true + if [[ $not_found ]]; then + check_msg_prefix="Checking for $1... " + + # Can we attempt to install it? + if [[ -n "$3" ]]; then + echo -e "$check_msg_prefix \033[93mnot found, we'll attempt to install\033[39m" + $3 || sudo $3 + + # Recurse, but don't pass the install command + check_command "$1" "$2" + else + check_msg_result="\033[91m can't find $1! Check that the program is installed and that you have added the proper path to the program to your PATH environment variable before launching the program. If you change your PATH environment variable, remember to close and reopen your terminal. $2\033[39m" + fi + else + check_msg_prefix="Checking for $1... " + check_msg_result="\033[92m found\033[39m" + fi + + echo -e "$check_msg_prefix $check_msg_result" + if [[ $not_found ]]; then + return 1 + fi +} + +environment_check(){ + check_command "docker" "https://www.docker.com/" +} + +environment_check +docker run -ti --rm -p $LT_PORT:$LT_PORT $DB_VOLUME -v lt-local:/home/libretranslate/.local libretranslate/libretranslate ${ARGS[@]} diff --git a/scripts/compile_locales.py b/scripts/compile_locales.py new file mode 100644 index 0000000000000000000000000000000000000000..2920354fbfd347449b340da2c9a8386cc2fc7352 --- /dev/null +++ b/scripts/compile_locales.py @@ -0,0 +1,30 @@ +#!/usr/bin/env python +import os +import sys + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) +from babel.messages.frontend import main as pybabel + +if __name__ == "__main__": + if len(sys.argv) >= 2 and sys.argv[1] == 'mdtable': + from libretranslate.locales import get_available_locales + locales = get_available_locales(only_reviewed=False, sort_by_name=True) + print("Language | Reviewed | Weblate Link") + print("-------- | -------- | ------------") + + for l in locales: + link = "https://hosted.weblate.org/translate/libretranslate/app/%s/" % l['code'] + if l['code'] == 'en': + link = "https://hosted.weblate.org/projects/libretranslate/app/" + print("{} | {} | {}".format(l['name'], ':heavy_check_mark:' if l['reviewed'] else '', "[Edit](%s)" % link)) + else: + locales_dir = os.path.join("libretranslate", "locales") + if not os.path.isdir(locales_dir): + os.makedirs(locales_dir) + + print("Compiling locales") + sys.argv = ["", "compile", "-f", "-d", locales_dir] + pybabel() + + + diff --git a/scripts/gunicorn_conf.py b/scripts/gunicorn_conf.py new file mode 100644 index 0000000000000000000000000000000000000000..b1eacc71f76971a97cd794fba532479f7558ab11 --- /dev/null +++ b/scripts/gunicorn_conf.py @@ -0,0 +1,47 @@ +import re +import sys + +from prometheus_client import multiprocess + + +def child_exit(server, worker): + multiprocess.mark_process_dead(worker.pid) + +def on_starting(server): + # Parse command line arguments + proc_name = server.cfg.default_proc_name + kwargs = {} + if proc_name.startswith("wsgi:app"): + str_args = re.sub(r'wsgi:app\s*\(\s*(.*)\s*\)', '\\1', proc_name).strip().split(",") + for a in str_args: + if "=" in a: + k,v = a.split("=") + k = k.strip() + v = v.strip() + + if v.lower() in ["true", "false"]: + v = v.lower() == "true" + if not v: + continue + elif v[0] == '"': + v = v[1:-1] + kwargs[k] = v + + from libretranslate.main import get_args + sys.argv = ['--wsgi'] + + for k in kwargs: + ck = k.replace("_", "-") + if isinstance(kwargs[k], bool) and kwargs[k]: + sys.argv.append("--" + ck) + else: + sys.argv.append("--" + ck) + sys.argv.append(kwargs[k]) + + args = get_args() + + from libretranslate import flood, scheduler, secret, storage + storage.setup(args.shared_storage) + scheduler.setup(args) + flood.setup(args) + secret.setup(args) \ No newline at end of file diff --git a/scripts/healthcheck.py b/scripts/healthcheck.py new file mode 100644 index 0000000000000000000000000000000000000000..2f0d22f6eb045ec6a3da8edb3fce749cdbb77736 --- /dev/null +++ b/scripts/healthcheck.py @@ -0,0 +1,13 @@ +import requests + +response = requests.post( + url='http://localhost:5000/translate', + headers={'Content-Type': 'application/json'}, + json={ + 'q': 'Hello World!', + 'source': 'en', + 'target': 'en' + }, + timeout=60 +) +# if server unavailable then requests with raise exception and healthcheck will fail diff --git a/scripts/install_models.py b/scripts/install_models.py new file mode 100644 index 0000000000000000000000000000000000000000..f60d07ca1a8d68bced0258d85f05445017c5bc0e --- /dev/null +++ b/scripts/install_models.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +import os +import sys + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) +import argparse + +from libretranslate.init import check_and_install_models + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--load_only_lang_codes", type=str, default="") + parser.add_argument("--update", action='store_true') + args = parser.parse_args() + lang_codes = args.load_only_lang_codes.split(",") + if len(lang_codes) == 0 or lang_codes[0] == '': + lang_codes = None + if args.update: + check_and_install_models(update=True, load_only_lang_codes=lang_codes) + else: + check_and_install_models(force=True, load_only_lang_codes=lang_codes) diff --git a/scripts/suggestions-to-jsonl.py b/scripts/suggestions-to-jsonl.py new file mode 100644 index 0000000000000000000000000000000000000000..c23da917b1015979361674ecb3d5174512dc7f3b --- /dev/null +++ b/scripts/suggestions-to-jsonl.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +import argparse +import json +import sqlite3 +import time + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="Program to generate JSONL files from a LibreTranslate's suggestions.db") + parser.add_argument( + "--db", + type=str, + nargs=1, + help="Path to suggestions.db file", + default='db/suggestions.db' + ) + parser.add_argument( + "--clear", + action='store_true', + help="Clear suggestions.db after generation", + default=False + ) + args = parser.parse_args() + + output_file = str(int(time.time())) + ".jsonl" + + con = sqlite3.connect(args.db, check_same_thread=False) + cur = con.cursor() + + with open(output_file, 'w', encoding="utf-8") as f: + for row in cur.execute('SELECT q, s, source, target FROM suggestions WHERE source != "auto" ORDER BY source'): + q, s, source, target = row + obj = { + 'q': q, + 's': s, + 'source': source, + 'target': target + } + json.dump(obj, f, ensure_ascii=False) + f.write('\n') + + print("Wrote %s" % output_file) + + if args.clear: + cur.execute("DELETE FROM suggestions") + con.commit() + print("Cleared " + args.db) \ No newline at end of file diff --git a/scripts/update_locales.py b/scripts/update_locales.py new file mode 100644 index 0000000000000000000000000000000000000000..365e119225b4480d75cd7de684941973ad25ae38 --- /dev/null +++ b/scripts/update_locales.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python +import os +import sys + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) +import json +import re + +import polib +from babel.messages.frontend import main as pybabel +from flask_swagger import swagger +from translatehtml import translate_html + +from libretranslate.app import create_app, get_version +from libretranslate.language import improve_translation_formatting, load_languages +from libretranslate.locales import get_available_locale_codes, swag_eval +from libretranslate.main import get_args + +# Update strings +if __name__ == "__main__": + print("Loading languages") + languages = load_languages() + en_lang = next((l for l in languages if l.code == 'en'), None) + if en_lang is None: + print("Error: English model not found. You need it to run this script.") + exit(1) + + locales_dir = os.path.join("libretranslate", "locales") + if not os.path.isdir(locales_dir): + os.makedirs(locales_dir) + + # Dump language list so it gets picked up by pybabel + langs_file = os.path.join(locales_dir, ".langs.py") + lang_names = {} + with open(langs_file, 'w') as f: + for l in languages: + f.write("_(%s)\n" % json.dumps(l.name)) + lang_names[l.name] = True + + # Additional names that might be missing + for l in ["Serbian", "Ukrainian", "Vietnamese"]: + if not l in lang_names: + f.write("_(%s)\n" % json.dumps(l)) + lang_names[l] = True + print("Wrote %s" % langs_file) + + # Dump swagger strings + args = get_args() + app = create_app(args) + swag = swagger(app) + + swag_strings = [] + def add_swag_string(s): + if not s in swag_strings: + swag_strings.append(s) + swag_eval(swag, add_swag_string) + + swag_file = os.path.join(locales_dir, ".swag.py") + with open(swag_file, 'w') as f: + for ss in swag_strings: + f.write("_(%s)\n" % json.dumps(ss)) + print("Wrote %s" % swag_file) + + messagespot = os.path.join(locales_dir, "messages.pot") + print("Updating %s" % messagespot) + sys.argv = ["", "extract", "-F", "babel.cfg", "-k", "_e _h", + "--copyright-holder", "LibreTranslate Authors", + "--project", "LibreTranslate", + "--version", get_version(), + "-o", messagespot, "libretranslate"] + pybabel() + + lang_map = { + 'zt': 'zh_Hant' + } + lang_codes = [lang_map.get(l.code, l.code) for l in languages if l.code != "en"] + all_folders = [d for d in os.listdir(locales_dir) if os.path.isdir(os.path.join(locales_dir, d))] + review_map = {} + + # Init/update + for l in all_folders: + cmd = "init" + if os.path.isdir(os.path.join(locales_dir, l, "LC_MESSAGES")): + cmd = "update" + + sys.argv = ["", cmd, "-i", messagespot, "-d", locales_dir, "-l", l] + (["--no-fuzzy-matching"] if cmd == "update" else []) + pybabel() + + meta_file = os.path.join(locales_dir, l, "meta.json") + reviewed = False + if not os.path.isfile(meta_file): + with open(meta_file, 'w') as f: + f.write(json.dumps({ + 'name': l if l not in lang_codes else next(lang.name for lang in languages if lang_map.get(lang.code, lang.code) == l), + 'reviewed': False + }, indent=4)) + print("Wrote %s" % meta_file) + else: + with open(meta_file) as f: + reviewed = json.loads(f.read()).get('reviewed', False) + + review_map[l] = reviewed + + # Automatically translate strings with libretranslate + # when a language model is available and a string is empty + + locales = get_available_locale_codes(only_reviewed=False) + for locale in locales: + if locale == 'en': + continue + if review_map.get(locale): + # Don't automatically translate reviewed languages + continue + + tgt_lang = next((l for l in languages if l.code == locale), None) + + if tgt_lang is None: + # We cannot translate + continue + + translator = en_lang.get_translation(tgt_lang) + + messages_file = os.path.join(locales_dir, locale, "LC_MESSAGES", 'messages.po') + if os.path.isfile(messages_file): + print("Translating '%s'" % locale) + pofile = polib.pofile(messages_file) + c = 0 + + for entry in pofile.untranslated_entries(): + text = entry.msgid + + # Extract placeholders + placeholders = re.findall(r'%\(?[^\)]*\)?s', text) + + for p in range(0, len(placeholders)): + text = text.replace(placeholders[p], "%s" % p) + + if len(placeholders) > 0: + translated = str(translate_html(translator, text)) + else: + translated = improve_translation_formatting(text, translator.translate(text)) + + # Restore placeholders + for p in range(0, len(placeholders)): + tag = "%s" % p + if tag in translated: + translated = translated.replace(tag, placeholders[p]) + else: + # Meh, append + translated += " " + placeholders[p] + + print(entry.msgid, " --> ", translated) + entry.msgstr = translated + c += 1 + + if c > 0: + pofile.save(messages_file) + print("Saved %s" % messages_file) + + + diff --git a/wsgi.py b/wsgi.py new file mode 100644 index 0000000000000000000000000000000000000000..3b5799a4134c67a7ebb9bc5b32463dcddb8bdd09 --- /dev/null +++ b/wsgi.py @@ -0,0 +1,22 @@ +from libretranslate import main + + +def app(*args, **kwargs): + import sys + sys.argv = ['--wsgi'] + + for k in kwargs: + ck = k.replace("_", "-") + if isinstance(kwargs[k], bool): + if kwargs[k]: + sys.argv.append("--" + ck) + else: + sys.argv.append("--" + ck) + sys.argv.append(kwargs[k]) + + instance = main() + + if len(kwargs) == 0: + return instance(*args, **kwargs) + else: + return instance