diff --git a/.env.ci b/.env.ci index bb518259b..c23ca0d17 100644 --- a/.env.ci +++ b/.env.ci @@ -2,9 +2,10 @@ APP_ENV=testing APP_DEBUG=true APP_KEY=SomeRandomString3232RandomString APP_THEME=jexactyl -APP_TIMEZONE=UTC +APP_TIMEZONE=America/Sao_Paulo APP_URL=http://localhost/ APP_ENVIRONMENT_ONLY=true +APP_LOCALE=pt DB_CONNECTION=mysql DB_HOST=127.0.0.1 diff --git a/.env.example b/.env.example index 37447dd4f..cbd315a7d 100644 --- a/.env.example +++ b/.env.example @@ -2,9 +2,9 @@ APP_ENV=production APP_DEBUG=false APP_KEY=base64:CHANGETHISKEY-uo1lv077qKsT9oKhIPFDLNl4x0PGqk= APP_THEME=jexactyl -APP_TIMEZONE=UTC +APP_TIMEZONE=America/Sao_Paulo APP_URL=http://panel.example.com -APP_LOCALE=en +APP_LOCALE=pt APP_ENVIRONMENT_ONLY=true LOG_CHANNEL=daily @@ -37,14 +37,16 @@ MAIL_PASSWORD= MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=no-reply@example.com MAIL_FROM_NAME="Jexactyl" -# You should set this to your domain to prevent it defaulting to 'localhost', causing -# mail servers such as Gmail to reject your mail. +# Você deve definir isso para o seu domínio para evitar que ele seja padronizado para 'localhost', +# fazendo com que os servidores de e-mail, como o Gmail, rejeitem seu e-mail. +# +# Veja: https://github.com/pterodactyl/panel/pull/3110 # MAIL_EHLO_DOMAIN=panel.example.com -# Settings for PayPal integration. +# Configurações para integração PayPal. PAYPAL_CLIENT_ID= PAYPAL_CLIENT_SECRET= -# Settings for Stripe integration. +# Configurações para integração Stripe. STRIPE_CLIENT_SECRET= STRIPE_WEBHOOK_SECRET= diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index eec8e345d..8b1378917 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1 @@ -custom: ["https://donate.stripe.com/6oE02Zftd9cC34IbIS"] + diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index a724076cb..8a8512857 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -1,38 +1,38 @@ -name: Bug Report -description: Something isn't working quite right in the software. +name: Relatório de erros +description: Algo não está funcionando muito bem no software. labels: [not confirmed] body: - type: markdown attributes: value: | - Bug reports should only be used for reporting issues with how the software works. For assistance installing this software, as well as debugging issues with dependencies, please use our [Discord server](https://discord.gg/pterodactyl). + Os relatórios de erros só devem ser usados para relatar problemas com a forma como o software funciona. Para assistência na instalação deste software, bem como na depuração de problemas com dependências, favor utilizar nosso [Servidor do Discord].(https://discord.gg/68k7wDGjYc). - type: textarea attributes: - label: Current Behavior - description: Please provide a clear & concise description of the issue. + label: Comportamento atual + description: Favor fornecer uma descrição clara e concisa da questão. validations: required: true - type: textarea attributes: - label: Expected Behavior - description: Please describe what you expected to happen. + label: Comportamento esperado + description: Por favor, descreva o que você esperava que acontecesse. validations: required: true - type: textarea attributes: - label: Steps to Reproduce - description: Please be as detailed as possible when providing steps to reproduce, failure to provide steps will result in this issue being closed. + label: Passos para Reproduzir + description: Por favor, seja o mais detalhado possível ao fornecer passos para a reprodução, a falha em fornecer passos resultará no fechamento desta questão. validations: required: true - type: input id: panel-version attributes: - label: Panel Version - description: Version number of your Panel (latest is not a version) + label: Versão do painel + description: Número da versão do seu Painel (a última não é uma versão) placeholder: 3.0.0 validations: required: true @@ -40,35 +40,22 @@ body: - type: input id: wings-version attributes: - label: Wings Version - description: Version number of your Wings (latest is not a version) + label: Versão da Wings + description: Número da versão de suas Asas (a última não é uma versão) placeholder: 1.4.2 validations: required: true - -- type: input - id: egg-details - attributes: - label: Games and/or Eggs Affected - description: Please include the specific game(s) or egg(s) you are running into this bug with. - placeholder: Minecraft (Paper), Minecraft (Forge) - -- type: input - id: docker-image - attributes: - label: Docker Image - description: The specific Docker image you are using for the game(s) above. - placeholder: ghcr.io/pterodactyl/yolks:java_17 + - type: textarea id: panel-logs attributes: - label: Error Logs + label: Logs de erros description: | - Run the following command to collect logs on your system. + Execute o seguinte comando para coletar logs em seu sistema. Wings: `sudo wings diagnostics` - Panel: `tail -n 100 /var/www/pterodactyl/storage/logs/laravel-$(date +%F).log | nc bin.ptdl.co 99` + Panel: `tail -n 100 /var/www/jexactyl/storage/logs/laravel-$(date +%F).log | nc bin.ptdl.co 99` placeholder: "https://bin.ptdl.co/a1h6z" render: bash validations: @@ -76,12 +63,10 @@ body: - type: checkboxes attributes: - label: Is there an existing issue for this? - description: Please [search here](https://github.com/pterodactyl/panel/issues) to see if an issue already exists for your problem. + label: Existe algum problema para isso? + description: Por favor [pesquisar aqui](https://github.com/Jexactyl-Brasil/Jexactyl-Brasil/issues) para ver se já existe um problema para o seu problema. options: - - label: I have searched the existing issues before opening this issue. - required: true - - label: I have provided all relevant details, including the specific game and Docker images I am using if this issue is related to running a server. + - label: Pesquisei as questões existentes antes de abrir este assunto. required: true - - label: I have checked in the Discord server and believe this is a bug with the software, and not a configuration issue with my specific system. + - label: Eu verifiquei no servidor Discord e acredito que este é um bug com o software, e não um problema de configuração com meu sistema específico. required: true diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml index 4bae71eef..d0c92b52d 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.yml +++ b/.github/ISSUE_TEMPLATE/feature-request.yml @@ -1,25 +1,25 @@ -name: Feature Request -description: Suggest a new feature or improvement for the software. +name: Solicitação de recursos +description: Sugerir um novo recurso ou melhoria para o software. labels: [feature request] body: - type: checkboxes attributes: - label: Is there an existing feature request for this? - description: Please [search here](https://github.com/jexactyl/jexactyl/issues?q=is%3Aissue) to see if someone else has already suggested this. + label: Existe alguma solicitação de recursos para isso? + description: Por favor [pesquise aqui](https://github.com/Jexactyl-Brasil/Jexactyl-Brasil/issues?q=is%3Aissue) para ver se outra pessoa já sugeriu isto. options: - - label: I have searched the existing issues before opening this feature request. + - label: Pesquisei as questões existentes antes de abrir este pedido de recurso. required: true - type: textarea attributes: - label: Describe the feature you would like to see. - description: "A clear & concise description of the feature you'd like to have added, and what issues it would solve." + label: Descreva a característica que você gostaria de ver. + description: "Uma descrição clara e concisa da característica que você gostaria de ter acrescentado, e quais os problemas que isso resolveria." validations: required: true - type: textarea attributes: - label: Additional context to this request. - description: "Add any other context or screenshots about the feature request." + label: Conteúdo adicional a esta solicitação. + description: "Adicione qualquer outro conteúdo ou screenshots sobre o pedido de recursos." validations: required: false diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..c59038a86 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "composer" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" diff --git a/.github/imagens/console.png b/.github/imagens/console.png new file mode 100644 index 000000000..d6aeeaaf2 Binary files /dev/null and b/.github/imagens/console.png differ diff --git a/.github/imagens/plugin.png b/.github/imagens/plugin.png new file mode 100644 index 000000000..ff8575cb3 Binary files /dev/null and b/.github/imagens/plugin.png differ diff --git a/.github/imagens/temaazul.png b/.github/imagens/temaazul.png new file mode 100644 index 000000000..dfb9b912b Binary files /dev/null and b/.github/imagens/temaazul.png differ diff --git a/.github/imagens/temaclaro.png b/.github/imagens/temaclaro.png new file mode 100644 index 000000000..92f01704f Binary files /dev/null and b/.github/imagens/temaclaro.png differ diff --git a/.github/imagens/temaescuro.png b/.github/imagens/temaescuro.png new file mode 100644 index 000000000..3be0344d3 Binary files /dev/null and b/.github/imagens/temaescuro.png differ diff --git a/.github/imagens/temaminecraft.png b/.github/imagens/temaminecraft.png new file mode 100644 index 000000000..8bc94ca67 Binary files /dev/null and b/.github/imagens/temaminecraft.png differ diff --git a/.github/imagens/temapadrao.png b/.github/imagens/temapadrao.png new file mode 100644 index 000000000..00ba8745d Binary files /dev/null and b/.github/imagens/temapadrao.png differ diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 000000000..eb8196d7e --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,76 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "develop" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "develop" ] + schedule: + - cron: '30 18 * * 1' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Use only 'java' to analyze code written in Java, Kotlin or both + # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml deleted file mode 100644 index 47ceef219..000000000 --- a/.github/workflows/docker.yaml +++ /dev/null @@ -1,67 +0,0 @@ -name: Docker - -on: - push: - branches: - - develop - - 1.0-develop - pull_request: - branches: - - develop - - 1.0-develop - release: - types: - - published - -jobs: - push: - name: Push - runs-on: ubuntu-20.04 - if: "!contains(github.ref, 'develop') || (!contains(github.event.head_commit.message, 'skip docker') && !contains(github.event.head_commit.message, 'docker skip'))" - steps: - - name: Code checkout - uses: actions/checkout@v3 - - - name: Docker metadata - id: docker_meta - uses: docker/metadata-action@v4 - with: - images: ghcr.io/jexactyl/jexactyl - flavor: | - latest=false - tags: | - type=raw,value=latest,enable=${{ github.event_name == 'release' && github.event.action == 'published' && github.event.release.prerelease == false }} - type=ref,event=tag - type=ref,event=branch - - - name: Setup QEMU - uses: docker/setup-qemu-action@v2 - - - name: Setup Docker buildx - uses: docker/setup-buildx-action@v2 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.REGISTRY_TOKEN }} - - - name: Update version - if: "github.event_name == 'release' && github.event.action == 'published'" - env: - REF: ${{ github.event.release.tag_name }} - run: | - sed -i "s/ 'version' => 'canary',/ 'version' => '${REF:1}',/" config/app.php - - - name: Build and Push - uses: docker/build-push-action@v3 - with: - context: . - file: ./Dockerfile - push: ${{ github.event_name != 'pull_request' }} - platforms: linux/amd64,linux/arm64 - labels: ${{ steps.docker_meta.outputs.labels }} - tags: ${{ steps.docker_meta.outputs.tags }} - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 2785c5a2a..e0e8eaa95 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -55,4 +55,4 @@ jobs: run: yarn install --frozen-lockfile - name: Run Eslint - run: yarn lint + run: yarn lint --fix diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1d04e6cb4..0ebb7c3a0 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -22,6 +22,9 @@ jobs: - name: Install dependencies run: yarn install --frozen-lockfile + - name: Lint Fix + run: yarn lint --fix + - name: Build run: yarn build:production diff --git a/README.md b/README.md index 9bbd3c899..9a2a80a7f 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,56 @@ -[![Logo Image](https://cdn.discordapp.com/attachments/1012411945141424218/1012430446556090468/JexactylBannerBasic.jpg)](https://jexactyl.com) +[![Logo Image](https://cdn.discordapp.com/attachments/1012411945141424218/1012430446556090468/JexactylBannerBasic.jpg)](https://jexactylbrasil.ml) [![Discord](https://img.shields.io/discord/922284031129825280?style=for-the-badge)](https://discord.com/invite/qttGR4Z5Pk) ![Downloads - Total](https://img.shields.io/github/downloads/jexactyl/jexactyl/total?style=for-the-badge) ![Downloads - Latest](https://img.shields.io/github/downloads/jexactyl/jexactyl/latest/total?style=for-the-badge) -![Version](https://img.shields.io/github/v/release/jexactyl/jexactyl?style=for-the-badge) -![Contributors](https://img.shields.io/github/contributors-anon/jexactyl/jexactyl?style=for-the-badge) +![Version](https://img.shields.io/github/v/release/Jexactyl-Brasil/Jexactyl-Brasil?style=for-the-badge) +![Contributors](https://img.shields.io/github/contributors-anon/Jexactyl-Brasil/Jexactyl-Brasil?style=for-the-badge)

Jexactyl

- Jexactyl is a fast, advanced and customisable game management panel and billing system in one. - Give your users the edge in terms of performance, reliability and pure functionality. + Jexactyl é um painel de gerenciamento de jogos e sistema de faturamento rápido, avançado e personalizável em um só. + Dê a seus usuários a vantagem em termos de desempenho, confiabilidade e pura funcionalidade.
-## Installation -Head over to our [Documentation](https://docs.jexactyl.com) to get started with self-hosting this software. -If you need help at any point during the installation process, please let us know on [Discord](https://discord.com/invite/qttGR4Z5Pk). +## Instalação +Vá até nossa [Documentação](https://docs.jexactylbrasil.ml/) para começar com a auto-hospedagem deste software. +Se você precisar de ajuda em algum momento durante o processo de instalação, por favor nos informe sobre [Discord](https://discord.gg/68k7wDGjYc). -## Why use Jexactyl? -* Billing system which supports [Stripe](https://stripe.com) and [PayPal](https://paypal.com) out of the box. -* Full customizability via a simple administrative dashboard. -* Ticket system in order to provide support to customers. -* Enhanced customisability and configurations. -* A fluent UI/UX with an easy-to-use API for both admins and clients. -* User approvals, server renewals, and much much more. +## Por que usar Jexactyl? +* Sistema de faturamento que suporta [Stripe](https://stripe.com) e [PayPal](https://paypal.com) pronto para o uso. +* Total personalização através de um simples painel de controle administrativo. +* Sistema de tickets a fim de dar suporte aos clientes. +* Personalizabilidade e configurações aprimoradas. +* Uma UI/UX fluente com uma API fácil de usar tanto para administradores como para clientes. +* Aprovações de usuários, renovações de servidores, e muito mais. -## Sponsors -*Want to sponsor Jexactyl? [Donate Here.](https://donate.stripe.com/6oE02Zftd9cC34IbIS)* +## Patrocinadores +* Quer patrocinar a tradução do Jexactyl? [Doe aqui.](https://donate.stripe.com/6oE02Zftd9cC34IbIS)* -| Company | About | Link | +| Empresa | Sobre | Link | | ------- | ----- | ------- | -| [**HostEZ**](https://hostez.io) | Providing North America Valheim, Minecraft and other popular games with low latency, high uptime and maximum availability. EZ! | [Website](https://hostez.io) | -| [**Nero Nodes**](https://neronodes.net) | A Minecraft server provider that's completely free, 24/7. | [GitHub](https://github.com/nero-nodes) | -| [**Lightbulb Host**](https://lightbulb.host) | A Discord bot host that offers free hosting, 24/7. | [Discord](https://discord.wumpus.host) | -| [**ShadowHub Hosting**](https://shadowhub.tk) | Free discord bot & web server Hosting, with cheap VPS. | [Discord](https://discord.gg/sXxJ7PkhC3) | +| [**Nenhum patrocínio**](https://) | Descrição | [@ninguém](https://) | ## Previews -![image](https://user-images.githubusercontent.com/72230943/201116518-af5e3291-74f7-433a-b035-6d80e8c7e8f8.png) -![image](https://user-images.githubusercontent.com/72230943/201116580-ae864e7c-aac7-4766-ab9c-c6cb97d0b015.png) -![image](https://user-images.githubusercontent.com/72230943/201116688-b53d721e-c30f-424e-8a53-025f313ec98f.png) -![image](https://user-images.githubusercontent.com/72230943/201116840-92c00c15-5717-4121-83cd-69397f9bacba.png) -![image](https://user-images.githubusercontent.com/72230943/201116914-8b1c8867-c462-4b25-ae47-803b2e4ea39c.png) -![image](https://user-images.githubusercontent.com/72230943/201116959-a626e6fc-18a9-4c06-869e-2f13b37b8457.png) -![image](https://user-images.githubusercontent.com/72230943/201117028-3db8aa2e-b14b-4679-9f2c-c5afb208767c.png) - +![image](https://user-images.githubusercontent.com/30575805/207936437-e9990069-ec34-4273-b5d2-6cdf21ab755b.png) +![image](https://user-images.githubusercontent.com/30575805/207936499-25645fff-cdc2-476c-b626-fd75813fbc52.png) +![image](.github/imagens/console.png) +![image](.github/imagens/plugin.png) +![image](https://user-images.githubusercontent.com/30575805/207936544-7ee143cd-e0e6-4076-929a-cfc97054b33e.png) +![image](https://user-images.githubusercontent.com/30575805/207936353-cad5228e-5948-4b5c-8b4d-f1fc5021f806.png) + +## Temas do Administrador +![tema Padrão](.github/imagens/temapadrao.png) +![tema Minecraft](.github/imagens/temaminecraft.png) +![tema Claro](.github/imagens/temaclaro.png) +![tema Escuro](.github/imagens/temaescuro.png) +![tema Azul](.github/imagens/temaazul.png) + +### Isenção de responsabilidade +* A Jexactyl Brasil não é de forma alguma afiliada ao [Jexactyl](https://jexactyl.com), somos um grupo de pessoas que decidirão trazer esse belo painel para a nossa língua (Portugues). +* De forma alguma a Jexactyl Brasil é afiliada de alguma forma ao [Pterodactyl®](https://pterdoactyl.io) ou ao [Jexactyl](https://jexactyl.com). ## Licensing Some Javascript and CSS used within the panel are licensed under a `MIT` or `Apache 2.0` license. Please check their diff --git a/SECURITY.md b/SECURITY.md index 8346a9654..1873633b8 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,18 +1,18 @@ -# Security Policy +# Política de segurança -## Supported Versions -The following versions of Jexactyl are receiving active support and maintenance. Any security vulnerabilities discovered must be reproducible in supported versions. +## Versões suportadas +As seguintes versões do Jexactyl estão recebendo suporte e manutenção ativos. Quaisquer vulnerabilidades de segurança descobertas devem ser reproduzíveis em versões com suporte. -| Panel | Supported | +| Panel | Suportado | |---------|--------------------| | 3.7.x | :white_check_mark: | | 3.6.x | :white_check_mark: | | < 3.5.x | :x: | -## Reporting a Vulnerability +## Relatando uma Vulnerabilidade -Please reach out directly to any project team member on Discord when reporting a security vulnerability, or you can email `cameron@jexactyl.com`. +Entre em contato diretamente com qualquer membro da equipe do projeto no Discord ao relatar uma vulnerabilidade de segurança ou envie um e-mail para `cameron@jexactyl.com`. -We make every effort to respond as soon as possible, although it may take a day or two for us to sync internally and determine the severity of the report and its impact. Please, _do not_ use a public facing channel or GitHub issues to report sensitive security issues. + Fazemos todos os esforços para responder o mais rápido possível, embora possa levar um ou dois dias para sincronizarmos internamente e determinarmos a gravidade do relatório e seu impacto. Por favor, _não_ use um canal voltado ao público ou problemas do GitHub para relatar problemas de segurança confidenciais. -As part of our process, we will create a security advisory for the affected versions and disclose it publicly, usually two to four weeks after a releasing a version that addresses it. + Como parte de nosso processo, criaremos um aviso de segurança para as versões afetadas e o divulgaremos publicamente, geralmente de duas a quatro semanas após o lançamento de uma versão que o resolva. diff --git a/app/Console/Commands/Environment/AppSettingsCommand.php b/app/Console/Commands/Environment/AppSettingsCommand.php index 0e49df1aa..e5e37a43d 100644 --- a/app/Console/Commands/Environment/AppSettingsCommand.php +++ b/app/Console/Commands/Environment/AppSettingsCommand.php @@ -11,13 +11,13 @@ class AppSettingsCommand extends Command use EnvironmentWriterTrait; public const CACHE_DRIVERS = [ - 'redis' => 'Redis (recommended)', + 'redis' => 'Redis (recomendado)', 'memcached' => 'Memcached', 'file' => 'Filesystem', ]; public const SESSION_DRIVERS = [ - 'redis' => 'Redis (recommended)', + 'redis' => 'Redis (recomendado)', 'memcached' => 'Memcached', 'database' => 'MySQL Database', 'file' => 'Filesystem', @@ -25,25 +25,25 @@ class AppSettingsCommand extends Command ]; public const QUEUE_DRIVERS = [ - 'redis' => 'Redis (recommended)', + 'redis' => 'Redis (recomendado)', 'database' => 'MySQL Database', 'sync' => 'Sync', ]; - protected $description = 'Configure basic environment settings for the Panel.'; + protected $description = 'Defina configurações básicas de ambiente para o painel.'; protected $signature = 'p:environment:setup - {--new-salt : Whether or not to generate a new salt for Hashids.} - {--author= : The email that services created on this instance should be linked to.} - {--url= : The URL that this Panel is running on.} - {--timezone= : The timezone to use for Panel times.} - {--cache= : The cache driver backend to use.} - {--session= : The session driver backend to use.} - {--queue= : The queue driver backend to use.} - {--redis-host= : Redis host to use for connections.} - {--redis-pass= : Password used to connect to redis.} - {--redis-port= : Port to connect to redis over.} - {--settings-ui= : Enable or disable the settings UI.}'; + {--new-salt : Se deve ou não gerar um novo salt para hashids.} + {--author= : O email que os serviços criados nesta instância devem estar vinculados.} + {--url= : O URL em que este painel estará sendo executado.} + {--timezone= : O fuso horário a ser usado para os tempos do painel.} + {--cache= : O back-end do driver de cache a ser usado.} + {--session= : O back-end do driver da sessão para usar.} + {--queue= : O back-end do driver da fila para usar.} + {--redis-host= : Host do redis a ser usado para conexões.} + {--redis-pass= : Senha usada para conectar-se ao Redis.} + {--redis-port= : Porta para conectar-se ao Redis.} + {--settings-ui= : Ativar ou desativar as configurações UI.}'; protected array $variables = []; @@ -66,25 +66,25 @@ public function handle(): int $this->variables['HASHIDS_SALT'] = str_random(20); } - $this->output->comment('Provide the email address that eggs exported by this Panel should be from. This should be a valid email address.'); + $this->output->comment('Forneça o endereço de e-mail que será usado para exportar novos eggs . Este deve ser um endereço de e-mail válido.'); $this->variables['APP_SERVICE_AUTHOR'] = $this->option('author') ?? $this->ask( - 'Egg Author Email', + 'E-mail do autor do Egg', config('jexactyl.service.author', 'unknown@unknown.com') ); if (!filter_var($this->variables['APP_SERVICE_AUTHOR'], FILTER_VALIDATE_EMAIL)) { - $this->output->error('The service author email provided is invalid.'); + $this->output->error('O email do autor de serviço fornecido é inválido.'); return 1; } - $this->output->comment('The application URL MUST begin with https:// or http:// depending on if you are using SSL or not. If you do not include the scheme your emails and other content will link to the wrong location.'); + $this->output->comment('A URL do aplicativo(painel) DEVE começar com https:// ou http:// dependendo se você estiver usando SSL ou não. Se você não incluir o esquema, seus e-mails e outros conteúdos serão vinculados ao local errado.'); $this->variables['APP_URL'] = $this->option('url') ?? $this->ask( - 'Application URL', + 'Aplicativo(painel) URL', config('app.url', 'https://example.com') ); - $this->output->comment('The timezone should match one of PHP\'s supported timezones. If you are unsure, please reference https://php.net/manual/en/timezones.php.'); + $this->output->comment('O fuso horário deve corresponder a um dos fusos horários suportados pelo PHP. Se você não tiver certeza, por favor consulte https://php.net/manual/en/timezones.php.'); $this->variables['APP_TIMEZONE'] = $this->option('timezone') ?? $this->anticipate( 'Application Timezone', \DateTimeZone::listIdentifiers(), @@ -93,21 +93,21 @@ public function handle(): int $selected = config('cache.default', 'redis'); $this->variables['CACHE_DRIVER'] = $this->option('cache') ?? $this->choice( - 'Cache Driver', + ' Driver de Cache', self::CACHE_DRIVERS, array_key_exists($selected, self::CACHE_DRIVERS) ? $selected : null ); $selected = config('session.driver', 'redis'); $this->variables['SESSION_DRIVER'] = $this->option('session') ?? $this->choice( - 'Session Driver', + 'Driver de Sessão', self::SESSION_DRIVERS, array_key_exists($selected, self::SESSION_DRIVERS) ? $selected : null ); $selected = config('queue.default', 'redis'); $this->variables['QUEUE_CONNECTION'] = $this->option('queue') ?? $this->choice( - 'Queue Driver', + 'Driver de Queue', self::QUEUE_DRIVERS, array_key_exists($selected, self::QUEUE_DRIVERS) ? $selected : null ); @@ -115,7 +115,7 @@ public function handle(): int if (!is_null($this->option('settings-ui'))) { $this->variables['APP_ENVIRONMENT_ONLY'] = $this->option('settings-ui') == 'true' ? 'false' : 'true'; } else { - $this->variables['APP_ENVIRONMENT_ONLY'] = $this->confirm('Enable UI based settings editor?', true) ? 'false' : 'true'; + $this->variables['APP_ENVIRONMENT_ONLY'] = $this->confirm('Habilitar o editor de configurações baseado na IU?', true) ? 'false' : 'true'; } // Make sure session cookies are set as "secure" when using HTTPS @@ -145,22 +145,22 @@ private function checkForRedis() return; } - $this->output->note('You\'ve selected the Redis driver for one or more options, please provide valid connection information below. In most cases you can use the defaults provided unless you have modified your setup.'); + $this->output->note('You\'ve selecionado o driver Redis para uma ou mais opções, por favor, forneça informações de conexão válidas abaixo. Na maioria dos casos, você pode usar os padrões fornecidos, a menos que tenha modificado sua configuração.'); $this->variables['REDIS_HOST'] = $this->option('redis-host') ?? $this->ask( - 'Redis Host', + 'Host do Redis ', config('database.redis.default.host') ); $askForRedisPassword = true; if (!empty(config('database.redis.default.password'))) { $this->variables['REDIS_PASSWORD'] = config('database.redis.default.password'); - $askForRedisPassword = $this->confirm('It seems a password is already defined for Redis, would you like to change it?'); + $askForRedisPassword = $this->confirm('Parece que uma senha já está definida para o Redis, você gostaria de alterá-la?'); } if ($askForRedisPassword) { - $this->output->comment('By default a Redis server instance has no password as it is running locally and inaccessible to the outside world. If this is the case, simply hit enter without entering a value.'); + $this->output->comment('Por padrão, uma instância do servidor Redis não tem senha, pois está sendo executada localmente e inacessível ao mundo exterior. Se este for o caso, basta pressionar enter sem inserir um valor.'); $this->variables['REDIS_PASSWORD'] = $this->option('redis-pass') ?? $this->output->askHidden( - 'Redis Password' + 'Senha do Redis' ); } @@ -169,7 +169,7 @@ private function checkForRedis() } $this->variables['REDIS_PORT'] = $this->option('redis-port') ?? $this->ask( - 'Redis Port', + 'Porta do Redis', config('database.redis.default.port') ); } diff --git a/app/Console/Commands/Environment/DatabaseSettingsCommand.php b/app/Console/Commands/Environment/DatabaseSettingsCommand.php index 90630812d..1cb3af0e8 100644 --- a/app/Console/Commands/Environment/DatabaseSettingsCommand.php +++ b/app/Console/Commands/Environment/DatabaseSettingsCommand.php @@ -11,14 +11,14 @@ class DatabaseSettingsCommand extends Command { use EnvironmentWriterTrait; - protected $description = 'Configure database settings for the Panel.'; + protected $description = 'Defina as configurações do database para o painel.'; protected $signature = 'p:environment:database - {--host= : The connection address for the MySQL server.} - {--port= : The connection port for the MySQL server.} - {--database= : The database to use.} - {--username= : Username to use when connecting.} - {--password= : Password to use for this database.}'; + {--host= : O endereço de conexão para o servidor MySQL.} + {--port= : A porta de conexão para o servidor MySQL.} + {--database= : O database a ser usado.} + {--username= : Nome de usuário para usar ao conectar.} + {--password= : Senha a ser usada para este database.}'; protected array $variables = []; @@ -37,45 +37,45 @@ public function __construct(private DatabaseManager $database, private Kernel $c */ public function handle(): int { - $this->output->note('It is highly recommended to not use "localhost" as your database host as we have seen frequent socket connection issues. If you want to use a local connection you should be using "127.0.0.1".'); + $this->output->note(' É altamente recomendável não usar "localhost" como seu host de database, pois temos visto problemas frequentes de conexão de soquete. Se você quiser usar uma conexão local, você deve estar usando "127.0.0.1".'); $this->variables['DB_HOST'] = $this->option('host') ?? $this->ask( - 'Database Host', + 'Host do Database ', config('database.connections.mysql.host', '127.0.0.1') ); $this->variables['DB_PORT'] = $this->option('port') ?? $this->ask( - 'Database Port', + 'Porta do Database ', config('database.connections.mysql.port', 3306) ); $this->variables['DB_DATABASE'] = $this->option('database') ?? $this->ask( - 'Database Name', + 'Nome do Database ', config('database.connections.mysql.database', 'panel') ); - $this->output->note('Using the "root" account for MySQL connections is not only highly frowned upon, it is also not allowed by this application. You\'ll need to have created a MySQL user for this software.'); + $this->output->note('Usar a conta "root" para conexões MySQL não é apenas altamente desaprovado, mas também não é permitido por este aplicativo. Você precisa ter criado um usuário MySQL para este software.'); $this->variables['DB_USERNAME'] = $this->option('username') ?? $this->ask( - 'Database Username', + 'Usuário do Database', config('database.connections.mysql.username', 'Jexactyl') ); $askForMySQLPassword = true; if (!empty(config('database.connections.mysql.password')) && $this->input->isInteractive()) { $this->variables['DB_PASSWORD'] = config('database.connections.mysql.password'); - $askForMySQLPassword = $this->confirm('It appears you already have a MySQL connection password defined, would you like to change it?'); + $askForMySQLPassword = $this->confirm('Parece que você já tem uma senha de conexão MySQL definida, você gostaria de alterá-la?'); } if ($askForMySQLPassword) { - $this->variables['DB_PASSWORD'] = $this->option('password') ?? $this->secret('Database Password'); + $this->variables['DB_PASSWORD'] = $this->option('password') ?? $this->secret(' Senha do Database'); } try { $this->testMySQLConnection(); } catch (\PDOException $exception) { - $this->output->error(sprintf('Unable to connect to the MySQL server using the provided credentials. The error returned was "%s".', $exception->getMessage())); - $this->output->error('Your connection credentials have NOT been saved. You will need to provide valid connection information before proceeding.'); + $this->output->error(sprintf('Incapaz de conectar-se ao servidor MySQL usando as credenciais fornecidas. O erro retornado foi "%s".', $exception->getMessage())); + $this->output->error('Suas credenciais de conexão NÃO foram salvas. Você precisará fornecer informações válidas de conexão antes de prosseguir.'); - if ($this->confirm('Go back and try again?')) { + if ($this->confirm('Voltar e tentar novamente?')) { $this->database->disconnect('_Jexactyl_command_test'); return $this->handle(); diff --git a/app/Console/Commands/Environment/EmailSettingsCommand.php b/app/Console/Commands/Environment/EmailSettingsCommand.php index b0330628f..387789fb3 100644 --- a/app/Console/Commands/Environment/EmailSettingsCommand.php +++ b/app/Console/Commands/Environment/EmailSettingsCommand.php @@ -10,12 +10,12 @@ class EmailSettingsCommand extends Command { use EnvironmentWriterTrait; - protected $description = 'Set or update the email sending configuration for the Panel.'; + protected $description = ' Defina ou atualize a configuração de envio de e-mail para o Painel.'; protected $signature = 'p:environment:mail - {--driver= : The mail driver to use.} - {--email= : Email address that messages from the Panel will originate from.} - {--from= : The name emails from the Panel will appear to be from.} + {--driver= : O driver de e-mail a ser usado.} + {--email= : Endereço de e-mail que as mensagens do painel se originarão de.} + {--from= : O nome e-mails do painel parecerão ser de.} {--encryption=} {--host=} {--port=} @@ -43,11 +43,11 @@ public function handle() $this->variables['MAIL_DRIVER'] = $this->option('driver') ?? $this->choice( trans('command/messages.environment.mail.ask_driver'), [ - 'smtp' => 'SMTP Server', - 'mail' => 'PHP\'s Internal Mail Function', - 'mailgun' => 'Mailgun Transactional Email', - 'mandrill' => 'Mandrill Transactional Email', - 'postmark' => 'Postmark Transactional Email', + 'smtp' => ' Servidor SMTP', + 'mail' => 'PHP\'s Função de e-mail interno', + 'mailgun' => 'E-mail da Mailgun Transacional', + 'mandrill' => 'E-mail de transação de mandril', + 'postmark' => 'E-mail transacional do carimbo postal(PostMark)', ], $this->config->get('mail.default', 'smtp') ); @@ -69,7 +69,7 @@ public function handle() $this->writeToEnvironment($this->variables); - $this->line('Updating stored environment configuration file.'); + $this->line('Atualização do arquivo de configuração do ambiente armazenado.'); $this->line(''); } diff --git a/app/Console/Commands/InfoCommand.php b/app/Console/Commands/InfoCommand.php index 9d782786f..41b013c87 100644 --- a/app/Console/Commands/InfoCommand.php +++ b/app/Console/Commands/InfoCommand.php @@ -8,7 +8,7 @@ class InfoCommand extends Command { - protected $description = 'Displays the application, database, and email configurations along with the panel version.'; + protected $description = 'Exibe as configurações de aplicativo, banco de dados e e-mail junto com a versão do painel.'; protected $signature = 'p:info'; @@ -25,7 +25,7 @@ public function __construct(private ConfigRepository $config, private SoftwareVe */ public function handle() { - $this->output->title('Version Information'); + $this->output->title('informação da Versão'); $this->table([], [ ['Panel Version', $this->config->get('app.version')], ['Latest Version', $this->versionService->getPanel()], @@ -33,7 +33,7 @@ public function handle() ['Unique Identifier', $this->config->get('Jexactyl.service.author')], ], 'compact'); - $this->output->title('Application Configuration'); + $this->output->title('Configuração do aplicativo'); $this->table([], [ ['Environment', $this->formatText($this->config->get('app.env'), $this->config->get('app.env') === 'production' ?: 'bg=red')], ['Debug Mode', $this->formatText($this->config->get('app.debug') ? 'Yes' : 'No', !$this->config->get('app.debug') ?: 'bg=red')], @@ -48,7 +48,7 @@ public function handle() ['Proxies', $this->config->get('trustedproxies.proxies')], ], 'compact'); - $this->output->title('Database Configuration'); + $this->output->title('Configuração do Database'); $driver = $this->config->get('database.default'); $this->table([], [ ['Driver', $driver], @@ -59,7 +59,7 @@ public function handle() ], 'compact'); // TODO: Update this to handle other mail drivers - $this->output->title('Email Configuration'); + $this->output->title('Configuração de e-mail'); $this->table([], [ ['Driver', $this->config->get('mail.default')], ['Host', $this->config->get('mail.mailers.smtp.host')], diff --git a/app/Console/Commands/Location/DeleteLocationCommand.php b/app/Console/Commands/Location/DeleteLocationCommand.php index d0a7c3cb8..dcff94010 100644 --- a/app/Console/Commands/Location/DeleteLocationCommand.php +++ b/app/Console/Commands/Location/DeleteLocationCommand.php @@ -9,9 +9,9 @@ class DeleteLocationCommand extends Command { - protected $description = 'Deletes a location from the Panel.'; + protected $description = 'Exclui uma localização do Painel.'; - protected $signature = 'p:location:delete {--short= : The short code of the location to delete.}'; + protected $signature = 'p:location:delete {--short= : O Nome Simples do local a ser excluído.}'; protected Collection $locations; diff --git a/app/Console/Commands/Location/MakeLocationCommand.php b/app/Console/Commands/Location/MakeLocationCommand.php index c40fa3a4b..7a0eaddda 100644 --- a/app/Console/Commands/Location/MakeLocationCommand.php +++ b/app/Console/Commands/Location/MakeLocationCommand.php @@ -8,10 +8,10 @@ class MakeLocationCommand extends Command { protected $signature = 'p:location:make - {--short= : The shortcode name of this location (ex. us1).} - {--long= : A longer description of this location.}'; + {--short= : O nome do shortcode deste localização (ex. us1).} + {--long= : Uma descrição mais longa deste localização.}'; - protected $description = 'Creates a new location on the system via the CLI.'; + protected $description = 'Cria um novo local no sistema por meio da CLI.'; /** * Create a new command instance. diff --git a/app/Console/Commands/Maintenance/CleanServiceBackupFilesCommand.php b/app/Console/Commands/Maintenance/CleanServiceBackupFilesCommand.php index 2db0600d6..722599eb8 100644 --- a/app/Console/Commands/Maintenance/CleanServiceBackupFilesCommand.php +++ b/app/Console/Commands/Maintenance/CleanServiceBackupFilesCommand.php @@ -11,7 +11,7 @@ class CleanServiceBackupFilesCommand extends Command { public const BACKUP_THRESHOLD_MINUTES = 5; - protected $description = 'Clean orphaned .bak files created when modifying services.'; + protected $description = 'Limpe arquivos .bak órfãos criados ao modificar serviços.'; protected $signature = 'p:maintenance:clean-service-backups'; diff --git a/app/Console/Commands/Maintenance/PruneOrphanedBackupsCommand.php b/app/Console/Commands/Maintenance/PruneOrphanedBackupsCommand.php index 355b0c7d1..fd864961b 100644 --- a/app/Console/Commands/Maintenance/PruneOrphanedBackupsCommand.php +++ b/app/Console/Commands/Maintenance/PruneOrphanedBackupsCommand.php @@ -10,7 +10,7 @@ class PruneOrphanedBackupsCommand extends Command { protected $signature = 'p:maintenance:prune-backups {--prune-age=}'; - protected $description = 'Marks all backups that have not completed in the last "n" minutes as being failed.'; + protected $description = 'Marca todos os backups que não foram concluídos nos últimos "n" minutos como falhados.'; /** * PruneOrphanedBackupsCommand constructor. @@ -24,7 +24,7 @@ public function handle() { $since = $this->option('prune-age') ?? config('backups.prune_age', 360); if (!$since || !is_digit($since)) { - throw new \InvalidArgumentException('The "--prune-age" argument must be a value greater than 0.'); + throw new \InvalidArgumentException('O argumento da "--prune-age" deve ser um valor maior que 0.'); } $query = $this->backupRepository->getBuilder() @@ -33,12 +33,12 @@ public function handle() $count = $query->count(); if (!$count) { - $this->info('There are no orphaned backups to be marked as failed.'); + $this->info('Não há backups órfãos para serem marcados como com falha.'); return; } - $this->warn("Marking $count backups that have not been marked as completed in the last $since minutes as failed."); + $this->warn("Marcando $count backups que não foram marcados como concluídos nos últimos $since minutos como com falha."); $query->update([ 'is_successful' => false, diff --git a/app/Console/Commands/Node/MakeNodeCommand.php b/app/Console/Commands/Node/MakeNodeCommand.php index c51ae7653..ddd0e6242 100644 --- a/app/Console/Commands/Node/MakeNodeCommand.php +++ b/app/Console/Commands/Node/MakeNodeCommand.php @@ -8,24 +8,24 @@ class MakeNodeCommand extends Command { protected $signature = 'p:node:make - {--name= : A name to identify the node.} - {--description= : A description to identify the node.} - {--locationId= : A valid locationId.} - {--fqdn= : The domain name (e.g node.example.com) to be used for connecting to the daemon. An IP address may only be used if you are not using SSL for this node.} - {--public= : Should the node be public or private? (public=1 / private=0).} - {--scheme= : Which scheme should be used? (Enable SSL=https / Disable SSL=http).} - {--proxy= : Is the daemon behind a proxy? (Yes=1 / No=0).} - {--maintenance= : Should maintenance mode be enabled? (Enable Maintenance mode=1 / Disable Maintenance mode=0).} - {--maxMemory= : Set the max memory amount.} - {--overallocateMemory= : Enter the amount of ram to overallocate (% or -1 to overallocate the maximum).} - {--maxDisk= : Set the max disk amount.} - {--overallocateDisk= : Enter the amount of disk to overallocate (% or -1 to overallocate the maximum).} - {--uploadSize= : Enter the maximum upload filesize.} - {--daemonListeningPort= : Enter the wings listening port.} - {--daemonSFTPPort= : Enter the wings SFTP listening port.} - {--daemonBase= : Enter the base folder.}'; + {--name= : Um nome para identificar o node.} + {--description= : Uma descrição para identificar o node.} + {--locationId= : Um localização válido.} + {--fqdn= : O nome de domínio (por exemplo, node.example.com) a ser usado para conectar ao daemon. Um endereço IP só pode ser usado se você não estiver usando SSL para este node.} + {--public= : O node deve ser publico ou privado? (public=1 / private=0).} + {--scheme= : Qual esquema deve ser usado? (Enable SSL=https / Disable SSL=http).} + {--proxy= : O daemon usa serviço CDN? (Yes=1 / No=0).} + {--maintenance= : O modo de manutenção deve ser ativado? (Enable Maintenance mode=1 / Disable Maintenance mode=0).} + {--maxMemory= : Definir a quantidade máxima de memória.} + {--overallocateMemory= : Digite a quantidade de ram para superalocar (% or -1 para superalocar o máximo).} + {--maxDisk= : Definir a quantidade máxima de disco.} + {--overallocateDisk= : Insira a quantidade de disco para superalocar (% or -1 para superalocar o máximo).} + {--uploadSize= : Insira o tamanho máximo do arquivo de upload.} + {--daemonListeningPort= : Entre na porta de escuta das Wings.} + {--daemonSFTPPort= : Entre na porta de escuta SFTP das Wings.} + {--daemonBase= : Entre na pasta base.}'; - protected $description = 'Creates a new node on the system via the CLI.'; + protected $description = 'Cria um novo node no sistema por meio da CLI.'; /** * MakeNodeCommand constructor. @@ -42,28 +42,28 @@ public function __construct(private NodeCreationService $creationService) */ public function handle() { - $data['name'] = $this->option('name') ?? $this->ask('Enter a short identifier used to distinguish this node from others'); - $data['description'] = $this->option('description') ?? $this->ask('Enter a description to identify the node'); - $data['location_id'] = $this->option('locationId') ?? $this->ask('Enter a valid location id'); + $data['name'] = $this->option('name') ?? $this->ask('Digite um identificador curto usado para distinguir este node de outros'); + $data['description'] = $this->option('description') ?? $this->ask('Digite uma descrição para identificar o node'); + $data['location_id'] = $this->option('locationId') ?? $this->ask('Insira um ID de localização válido'); $data['scheme'] = $this->option('scheme') ?? $this->anticipate( - 'Please either enter https for SSL or http for a non-ssl connection', + 'Digite https para SSL ou http para uma conexão não-ssl', ['https', 'http'], 'https' ); - $data['fqdn'] = $this->option('fqdn') ?? $this->ask('Enter a domain name (e.g node.example.com) to be used for connecting to the daemon. An IP address may only be used if you are not using SSL for this node'); - $data['public'] = $this->option('public') ?? $this->confirm('Should this node be public? As a note, setting a node to private you will be denying the ability to auto-deploy to this node.', true); - $data['behind_proxy'] = $this->option('proxy') ?? $this->confirm('Is your FQDN behind a proxy?'); - $data['maintenance_mode'] = $this->option('maintenance') ?? $this->confirm('Should maintenance mode be enabled?'); - $data['memory'] = $this->option('maxMemory') ?? $this->ask('Enter the maximum amount of memory'); - $data['memory_overallocate'] = $this->option('overallocateMemory') ?? $this->ask('Enter the amount of memory to over allocate by, -1 will disable checking and 0 will prevent creating new servers'); - $data['disk'] = $this->option('maxDisk') ?? $this->ask('Enter the maximum amount of disk space'); - $data['disk_overallocate'] = $this->option('overallocateDisk') ?? $this->ask('Enter the amount of memory to over allocate by, -1 will disable checking and 0 will prevent creating new server'); - $data['upload_size'] = $this->option('uploadSize') ?? $this->ask('Enter the maximum filesize upload', '100'); - $data['daemonListen'] = $this->option('daemonListeningPort') ?? $this->ask('Enter the wings listening port', '8080'); - $data['daemonSFTP'] = $this->option('daemonSFTPPort') ?? $this->ask('Enter the wings SFTP listening port', '2022'); - $data['daemonBase'] = $this->option('daemonBase') ?? $this->ask('Enter the base folder', '/var/lib/Jexactyl/volumes'); + $data['fqdn'] = $this->option('fqdn') ?? $this->ask('Insira um nome de domínio (por exemplo, node.example.com) a ser usado para conectar-se ao daemon. Um endereço IP só pode ser usado se você não estiver usando SSL para este node'); + $data['public'] = $this->option('public') ?? $this->confirm('Esse node deve ser public? Como observação, ao definir um node como private, você negará a capacidade de implantação automática para esse node.', true); + $data['behind_proxy'] = $this->option('proxy') ?? $this->confirm('O seu FQDN está usando serviço CDN?'); + $data['maintenance_mode'] = $this->option('maintenance') ?? $this->confirm('O modo de manutenção deve ser ativado?'); + $data['memory'] = $this->option('maxMemory') ?? $this->ask('Digite a quantidade máxima de memória'); + $data['memory_overallocate'] = $this->option('overallocateMemory') ?? $this->ask('Digite a quantidade de memória para superalocar, -1 desativará a verificação e 0 impedirá a criação de novos servidores'); + $data['disk'] = $this->option('maxDisk') ?? $this->ask('Digite a quantidade máxima de espaço em disco'); + $data['disk_overallocate'] = $this->option('overallocateDisk') ?? $this->ask('Digite a quantidade de memória para superalocar, -1 desativará a verificação e 0 impedirá a criação de um novo servidor'); + $data['upload_size'] = $this->option('uploadSize') ?? $this->ask('Insira o tamanho máximo de upload de arquivo', '100'); + $data['daemonListen'] = $this->option('daemonListeningPort') ?? $this->ask('Entre na porta de escuta das Wings', '8080'); + $data['daemonSFTP'] = $this->option('daemonSFTPPort') ?? $this->ask('Entre na porta de escuta SFTP das wings', '2022'); + $data['daemonBase'] = $this->option('daemonBase') ?? $this->ask('Entre na pasta base', '/var/lib/Jexactyl/volumes'); $node = $this->creationService->handle($data); - $this->line('Successfully created a new node on the location ' . $data['location_id'] . ' with the name ' . $data['name'] . ' and has an id of ' . $node->id . '.'); + $this->line('Um novo node foi criado com sucesso na localização ' . $data['location_id'] . ' com o nome ' . $data['name'] . ' e tem um id de ' . $node->id . '.'); } } diff --git a/app/Console/Commands/Node/NodeConfigurationCommand.php b/app/Console/Commands/Node/NodeConfigurationCommand.php index 2692807b3..9a738d2aa 100644 --- a/app/Console/Commands/Node/NodeConfigurationCommand.php +++ b/app/Console/Commands/Node/NodeConfigurationCommand.php @@ -8,10 +8,10 @@ class NodeConfigurationCommand extends Command { protected $signature = 'p:node:configuration - {node : The ID or UUID of the node to return the configuration for.} - {--format=yaml : The output format. Options are "yaml" and "json".}'; + {node : O ID ou UUID do node para retornar a configuração.} + {--format=yaml : O formato de saída. As opções são "yaml" e "json".}'; - protected $description = 'Displays the configuration for the specified node.'; + protected $description = 'Exibe a configuração para o node especificado.'; public function handle(): int { @@ -19,14 +19,14 @@ public function handle(): int /** @var \Jexactyl\Models\Node $node */ $node = Node::query()->where($column, $this->argument('node'))->firstOr(function () { - $this->error('The selected node does not exist.'); + $this->error('O node selecionado não existe.'); exit(1); }); $format = $this->option('format'); if (!in_array($format, ['yaml', 'yml', 'json'])) { - $this->error('Invalid format specified. Valid options are "yaml" and "json".'); + $this->error('Formato inválido especificado. As opções válidas são "yaml" e "json".'); return 1; } diff --git a/app/Console/Commands/Schedule/AnalyticsCollectionCommand.php b/app/Console/Commands/Schedule/AnalyticsCollectionCommand.php index 404198436..4c699fa54 100644 --- a/app/Console/Commands/Schedule/AnalyticsCollectionCommand.php +++ b/app/Console/Commands/Schedule/AnalyticsCollectionCommand.php @@ -17,7 +17,7 @@ class AnalyticsCollectionCommand extends Command /** * @var string */ - protected $description = 'Collect analytics on server performance.'; + protected $description = 'Coletar análises sobre o desempenho do servidor.'; /** * AnalyticsCollectionCommand constructor. @@ -33,18 +33,18 @@ public function __construct(private DaemonServerRepository $repository) public function handle() { foreach (Server::all() as $server) { - $this->line($server->id . ' is being processed'); + $this->line($server->id . ' está sendo processado'); $stats = $this->repository->setServer($server)->getDetails(); $usage = $stats['utilization']; if ($stats['state'] === 'offline') { - $this->line($server->id . ' is offline, skipping'); + $this->line($server->id . ' está offline, pulando'); continue; } if (AnalyticsData::where('server_id', $server->id)->count() >= 12) { - $this->line($server->id . ' exceeds 12 entries, deleting oldest'); + $this->line($server->id . ' excede 12 entradas, eliminando as mais antigas'); AnalyticsData::where('server_id', $server->id)->orderBy('id', 'asc')->first()->delete(); } @@ -56,9 +56,9 @@ public function handle() 'disk' => ($usage['disk_bytes'] / 1024) / $server->disk / 10, ]); - $this->line($server->id . ' analytics have been saved to database'); + $this->line($server->id . ' as análises foram salvas no banco de dados'); } catch (\Exception $ex) { - $this->error($server->id . ' failed to write stats: ' . $ex->getMessage()); + $this->error($server->id . ' não conseguiu escrever as estatísticas: ' . $ex->getMessage()); } } } diff --git a/app/Console/Commands/Schedule/AnalyticsReviewCommand.php b/app/Console/Commands/Schedule/AnalyticsReviewCommand.php index 2c51fa4a5..f117a026d 100644 --- a/app/Console/Commands/Schedule/AnalyticsReviewCommand.php +++ b/app/Console/Commands/Schedule/AnalyticsReviewCommand.php @@ -16,7 +16,7 @@ class AnalyticsReviewCommand extends Command /** * @var string */ - protected $description = 'Reviews server analytics and creates messages for servers.'; + protected $description = 'Faz a análise dos servidores e cria mensagens para os servidores.'; /** * AnalyticsReviewCommand constructor. diff --git a/app/Console/Commands/Schedule/CouponCommand.php b/app/Console/Commands/Schedule/CouponCommand.php index 4eda1f939..1c20129f5 100644 --- a/app/Console/Commands/Schedule/CouponCommand.php +++ b/app/Console/Commands/Schedule/CouponCommand.php @@ -9,20 +9,20 @@ class CouponCommand extends Command { protected $signature = 'p:schedule:coupon'; - protected $description = 'Process coupon expirations.'; + protected $description = 'Processar expirações de cupons.'; public function handle(): void { - $this->line('Beginning check for expired coupons.'); + $this->line('Início da verificação dos cupons vencidos.'); $coupons = Coupon::query()->get(); foreach ($coupons as $coupon) { $carbon = new Carbon($coupon->expires); $expires = $carbon->timestamp; if (Carbon::now()->timestamp >= $expires) { $coupon->update(['expired' => true]); - $this->line('Coupon #' . $coupon->id . ' has been set as expired.'); + $this->line('Cupom #' . $coupon->id . ' foi definido como expirado.'); } } - $this->line('Completed check for expired coupons.'); + $this->line('Verificação completa para cupons vencidos.'); } } diff --git a/app/Console/Commands/Schedule/ProcessRunnableCommand.php b/app/Console/Commands/Schedule/ProcessRunnableCommand.php index 5317501cb..90d7c8d0f 100644 --- a/app/Console/Commands/Schedule/ProcessRunnableCommand.php +++ b/app/Console/Commands/Schedule/ProcessRunnableCommand.php @@ -13,7 +13,7 @@ class ProcessRunnableCommand extends Command { protected $signature = 'p:schedule:process'; - protected $description = 'Process schedules in the database and determine which are ready to run.'; + protected $description = 'Processar cronogramas no banco de dados e determinar quais estão prontos para execução.'; /** * Handle command execution. @@ -29,7 +29,7 @@ public function handle(): int ->get(); if ($schedules->count() < 1) { - $this->line('There are no scheduled tasks for servers that need to be run.'); + $this->line('Não há tarefas agendadas para servidores que precisam ser executadas.'); return 0; } diff --git a/app/Console/Commands/Schedule/PruneCommand.php b/app/Console/Commands/Schedule/PruneCommand.php index eb854deae..763c1772a 100644 --- a/app/Console/Commands/Schedule/PruneCommand.php +++ b/app/Console/Commands/Schedule/PruneCommand.php @@ -16,7 +16,7 @@ class PruneCommand extends Command /** * @var string */ - protected $description = 'Delete all suspended servers.'; + protected $description = 'Excluir todos os servidores suspensos.'; /** * DeleteUserCommand constructor. @@ -31,9 +31,9 @@ public function __construct(private ServerDeletionService $deletionService) */ public function handle(Server $server) { - $this->line('Running server prune...'); + $this->line('Poda de servidor em execução...'); $this->process($server); - $this->line('Script completed successfully.'); + $this->line('Roteiro concluído com sucesso.'); } /** @@ -43,13 +43,13 @@ public function handle(Server $server) protected function process(Server $server) { $servers = $server->where('renewable', true)->get(); - $this->line('Processing renewals for ' . $servers->count() . ' servers.'); + $this->line('Processamento de renovações para ' . $servers->count() . ' servidores.'); foreach ($servers as $s) { - $this->line('Processing server ' . $s->name . ', ID: ' . $s->id, false); + $this->line('Processando servidor ' . $s->name . ', ID: ' . $s->id, false); if ($s->isSuspended()) { - $this->line('Deleting server ' . $s->name, false); + $this->line('Excluindo servidor ' . $s->name, false); $this->deletionService->withForce(true)->returnResources(true)->handle($s); } } diff --git a/app/Console/Commands/Schedule/RenewalCommand.php b/app/Console/Commands/Schedule/RenewalCommand.php index f6d290387..e6be4cfa4 100644 --- a/app/Console/Commands/Schedule/RenewalCommand.php +++ b/app/Console/Commands/Schedule/RenewalCommand.php @@ -17,7 +17,7 @@ class RenewalCommand extends Command /** * @var string */ - protected $description = 'Process renewals for servers.'; + protected $description = 'Renovações de processos para servidores.'; /** * DeleteUserCommand constructor. @@ -34,9 +34,9 @@ public function __construct( */ public function handle(Server $server) { - $this->line('Executing daily renewal script.'); + $this->line('Executando script de renovação diária.'); $this->process($server); - $this->line('Renewals completed successfully.'); + $this->line('Renovações concluídas com sucesso.'); } /** @@ -46,20 +46,20 @@ public function handle(Server $server) protected function process(Server $server) { $servers = $server->where('renewable', true)->get(); - $this->line('Processing renewals for ' . $servers->count() . ' servers.'); + $this->line('Processamento de renovações para ' . $servers->count() . ' servidores.'); foreach ($servers as $svr) { - $this->line('Renewing server ' . $svr->name, false); + $this->line('Renovando servidor ' . $svr->name, false); $svr->update(['renewal' => $svr->renewal - 1]); if ($svr->renewal <= 0) { - $this->line('Suspending server ' . $svr->name, false); + $this->line('Suspensão do servidor ' . $svr->name, false); $this->suspensionService->toggle($svr, 'suspend'); } if ($svr->renewal <= -7) { - $this->line('Deleting server ' . $svr->name, false); + $this->line('Deletando servidor ' . $svr->name, false); $this->deletionService->handle($svr); } } diff --git a/app/Console/Commands/Server/BulkPowerActionCommand.php b/app/Console/Commands/Server/BulkPowerActionCommand.php index bc60de3c8..f15845f27 100644 --- a/app/Console/Commands/Server/BulkPowerActionCommand.php +++ b/app/Console/Commands/Server/BulkPowerActionCommand.php @@ -13,11 +13,11 @@ class BulkPowerActionCommand extends Command { protected $signature = 'p:server:bulk-power - {action : The action to perform (start, stop, restart, kill)} - {--servers= : A comma separated list of servers.} - {--nodes= : A comma separated list of nodes.}'; + {action : A ação a realizar (start, stop, restart, kill)} + {--servers= : Uma lista separada por vírgulas de servidores.} + {--nodes= : Uma lista separada por vírgulas de Nodes.}'; - protected $description = 'Perform bulk power management on large groupings of servers or nodes at once.'; + protected $description = 'Execute o gerenciamento de energia em massa em grandes agrupamentos de servidores ou nodes de uma só vez.'; /** * BulkPowerActionCommand constructor. diff --git a/app/Console/Commands/UpgradeCommand.php b/app/Console/Commands/UpgradeCommand.php index 1b57ca8c9..e0e3c0e1f 100644 --- a/app/Console/Commands/UpgradeCommand.php +++ b/app/Console/Commands/UpgradeCommand.php @@ -9,16 +9,16 @@ class UpgradeCommand extends Command { - protected const DEFAULT_URL = 'https://github.com/jexactyl/jexactyl/releases/%s/panel.tar.gz'; + protected const DEFAULT_URL = 'https://github.com/Jexactyl-Brasil/Jexactyl-Brasil/releases/%s/panel.tar.gz'; protected $signature = 'p:upgrade - {--user= : The user that PHP runs under. All files will be owned by this user.} - {--group= : The group that PHP runs under. All files will be owned by this group.} - {--url= : The specific archive to download.} - {--release= : A specific version to download from GitHub. Leave blank to use latest.} - {--skip-download : If set no archive will be downloaded.}'; + {--user= : O usuário sob o qual o PHP é executado. Todos os arquivos serão propriedade deste usuário.} + {--group= : O grupo sob o qual o PHP é executado. Todos os arquivos serão de propriedade deste grupo.} + {--url= : O arquivo específico para download.} + {--release= : Uma versão específica para download do GitHub. Deixe em branco para usar o mais recente.} + {--skip-download : Se definido, nenhum arquivo será baixado.}'; - protected $description = 'Downloads a new archive from Jexactyl\'s GitHub and executes the upgrade commands.'; + protected $description = 'Baixa um novo arquivo do GitHub da Jexactyl PT BR e executa os comandos de atualização.'; /** * Executes an upgrade command which will run through all of our standard @@ -34,29 +34,29 @@ public function handle() { $skipDownload = $this->option('skip-download'); if (!$skipDownload) { - $this->output->warning('This command does not verify the integrity of downloaded assets. Please ensure that you trust the download source before continuing. If you do not wish to download an archive, please indicate that using the --skip-download flag, or answering "no" to the question below.'); - $this->output->comment('Download Source (set with --url=):'); + $this->output->warning('Este comando não verifica a integridade dos ativos baixados. Certifique-se de que confia na fonte de download antes de continuar. Se você não deseja baixar um arquivo, indique isso usando o sinalizador --skip-download ou respondendo "no" à pergunta abaixo.'); + $this->output->comment('Fonte de download (configurado com --url=):'); $this->line($this->getUrl()); } if (version_compare(PHP_VERSION, '8.0') < 0) { - $this->error('Cannot execute self-upgrade process. The minimum required PHP version required is 8.0, you have [' . PHP_VERSION . '].'); + $this->error('Não é possível executar o processo de atualização automática. A versão mínima exigida do PHP é 8.0, você tem [' . PHP_VERSION . '].'); } $user = 'www-data'; $group = 'www-data'; if ($this->input->isInteractive()) { if (!$skipDownload) { - $skipDownload = !$this->confirm('Would you like to download and unpack the archive files for the latest version?', true); + $skipDownload = !$this->confirm('Você gostaria de baixar e descompactar os arquivos compactados para a versão mais recente?', true); } if (is_null($this->option('user'))) { $userDetails = posix_getpwuid(fileowner('public')); $user = $userDetails['name'] ?? 'www-data'; - if (!$this->confirm("Your webserver user has been detected as [{$user}]: is this correct?", true)) { + if (!$this->confirm("O usuário do seu servidor web foi detectado como [{$user}]: está correto?", true)) { $user = $this->anticipate( - 'Please enter the name of the user running your webserver process. This varies from system to system, but is generally "www-data", "nginx", or "apache".', + 'Insira o nome do usuário que está executando o processo do servidor da web. Isso varia de sistema para sistema, mas geralmente é "www-data", "nginx" ou "apache".', [ 'www-data', 'nginx', @@ -70,9 +70,9 @@ public function handle() $groupDetails = posix_getgrgid(filegroup('public')); $group = $groupDetails['name'] ?? 'www-data'; - if (!$this->confirm("Your webserver group has been detected as [{$group}]: is this correct?", true)) { + if (!$this->confirm("Seu grupo de servidores da web foi detectado como [{$group}]: está correto?", true)) { $group = $this->anticipate( - 'Please enter the name of the group running your webserver process. Normally this is the same as your user.', + 'Insira o nome do grupo que está executando o processo do seu servidor da web. Normalmente, este é o mesmo que o seu usuário.', [ 'www-data', 'nginx', @@ -82,8 +82,8 @@ public function handle() } } - if (!$this->confirm('Are you sure you want to run the upgrade process for your Panel?')) { - $this->warn('Upgrade process terminated by user.'); + if (!$this->confirm('Tem certeza que deseja executar o processo de atualização do seu Painel?')) { + $this->warn('Processo de atualização encerrado pelo usuário.'); return; } @@ -173,7 +173,7 @@ public function handle() }); $this->newLine(2); - $this->info('Panel has been successfully upgraded. Please ensure you also update any Wings instances: https://Jexactyl.io/wings/1.0/upgrading.html'); + $this->info('O painel foi atualizado com sucesso. Certifique-se de atualizar também todas as instâncias da Wings: https://pterodactyl.io/wings/1.0/upgrading.html'); } protected function withProgress(ProgressBar $bar, \Closure $callback) diff --git a/app/Console/Commands/User/DeleteUserCommand.php b/app/Console/Commands/User/DeleteUserCommand.php index 07b0c5309..c465f9ab9 100644 --- a/app/Console/Commands/User/DeleteUserCommand.php +++ b/app/Console/Commands/User/DeleteUserCommand.php @@ -9,7 +9,7 @@ class DeleteUserCommand extends Command { - protected $description = 'Deletes a user from the Panel if no servers are attached to their account.'; + protected $description = 'Exclui um usuário do Painel se nenhum servidor estiver conectado à sua conta.'; protected $signature = 'p:user:delete {--user=}'; @@ -24,7 +24,7 @@ public function __construct(private UserDeletionService $deletionService) public function handle(): int { $search = $this->option('user') ?? $this->ask(trans('command/messages.user.search_users')); - Assert::notEmpty($search, 'Search term should be an email address, got: %s.'); + Assert::notEmpty($search, 'O termo de pesquisa deve ser um endereço de e-mail, obtido: %s.'); $results = User::query() ->where('id', 'LIKE', "$search%") diff --git a/app/Console/Commands/User/DisableTwoFactorCommand.php b/app/Console/Commands/User/DisableTwoFactorCommand.php index 6e7819491..bf8f5ca0a 100644 --- a/app/Console/Commands/User/DisableTwoFactorCommand.php +++ b/app/Console/Commands/User/DisableTwoFactorCommand.php @@ -7,9 +7,9 @@ class DisableTwoFactorCommand extends Command { - protected $description = 'Disable two-factor authentication for a specific user in the Panel.'; + protected $description = 'Desative a autenticação de dois fatores para um usuário específico no Painel.'; - protected $signature = 'p:user:disable2fa {--email= : The email of the user to disable 2-Factor for.}'; + protected $signature = 'p:user:disable2fa {--email= : O e-mail do usuário para o qual desabilitar o 2-Factor.}'; /** * DisableTwoFactorCommand constructor. diff --git a/app/Console/Commands/User/MakeUserCommand.php b/app/Console/Commands/User/MakeUserCommand.php index 2eda1d887..17da0b389 100644 --- a/app/Console/Commands/User/MakeUserCommand.php +++ b/app/Console/Commands/User/MakeUserCommand.php @@ -7,7 +7,7 @@ class MakeUserCommand extends Command { - protected $description = 'Creates a user on the system via the CLI.'; + protected $description = 'Cria um usuário no sistema via CLI.'; protected $signature = 'p:user:make {--email=} {--username=} {--name-first=} {--name-last=} {--password=} {--admin=} {--no-password}'; diff --git a/app/Console/RequiresDatabaseMigrations.php b/app/Console/RequiresDatabaseMigrations.php index 6013027f2..e2bf9e132 100644 --- a/app/Console/RequiresDatabaseMigrations.php +++ b/app/Console/RequiresDatabaseMigrations.php @@ -38,18 +38,18 @@ protected function showMigrationWarning(): void $this->getOutput()->writeln(' | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | | | -| Your database has not been properly migrated! | +| Seu banco de dados não foi devidamente migrado! | | | | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | -You must run the following command to finish migrating your database: +Você deve executar o seguinte comando para finalizar a migração de seu banco de dados: php artisan migrate --step --force -You will not be able to use Jexactyl Panel as expected without fixing your -database state by running the command above. + Você não poderá usar o Painel Jexactyl como esperado sem fixar seu + de banco de dados, executando o comando acima. '); - $this->getOutput()->error('You must correct the error above before continuing.'); + $this->getOutput()->error('Você deve corrigir o erro acima antes de continuar.'); } } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 28998d946..b86871611 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -198,7 +198,7 @@ protected function convertExceptionToArray(\Throwable $e, array $override = []): : strval($match ?? '500'), 'detail' => $e instanceof HttpExceptionInterface || !is_null($match) ? $e->getMessage() - : 'An unexpected error was encountered while processing this request, please try again.', + : 'Um erro inesperado foi encontrado ao processar esta solicitação, tente novamente.', ]; if ($e instanceof ModelNotFoundException || $e->getPrevious() instanceof ModelNotFoundException) { diff --git a/app/Exceptions/Http/Connection/DaemonConnectionException.php b/app/Exceptions/Http/Connection/DaemonConnectionException.php index 056face57..47cd78faa 100644 --- a/app/Exceptions/Http/Connection/DaemonConnectionException.php +++ b/app/Exceptions/Http/Connection/DaemonConnectionException.php @@ -45,16 +45,16 @@ public function __construct(GuzzleException $previous, bool $useStatusCode = tru } if (is_null($response)) { - $message = 'Could not establish a connection to the machine running this server. Please try again.'; + $message = 'Não foi possível estabelecer uma conexão com a máquina que executa este servidor. Tente novamente.'; } else { - $message = sprintf('There was an error while communicating with the machine running this server. This error has been logged, please try again. (code: %s) (request_id: %s)', $response->getStatusCode(), $this->requestId ?? ''); + $message = sprintf('Ocorreu um erro ao comunicar com a máquina que executa este servidor. Este erro foi registrado, por favor, tente novamente. (code: %s) (request_id: %s)', $response->getStatusCode(), $this->requestId ?? ''); } // Attempt to pull the actual error message off the response and return that if it is not // a 500 level error. if ($this->statusCode < 500 && !is_null($response)) { $body = json_decode($response->getBody()->__toString(), true); - $message = sprintf('An error occurred on the remote host: %s. (request id: %s)', $body['error'] ?? $message, $this->requestId ?? ''); + $message = sprintf('Ocorreu um erro no host remoto: %s. (request id: %s)', $body['error'] ?? $message, $this->requestId ?? ''); } $level = $this->statusCode >= 500 && $this->statusCode !== 504 diff --git a/app/Exceptions/Http/Server/FileSizeTooLargeException.php b/app/Exceptions/Http/Server/FileSizeTooLargeException.php index 72e918557..d9f1814f2 100644 --- a/app/Exceptions/Http/Server/FileSizeTooLargeException.php +++ b/app/Exceptions/Http/Server/FileSizeTooLargeException.php @@ -11,6 +11,6 @@ class FileSizeTooLargeException extends DisplayException */ public function __construct() { - parent::__construct('The file you are attempting to open is too large to view in the file editor.'); + parent::__construct('O arquivo que você está tentando abrir é muito grande para ser exibido no editor de arquivos.'); } } diff --git a/app/Exceptions/Http/Server/ServerStateConflictException.php b/app/Exceptions/Http/Server/ServerStateConflictException.php index e7a46d707..0777a39cc 100644 --- a/app/Exceptions/Http/Server/ServerStateConflictException.php +++ b/app/Exceptions/Http/Server/ServerStateConflictException.php @@ -13,17 +13,17 @@ class ServerStateConflictException extends ConflictHttpException */ public function __construct(Server $server, \Throwable $previous = null) { - $message = 'This server is currently in an unsupported state, please try again later.'; + $message = 'Este servidor está atualmente em um estado sem suporte, tente novamente mais tarde.'; if ($server->isSuspended()) { - $message = 'This server is currently suspended and the functionality requested is unavailable.'; + $message = 'Este servidor está suspenso no momento e a funcionalidade solicitada não está disponível.'; } elseif ($server->node->isUnderMaintenance()) { - $message = 'The node of this server is currently under maintenance and the functionality requested is unavailable.'; + $message = 'O node deste servidor está atualmente em manutenção e a funcionalidade solicitada não está disponível.'; } elseif (!$server->isInstalled()) { - $message = 'This server has not yet completed its installation process, please try again later.'; + $message = 'Este servidor ainda não concluiu o processo de instalação, por favor, tente novamente mais tarde.'; } elseif ($server->status === Server::STATUS_RESTORING_BACKUP) { - $message = 'This server is currently restoring from a backup, please try again later.'; + $message = 'Este servidor está restaurando a partir de um backup, tente novamente mais tarde.'; } elseif (!is_null($server->transfer)) { - $message = 'This server is currently being transferred to a new machine, please try again later.'; + $message = 'Este servidor está sendo transferido para uma nova máquina, tente novamente mais tarde.'; } parent::__construct($message, $previous); diff --git a/app/Exceptions/Http/TwoFactorAuthRequiredException.php b/app/Exceptions/Http/TwoFactorAuthRequiredException.php index 68922d04c..71e103758 100644 --- a/app/Exceptions/Http/TwoFactorAuthRequiredException.php +++ b/app/Exceptions/Http/TwoFactorAuthRequiredException.php @@ -13,6 +13,6 @@ class TwoFactorAuthRequiredException extends HttpException implements HttpExcept */ public function __construct(\Throwable $previous = null) { - parent::__construct(Response::HTTP_BAD_REQUEST, 'Two-factor authentication is required on this account in order to access this endpoint.', $previous); + parent::__construct(Response::HTTP_BAD_REQUEST, 'A autenticação de dois fatores é necessária nessa conta para acessar esse ponto de extremidade.', $previous); } } diff --git a/app/Exceptions/Model/DataValidationException.php b/app/Exceptions/Model/DataValidationException.php index 8101e829b..1b3afe2c9 100644 --- a/app/Exceptions/Model/DataValidationException.php +++ b/app/Exceptions/Model/DataValidationException.php @@ -17,7 +17,7 @@ class DataValidationException extends JexactylException implements HttpException public function __construct(protected Validator $validator, protected Model $model) { $message = sprintf( - 'Could not save %s[%s]: failed to validate data: %s', + 'Não foi possível salvar %s[%s]: não conseguiu validar os dados: %s', get_class($model), $model->getKey(), $validator->errors()->toJson() diff --git a/app/Exceptions/Service/Backup/BackupLockedException.php b/app/Exceptions/Service/Backup/BackupLockedException.php index 80b587e76..6c33ce4be 100644 --- a/app/Exceptions/Service/Backup/BackupLockedException.php +++ b/app/Exceptions/Service/Backup/BackupLockedException.php @@ -11,6 +11,6 @@ class BackupLockedException extends DisplayException */ public function __construct() { - parent::__construct('Cannot delete a backup that is marked as locked.'); + parent::__construct('Não é possível excluir um backup marcado como bloqueado.'); } } diff --git a/app/Exceptions/Service/Backup/TooManyBackupsException.php b/app/Exceptions/Service/Backup/TooManyBackupsException.php index 8a6f0df64..5b34fdf28 100644 --- a/app/Exceptions/Service/Backup/TooManyBackupsException.php +++ b/app/Exceptions/Service/Backup/TooManyBackupsException.php @@ -12,7 +12,7 @@ class TooManyBackupsException extends DisplayException public function __construct(int $backupLimit) { parent::__construct( - sprintf('Cannot create a new backup, this server has reached its limit of %d backups.', $backupLimit) + sprintf('Não é possível criar um novo backup, este servidor atingiu seu limite de %d backups.', $backupLimit) ); } } diff --git a/app/Exceptions/Service/Database/DatabaseClientFeatureNotEnabledException.php b/app/Exceptions/Service/Database/DatabaseClientFeatureNotEnabledException.php index 394b87bc3..dcc84e61f 100644 --- a/app/Exceptions/Service/Database/DatabaseClientFeatureNotEnabledException.php +++ b/app/Exceptions/Service/Database/DatabaseClientFeatureNotEnabledException.php @@ -8,6 +8,6 @@ class DatabaseClientFeatureNotEnabledException extends JexactylException { public function __construct() { - parent::__construct('Client database creation is not enabled in this Panel.'); + parent::__construct('A criação do banco de dados do cliente não está habilitada neste painel.'); } } diff --git a/app/Exceptions/Service/Database/NoSuitableDatabaseHostException.php b/app/Exceptions/Service/Database/NoSuitableDatabaseHostException.php index be33e1882..fac321f0d 100644 --- a/app/Exceptions/Service/Database/NoSuitableDatabaseHostException.php +++ b/app/Exceptions/Service/Database/NoSuitableDatabaseHostException.php @@ -11,6 +11,6 @@ class NoSuitableDatabaseHostException extends DisplayException */ public function __construct() { - parent::__construct('No database host was found that meets the requirements for this server.'); + parent::__construct('Nenhum host de database foi encontrado que atenda aos requisitos para este servidor.'); } } diff --git a/app/Exceptions/Service/Database/TooManyDatabasesException.php b/app/Exceptions/Service/Database/TooManyDatabasesException.php index 62ac9def9..ed40ee5d9 100644 --- a/app/Exceptions/Service/Database/TooManyDatabasesException.php +++ b/app/Exceptions/Service/Database/TooManyDatabasesException.php @@ -8,6 +8,6 @@ class TooManyDatabasesException extends DisplayException { public function __construct() { - parent::__construct('Operation aborted: creating a new database would put this server over the defined limit.'); + parent::__construct('Operação abortada: a criação de um novo banco de dados colocaria este servidor acima do limite definido.'); } } diff --git a/app/Exceptions/Service/User/TwoFactorAuthenticationTokenInvalid.php b/app/Exceptions/Service/User/TwoFactorAuthenticationTokenInvalid.php index 6a1da9fbc..f20e44346 100644 --- a/app/Exceptions/Service/User/TwoFactorAuthenticationTokenInvalid.php +++ b/app/Exceptions/Service/User/TwoFactorAuthenticationTokenInvalid.php @@ -11,6 +11,6 @@ class TwoFactorAuthenticationTokenInvalid extends DisplayException */ public function __construct() { - parent::__construct('The provided two-factor authentication token was not valid.'); + parent::__construct('O token de autenticação de dois fatores fornecido não era válido'); } } diff --git a/app/Extensions/Backups/BackupManager.php b/app/Extensions/Backups/BackupManager.php index bc4fb3d8b..c58add623 100644 --- a/app/Extensions/Backups/BackupManager.php +++ b/app/Extensions/Backups/BackupManager.php @@ -69,7 +69,7 @@ protected function resolve(string $name): FilesystemAdapter $config = $this->getConfig($name); if (empty($config['adapter'])) { - throw new \InvalidArgumentException("Backup disk [$name] does not have a configured adapter."); + throw new \InvalidArgumentException("O disco de backup [$name] não tem um adaptador configurado."); } $adapter = $config['adapter']; @@ -87,7 +87,7 @@ protected function resolve(string $name): FilesystemAdapter return $instance; } - throw new \InvalidArgumentException("Adapter [$adapter] is not supported."); + throw new \InvalidArgumentException("Adaptador [$adapter] não é suportado."); } /** diff --git a/app/Helpers/Time.php b/app/Helpers/Time.php index 28432643d..2db564c48 100644 --- a/app/Helpers/Time.php +++ b/app/Helpers/Time.php @@ -15,7 +15,7 @@ final class Time */ public static function getMySQLTimezoneOffset(string $timezone): string { - $offset = round(CarbonImmutable::now($timezone)->getTimezone()->getOffset(CarbonImmutable::now('UTC')) / 3600); + $offset = round(CarbonImmutable::now($timezone)->getTimezone()->getOffset(CarbonImmutable::now('America/Sao_Paulo')) / 3600); return sprintf('%s%s:00', $offset > 0 ? '+' : '-', str_pad((string) abs($offset), 2, '0', STR_PAD_LEFT)); } diff --git a/app/Http/Controllers/Admin/ApiController.php b/app/Http/Controllers/Admin/ApiController.php index f4f69418c..8b47badee 100644 --- a/app/Http/Controllers/Admin/ApiController.php +++ b/app/Http/Controllers/Admin/ApiController.php @@ -70,7 +70,7 @@ public function store(StoreApplicationApiKeyRequest $request): RedirectResponse 'user_id' => $request->user()->id, ], $request->getKeyPermissions()); - $this->alert->success('A new application API key has been generated for your account.')->flash(); + $this->alert->success('Uma nova chave de API de aplicativo foi gerada para sua conta..')->flash(); return redirect()->route('admin.api.index'); } diff --git a/app/Http/Controllers/Admin/DatabaseController.php b/app/Http/Controllers/Admin/DatabaseController.php index db93a3988..9c3fe581b 100644 --- a/app/Http/Controllers/Admin/DatabaseController.php +++ b/app/Http/Controllers/Admin/DatabaseController.php @@ -71,7 +71,7 @@ public function create(DatabaseHostFormRequest $request): RedirectResponse } catch (\Exception $exception) { if ($exception instanceof \PDOException || $exception->getPrevious() instanceof \PDOException) { $this->alert->danger( - sprintf('There was an error while trying to connect to the host or while executing a query: "%s"', $exception->getMessage()) + sprintf('Ocorreu um erro ao tentar conectar-se ao host ou ao executar uma consulta: "%s"', $exception->getMessage()) )->flash(); return redirect()->route('admin.databases')->withInput($request->validated()); @@ -80,7 +80,7 @@ public function create(DatabaseHostFormRequest $request): RedirectResponse } } - $this->alert->success('Successfully created a new database host on the system.')->flash(); + $this->alert->success('Um nova host de database foi criado com sucesso no sistema.')->flash(); return redirect()->route('admin.databases.view', $host->id); } @@ -96,13 +96,13 @@ public function update(DatabaseHostFormRequest $request, DatabaseHost $host): Re try { $this->updateService->handle($host->id, $request->normalize()); - $this->alert->success('Database host was updated successfully.')->flash(); + $this->alert->success('O banco de dados hospedeiro foi atualizado com sucesso.')->flash(); } catch (\Exception $exception) { // Catch any SQL related exceptions and display them back to the user, otherwise just // throw the exception like normal and move on with it. if ($exception instanceof \PDOException || $exception->getPrevious() instanceof \PDOException) { $this->alert->danger( - sprintf('There was an error while trying to connect to the host or while executing a query: "%s"', $exception->getMessage()) + sprintf('Ocorreu um erro ao tentar conectar-se ao host ou ao executar uma consulta: "%s"', $exception->getMessage()) )->flash(); return $redirect->withInput($request->normalize()); @@ -122,7 +122,7 @@ public function update(DatabaseHostFormRequest $request, DatabaseHost $host): Re public function delete(int $host): RedirectResponse { $this->deletionService->handle($host); - $this->alert->success('The requested database host has been deleted from the system.')->flash(); + $this->alert->success('O host do database solicitado foi excluído do sistema.')->flash(); return redirect()->route('admin.databases'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/AdvancedController.php b/app/Http/Controllers/Admin/Jexactyl/AdvancedController.php index 68fdd31bf..a8026dcb0 100644 --- a/app/Http/Controllers/Admin/Jexactyl/AdvancedController.php +++ b/app/Http/Controllers/Admin/Jexactyl/AdvancedController.php @@ -57,7 +57,7 @@ public function update(AdvancedFormRequest $request): RedirectResponse } $this->kernel->call('queue:restart'); - $this->alert->success('Advanced settings have been updated successfully and the queue worker was restarted to apply these changes.')->flash(); + $this->alert->success('As configurações avançadas foram atualizadas com sucesso e o trabalhador da Queue foi reiniciado para aplicar essas alterações.')->flash(); return redirect()->route('admin.jexactyl.advanced'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/AlertsController.php b/app/Http/Controllers/Admin/Jexactyl/AlertsController.php index 72ab289f0..886cbf7a5 100644 --- a/app/Http/Controllers/Admin/Jexactyl/AlertsController.php +++ b/app/Http/Controllers/Admin/Jexactyl/AlertsController.php @@ -44,7 +44,7 @@ public function update(AlertFormRequest $request): RedirectResponse $this->settings->set('jexactyl::' . $key, $value); } - $this->alert->success('Jexactyl Alert has been updated.')->flash(); + $this->alert->success('Alerta Jexactyl foi atualizado.')->flash(); return redirect()->route('admin.jexactyl.alerts'); } @@ -57,7 +57,7 @@ public function remove(): RedirectResponse $this->settings->forget('jexactyl::alert:type'); $this->settings->forget('jexactyl::alert:message'); - $this->alert->success('Jexactyl Alert has been removed.')->flash(); + $this->alert->success('Alerta Jexactyl foi removido.')->flash(); return redirect()->route('admin.jexactyl.alerts'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/AppearanceController.php b/app/Http/Controllers/Admin/Jexactyl/AppearanceController.php index b7ef96705..f30d65ead 100644 --- a/app/Http/Controllers/Admin/Jexactyl/AppearanceController.php +++ b/app/Http/Controllers/Admin/Jexactyl/AppearanceController.php @@ -35,6 +35,7 @@ public function index(): View 'admin' => config('theme.admin'), 'user' => ['background' => config('theme.user.background')], + 'tema' => config('sidebar.tema'), ]); } @@ -49,7 +50,7 @@ public function update(AppearanceFormRequest $request): RedirectResponse $this->settings->set('settings::' . $key, $value); } - $this->alert->success('Jexactyl Appearance has been updated.')->flash(); + $this->alert->success('A aparência de Jexactyl foi atualizada.')->flash(); return redirect()->route('admin.jexactyl.appearance'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/ApprovalsController.php b/app/Http/Controllers/Admin/Jexactyl/ApprovalsController.php index bf8411590..b7b23c216 100644 --- a/app/Http/Controllers/Admin/Jexactyl/ApprovalsController.php +++ b/app/Http/Controllers/Admin/Jexactyl/ApprovalsController.php @@ -48,7 +48,7 @@ public function update(ApprovalFormRequest $request): RedirectResponse $this->settings->set('jexactyl::approvals:' . $key, $value); } - $this->alert->success('Jexactyl Approval settings have been updated.')->flash(); + $this->alert->success('As configurações de aprovação do Jexactyl foram atualizadas.')->flash(); return redirect()->route('admin.jexactyl.approvals'); } @@ -64,11 +64,11 @@ public function bulkAction(Request $request, string $action): RedirectResponse try { User::query()->where('approved', false)->delete(); } catch (DisplayException $ex) { - throw new DisplayException('Unable to complete action: ' . $ex->getMessage()); + throw new DisplayException('Incapaz de completar a ação: ' . $ex->getMessage()); } } - $this->alert->success('All users have been ' . $action === 'approve' ? 'approved ' : 'denied successfully.')->flash(); + $this->alert->success('Todos os usuários foram ' . $action === 'approve' ? 'approved ' : 'negados com sucesso.')->flash(); return redirect()->route('admin.jexactyl.approvals'); } @@ -82,7 +82,7 @@ public function approve(Request $request, int $id): RedirectResponse $user->update(['approved' => true]); // This gives the user access to the frontend. - $this->alert->success($user->username . ' has been approved.')->flash(); + $this->alert->success($user->username . ' Foi aprovado.')->flash(); return redirect()->route('admin.jexactyl.approvals'); } @@ -97,7 +97,7 @@ public function deny(Request $request, int $id): RedirectResponse // While typically we should look for associated servers, there // shouldn't be any present - as the user has been waiting for approval. - $this->alert->success($user->username . ' has been denied.')->flash(); + $this->alert->success($user->username . ' foi negado.')->flash(); return redirect()->route('admin.jexactyl.approvals'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/CouponsController.php b/app/Http/Controllers/Admin/Jexactyl/CouponsController.php index de86519d9..9be1dfbfe 100644 --- a/app/Http/Controllers/Admin/Jexactyl/CouponsController.php +++ b/app/Http/Controllers/Admin/Jexactyl/CouponsController.php @@ -39,7 +39,7 @@ public function update(IndexFormRequest $request): RedirectResponse $this->settings->set('jexactyl::coupons:' . $key, $value); } - $this->alert->success('The coupons system has been successfully updated.')->flash(); + $this->alert->success('O sistema de cupons foi atualizado com sucesso.')->flash(); return redirect()->route('admin.jexactyl.coupons'); } @@ -59,7 +59,7 @@ public function store(StoreFormRequest $request): RedirectResponse } if (Coupon::query()->where(['code' => $request->input('code')])->exists()) { - throw new DisplayException('You cannot create a coupon with an already existing code.'); + throw new DisplayException('Você não pode criar um cupom com um código já existente.'); } Coupon::query()->insert([ @@ -70,7 +70,7 @@ public function store(StoreFormRequest $request): RedirectResponse 'cr_amount' => $request->input('credits'), ]); - $this->alert->success('Successfully created a coupon.')->flash(); + $this->alert->success('Criou com sucesso um cupom.')->flash(); return redirect()->route('admin.jexactyl.coupons'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/IndexController.php b/app/Http/Controllers/Admin/Jexactyl/IndexController.php index eb78aff58..e5eca02a0 100644 --- a/app/Http/Controllers/Admin/Jexactyl/IndexController.php +++ b/app/Http/Controllers/Admin/Jexactyl/IndexController.php @@ -83,7 +83,7 @@ public function update(BaseSettingsFormRequest $request): RedirectResponse $this->settings->set('jexactyl::' . $key, $value); } - $this->alert->success('Jexactyl Settings have been updated.')->flash(); + $this->alert->success('As configurações do Jexactyl foram atualizadas.')->flash(); return redirect()->route('admin.settings'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/MailController.php b/app/Http/Controllers/Admin/Jexactyl/MailController.php index c5cfc12ae..243dfa2c7 100644 --- a/app/Http/Controllers/Admin/Jexactyl/MailController.php +++ b/app/Http/Controllers/Admin/Jexactyl/MailController.php @@ -52,7 +52,7 @@ public function index(): View public function update(MailFormRequest $request): Response { if ($this->config->get('mail.default') !== 'smtp') { - throw new DisplayException('This feature is only available if SMTP is the selected email driver for the Panel.'); + throw new DisplayException('Este recurso só está disponível se SMTP for o driver de e-mail selecionado para o Painel.'); } $values = $request->normalize(); diff --git a/app/Http/Controllers/Admin/Jexactyl/ReferralsController.php b/app/Http/Controllers/Admin/Jexactyl/ReferralsController.php index c961c85f7..4e6107eb9 100644 --- a/app/Http/Controllers/Admin/Jexactyl/ReferralsController.php +++ b/app/Http/Controllers/Admin/Jexactyl/ReferralsController.php @@ -43,7 +43,7 @@ public function update(ReferralsFormRequest $request): RedirectResponse $this->settings->set('jexactyl::referrals:' . $key, $value); } - $this->alert->success('Referral system has been updated.')->flash(); + $this->alert->success('O sistema de referência foi atualizado.')->flash(); return redirect()->route('admin.jexactyl.referrals'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/RegistrationController.php b/app/Http/Controllers/Admin/Jexactyl/RegistrationController.php index 1612f9e40..37ffcb845 100644 --- a/app/Http/Controllers/Admin/Jexactyl/RegistrationController.php +++ b/app/Http/Controllers/Admin/Jexactyl/RegistrationController.php @@ -55,7 +55,7 @@ public function update(RegistrationFormRequest $request): RedirectResponse $this->settings->set('jexactyl::' . $key, $value); } - $this->alert->success('Jexactyl Registration has been updated.')->flash(); + $this->alert->success('O registro do Jexactyl foi atualizado.')->flash(); return redirect()->route('admin.jexactyl.registration'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/ServerController.php b/app/Http/Controllers/Admin/Jexactyl/ServerController.php index cec6b341b..bed87dffc 100644 --- a/app/Http/Controllers/Admin/Jexactyl/ServerController.php +++ b/app/Http/Controllers/Admin/Jexactyl/ServerController.php @@ -48,7 +48,7 @@ public function update(ServerFormRequest $request): RedirectResponse $this->settings->set('jexactyl::renewal:' . $key, $value); } - $this->alert->success('Jexactyl Server settings has been updated.')->flash(); + $this->alert->success('As configurações do Jexactyl Servidor foram atualizadas.')->flash(); return redirect()->route('admin.jexactyl.server'); } diff --git a/app/Http/Controllers/Admin/Jexactyl/StoreController.php b/app/Http/Controllers/Admin/Jexactyl/StoreController.php index 113b9754d..f6a6fbe86 100644 --- a/app/Http/Controllers/Admin/Jexactyl/StoreController.php +++ b/app/Http/Controllers/Admin/Jexactyl/StoreController.php @@ -38,7 +38,7 @@ public function index(): View 'enabled' => $this->settings->get($prefix . 'enabled', false), 'paypal_enabled' => $this->settings->get($prefix . 'paypal:enabled', false), 'stripe_enabled' => $this->settings->get($prefix . 'stripe:enabled', false), - 'selected_currency' => $this->settings->get($prefix . 'currency', 'USD'), + 'selected_currency' => $this->settings->get($prefix . 'currency', 'BRL'), 'currencies' => $currencies, 'earn_enabled' => $this->settings->get('jexactyl::earn:enabled', false), @@ -73,7 +73,7 @@ public function update(StoreFormRequest $request): RedirectResponse $this->settings->set('jexactyl::' . $key, $value); } - $this->alert->success('If you have enabled a payment gateway, please remember to configure them. Documentation')->flash(); + $this->alert->success('Se você tiver ativado um gateway de pagamento, lembre-se de configurá-los. Documentação')->flash(); return redirect()->route('admin.jexactyl.store'); } diff --git a/app/Http/Controllers/Admin/LocationController.php b/app/Http/Controllers/Admin/LocationController.php index 510065cb3..817f00265 100644 --- a/app/Http/Controllers/Admin/LocationController.php +++ b/app/Http/Controllers/Admin/LocationController.php @@ -60,7 +60,7 @@ public function view(int $id): View public function create(LocationFormRequest $request): RedirectResponse { $location = $this->creationService->handle($request->normalize()); - $this->alert->success('Location was created successfully.')->flash(); + $this->alert->success('O local foi criado com sucesso.')->flash(); return redirect()->route('admin.locations.view', $location->id); } @@ -77,7 +77,7 @@ public function update(LocationFormRequest $request, Location $location): Redire } $this->updateService->handle($location->id, $request->normalize()); - $this->alert->success('Location was updated successfully.')->flash(); + $this->alert->success('A localização foi atualizada com sucesso.')->flash(); return redirect()->route('admin.locations.view', $location->id); } diff --git a/app/Http/Controllers/Admin/MountController.php b/app/Http/Controllers/Admin/MountController.php index 96df2036f..dd0aca06d 100644 --- a/app/Http/Controllers/Admin/MountController.php +++ b/app/Http/Controllers/Admin/MountController.php @@ -72,7 +72,7 @@ public function create(MountFormRequest $request): RedirectResponse $model->saveOrFail(); $mount = $model->fresh(); - $this->alert->success('Mount was created successfully.')->flash(); + $this->alert->success('A montagem foi criada com sucesso.')->flash(); return redirect()->route('admin.mounts.view', $mount->id); } @@ -90,7 +90,7 @@ public function update(MountFormRequest $request, Mount $mount): RedirectRespons $mount->forceFill($request->validated())->save(); - $this->alert->success('Mount was updated successfully.')->flash(); + $this->alert->success('A montagem foi atualizada com sucesso.')->flash(); return redirect()->route('admin.mounts.view', $mount->id); } @@ -121,7 +121,7 @@ public function addEggs(Request $request, Mount $mount): RedirectResponse $mount->eggs()->attach($eggs); } - $this->alert->success('Mount was updated successfully.')->flash(); + $this->alert->success('A montagem foi atualizada com sucesso.')->flash(); return redirect()->route('admin.mounts.view', $mount->id); } @@ -138,7 +138,7 @@ public function addNodes(Request $request, Mount $mount): RedirectResponse $mount->nodes()->attach($nodes); } - $this->alert->success('Mount was updated successfully.')->flash(); + $this->alert->success('A montagem foi atualizada com sucesso.')->flash(); return redirect()->route('admin.mounts.view', $mount->id); } diff --git a/app/Http/Controllers/Admin/NodeAutoDeployController.php b/app/Http/Controllers/Admin/NodeAutoDeployController.php index 2c86dae74..cb2e6d26f 100644 --- a/app/Http/Controllers/Admin/NodeAutoDeployController.php +++ b/app/Http/Controllers/Admin/NodeAutoDeployController.php @@ -49,7 +49,7 @@ public function __invoke(Request $request, Node $node): JsonResponse if (!$key) { $key = $this->keyCreationService->setKeyType(ApiKey::TYPE_APPLICATION)->handle([ 'user_id' => $request->user()->id, - 'memo' => 'Automatically generated node deployment key.', + 'memo' => 'Chave de implantação de node gerada automaticamente.', 'allowed_ips' => [], ], ['r_nodes' => 1]); } diff --git a/app/Http/Controllers/Admin/Servers/ServerViewController.php b/app/Http/Controllers/Admin/Servers/ServerViewController.php index a3392d27e..7cc72f73d 100644 --- a/app/Http/Controllers/Admin/Servers/ServerViewController.php +++ b/app/Http/Controllers/Admin/Servers/ServerViewController.php @@ -123,7 +123,7 @@ public function mounts(Request $request, Server $server): View public function manage(Request $request, Server $server): View { if ($server->status === Server::STATUS_INSTALL_FAILED) { - throw new DisplayException('This server is in a failed install state and cannot be recovered. Please delete and re-create the server.'); + throw new DisplayException('Este servidor está em um estado de instalação com falha e não pode ser recuperado. Exclua e recrie o servidor.'); } // Check if the panel doesn't have at least 2 nodes configured. diff --git a/app/Http/Controllers/Admin/ServersController.php b/app/Http/Controllers/Admin/ServersController.php index ef4f5310e..509c744f2 100644 --- a/app/Http/Controllers/Admin/ServersController.php +++ b/app/Http/Controllers/Admin/ServersController.php @@ -258,7 +258,7 @@ public function addMount(Request $request, Server $server): RedirectResponse $mountServer->saveOrFail(); - $this->alert->success('Mount was added successfully.')->flash(); + $this->alert->success('A montagem foi adicionada com sucesso.')->flash(); return redirect()->route('admin.servers.view.mounts', $server->id); } @@ -270,7 +270,7 @@ public function deleteMount(Server $server, Mount $mount): RedirectResponse { MountServer::where('mount_id', $mount->id)->where('server_id', $server->id)->delete(); - $this->alert->success('Mount was removed successfully.')->flash(); + $this->alert->success('A montagem foi removida com sucesso.')->flash(); return redirect()->route('admin.servers.view.mounts', $server->id); } diff --git a/app/Http/Controllers/Admin/TicketsController.php b/app/Http/Controllers/Admin/TicketsController.php index 64350f34d..06fc659f3 100644 --- a/app/Http/Controllers/Admin/TicketsController.php +++ b/app/Http/Controllers/Admin/TicketsController.php @@ -68,7 +68,7 @@ public function status(TicketStatusRequest $request, int $id): RedirectResponse TicketMessage::create([ 'user_id' => 0, 'ticket_id' => $id, - 'content' => 'Ticket status has been set to ' . $request->input('status'), + 'content' => 'Status do Ticket foi definido para ' . $request->input('status'), ]); return redirect()->route('admin.tickets.view', $id); @@ -96,7 +96,7 @@ public function delete(int $id): RedirectResponse Ticket::findOrFail($id)->delete(); TicketMessage::where('ticket_id', $id)->delete(); - $this->alert->success('Ticket ' . $id . ' has been deleted.')->flash(); + $this->alert->success('Ticket ' . $id . ' foi excluído.')->flash(); return redirect()->route('admin.tickets.index'); } diff --git a/app/Http/Controllers/Admin/Users/ResourceController.php b/app/Http/Controllers/Admin/Users/ResourceController.php index 599162152..fc1ed79b9 100644 --- a/app/Http/Controllers/Admin/Users/ResourceController.php +++ b/app/Http/Controllers/Admin/Users/ResourceController.php @@ -41,7 +41,7 @@ public function update(ResourceFormRequest $request, User $user): RedirectRespon ->setUserLevel(User::USER_LEVEL_ADMIN) ->handle($user, $request->normalize()); - $this->alert->success('User resources have been updated.')->flash(); + $this->alert->success('Os recursos do usuário foram atualizados.')->flash(); return redirect()->route('admin.users.resources', $user->id); } diff --git a/app/Http/Controllers/Api/Client/AccountController.php b/app/Http/Controllers/Api/Client/AccountController.php index 5e04f9254..94d9b4c8f 100644 --- a/app/Http/Controllers/Api/Client/AccountController.php +++ b/app/Http/Controllers/Api/Client/AccountController.php @@ -116,13 +116,13 @@ public function coupon(Request $request) $code = $request->input('code'); $coupon = Coupon::query()->where('code', $code)->first(); if (!$coupon) { - throw new DisplayException('Invalid coupon code specified.'); + throw new DisplayException('Código de cupom inválido especificado.'); } if ($coupon->getAttribute('expired')) { - throw new DisplayException('This coupon has expired.'); + throw new DisplayException('Este cupom expirou.'); } if ($coupon->getAttribute('uses') < 1) { - throw new DisplayException('This coupon has no uses left.'); + throw new DisplayException('Este cupom não tem mais uso.'); } $balance = $request->user()->store_balance; $request->user()->update(['store_balance' => $balance + $coupon->cr_amount]); diff --git a/app/Http/Controllers/Api/Client/ReferralsController.php b/app/Http/Controllers/Api/Client/ReferralsController.php index f76eae160..453694be5 100644 --- a/app/Http/Controllers/Api/Client/ReferralsController.php +++ b/app/Http/Controllers/Api/Client/ReferralsController.php @@ -48,7 +48,7 @@ public function activity(ClientApiRequest $request): array public function use(ClientApiRequest $request): JsonResponse { if ($request->user()->referral_code) { - throw new DisplayException('You have already used a referral code.'); + throw new DisplayException('Você já usou um código de referência.'); } $this->useService->handle($request); @@ -64,7 +64,7 @@ public function use(ClientApiRequest $request): JsonResponse public function store(ClientApiRequest $request): array { if ($request->user()->referralCodes->count() >= 5) { - throw new DisplayException('You cannot have more than 5 referral codes.'); + throw new DisplayException('Você não pode ter mais de 5 códigos de referência.'); } $code = $request->user()->referralCodes()->create([ diff --git a/app/Http/Controllers/Api/Client/Servers/ServerController.php b/app/Http/Controllers/Api/Client/Servers/ServerController.php index c504c8bf9..200682966 100644 --- a/app/Http/Controllers/Api/Client/Servers/ServerController.php +++ b/app/Http/Controllers/Api/Client/Servers/ServerController.php @@ -60,17 +60,17 @@ public function delete(DeleteServerRequest $request, Server $server): JsonRespon $user = $request->user(); if ($user->id != $server->owner_id) { - throw new DisplayException('You are not authorized to perform this action.'); + throw new DisplayException('Você não está autorizado a realizar esta ação.'); } if ($this->settings->get('jexactyl::renewal:deletion') != 'true') { - throw new DisplayException('This feature has been locked by administrators.'); + throw new DisplayException('Este recurso foi bloqueado pelos administradores.'); } try { $this->deletionService->returnResources(true)->handle($server); } catch (DisplayException $ex) { - throw new DisplayException('Unable to delete the server from the system.'); + throw new DisplayException('Incapaz de excluir o servidor do sistema.'); } return new JsonResponse([], Response::HTTP_NO_CONTENT); diff --git a/app/Http/Controllers/Api/Client/Store/PayPalController.php b/app/Http/Controllers/Api/Client/Store/PayPalController.php index c1f78b56f..b9ea18fd1 100644 --- a/app/Http/Controllers/Api/Client/Store/PayPalController.php +++ b/app/Http/Controllers/Api/Client/Store/PayPalController.php @@ -30,7 +30,7 @@ public function __construct() public function purchase(PayPalRequest $request): JsonResponse { if ($this->settings->get('jexactyl::store:paypal:enabled') != 'true') { - throw new DisplayException('Unable to purchase via PayPal: module not enabled'); + throw new DisplayException('Não é possível comprar via PayPal: módulo não ativado'); } $amount = $request->input('amount'); @@ -71,7 +71,7 @@ public function purchase(PayPalRequest $request): JsonResponse try { $response = $this->getClient()->execute($order); } catch (\Exception $ex) { - throw new DisplayException('Unable to process order.'); + throw new DisplayException('Incapaz de processar a ordem.'); } return new JsonResponse($response->result->links[1]->href ?? '/', 200, [], null, true); @@ -93,7 +93,7 @@ public function callback(Request $request): RedirectResponse try { $res = $this->getClient()->execute($order); } catch (DisplayException $ex) { - throw new DisplayException('Unable to process order.'); + throw new DisplayException('Não foi possível processar o pedido.'); } if ($res->statusCode == 200 || 201) { diff --git a/app/Http/Controllers/Api/Client/Store/ResourceController.php b/app/Http/Controllers/Api/Client/Store/ResourceController.php index cfba6eb81..3924946f2 100644 --- a/app/Http/Controllers/Api/Client/Store/ResourceController.php +++ b/app/Http/Controllers/Api/Client/Store/ResourceController.php @@ -64,13 +64,13 @@ public function earn(Request $request) $amount = $this->settings->get('jexactyl::earn:amount', 0); if ($this->settings->get('jexactyl::earn:enabled') != 'true') { - throw new DisplayException('Credit earning is currently disabled.'); + throw new DisplayException('A opção de crédito AFK está desativada no momento.'); } try { $request->user()->update(['store_balance' => $request->user()->store_balance + $amount]); } catch (DisplayException $ex) { - throw new DisplayException('Unable to passively earn coins.'); + throw new DisplayException('Incapaz de ganhar moedas AFK.'); } return new JsonResponse([], Response::HTTP_NO_CONTENT); diff --git a/app/Http/Controllers/Api/Client/Store/ServerController.php b/app/Http/Controllers/Api/Client/Store/ServerController.php index f2349e99e..85305ff52 100644 --- a/app/Http/Controllers/Api/Client/Store/ServerController.php +++ b/app/Http/Controllers/Api/Client/Store/ServerController.php @@ -71,11 +71,11 @@ public function store(CreateServerRequest $request): JsonResponse $fee = Node::find($request->input('node'))->deploy_fee; if (!$user->verified) { - throw new DisplayException('Server deployment is unavailable for unverified accounts.'); + throw new DisplayException('A implantação do servidor não está disponível para contas não verificadas.'); } if (Nest::find($request->input('nest'))->private) { - throw new DisplayException('This nest is private and cannot be deployed to.'); + throw new DisplayException('Este nest é privado e não pode ser implantado.'); } if ($user->store_slots < 1) { diff --git a/app/Http/Controllers/Api/Client/Store/StripeController.php b/app/Http/Controllers/Api/Client/Store/StripeController.php index 64357d2cb..ac218e7e1 100644 --- a/app/Http/Controllers/Api/Client/Store/StripeController.php +++ b/app/Http/Controllers/Api/Client/Store/StripeController.php @@ -22,13 +22,13 @@ public function __construct() public function purchase(StripeRequest $request): JsonResponse { if (!$this->settings->get('jexactyl::store:stripe:enabled')) { - throw new DisplayException('Unable to purchase via Stripe: module not enabled'); + throw new DisplayException('Não é possível comprar via Stripe: módulo não ativado'); } $client = new StripeClient(config('gateways.stripe.secret')); $amount = $request->input('amount'); $cost = number_format(config('gateways.stripe.cost', 1.00) / 100 * $amount, 2); - $currency = config('gateways.currency', 'USD'); + $currency = config('gateways.currency', 'BRL'); $checkout = $client->checkout->sessions->create([ 'success_url' => config('app.url') . '/store/credits', @@ -43,7 +43,7 @@ public function purchase(StripeRequest $request): JsonResponse 'currency' => $currency, 'unit_amount' => str_replace('.', '', $cost), 'product_data' => [ - 'name' => $amount . ' Credits | ' . $this->settings->get('settings::app:name'), + 'name' => $amount . ' Creditos | ' . $this->settings->get('settings::app:name'), ], ], ], diff --git a/app/Http/Controllers/Api/Client/TicketController.php b/app/Http/Controllers/Api/Client/TicketController.php index f0b108ff7..0fe11329b 100644 --- a/app/Http/Controllers/Api/Client/TicketController.php +++ b/app/Http/Controllers/Api/Client/TicketController.php @@ -63,7 +63,7 @@ public function new(ClientApiRequest $request): JsonResponse $total = Ticket::where('client_id', $user)->count(); if ($this->settings->get('jexactyl::tickets:max') <= $total) { - throw new DisplayException('You already have ' . $total . ' tickets open.'); + throw new DisplayException('Você já tem ' . $total . ' tickets abertos.'); } $model = Ticket::create([ diff --git a/app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php b/app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php index 33c9c596f..81455c113 100644 --- a/app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php +++ b/app/Http/Controllers/Api/Remote/Backups/BackupRemoteUploadController.php @@ -35,7 +35,7 @@ public function __invoke(Request $request, string $backup): JsonResponse // Get the size query parameter. $size = (int) $request->query('size'); if (empty($size)) { - throw new BadRequestHttpException('A non-empty "size" query parameter must be provided.'); + throw new BadRequestHttpException('Um parâmetro de consulta "Size"(tamanho) não vazio deve ser fornecido.'); } /** @var \Jexactyl\Models\Backup $backup */ @@ -44,13 +44,13 @@ public function __invoke(Request $request, string $backup): JsonResponse // Prevent backups that have already been completed from trying to // be uploaded again. if (!is_null($backup->completed_at)) { - throw new ConflictHttpException('This backup is already in a completed state.'); + throw new ConflictHttpException('Este backup já está em um estado concluído.'); } // Ensure we are using the S3 adapter. $adapter = $this->backupManager->adapter(); if (!$adapter instanceof S3Filesystem) { - throw new BadRequestHttpException('The configured backup adapter is not an S3 compatible adapter.'); + throw new BadRequestHttpException('O adaptador de backup configurado não é um adaptador compatível com S3.'); } // The path where backup will be uploaded to diff --git a/app/Http/Controllers/Api/Remote/Backups/BackupStatusController.php b/app/Http/Controllers/Api/Remote/Backups/BackupStatusController.php index 6b2a87e75..e185cceb0 100644 --- a/app/Http/Controllers/Api/Remote/Backups/BackupStatusController.php +++ b/app/Http/Controllers/Api/Remote/Backups/BackupStatusController.php @@ -34,7 +34,7 @@ public function index(ReportBackupCompleteRequest $request, string $backup): Jso $model = Backup::query()->where('uuid', $backup)->firstOrFail(); if ($model->is_successful) { - throw new BadRequestHttpException('Cannot update the status of a backup that is already marked as completed.'); + throw new BadRequestHttpException('Não é possível atualizar o status de um backup que já está marcado como concluído.'); } $action = $request->boolean('successful') ? 'server:backup.complete' : 'server:backup.fail'; @@ -109,7 +109,7 @@ protected function completeMultipartUpload(Backup $backup, S3Filesystem $adapter return; } - throw new DisplayException('Cannot complete backup request: no upload_id present on model.'); + throw new DisplayException('Não é possível concluir a solicitação de backup: nenhum upload_id presente no modelo.'); } $params = [ diff --git a/app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php b/app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php index 90ce5f9cd..8338fb723 100644 --- a/app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php +++ b/app/Http/Controllers/Api/Remote/Servers/ServerTransferController.php @@ -36,7 +36,7 @@ public function failure(string $uuid): JsonResponse $server = $this->repository->getByUuid($uuid); $transfer = $server->transfer; if (is_null($transfer)) { - throw new ConflictHttpException('Server is not being transferred.'); + throw new ConflictHttpException('O servidor não está sendo transferido.'); } return $this->processFailedTransfer($transfer); @@ -52,7 +52,7 @@ public function success(string $uuid): JsonResponse $server = $this->repository->getByUuid($uuid); $transfer = $server->transfer; if (is_null($transfer)) { - throw new ConflictHttpException('Server is not being transferred.'); + throw new ConflictHttpException('O servidor não está sendo transferido.'); } /** @var \Jexactyl\Models\Server $server */ diff --git a/app/Http/Controllers/Auth/LoginCheckpointController.php b/app/Http/Controllers/Auth/LoginCheckpointController.php index a6cc5ef31..7e34dfc2f 100644 --- a/app/Http/Controllers/Auth/LoginCheckpointController.php +++ b/app/Http/Controllers/Auth/LoginCheckpointController.php @@ -79,7 +79,7 @@ public function __invoke(LoginCheckpointRequest $request): JsonResponse } } - $this->sendFailedLoginResponse($request, $user, !empty($recoveryToken) ? 'The recovery token provided is not valid.' : null); + $this->sendFailedLoginResponse($request, $user, !empty($recoveryToken) ? 'O token de recuperação fornecido não é válido.' : null); } /** diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 23d249d97..1e75bd9e1 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -31,7 +31,7 @@ public function register(RegisterRequest $request): JsonResponse $prefix = 'jexactyl::registration:'; if ($this->settings->get($prefix . 'enabled') != 'true') { - throw new DisplayException('Unable to register user.'); + throw new DisplayException('Incapaz de registrar o usuário.'); } if (!$this->settings->get($prefix . 'verification')) { diff --git a/app/Http/Middleware/Api/Application/AuthenticateApplicationUser.php b/app/Http/Middleware/Api/Application/AuthenticateApplicationUser.php index ece866879..377a0a015 100644 --- a/app/Http/Middleware/Api/Application/AuthenticateApplicationUser.php +++ b/app/Http/Middleware/Api/Application/AuthenticateApplicationUser.php @@ -16,7 +16,7 @@ public function handle(Request $request, \Closure $next): mixed /** @var \Jexactyl\Models\User|null $user */ $user = $request->user(); if (!$user || !$user->root_admin) { - throw new AccessDeniedHttpException('This account does not have permission to access the API.'); + throw new AccessDeniedHttpException('Esta conta não tem permissão para acessar a API.'); } return $next($request); diff --git a/app/Http/Middleware/Api/AuthenticateIPAccess.php b/app/Http/Middleware/Api/AuthenticateIPAccess.php index 043e73fa3..63981cfa5 100644 --- a/app/Http/Middleware/Api/AuthenticateIPAccess.php +++ b/app/Http/Middleware/Api/AuthenticateIPAccess.php @@ -43,6 +43,6 @@ public function handle(Request $request, \Closure $next): mixed ->property('identifier', $token->identifier) ->log(); - throw new AccessDeniedHttpException('This IP address (' . $request->ip() . ') does not have permission to access the API using these credentials.'); + throw new AccessDeniedHttpException('Este endereço IP (' . $request->ip() . ') não tem permissão para acessar a API usando essas credenciais.'); } } diff --git a/app/Http/Middleware/Api/Client/RequireClientApiKey.php b/app/Http/Middleware/Api/Client/RequireClientApiKey.php index 367d3af1e..9c2b56f65 100644 --- a/app/Http/Middleware/Api/Client/RequireClientApiKey.php +++ b/app/Http/Middleware/Api/Client/RequireClientApiKey.php @@ -17,7 +17,7 @@ public function handle(Request $request, \Closure $next): mixed $token = $request->user()->currentAccessToken(); if ($token instanceof ApiKey && $token->key_type === ApiKey::TYPE_APPLICATION) { - throw new AccessDeniedHttpException('You are attempting to use an application API key on an endpoint that requires a client API key.'); + throw new AccessDeniedHttpException('Você está tentando usar uma chave de API do aplicativo em um terminal que requer uma chave de API do cliente.'); } return $next($request); diff --git a/app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php b/app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php index f3f2372cd..7c378bb86 100644 --- a/app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php +++ b/app/Http/Middleware/Api/Client/Server/ResourceBelongsToServer.php @@ -28,7 +28,7 @@ public function handle(Request $request, \Closure $next): mixed { $params = $request->route()->parameters(); if (is_null($params) || !$params['server'] instanceof Server) { - throw new \InvalidArgumentException('This middleware cannot be used in a context that is missing a server in the parameters.'); + throw new \InvalidArgumentException('Este middleware não pode ser usado em um contexto em que falta um servidor nos parâmetros.'); } /** @var \Jexactyl\Models\Server $server */ diff --git a/app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php b/app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php index 334a742f6..aa049efb3 100644 --- a/app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php +++ b/app/Http/Middleware/Api/Daemon/DaemonAuthenticate.php @@ -38,13 +38,13 @@ public function handle(Request $request, \Closure $next): mixed } if (is_null($bearer = $request->bearerToken())) { - throw new HttpException(401, 'Access to this endpoint must include an Authorization header.', null, ['WWW-Authenticate' => 'Bearer']); + throw new HttpException(401, 'O acesso a este endpoint deve incluir um cabeçalho de autorização.', null, ['WWW-Authenticate' => 'Bearer']); } $parts = explode('.', $bearer); // Ensure that all of the correct parts are provided in the header. if (count($parts) !== 2 || empty($parts[0]) || empty($parts[1])) { - throw new BadRequestHttpException('The Authorization header provided was not in a valid format.'); + throw new BadRequestHttpException('O cabeçalho de autorização fornecido não estava em um formato válido.'); } try { @@ -62,6 +62,6 @@ public function handle(Request $request, \Closure $next): mixed // Do nothing, we don't want to expose a node not existing at all. } - throw new AccessDeniedHttpException('You are not authorized to access this resource.'); + throw new AccessDeniedHttpException('Você não está autorizado a acessar este recurso.'); } } diff --git a/app/Http/Middleware/Api/IsValidJson.php b/app/Http/Middleware/Api/IsValidJson.php index 812d01a39..b8e7bded8 100644 --- a/app/Http/Middleware/Api/IsValidJson.php +++ b/app/Http/Middleware/Api/IsValidJson.php @@ -18,7 +18,7 @@ public function handle(Request $request, \Closure $next): mixed try { json_decode($request->getContent(), true, 512, JSON_THROW_ON_ERROR); } catch (\JsonException $exception) { - throw new BadRequestHttpException('The JSON data passed in the request appears to be malformed: ' . $exception->getMessage()); + throw new BadRequestHttpException('Os dados do JSON aprovados no pedido parecem estar malformados: ' . $exception->getMessage()); } } diff --git a/app/Http/Middleware/LanguageMiddleware.php b/app/Http/Middleware/LanguageMiddleware.php index 0705dff38..9b2e34a51 100644 --- a/app/Http/Middleware/LanguageMiddleware.php +++ b/app/Http/Middleware/LanguageMiddleware.php @@ -19,7 +19,7 @@ public function __construct(private Application $app) */ public function handle(Request $request, \Closure $next): mixed { - $this->app->setLocale($request->user()->language ?? config('app.locale', 'en')); + $this->app->setLocale($request->user()->language ?? config('app.locale', 'pt')); return $next($request); } diff --git a/app/Http/Requests/Admin/Jexactyl/AppearanceFormRequest.php b/app/Http/Requests/Admin/Jexactyl/AppearanceFormRequest.php index 382ec0c09..cdd2d78d4 100644 --- a/app/Http/Requests/Admin/Jexactyl/AppearanceFormRequest.php +++ b/app/Http/Requests/Admin/Jexactyl/AppearanceFormRequest.php @@ -10,9 +10,10 @@ public function rules(): array { return [ 'app:name' => 'required|string|max:191', - 'app:logo' => 'required|string|max:191', + 'app:logo' => 'string|nullable|max:191', 'theme:user:background' => 'nullable|url', 'theme:admin' => 'required|string|in:jexactyl,dark,light,blue,minecraft', + 'sidebar:tema' => 'required|string|in:sidejx,sidebr', ]; } } diff --git a/app/Http/Requests/Admin/Tickets/TicketStatusRequest.php b/app/Http/Requests/Admin/Tickets/TicketStatusRequest.php index 63c886a9d..5f0752c3d 100644 --- a/app/Http/Requests/Admin/Tickets/TicketStatusRequest.php +++ b/app/Http/Requests/Admin/Tickets/TicketStatusRequest.php @@ -13,7 +13,7 @@ class TicketStatusRequest extends AdminFormRequest public function rules(): array { return [ - 'status' => 'required|in:resolved,unresolved,pending,in-progress', + 'status' => 'required|in:resolvido,não-resolvido,pendente,em-andamento', ]; } } diff --git a/app/Http/ViewComposers/SettingComposer.php b/app/Http/ViewComposers/SettingComposer.php index 4a2f538c2..464a5ce22 100644 --- a/app/Http/ViewComposers/SettingComposer.php +++ b/app/Http/ViewComposers/SettingComposer.php @@ -24,7 +24,7 @@ public function compose(View $view): void $view->with('siteConfiguration', [ 'name' => config('app.name') ?? 'Jexactyl', - 'locale' => config('app.locale') ?? 'en', + 'locale' => config('app.locale') ?? 'pt', 'logo' => config('app.logo'), 'background' => config('theme.user.background'), diff --git a/app/Jobs/Schedule/RunTaskJob.php b/app/Jobs/Schedule/RunTaskJob.php index 381becf3f..a27a887eb 100644 --- a/app/Jobs/Schedule/RunTaskJob.php +++ b/app/Jobs/Schedule/RunTaskJob.php @@ -71,7 +71,7 @@ public function handle( $backupService->setIgnoredFiles(explode(PHP_EOL, $this->task->payload))->handle($server, null, true); break; default: - throw new \InvalidArgumentException('Invalid task action provided: ' . $this->task->action); + throw new \InvalidArgumentException('Tarefa inválida fornecida: ' . $this->task->action); } } catch (\Exception $exception) { // If this isn't a DaemonConnectionException on a task that allows for failures diff --git a/app/Models/ActivityLog.php b/app/Models/ActivityLog.php index a47177dc8..be64322bc 100644 --- a/app/Models/ActivityLog.php +++ b/app/Models/ActivityLog.php @@ -123,7 +123,7 @@ public function scopeForActor(Builder $builder, IlluminateModel $actor): Builder public function prunable() { if (is_null(config('activity.prune_days'))) { - throw new \LogicException('Cannot prune activity logs: no "prune_days" configuration value is set.'); + throw new \LogicException('Não é possível remover os logs de atividades: nenhum valor de configuração "prune_days" foi definido.'); } return static::where('timestamp', '<=', Carbon::now()->subDays(config('activity.prune_days'))); diff --git a/app/Models/Filters/MultiFieldServerFilter.php b/app/Models/Filters/MultiFieldServerFilter.php index 338f9378e..20c1acf5e 100644 --- a/app/Models/Filters/MultiFieldServerFilter.php +++ b/app/Models/Filters/MultiFieldServerFilter.php @@ -24,7 +24,7 @@ class MultiFieldServerFilter implements Filter public function __invoke(Builder $query, $value, string $property) { if ($query->getQuery()->from !== 'servers') { - throw new \BadMethodCallException('Cannot use the MultiFieldServerFilter against a non-server model.'); + throw new \BadMethodCallException('Não é possível utilizar o MultiFieldServerFilter contra um modelo não-servidor.'); } if (preg_match(self::IPV4_REGEX, $value) || preg_match('/^:\d{1,5}$/', $value)) { diff --git a/app/Models/Ticket.php b/app/Models/Ticket.php index 3faa0678d..228455105 100644 --- a/app/Models/Ticket.php +++ b/app/Models/Ticket.php @@ -32,10 +32,10 @@ class Ticket extends Model */ public const RESOURCE_NAME = 'ticket'; - public const STATUS_PENDING = 'pending'; - public const STATUS_RESOLVED = 'resolved'; - public const STATUS_UNRESOLVED = 'unresolved'; - public const STATUS_IN_PROGRESS = 'in-progress'; + public const STATUS_PENDING = 'pendente'; + public const STATUS_RESOLVED = 'resolvido'; + public const STATUS_UNRESOLVED = 'não-resolvido'; + public const STATUS_IN_PROGRESS = 'em-andamento'; /** * The table associated with the model. diff --git a/app/Models/User.php b/app/Models/User.php index 145f9fff3..e47d48b90 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -172,7 +172,7 @@ class User extends Model implements protected $attributes = [ 'external_id' => null, 'root_admin' => false, - 'language' => 'en', + 'language' => 'pt', 'use_totp' => false, 'totp_secret' => null, 'approved' => false, diff --git a/app/Notifications/AccountCreated.php b/app/Notifications/AccountCreated.php index f7c3b87eb..8daade3c5 100644 --- a/app/Notifications/AccountCreated.php +++ b/app/Notifications/AccountCreated.php @@ -33,13 +33,13 @@ public function via(): array public function toMail(): MailMessage { $message = (new MailMessage()) - ->greeting('Hello ' . $this->user->name . '!') - ->line('You are receiving this email because an account has been created for you on ' . config('app.name') . '.') - ->line('Username: ' . $this->user->username) - ->line('Email: ' . $this->user->email); + ->greeting('Olá ' . $this->user->name . '!') + ->line('Você está recebendo este e-mail porque uma conta foi criada para você em ' . config('app.name') . '.') + ->line('Usuário: ' . $this->user->username) + ->line('E-mail: ' . $this->user->email); if (!is_null($this->token)) { - return $message->action('Setup Your Account', url('/auth/password/reset/' . $this->token . '?email=' . urlencode($this->user->email))); + return $message->action('Configure sua conta', url('/auth/password/reset/' . $this->token . '?email=' . urlencode($this->user->email))); } return $message; diff --git a/app/Notifications/AddedToServer.php b/app/Notifications/AddedToServer.php index 39ca5a95b..d6bbbcf81 100644 --- a/app/Notifications/AddedToServer.php +++ b/app/Notifications/AddedToServer.php @@ -35,9 +35,9 @@ public function via(): array public function toMail(): MailMessage { return (new MailMessage()) - ->greeting('Hello ' . $this->server->user . '!') - ->line('You have been added as a subuser for the following server, allowing you certain control over the server.') - ->line('Server Name: ' . $this->server->name) - ->action('Visit Server', url('/server/' . $this->server->uuidShort)); + ->greeting('Olá ' . $this->server->user . '!') + ->line('Você foi adicionado como um subusuário para o seguinte servidor, permitindo certo controle sobre o servidor.') + ->line('Nome do Servidor: ' . $this->server->name) + ->action('Visite o site', url('/server/' . $this->server->uuidShort)); } } diff --git a/app/Notifications/MailTested.php b/app/Notifications/MailTested.php index e2755cb62..a8d2c5512 100644 --- a/app/Notifications/MailTested.php +++ b/app/Notifications/MailTested.php @@ -20,8 +20,8 @@ public function via(): array public function toMail(): MailMessage { return (new MailMessage()) - ->subject('Jexactyl Test Message') - ->greeting('Hello ' . $this->user->name . '!') - ->line('This is a test of the Jexactyl mail system. You\'re good to go!'); + ->subject('Mensagem de teste de jexactyl') + ->greeting('Olá ' . $this->user->name . '!') + ->line('Este é um teste do sistema de e-mail Jexactyl. Você está pronto para ir!'); } } diff --git a/app/Notifications/RemovedFromServer.php b/app/Notifications/RemovedFromServer.php index d409d0c7b..5c2eff991 100644 --- a/app/Notifications/RemovedFromServer.php +++ b/app/Notifications/RemovedFromServer.php @@ -36,9 +36,9 @@ public function toMail(): MailMessage { return (new MailMessage()) ->error() - ->greeting('Hello ' . $this->server->user . '.') - ->line('You have been removed as a subuser for the following server.') - ->line('Server Name: ' . $this->server->name) - ->action('Visit Panel', route('index')); + ->greeting('Olá ' . $this->server->user . '.') + ->line('Você foi removido como assinante do seguinte servidor.') + ->line('Nome do Servidor: ' . $this->server->name) + ->action('Visitar o painel', route('index')); } } diff --git a/app/Notifications/SendPasswordReset.php b/app/Notifications/SendPasswordReset.php index 79d032c30..a4fbc2a86 100644 --- a/app/Notifications/SendPasswordReset.php +++ b/app/Notifications/SendPasswordReset.php @@ -32,9 +32,9 @@ public function via(): array public function toMail(mixed $notifiable): MailMessage { return (new MailMessage()) - ->subject('Reset Password') - ->line('You are receiving this email because we received a password reset request for your account.') - ->action('Reset Password', url('/auth/password/reset/' . $this->token . '?email=' . urlencode($notifiable->email))) - ->line('If you did not request a password reset, no further action is required.'); + ->subject('Redefinir senha') + ->line('Você está recebendo este e-mail porque recebemos uma solicitação de redefinição de senha para sua conta.') + ->action('Redefinir senha', url('/auth/password/reset/' . $this->token . '?email=' . urlencode($notifiable->email))) + ->line('Se você não solicitou uma redefinição de senha, nenhuma outra ação é necessária.'); } } diff --git a/app/Notifications/ServerInstalled.php b/app/Notifications/ServerInstalled.php index f6fbf1806..f2e8f48e0 100644 --- a/app/Notifications/ServerInstalled.php +++ b/app/Notifications/ServerInstalled.php @@ -52,9 +52,9 @@ public function via(): array public function toMail(): MailMessage { return (new MailMessage()) - ->greeting('Hello ' . $this->user->username . '.') - ->line('Your server has finished installing and is now ready for you to use.') - ->line('Server Name: ' . $this->server->name) - ->action('Login and Begin Using', route('index')); + ->greeting('Olá ' . $this->user->username . '.') + ->line('Seu servidor terminou de instalar e agora está pronto para você usar.') + ->line('Nome do Servidor: ' . $this->server->name) + ->action('Acesse e comece a usar', route('index')); } } diff --git a/app/Notifications/VerifyEmail.php b/app/Notifications/VerifyEmail.php index ea66a593c..b60e77707 100644 --- a/app/Notifications/VerifyEmail.php +++ b/app/Notifications/VerifyEmail.php @@ -24,10 +24,10 @@ public function via(): array public function toMail(): MailMessage { $message = new MailMessage(); - $message->greeting('Hello ' . $this->user->username . '! Welcome to ' . $this->name . '.'); - $message->line('Please click the link below to verify your email address.'); - $message->action('Verify Email', url('/auth/verify/' . $this->token)); - $message->line('If you did not create this account please contact ' . $this->name . '.'); + $message->greeting('Olá ' . $this->user->username . '! Bem vindo(a) ' . $this->name . '.'); + $message->line('Clique no link abaixo para verificar seu endereço de e-mail.'); + $message->action('Verificar e-mail', url('/auth/verify/' . $this->token)); + $message->line('Se você não criou esta conta, entre em contato ' . $this->name . '.'); return $message; } diff --git a/app/Providers/SettingsServiceProvider.php b/app/Providers/SettingsServiceProvider.php index b766e6246..6d9ca1b84 100644 --- a/app/Providers/SettingsServiceProvider.php +++ b/app/Providers/SettingsServiceProvider.php @@ -21,6 +21,7 @@ class SettingsServiceProvider extends ServiceProvider 'app:name', 'app:locale', 'theme:admin', + 'sidebar:tema', 'recaptcha:enabled', 'recaptcha:secret_key', 'recaptcha:website_key', diff --git a/app/Repositories/Eloquent/PermissionRepository.php b/app/Repositories/Eloquent/PermissionRepository.php index 41c90dd05..e9d9351de 100644 --- a/app/Repositories/Eloquent/PermissionRepository.php +++ b/app/Repositories/Eloquent/PermissionRepository.php @@ -13,6 +13,6 @@ class PermissionRepository extends EloquentRepository implements PermissionRepos */ public function model(): string { - throw new \Exception('This functionality is not implemented.'); + throw new \Exception('Esta funcionalidade não está implementada.'); } } diff --git a/app/Repositories/Repository.php b/app/Repositories/Repository.php index 73056a2bb..599ec6c99 100644 --- a/app/Repositories/Repository.php +++ b/app/Repositories/Repository.php @@ -96,7 +96,7 @@ protected function initializeModel(string ...$model): mixed case 2: return $this->model = call_user_func([$this->app->make($model[0]), $model[1]]); default: - throw new \InvalidArgumentException('Model must be a FQDN or an array with a count of two.'); + throw new \InvalidArgumentException('O modelo deve ser um FQDN ou um array com uma contagem de dois.'); } } } diff --git a/app/Rules/Fqdn.php b/app/Rules/Fqdn.php index 389b392ae..72e5d977b 100644 --- a/app/Rules/Fqdn.php +++ b/app/Rules/Fqdn.php @@ -38,7 +38,7 @@ public function passes($attribute, $value): bool // custom SSL cert, IPs will not be able to use HTTPS. This should prevent most // home users from making this mistake and wondering why their node is not working. if ($this->schemeField && Arr::get($this->data, $this->schemeField) === 'https') { - $this->message = 'The :attribute must not be an IP address when HTTPS is enabled.'; + $this->message = 'O :attribute não deve ser um endereço IP quando o HTTPS está ativado.'; return false; } @@ -58,7 +58,7 @@ public function passes($attribute, $value): bool return true; } - $this->message = 'The :attribute could not be resolved to a valid IP address.'; + $this->message = 'O :attribute não pôde ser resolvido para um endereço IP válido.'; return false; } diff --git a/app/Rules/Username.php b/app/Rules/Username.php index 46ad8f3a6..10764302d 100644 --- a/app/Rules/Username.php +++ b/app/Rules/Username.php @@ -30,8 +30,7 @@ public function passes($attribute, $value): bool */ public function message(): string { - return 'The :attribute must start and end with alpha-numeric characters and - contain only letters, numbers, dashes, underscores, and periods.'; + return 'O :attribute deve começar e terminar com caracteres alfanuméricos e conter apenas letras, números, hífens, sublinhados e pontos.'; } /** diff --git a/app/Services/Allocations/AssignmentService.php b/app/Services/Allocations/AssignmentService.php index 56bd6d6f9..8bda815a0 100644 --- a/app/Services/Allocations/AssignmentService.php +++ b/app/Services/Allocations/AssignmentService.php @@ -55,7 +55,7 @@ public function handle(Node $node, array $data): void $parsed = Network::parse($underlying); } catch (\Exception $exception) { /* @noinspection PhpUndefinedVariableInspection */ - throw new DisplayException("Could not parse provided allocation IP address ({$underlying}): {$exception->getMessage()}", $exception); + throw new DisplayException("Não foi possível analisar a alocação de endereço IP ({$underlying}): {$exception->getMessage()}", $exception); } $this->connection->beginTransaction(); diff --git a/app/Services/Databases/DatabaseManagementService.php b/app/Services/Databases/DatabaseManagementService.php index a3c3377bf..26869c9dc 100644 --- a/app/Services/Databases/DatabaseManagementService.php +++ b/app/Services/Databases/DatabaseManagementService.php @@ -85,7 +85,7 @@ public function create(Server $server, array $data): Database // Protect against developer mistakes... if (empty($data['database']) || !preg_match(self::MATCH_NAME_REGEX, $data['database'])) { - throw new \InvalidArgumentException('The database name passed to DatabaseManagementService::handle MUST be prefixed with "s{server_id}_".'); + throw new \InvalidArgumentException('O nome do banco de dados passou para DatabaseManagementService::handle DEVE ser prefixado com "s{server_id}_".'); } $data = array_merge($data, [ @@ -163,7 +163,7 @@ protected function createModel(array $data): Database ->exists(); if ($exists) { - throw new DuplicateDatabaseNameException('A database with that name already exists for this server.'); + throw new DuplicateDatabaseNameException('Um banco de dados com esse nome já existe para este servidor.'); } $database = (new Database())->forceFill($data); diff --git a/app/Services/Servers/ServerEditService.php b/app/Services/Servers/ServerEditService.php index f30eb17cd..558caf859 100644 --- a/app/Services/Servers/ServerEditService.php +++ b/app/Services/Servers/ServerEditService.php @@ -28,7 +28,7 @@ public function handle(EditServerRequest $request, Server $server) $resource = $request->input('resource'); if ($user->id != $server->owner_id) { - throw new DisplayException('You do not own this server, therefore you cannot make changes.'); + throw new DisplayException('Você não é dono deste servidor, portanto não pode fazer mudanças.'); } $this->verify($request, $server, $user); @@ -53,17 +53,17 @@ protected function verify(EditServerRequest $request, Server $server, User $user // Check if the amount requested goes over defined limits. if (($amount + $this->toServer($resource, $server)) > $limit) { - throw new DisplayException('You cannot add this resource because an administrator has set a maximum limit.'); + throw new DisplayException('Você não pode adicionar este recurso porque um administrador estabeleceu um limite máximo.'); } // Verify baseline limits. We don't want servers with -4% CPU. if ($this->toServer($resource, $server) <= $this->toMin($resource) && $amount < 0) { - throw new DisplayException('You cannot go below this amount.'); + throw new DisplayException('Você não pode ir abaixo deste valor.'); } // Verify that the user has the resource in their account. if ($this->toUser($resource, $user) < $amount) { - throw new DisplayException('You do not have the resources available to make this change.'); + throw new DisplayException('Você não tem os recursos disponíveis para fazer esta mudança.'); } } @@ -79,7 +79,7 @@ protected function toMin(string $resource): int 'allocation_limit' => 1, 'disk', 'memory' => 1024, 'backup_limit', 'database_limit' => 0, - default => throw new DisplayException('Unable to parse resource type') + default => throw new DisplayException('Incapaz de analisar o tipo de recurso') }; } @@ -98,7 +98,7 @@ protected function toUser(string $resource, User $user): int 'backup_limit' => $user->store_backups, 'allocation_limit' => $user->store_ports, 'database_limit' => $user->store_databases, - default => throw new DisplayException('Unable to parse resource type') + default => throw new DisplayException('Incapaz de analisar o tipo de recurso') }; } @@ -117,7 +117,7 @@ protected function toServer(string $resource, Server $server): int 'backup_limit' => $server->backup_limit, 'database_limit' => $server->database_limit, 'allocation_limit' => $server->allocation_limit, - default => throw new DisplayException('Unable to parse resource type') + default => throw new DisplayException('Incapaz de analisar o tipo de recurso') }; } } diff --git a/app/Services/Servers/ServerRenewalService.php b/app/Services/Servers/ServerRenewalService.php index 6c58d466b..3ea5d1b87 100644 --- a/app/Services/Servers/ServerRenewalService.php +++ b/app/Services/Servers/ServerRenewalService.php @@ -34,14 +34,14 @@ public function handle(ClientApiRequest $request, Server $server): Server $cost = $this->settings->get('jexactyl::renewal:cost', 200); if ($user->store_balance < $cost) { - throw new DisplayException('You do not have enough credits to renew your server.'); + throw new DisplayException('Você não possui créditos suficientes para renovar seu servidor.'); } try { $user->update(['store_balance' => $user->store_balance - $cost]); $server->update(['renewal' => $server->renewal + $this->settings->get('jexactyl::renewal:default', 7)]); } catch (DisplayException $ex) { - throw new DisplayException('An unexpected error occured while trying to renew your server.'); + throw new DisplayException('Ocorreu um erro inesperado ao tentar renovar seu servidor.'); } if ($server->status == 'suspended' && $server->renewal >= 0) { diff --git a/app/Services/Store/ResourcePurchaseService.php b/app/Services/Store/ResourcePurchaseService.php index e580b7213..ab1c43dc3 100644 --- a/app/Services/Store/ResourcePurchaseService.php +++ b/app/Services/Store/ResourcePurchaseService.php @@ -34,7 +34,7 @@ public function handle(PurchaseResourceRequest $request) ->first(); if ($balance < $cost) { - throw new DisplayException('You do not have enough credits.'); + throw new DisplayException('Você não possui créditos suficientes.'); } $user->update([ @@ -54,7 +54,7 @@ protected function amount(string $resource): int 'cpu' => 50, 'disk', 'memory' => 1024, 'slots', 'ports', 'backups', 'databases' => 1, - default => throw new DisplayException('Unable to parse resource type') + default => throw new DisplayException('Incapaz de analisar o tipo de recurso') }; } diff --git a/app/Transformers/Api/Client/EggVariableTransformer.php b/app/Transformers/Api/Client/EggVariableTransformer.php index f7b37a031..bb2abe078 100644 --- a/app/Transformers/Api/Client/EggVariableTransformer.php +++ b/app/Transformers/Api/Client/EggVariableTransformer.php @@ -17,7 +17,7 @@ public function transform(EggVariable $variable): array // them into the transformer and along to the user. Just throw an exception and break the entire // pathway since you should never be exposing these types of variables to a client. if (!$variable->user_viewable) { - throw new \BadMethodCallException('Cannot transform a hidden egg variable in a client transformer.'); + throw new \BadMethodCallException('Não é possível transformar uma variável do egg oculto em um transformador de cliente.'); } return [ diff --git a/bootstrap/tests.php b/bootstrap/tests.php index 9f0812f88..cb78efb4f 100644 --- a/bootstrap/tests.php +++ b/bootstrap/tests.php @@ -25,8 +25,8 @@ $prefix = 'database.connections.' . config('database.default'); if (!Str::contains(config("$prefix.database"), 'test')) { - $output->writeln(PHP_EOL . 'Cannot run test process against non-testing database.'); - $output->writeln(PHP_EOL . 'Environment is currently pointed at: "' . config("$prefix.database") . '".'); + $output->writeln(PHP_EOL . 'Não é possível executar o processo de teste em um banco de dados sem teste.'); + $output->writeln(PHP_EOL . 'Ambiente está atualmente apontado para: "' . config("$prefix.database") . '".'); exit(1); } @@ -35,11 +35,11 @@ * running the tests. */ if (!env('SKIP_MIGRATIONS')) { - $output->writeln(PHP_EOL . 'Refreshing database for Integration tests...'); + $output->writeln(PHP_EOL . 'Atualizando banco de dados para testes de integração...'); $kernel->call('migrate:fresh'); - $output->writeln('Seeding database for Integration tests...' . PHP_EOL); + $output->writeln('Semeando banco de dados para testes de integração...' . PHP_EOL); $kernel->call('db:seed'); } else { - $output->writeln(PHP_EOL . 'Skipping database migrations...' . PHP_EOL); + $output->writeln(PHP_EOL . 'Ignorando migrações de banco de dados...' . PHP_EOL); } diff --git a/composer.json b/composer.json index cf7b59f8a..f8c13bae6 100644 --- a/composer.json +++ b/composer.json @@ -16,29 +16,29 @@ "hashids/hashids": "~4.1.0", "laracasts/utilities": "~3.2.1", "laravel/framework": "^9.34.0", - "laravel/helpers": "~1.5.0", - "laravel/sanctum": "~2.15.1", - "laravel/tinker": "~2.7.2", - "laravel/ui": "~3.4.6", - "lcobucci/jwt": "~4.2.1", - "league/flysystem-aws-s3-v3": "~3.5.0", - "league/flysystem-memory": "~3.3.0", + "laravel/helpers": "~1.6.0", + "laravel/sanctum": "~3.2.1", + "laravel/tinker": "~2.8.0", + "laravel/ui": "~4.2.0", + "lcobucci/jwt": "~4.3.0", + "league/flysystem-aws-s3-v3": "~3.12.1", + "league/flysystem-memory": "~3.10.3", "matriphe/iso-639": "~1.2", "paypal/paypal-checkout-sdk": "^1.0", "phpseclib/phpseclib": "~3.0", - "pragmarx/google2fa": "~5.0.0", - "predis/predis": "~2.0.2", + "pragmarx/google2fa": "~8.0.1", + "predis/predis": "~2.1.1", "prologue/alerts": "~1.0.0", "psr/cache": "~3.0.0", "s1lentium/iptools": "~1.1.1", "spatie/laravel-fractal": "~6.0.2", - "spatie/laravel-query-builder": "~5.0.3", + "spatie/laravel-query-builder": "~5.1.1", "staudenmeir/belongs-to-through": "~2.12.1", "stripe/stripe-php": "^8.7", "symfony/http-client": "~6.0", "symfony/mailgun-mailer": "~6.0", "symfony/postmark-mailer": "~6.0", - "symfony/yaml": "~5.4", + "symfony/yaml": "~6.0", "webmozart/assert": "~1.11" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 368f2a194..eb7e46fcb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "af1319460d84b33087c626e3329c8592", + "content-hash": "34c3dea9074030aa8851c04b5a82b9d4", "packages": [ { "name": "aws/aws-crt-php", @@ -1598,26 +1598,23 @@ }, { "name": "laravel/framework", - "version": "v9.51.0", + "version": "v9.48.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "b81123134349a013a738a9f7f715c6ce99d5a414" + "reference": "c78ae7aeb0cbcb1a205050d3592247ba07f5b711" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b81123134349a013a738a9f7f715c6ce99d5a414", - "reference": "b81123134349a013a738a9f7f715c6ce99d5a414", + "url": "https://api.github.com/repos/laravel/framework/zipball/c78ae7aeb0cbcb1a205050d3592247ba07f5b711", + "reference": "c78ae7aeb0cbcb1a205050d3592247ba07f5b711", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", - "doctrine/inflector": "^2.0.5", + "brick/math": "^0.10.2", + "doctrine/inflector": "^2.0", "dragonmantank/cron-expression": "^3.3.2", "egulias/email-validator": "^3.2.1|^4.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", "ext-mbstring": "*", "ext-openssl": "*", "ext-session": "*", @@ -1792,24 +1789,24 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-07T15:37:18+00:00" + "time": "2023-01-17T15:06:19+00:00" }, { "name": "laravel/helpers", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/laravel/helpers.git", - "reference": "c28b0ccd799d58564c41a62395ac9511a1e72931" + "reference": "4dd0f9436d3911611622a6ced8329a1710576f60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/helpers/zipball/c28b0ccd799d58564c41a62395ac9511a1e72931", - "reference": "c28b0ccd799d58564c41a62395ac9511a1e72931", + "url": "https://api.github.com/repos/laravel/helpers/zipball/4dd0f9436d3911611622a6ced8329a1710576f60", + "reference": "4dd0f9436d3911611622a6ced8329a1710576f60", "shasum": "" }, "require": { - "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0|^9.0", + "illuminate/support": "~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0", "php": "^7.1.3|^8.0" }, "require-dev": { @@ -1846,41 +1843,41 @@ "laravel" ], "support": { - "source": "https://github.com/laravel/helpers/tree/v1.5.0" + "source": "https://github.com/laravel/helpers/tree/v1.6.0" }, - "time": "2022-01-12T15:58:51+00:00" + "time": "2023-01-09T14:48:11+00:00" }, { "name": "laravel/sanctum", - "version": "v2.15.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473" + "reference": "d09d69bac55708fcd4a3b305d760e673d888baf9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", - "reference": "31fbe6f85aee080c4dc2f9b03dc6dd5d0ee72473", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/d09d69bac55708fcd4a3b305d760e673d888baf9", + "reference": "d09d69bac55708fcd4a3b305d760e673d888baf9", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^6.9|^7.0|^8.0|^9.0", - "illuminate/contracts": "^6.9|^7.0|^8.0|^9.0", - "illuminate/database": "^6.9|^7.0|^8.0|^9.0", - "illuminate/support": "^6.9|^7.0|^8.0|^9.0", - "php": "^7.2|^8.0" + "illuminate/console": "^9.21|^10.0", + "illuminate/contracts": "^9.21|^10.0", + "illuminate/database": "^9.21|^10.0", + "illuminate/support": "^9.21|^10.0", + "php": "^8.0.2" }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0", - "phpunit/phpunit": "^8.0|^9.3" + "orchestra/testbench": "^7.0|^8.0", + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" }, "laravel": { "providers": [ @@ -1913,7 +1910,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2022-04-08T13:39:49+00:00" + "time": "2023-01-13T15:41:49+00:00" }, { "name": "laravel/serializable-closure", @@ -1977,22 +1974,22 @@ }, { "name": "laravel/tinker", - "version": "v2.7.3", + "version": "v2.8.0", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef" + "reference": "74d0b287cc4ae65d15c368dd697aae71d62a73ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/5062061b4924af3392225dd482ca7b4d85d8b8ef", - "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef", + "url": "https://api.github.com/repos/laravel/tinker/zipball/74d0b287cc4ae65d15c368dd697aae71d62a73ad", + "reference": "74d0b287cc4ae65d15c368dd697aae71d62a73ad", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.10.4|^0.11.1", "symfony/var-dumper": "^4.3.4|^5.0|^6.0" @@ -2002,7 +1999,7 @@ "phpunit/phpunit": "^8.5.8|^9.3.3" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0)." }, "type": "library", "extra": { @@ -2039,38 +2036,38 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.3" + "source": "https://github.com/laravel/tinker/tree/v2.8.0" }, - "time": "2022-11-09T15:11:38+00:00" + "time": "2023-01-10T18:03:30+00:00" }, { "name": "laravel/ui", - "version": "v3.4.6", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c" + "reference": "810adddcf4e2538b0d1ed470c3a5220ffe761370" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/65ec5c03f7fee2c8ecae785795b829a15be48c2c", - "reference": "65ec5c03f7fee2c8ecae785795b829a15be48c2c", + "url": "https://api.github.com/repos/laravel/ui/zipball/810adddcf4e2538b0d1ed470c3a5220ffe761370", + "reference": "810adddcf4e2538b0d1ed470c3a5220ffe761370", "shasum": "" }, "require": { - "illuminate/console": "^8.42|^9.0", - "illuminate/filesystem": "^8.42|^9.0", - "illuminate/support": "^8.82|^9.0", - "illuminate/validation": "^8.42|^9.0", - "php": "^7.3|^8.0" + "illuminate/console": "^9.21|^10.0", + "illuminate/filesystem": "^9.21|^10.0", + "illuminate/support": "^9.21|^10.0", + "illuminate/validation": "^9.21|^10.0", + "php": "^8.0" }, "require-dev": { - "orchestra/testbench": "^6.23|^7.0" + "orchestra/testbench": "^7.0|^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "4.x-dev" }, "laravel": { "providers": [ @@ -2100,9 +2097,9 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v3.4.6" + "source": "https://github.com/laravel/ui/tree/v4.2.0" }, - "time": "2022-05-20T13:38:08+00:00" + "time": "2023-01-10T12:13:29+00:00" }, { "name": "lcobucci/clock", @@ -2167,16 +2164,16 @@ }, { "name": "lcobucci/jwt", - "version": "4.2.1", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "72ac6d807ee51a70ad376ee03a2387e8646e10f3" + "reference": "4d7de2fe0d51a96418c0d04004986e410e87f6b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/72ac6d807ee51a70ad376ee03a2387e8646e10f3", - "reference": "72ac6d807ee51a70ad376ee03a2387e8646e10f3", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/4d7de2fe0d51a96418c0d04004986e410e87f6b4", + "reference": "4d7de2fe0d51a96418c0d04004986e410e87f6b4", "shasum": "" }, "require": { @@ -2185,7 +2182,7 @@ "ext-mbstring": "*", "ext-openssl": "*", "ext-sodium": "*", - "lcobucci/clock": "^2.0", + "lcobucci/clock": "^2.0 || ^3.0", "php": "^7.4 || ^8.0" }, "require-dev": { @@ -2225,7 +2222,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/4.2.1" + "source": "https://github.com/lcobucci/jwt/tree/4.3.0" }, "funding": [ { @@ -2237,7 +2234,7 @@ "type": "patreon" } ], - "time": "2022-08-19T23:14:07+00:00" + "time": "2023-01-02T13:28:00+00:00" }, { "name": "league/commonmark", @@ -2520,21 +2517,21 @@ }, { "name": "league/flysystem-aws-s3-v3", - "version": "3.5.0", + "version": "3.12.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "adb6633f325c934c15a099c363dc5362bdcb07a2" + "reference": "ea100348d497585687e4ad487bf150b0d766b46d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/adb6633f325c934c15a099c363dc5362bdcb07a2", - "reference": "adb6633f325c934c15a099c363dc5362bdcb07a2", + "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/ea100348d497585687e4ad487bf150b0d766b46d", + "reference": "ea100348d497585687e4ad487bf150b0d766b46d", "shasum": "" }, "require": { - "aws/aws-sdk-php": "^3.132.4", - "league/flysystem": "^3.0.0", + "aws/aws-sdk-php": "^3.220.0", + "league/flysystem": "^3.10.0", "league/mime-type-detection": "^1.0.0", "php": "^8.0.2" }, @@ -2570,7 +2567,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.5.0" + "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.12.1" }, "funding": [ { @@ -2586,20 +2583,20 @@ "type": "tidelift" } ], - "time": "2022-09-17T21:00:35+00:00" + "time": "2023-01-06T15:19:01+00:00" }, { "name": "league/flysystem-memory", - "version": "3.3.0", + "version": "3.10.3", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-memory.git", - "reference": "d2a80fbfd3337fac39eeff64c6c0820b6a4902ce" + "reference": "5405162ac81f4de5aa5fa01aae7d07382b7c797b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-memory/zipball/d2a80fbfd3337fac39eeff64c6c0820b6a4902ce", - "reference": "d2a80fbfd3337fac39eeff64c6c0820b6a4902ce", + "url": "https://api.github.com/repos/thephpleague/flysystem-memory/zipball/5405162ac81f4de5aa5fa01aae7d07382b7c797b", + "reference": "5405162ac81f4de5aa5fa01aae7d07382b7c797b", "shasum": "" }, "require": { @@ -2633,7 +2630,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-memory/issues", - "source": "https://github.com/thephpleague/flysystem-memory/tree/3.3.0" + "source": "https://github.com/thephpleague/flysystem-memory/tree/3.10.3" }, "funding": [ { @@ -2649,7 +2646,7 @@ "type": "tidelift" } ], - "time": "2022-09-09T10:03:42+00:00" + "time": "2022-10-26T18:30:26+00:00" }, { "name": "league/fractal", @@ -3154,16 +3151,16 @@ }, { "name": "nette/utils", - "version": "v4.0.0", + "version": "v3.2.9", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" + "reference": "c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", + "url": "https://api.github.com/repos/nette/utils/zipball/c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c", + "reference": "c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c", "shasum": "" }, "require": { @@ -3175,7 +3172,7 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.4", + "nette/tester": "~2.0", "phpstan/phpstan": "^1.0", "tracy/tracy": "^2.9" }, @@ -3235,9 +3232,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.0" + "source": "https://github.com/nette/utils/tree/v3.2.9" }, - "time": "2023-02-02T10:41:53+00:00" + "time": "2023-01-18T03:26:20+00:00" }, { "name": "nikic/php-parser", @@ -3781,38 +3778,30 @@ }, { "name": "pragmarx/google2fa", - "version": "v5.0.0", + "version": "v8.0.1", "source": { "type": "git", "url": "https://github.com/antonioribeiro/google2fa.git", - "reference": "17c969c82f427dd916afe4be50bafc6299aef1b4" + "reference": "80c3d801b31fe165f8fe99ea085e0a37834e1be3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/17c969c82f427dd916afe4be50bafc6299aef1b4", - "reference": "17c969c82f427dd916afe4be50bafc6299aef1b4", + "url": "https://api.github.com/repos/antonioribeiro/google2fa/zipball/80c3d801b31fe165f8fe99ea085e0a37834e1be3", + "reference": "80c3d801b31fe165f8fe99ea085e0a37834e1be3", "shasum": "" }, "require": { - "paragonie/constant_time_encoding": "~1.0|~2.0", - "paragonie/random_compat": ">=1", - "php": ">=5.4", - "symfony/polyfill-php56": "~1.2" + "paragonie/constant_time_encoding": "^1.0|^2.0", + "php": "^7.1|^8.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5|~6" + "phpstan/phpstan": "^0.12.18", + "phpunit/phpunit": "^7.5.15|^8.5|^9.0" }, "type": "library", - "extra": { - "component": "package", - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "autoload": { "psr-4": { - "PragmaRX\\Google2FA\\": "src/", - "PragmaRX\\Google2FA\\Tests\\": "tests/" + "PragmaRX\\Google2FA\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3835,22 +3824,22 @@ ], "support": { "issues": "https://github.com/antonioribeiro/google2fa/issues", - "source": "https://github.com/antonioribeiro/google2fa/tree/master" + "source": "https://github.com/antonioribeiro/google2fa/tree/v8.0.1" }, - "time": "2019-03-19T22:44:16+00:00" + "time": "2022-06-13T21:57:56+00:00" }, { "name": "predis/predis", - "version": "v2.0.3", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/predis/predis.git", - "reference": "ff59f745815150c65ed388f7d64e7660fe961771" + "reference": "c5b60884e89630f9518a7919f0566db438f0fc9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/ff59f745815150c65ed388f7d64e7660fe961771", - "reference": "ff59f745815150c65ed388f7d64e7660fe961771", + "url": "https://api.github.com/repos/predis/predis/zipball/c5b60884e89630f9518a7919f0566db438f0fc9a", + "reference": "c5b60884e89630f9518a7919f0566db438f0fc9a", "shasum": "" }, "require": { @@ -3860,8 +3849,7 @@ "phpunit/phpunit": "^8.0 || ~9.4.4" }, "suggest": { - "ext-curl": "Allows access to Webdis when paired with phpiredis", - "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + "ext-curl": "Allows access to Webdis when paired with phpiredis" }, "type": "library", "extra": { @@ -3879,16 +3867,16 @@ "MIT" ], "authors": [ - { - "name": "Daniele Alessandri", - "email": "suppakilla@gmail.com", - "homepage": "http://clorophilla.net", - "role": "Creator & Maintainer" - }, { "name": "Till Krüss", "homepage": "https://till.im", "role": "Maintainer" + }, + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net", + "role": "Creator" } ], "description": "A flexible and feature-complete Redis client for PHP.", @@ -3900,7 +3888,7 @@ ], "support": { "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.0.3" + "source": "https://github.com/predis/predis/tree/v2.1.1" }, "funding": [ { @@ -3908,7 +3896,7 @@ "type": "github" } ], - "time": "2022-10-11T16:52:29+00:00" + "time": "2023-01-17T20:57:35+00:00" }, { "name": "prologue/alerts", @@ -4999,16 +4987,16 @@ }, { "name": "spatie/laravel-query-builder", - "version": "5.0.3", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-query-builder.git", - "reference": "2243e3d60fc184ef20ad2b19765bc7006fa9dbfc" + "reference": "14a6802cd513cfd2abf68044cca5fd7391eb543d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-query-builder/zipball/2243e3d60fc184ef20ad2b19765bc7006fa9dbfc", - "reference": "2243e3d60fc184ef20ad2b19765bc7006fa9dbfc", + "url": "https://api.github.com/repos/spatie/laravel-query-builder/zipball/14a6802cd513cfd2abf68044cca5fd7391eb543d", + "reference": "14a6802cd513cfd2abf68044cca5fd7391eb543d", "shasum": "" }, "require": { @@ -5067,7 +5055,7 @@ "type": "custom" } ], - "time": "2022-07-29T14:19:59+00:00" + "time": "2022-12-02T21:28:40+00:00" }, { "name": "staudenmeir/belongs-to-through", @@ -5915,16 +5903,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.0.20", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6" + "reference": "56648fa8e50b076c46ecf7f8d409e6d5df724995" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e16b2676a4b3b1fa12378a20b29c364feda2a8d6", - "reference": "e16b2676a4b3b1fa12378a20b29c364feda2a8d6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/56648fa8e50b076c46ecf7f8d409e6d5df724995", + "reference": "56648fa8e50b076c46ecf7f8d409e6d5df724995", "shasum": "" }, "require": { @@ -5970,7 +5958,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.0.20" + "source": "https://github.com/symfony/http-foundation/tree/v6.0.19" }, "funding": [ { @@ -5986,20 +5974,20 @@ "type": "tidelift" } ], - "time": "2023-01-30T15:41:07+00:00" + "time": "2023-01-01T08:36:10+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.0.20", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349" + "reference": "0a01b69b46b1be6d3c252307c8d683de56d4541f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6dc70833fd0ef5e861e17c7854c12d7d86679349", - "reference": "6dc70833fd0ef5e861e17c7854c12d7d86679349", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/0a01b69b46b1be6d3c252307c8d683de56d4541f", + "reference": "0a01b69b46b1be6d3c252307c8d683de56d4541f", "shasum": "" }, "require": { @@ -6079,7 +6067,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.0.20" + "source": "https://github.com/symfony/http-kernel/tree/v6.0.19" }, "funding": [ { @@ -6095,7 +6083,7 @@ "type": "tidelift" } ], - "time": "2023-02-01T08:22:55+00:00" + "time": "2023-01-24T13:42:21+00:00" }, { "name": "symfony/mailer", @@ -6735,74 +6723,6 @@ ], "time": "2022-11-03T14:55:06+00:00" }, - { - "name": "symfony/polyfill-php56", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php56/tree/v1.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-10-23T14:02:19+00:00" - }, { "name": "symfony/polyfill-php72", "version": "v1.27.0", @@ -7841,28 +7761,27 @@ }, { "name": "symfony/yaml", - "version": "v5.4.19", + "version": "v6.0.19", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5" + "reference": "deec3a812a0305a50db8ae689b183f43d915c884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/71c05db20cb9b54d381a28255f17580e2b7e36a5", - "reference": "71c05db20cb9b54d381a28255f17580e2b7e36a5", + "url": "https://api.github.com/repos/symfony/yaml/zipball/deec3a812a0305a50db8ae689b183f43d915c884", + "reference": "deec3a812a0305a50db8ae689b183f43d915c884", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.0.2", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.3" + "symfony/console": "<5.4" }, "require-dev": { - "symfony/console": "^5.3|^6.0" + "symfony/console": "^5.4|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -7896,7 +7815,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.19" + "source": "https://github.com/symfony/yaml/tree/v6.0.19" }, "funding": [ { @@ -7912,7 +7831,7 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:51:14+00:00" + "time": "2023-01-11T11:50:03+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10060,16 +9979,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.3", + "version": "9.5.28", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", "shasum": "" }, "require": { @@ -10142,7 +10061,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" }, "funding": [ { @@ -10158,7 +10077,7 @@ "type": "tidelift" } ], - "time": "2023-02-04T13:37:15+00:00" + "time": "2023-01-14T12:32:24+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/app.php b/config/app.php index b5683f208..77199430c 100644 --- a/config/app.php +++ b/config/app.php @@ -88,7 +88,7 @@ | */ - 'locale' => env('APP_LOCALE', 'en'), + 'locale' => env('APP_LOCALE', 'pt'), /* |-------------------------------------------------------------------------- @@ -101,7 +101,7 @@ | */ - 'fallback_locale' => 'en', + 'fallback_locale' => 'pt', /* |-------------------------------------------------------------------------- diff --git a/config/gateways.php b/config/gateways.php index 8e3a303dd..b6987cce4 100644 --- a/config/gateways.php +++ b/config/gateways.php @@ -16,13 +16,13 @@ | This value determines what currency to process orders in. | */ - 'currency' => env('STORE_CURRENCY', 'USD'), + 'currency' => env('STORE_CURRENCY', 'BRL'), /* |-------------------------------------------------------------------------- | Cost per 100 credits |-------------------------------------------------------------------------- - | This value determines how much 100 credits costs. Defaults to $1 USD. + | This value determines how much 100 credits costs. Defaults to $1 BRL. | */ 'cost' => env('STORE_COST', 1.00), diff --git a/config/store.php b/config/store.php index 5122b7118..581aebae1 100644 --- a/config/store.php +++ b/config/store.php @@ -12,11 +12,6 @@ */ 'currencies' => [ - 'EUR' => 'Euro', - 'USD' => 'US Dollar', - 'JPY' => 'Japanese Yen', - 'GBP' => 'Pound Sterling', - 'CAD' => 'Canadian Dollar', - 'AUD' => 'Australian Dollar', + 'BRL' => 'Real Brasileiro', ], ]; diff --git a/database/Factories/UserFactory.php b/database/Factories/UserFactory.php index ddc7856c3..66ef1666f 100644 --- a/database/Factories/UserFactory.php +++ b/database/Factories/UserFactory.php @@ -32,7 +32,7 @@ public function definition(): array 'name_first' => $this->faker->firstName, 'name_last' => $this->faker->lastName, 'password' => $password ?: $password = bcrypt('password'), - 'language' => 'en', + 'language' => 'pt', 'root_admin' => false, 'use_totp' => false, 'created_at' => Carbon::now(), diff --git a/database/migrations/2022_12_24_003153_drop_language_from_add_users.php b/database/migrations/2022_12_24_003153_drop_language_from_add_users.php new file mode 100644 index 000000000..22a037f8b --- /dev/null +++ b/database/migrations/2022_12_24_003153_drop_language_from_add_users.php @@ -0,0 +1,31 @@ +dropColumn('language'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->char('language', 5)->default('en'); + }); + } +}; diff --git a/database/migrations/2022_12_24_010511_update_add_users.php b/database/migrations/2022_12_24_010511_update_add_users.php new file mode 100644 index 000000000..ef50867bb --- /dev/null +++ b/database/migrations/2022_12_24_010511_update_add_users.php @@ -0,0 +1,32 @@ +char('language', 5)->default('pt'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('language'); + $table->char('language', 5)->default('en'); + }); + } +}; diff --git a/docker-compose.example.yml b/docker-compose.example.yml index 331f22dab..6a368f924 100644 --- a/docker-compose.example.yml +++ b/docker-compose.example.yml @@ -10,7 +10,7 @@ x-common: &panel-environment APP_URL: "http://example.com" # A list of valid timezones can be found here: http://php.net/manual/en/timezones.php - APP_TIMEZONE: "UTC" + APP_TIMEZONE: "America/Sao_Paulo" APP_SERVICE_AUTHOR: "noreply@example.com" # Uncomment the line below and set to a non-empty value if you want to use Let's Encrypt # to generate an SSL certificate for the Panel. diff --git a/public/themes/blue/css/blue.css b/public/themes/blue/css/blue.css index bd873d055..202f9cf4c 100644 --- a/public/themes/blue/css/blue.css +++ b/public/themes/blue/css/blue.css @@ -49,10 +49,6 @@ body { background: #0e111582; } -.skin-blue .main-header .navbar { - background-color: #202b4a; -} - .skin-blue .main-header .navbar .sidebar-toggle:hover { background-color: #1c252e; } diff --git a/public/themes/blue/css/checkbox.css b/public/themes/blue/css/checkbox.css new file mode 100644 index 000000000..a75e63af6 --- /dev/null +++ b/public/themes/blue/css/checkbox.css @@ -0,0 +1,232 @@ +/** + * Bootsnip - "Bootstrap Checkboxes/Radios" + * Bootstrap 3.2.0 Snippet by i-heart-php + * + * Copyright (c) 2013 Bootsnipp.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + .checkbox { + padding-left: 20px; +} +.checkbox label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.checkbox label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + top: 2.5px; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 3px; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + transition: border 0.15s ease-in-out, color 0.15s ease-in-out; +} +.checkbox label::after { + display: inline-block; + position: absolute; + width: 16px; + height: 16px; + left: 0; + top: 2.5px; + margin-left: -20px; + padding-left: 3px; + padding-top: 1px; + font-size: 11px; + color: #555555; +} +.checkbox input[type="checkbox"] { + opacity: 0; +} +.checkbox input[type="checkbox"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.checkbox input[type="checkbox"]:checked + label::after { + font-family: 'FontAwesome'; + content: "\f00c"; +} +.checkbox input[type="checkbox"]:disabled + label { + opacity: 0.65; +} +.checkbox input[type="checkbox"]:disabled + label::before { + background-color: #eeeeee; + cursor: not-allowed; +} +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} +.checkbox.checkbox-inline { + margin-top: 0; +} +.checkbox-primary input[type="checkbox"]:checked + label::before { + background-color: #428bca; + border-color: #428bca; +} +.checkbox-primary input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-danger input[type="checkbox"]:checked + label::before { + background-color: #d9534f; + border-color: #d9534f; +} +.checkbox-danger input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-info input[type="checkbox"]:checked + label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} +.checkbox-info input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-warning input[type="checkbox"]:checked + label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} +.checkbox-warning input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-success input[type="checkbox"]:checked + label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} +.checkbox-success input[type="checkbox"]:checked + label::after { + color: #fff; +} +.radio { + padding-left: 20px; +} +.radio label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.radio label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 50%; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out; + transition: border 0.15s ease-in-out; +} +.radio label::after { + display: inline-block; + position: absolute; + content: " "; + width: 11px; + height: 11px; + left: 3px; + top: 3px; + margin-left: -20px; + border-radius: 50%; + background-color: #555555; + -webkit-transform: scale(0, 0); + -ms-transform: scale(0, 0); + -o-transform: scale(0, 0); + transform: scale(0, 0); + -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); +} +.radio input[type="radio"] { + opacity: 0; +} +.radio input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.radio input[type="radio"]:checked + label::after { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); +} +.radio input[type="radio"]:disabled + label { + opacity: 0.65; +} +.radio input[type="radio"]:disabled + label::before { + cursor: not-allowed; +} +.radio.radio-inline { + margin-top: 0; +} +.radio-primary input[type="radio"] + label::after { + background-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::before { + border-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::after { + background-color: #428bca; +} +.radio-danger input[type="radio"] + label::after { + background-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::before { + border-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::after { + background-color: #d9534f; +} +.radio-info input[type="radio"] + label::after { + background-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::before { + border-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::after { + background-color: #5bc0de; +} +.radio-warning input[type="radio"] + label::after { + background-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::before { + border-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::after { + background-color: #f0ad4e; +} +.radio-success input[type="radio"] + label::after { + background-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::before { + border-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::after { + background-color: #5cb85c; +} diff --git a/public/themes/dark/css/checkbox.css b/public/themes/dark/css/checkbox.css new file mode 100644 index 000000000..a75e63af6 --- /dev/null +++ b/public/themes/dark/css/checkbox.css @@ -0,0 +1,232 @@ +/** + * Bootsnip - "Bootstrap Checkboxes/Radios" + * Bootstrap 3.2.0 Snippet by i-heart-php + * + * Copyright (c) 2013 Bootsnipp.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + .checkbox { + padding-left: 20px; +} +.checkbox label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.checkbox label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + top: 2.5px; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 3px; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + transition: border 0.15s ease-in-out, color 0.15s ease-in-out; +} +.checkbox label::after { + display: inline-block; + position: absolute; + width: 16px; + height: 16px; + left: 0; + top: 2.5px; + margin-left: -20px; + padding-left: 3px; + padding-top: 1px; + font-size: 11px; + color: #555555; +} +.checkbox input[type="checkbox"] { + opacity: 0; +} +.checkbox input[type="checkbox"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.checkbox input[type="checkbox"]:checked + label::after { + font-family: 'FontAwesome'; + content: "\f00c"; +} +.checkbox input[type="checkbox"]:disabled + label { + opacity: 0.65; +} +.checkbox input[type="checkbox"]:disabled + label::before { + background-color: #eeeeee; + cursor: not-allowed; +} +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} +.checkbox.checkbox-inline { + margin-top: 0; +} +.checkbox-primary input[type="checkbox"]:checked + label::before { + background-color: #428bca; + border-color: #428bca; +} +.checkbox-primary input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-danger input[type="checkbox"]:checked + label::before { + background-color: #d9534f; + border-color: #d9534f; +} +.checkbox-danger input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-info input[type="checkbox"]:checked + label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} +.checkbox-info input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-warning input[type="checkbox"]:checked + label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} +.checkbox-warning input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-success input[type="checkbox"]:checked + label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} +.checkbox-success input[type="checkbox"]:checked + label::after { + color: #fff; +} +.radio { + padding-left: 20px; +} +.radio label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.radio label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 50%; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out; + transition: border 0.15s ease-in-out; +} +.radio label::after { + display: inline-block; + position: absolute; + content: " "; + width: 11px; + height: 11px; + left: 3px; + top: 3px; + margin-left: -20px; + border-radius: 50%; + background-color: #555555; + -webkit-transform: scale(0, 0); + -ms-transform: scale(0, 0); + -o-transform: scale(0, 0); + transform: scale(0, 0); + -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); +} +.radio input[type="radio"] { + opacity: 0; +} +.radio input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.radio input[type="radio"]:checked + label::after { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); +} +.radio input[type="radio"]:disabled + label { + opacity: 0.65; +} +.radio input[type="radio"]:disabled + label::before { + cursor: not-allowed; +} +.radio.radio-inline { + margin-top: 0; +} +.radio-primary input[type="radio"] + label::after { + background-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::before { + border-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::after { + background-color: #428bca; +} +.radio-danger input[type="radio"] + label::after { + background-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::before { + border-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::after { + background-color: #d9534f; +} +.radio-info input[type="radio"] + label::after { + background-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::before { + border-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::after { + background-color: #5bc0de; +} +.radio-warning input[type="radio"] + label::after { + background-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::before { + border-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::after { + background-color: #f0ad4e; +} +.radio-success input[type="radio"] + label::after { + background-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::before { + border-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::after { + background-color: #5cb85c; +} diff --git a/public/themes/dark/css/dark.css b/public/themes/dark/css/dark.css index 1da01bd76..78fa063c0 100644 --- a/public/themes/dark/css/dark.css +++ b/public/themes/dark/css/dark.css @@ -49,9 +49,6 @@ body { background: #0e111582; } -.skin-blue .main-header .navbar { - background-color: #333; -} .skin-blue .main-header .navbar .sidebar-toggle:hover { background-color: #1c252e; diff --git a/public/themes/default/css/default.css b/public/themes/default/css/default.css new file mode 100644 index 000000000..92674bf26 --- /dev/null +++ b/public/themes/default/css/default.css @@ -0,0 +1,10 @@ +/* TEXTO SIDEBAR */ +.sidebar-menu>li>a>span { + display: none +} + +/* BOTAO ABRIR E FECHAR SIDEBAR */ +.skin-blue .main-header .navbar { + background-color: none; + display: none; +} \ No newline at end of file diff --git a/public/themes/default/js/admin/new-server.js b/public/themes/default/js/admin/new-server.js index 313e08c67..20bbdd7f1 100644 --- a/public/themes/default/js/admin/new-server.js +++ b/public/themes/default/js/admin/new-server.js @@ -19,27 +19,27 @@ // SOFTWARE. $(document).ready(function() { $('#pNestId').select2({ - placeholder: 'Select a Nest', + placeholder: 'Selecione um Nest', }).change(); $('#pEggId').select2({ - placeholder: 'Select a Nest Egg', + placeholder: 'Selecione um Nest de Eggs', }); $('#pPackId').select2({ - placeholder: 'Select a Service Pack', + placeholder: 'Selecione um Pacote de Serviços', }); $('#pNodeId').select2({ - placeholder: 'Select a Node', + placeholder: 'Selecione um Node', }).change(); $('#pAllocation').select2({ - placeholder: 'Select a Default Allocation', + placeholder: 'Selecione uma alocação padrão', }); $('#pAllocationAdditional').select2({ - placeholder: 'Select Additional Allocations', + placeholder: 'Selecionar alocações adicionais', }); }); @@ -59,7 +59,7 @@ $('#pNodeId').on('change', function () { if (v.id == currentNode) { $('#pAllocation').html('').select2({ data: v.allocations, - placeholder: 'Select a Default Allocation', + placeholder: 'Selecione uma alocação padrão', }); updateAdditionalAllocations(); @@ -93,13 +93,13 @@ $('#pEggId').on('change', function (event) { } if (!_.get(objectChain, 'startup', false)) { - $('#pStartup').val(_.get(parentChain, 'startup', 'ERROR: Startup Not Defined!')); + $('#pStartup').val(_.get(parentChain, 'startup', 'ERRO: Inicialização não definida!')); } else { $('#pStartup').val(_.get(objectChain, 'startup')); } $('#pPackId').html('').select2({ - data: [{ id: 0, text: 'No Service Pack' }].concat( + data: [{ id: 0, text: 'Sem Pacote de Serviços' }].concat( $.map(_.get(objectChain, 'packs', []), function (item, i) { return { id: item.id, @@ -154,7 +154,7 @@ function updateAdditionalAllocations() { $('#pAllocationAdditional').html('').select2({ data: allocations, - placeholder: 'Select Additional Allocations', + placeholder: 'Selecionar alocações adicionais', }); } }); diff --git a/public/themes/default/js/admin/server/transfer.js b/public/themes/default/js/admin/server/transfer.js index 2a0930607..b283410eb 100644 --- a/public/themes/default/js/admin/server/transfer.js +++ b/public/themes/default/js/admin/server/transfer.js @@ -1,14 +1,14 @@ $(document).ready(function () { $('#pNodeId').select2({ - placeholder: 'Select a Node', + placeholder: 'Selecione um Node', }).change(); $('#pAllocation').select2({ - placeholder: 'Select a Default Allocation', + placeholder: 'Selecione uma alocação padrão', }); $('#pAllocationAdditional').select2({ - placeholder: 'Select Additional Allocations', + placeholder: 'Selecionar alocações adicionais', }); }); @@ -19,7 +19,7 @@ $('#pNodeId').on('change', function () { if (v.id == currentNode) { $('#pAllocation').html('').select2({ data: v.allocations, - placeholder: 'Select a Default Allocation', + placeholder: 'Selecione uma alocação padrão', }); updateAdditionalAllocations(); @@ -49,7 +49,7 @@ function updateAdditionalAllocations() { $('#pAllocationAdditional').html('').select2({ data: allocations, - placeholder: 'Select Additional Allocations', + placeholder: 'Selecionar alocações adicionais', }); } }); diff --git a/public/themes/default/js/admin/statistics.js b/public/themes/default/js/admin/statistics.js index 5dc6f847c..fcd793750 100644 --- a/public/themes/default/js/admin/statistics.js +++ b/public/themes/default/js/admin/statistics.js @@ -12,7 +12,7 @@ const freeMemory = Jexactyl.memoryTotal - Jexactyl.memoryUsed; const diskChart = new Chart($("#disk_chart"), { type: "pie", data: { - labels: ["Free Disk", "Used Disk"], + labels: ["Disco livre", "Disco usado"], datasets: [{ backgroundColor: ["#189a1c", "hsl(211, 22%, 21%)"], data: [freeDisk, Jexactyl.diskUsed] @@ -23,7 +23,7 @@ const diskChart = new Chart($("#disk_chart"), { const ramChart = new Chart($("#ram_chart"), { type: "pie", data: { - labels: ["Free RAM", "Used RAM"], + labels: ["RAM livre", "RAM usada"], datasets: [{ backgroundColor: ["#189a1c", "hsl(211, 22%, 21%)"], data: [freeMemory, Jexactyl.memoryUsed] @@ -34,7 +34,7 @@ const ramChart = new Chart($("#ram_chart"), { const serversChart = new Chart($("#servers_chart"), { type: "pie", data: { - labels: ["Active Servers", "Suspended Servers"], + labels: ["Servidores ativos", "Servidores suspensos"], datasets: [{ backgroundColor: ["#189a1c", "hsl(211, 22%, 21%)"], data: [active, suspended] diff --git a/public/themes/default/vendor/jquery/date-format.min.js b/public/themes/default/vendor/jquery/date-format.min.js index 27b1ff4bc..b3d8ff9bb 100644 --- a/public/themes/default/vendor/jquery/date-format.min.js +++ b/public/themes/default/vendor/jquery/date-format.min.js @@ -1,2 +1,2 @@ /*! jquery-dateFormat 18-05-2015 */ -var DateFormat={};!function(a){var b=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],c=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],d=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],e=["January","February","March","April","May","June","July","August","September","October","November","December"],f={Jan:"01",Feb:"02",Mar:"03",Apr:"04",May:"05",Jun:"06",Jul:"07",Aug:"08",Sep:"09",Oct:"10",Nov:"11",Dec:"12"},g=/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d{0,3}[Z\-+]?(\d{2}:?\d{2})?/;a.format=function(){function a(a){return b[parseInt(a,10)]||a}function h(a){return c[parseInt(a,10)]||a}function i(a){var b=parseInt(a,10)-1;return d[b]||a}function j(a){var b=parseInt(a,10)-1;return e[b]||a}function k(a){return f[a]||a}function l(a){var b,c,d,e,f,g=a,h="";return-1!==g.indexOf(".")&&(e=g.split("."),g=e[0],h=e[e.length-1]),f=g.split(":"),3===f.length?(b=f[0],c=f[1],d=f[2].replace(/\s.+/,"").replace(/[a-z]/gi,""),g=g.replace(/\s.+/,"").replace(/[a-z]/gi,""),{time:g,hour:b,minute:c,second:d,millis:h}):{time:"",hour:"",minute:"",second:"",millis:""}}function m(a,b){for(var c=b-String(a).length,d=0;c>d;d++)a="0"+a;return a}return{parseDate:function(a){var b,c,d={date:null,year:null,month:null,dayOfMonth:null,dayOfWeek:null,time:null};if("number"==typeof a)return this.parseDate(new Date(a));if("function"==typeof a.getFullYear)d.year=String(a.getFullYear()),d.month=String(a.getMonth()+1),d.dayOfMonth=String(a.getDate()),d.time=l(a.toTimeString()+"."+a.getMilliseconds());else if(-1!=a.search(g))b=a.split(/[T\+-]/),d.year=b[0],d.month=b[1],d.dayOfMonth=b[2],d.time=l(b[3].split(".")[0]);else switch(b=a.split(" "),6===b.length&&isNaN(b[5])&&(b[b.length]="()"),b.length){case 6:d.year=b[5],d.month=k(b[1]),d.dayOfMonth=b[2],d.time=l(b[3]);break;case 2:c=b[0].split("-"),d.year=c[0],d.month=c[1],d.dayOfMonth=c[2],d.time=l(b[1]);break;case 7:case 9:case 10:d.year=b[3],d.month=k(b[1]),d.dayOfMonth=b[2],d.time=l(b[4]);break;case 1:c=b[0].split(""),d.year=c[0]+c[1]+c[2]+c[3],d.month=c[5]+c[6],d.dayOfMonth=c[8]+c[9],d.time=l(c[13]+c[14]+c[15]+c[16]+c[17]+c[18]+c[19]+c[20]);break;default:return null}return d.date=d.time?new Date(d.year,d.month-1,d.dayOfMonth,d.time.hour,d.time.minute,d.time.second,d.time.millis):new Date(d.year,d.month-1,d.dayOfMonth),d.dayOfWeek=String(d.date.getDay()),d},date:function(b,c){try{var d=this.parseDate(b);if(null===d)return b;for(var e,f=d.year,g=d.month,k=d.dayOfMonth,l=d.dayOfWeek,n=d.time,o="",p="",q="",r=!1,s=0;s=12?"PM":"AM",o="";break;case"p":p+=n.hour>=12?"p.m.":"a.m.",o="";break;case"E":p+=h(l),o="";break;case"'":o="",r=!0;break;default:p+=t,o=""}}return p+=q}catch(w){return console&&console.log&&console.log(w),b}},prettyDate:function(a){var b,c,d;return("string"==typeof a||"number"==typeof a)&&(b=new Date(a)),"object"==typeof a&&(b=new Date(a.toString())),c=((new Date).getTime()-b.getTime())/1e3,d=Math.floor(c/86400),isNaN(d)||0>d?void 0:60>c?"just now":120>c?"1 minute ago":3600>c?Math.floor(c/60)+" minutes ago":7200>c?"1 hour ago":86400>c?Math.floor(c/3600)+" hours ago":1===d?"Yesterday":7>d?d+" days ago":31>d?Math.ceil(d/7)+" weeks ago":d>=31?"more than 5 weeks ago":void 0},toBrowserTimeZone:function(a,b){return this.date(new Date(a),b||"MM/dd/yyyy HH:mm:ss")}}}()}(DateFormat),function(a){a.format=DateFormat.format}(jQuery); +var DateFormat={};!function(a){var b=["Domingo","Segunda-feira","Terça-feira","Quarta-feira","Quinta-feira","Sexta-feira","Sábado"],c=["Dom","Seg","Ter","Qua","Qui","Sex","Sab"],d=["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],e=["Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],f={Jan:"01",Fev:"02",Mar:"03",Abr:"04",Mai:"05",Jun:"06",Jul:"07",Ago:"08",Set:"09",Out:"10",Nov:"11",Dez:"12"},g=/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.?\d{0,3}[Z\-+]?(\d{2}:?\d{2})?/;a.format=function(){function a(a){return b[parseInt(a,10)]||a}function h(a){return c[parseInt(a,10)]||a}function i(a){var b=parseInt(a,10)-1;return d[b]||a}function j(a){var b=parseInt(a,10)-1;return e[b]||a}function k(a){return f[a]||a}function l(a){var b,c,d,e,f,g=a,h="";return-1!==g.indexOf(".")&&(e=g.split("."),g=e[0],h=e[e.length-1]),f=g.split(":"),3===f.length?(b=f[0],c=f[1],d=f[2].replace(/\s.+/,"").replace(/[a-z]/gi,""),g=g.replace(/\s.+/,"").replace(/[a-z]/gi,""),{time:g,hour:b,minute:c,second:d,millis:h}):{time:"",hour:"",minute:"",second:"",millis:""}}function m(a,b){for(var c=b-String(a).length,d=0;c>d;d++)a="0"+a;return a}return{parseDate:function(a){var b,c,d={date:null,year:null,month:null,dayOfMonth:null,dayOfWeek:null,time:null};if("number"==typeof a)return this.parseDate(new Date(a));if("function"==typeof a.getFullYear)d.year=String(a.getFullYear()),d.month=String(a.getMonth()+1),d.dayOfMonth=String(a.getDate()),d.time=l(a.toTimeString()+"."+a.getMilliseconds());else if(-1!=a.search(g))b=a.split(/[T\+-]/),d.year=b[0],d.month=b[1],d.dayOfMonth=b[2],d.time=l(b[3].split(".")[0]);else switch(b=a.split(" "),6===b.length&&isNaN(b[5])&&(b[b.length]="()"),b.length){case 6:d.year=b[5],d.month=k(b[1]),d.dayOfMonth=b[2],d.time=l(b[3]);break;case 2:c=b[0].split("-"),d.year=c[0],d.month=c[1],d.dayOfMonth=c[2],d.time=l(b[1]);break;case 7:case 9:case 10:d.year=b[3],d.month=k(b[1]),d.dayOfMonth=b[2],d.time=l(b[4]);break;case 1:c=b[0].split(""),d.year=c[0]+c[1]+c[2]+c[3],d.month=c[5]+c[6],d.dayOfMonth=c[8]+c[9],d.time=l(c[13]+c[14]+c[15]+c[16]+c[17]+c[18]+c[19]+c[20]);break;default:return null}return d.date=d.time?new Date(d.year,d.month-1,d.dayOfMonth,d.time.hour,d.time.minute,d.time.second,d.time.millis):new Date(d.year,d.month-1,d.dayOfMonth),d.dayOfWeek=String(d.date.getDay()),d},date:function(b,c){try{var d=this.parseDate(b);if(null===d)return b;for(var e,f=d.year,g=d.month,k=d.dayOfMonth,l=d.dayOfWeek,n=d.time,o="",p="",q="",r=!1,s=0;s=12?"PM":"AM",o="";break;case"p":p+=n.hour>=12?"p.m.":"a.m.",o="";break;case"E":p+=h(l),o="";break;case"'":o="",r=!0;break;default:p+=t,o=""}}return p+=q}catch(w){return console&&console.log&&console.log(w),b}},prettyDate:function(a){var b,c,d;return("string"==typeof a||"number"==typeof a)&&(b=new Date(a)),"object"==typeof a&&(b=new Date(a.toString())),c=((new Date).getTime()-b.getTime())/1e3,d=Math.floor(c/86400),isNaN(d)||0>d?void 0:60>c?"neste momento":120>c?"1 minuto atrás":3600>c?Math.floor(c/60)+" minutos atrás":7200>c?"1 hora atrás":86400>c?Math.floor(c/3600)+" horas atrás":1===d?"Ontem":7>d?d+" dias atrás":31>d?Math.ceil(d/7)+" semanas atrás":d>=31?"mais de 5 semanas atrás":void 0},toBrowserTimeZone:function(a,b){return this.date(new Date(a),b||"MM/dd/yyyy HH:mm:ss")}}}()}(DateFormat),function(a){a.format=DateFormat.format}(jQuery); diff --git a/public/themes/default/vendor/sidebr/sidebar.css b/public/themes/default/vendor/sidebr/sidebar.css new file mode 100644 index 000000000..76afe4183 --- /dev/null +++ b/public/themes/default/vendor/sidebr/sidebar.css @@ -0,0 +1,1298 @@ +/* + * + * + * Isto foi criado para selar e permitir com que o css não de erro. versão 1.0 por Jexactyl-Brasil + * + * + */ +.main-header .sidebar-toggle { /* BOTÃO FLUTUANTE*/ + position: fixed; + float: left; + margin-left: 7px; + margin-top: 0px; + font-size: 20px; + padding: 14px 20px; + /* background: rgba(255, 255, 255, 0.1); */ /* COR DE FUNDO DO BOTÃO FLUTUANTE */ + /*padding: 15px; */ + /*backdrop-filter: blur( 1.5px ); */ + /*-webkit-backdrop-filter: blur( 13.5px ); */ + /*border-radius: 50px; */ + /* border: 1px solid rgba( 255, 255, 255, 0.18 ); */ + font-family: fontAwesome +} + +.main-header .sidebar-toggle:hover { + background-color: none; + +} + +.content-header>h1 { /* Titulo e sub titulo da area principal */ + margin-left: 50px; /* DA ESPAÇO PRO BOTÃO */ + backdrop-filter: blur( 2.5px ); +} + +.wrapper { + height: 100%; + position: relative; + overflow-x: hidden; + overflow-y: auto +} + +.wrapper:before, +.wrapper:after { + content: " "; + display: table +} + +.wrapper:after { + clear: both +} + +.wrapper:before, +.wrapper:after { + content: " "; + display: table +} + +.wrapper:after { + clear: both +} + +.layout-boxed .wrapper { + max-width: 1250px; + margin: 0 auto; + min-height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.5); + position: relative +} + +.box>.overlay, +.overlay-wrapper>.overlay, +.box>.loading-img, +.overlay-wrapper>.loading-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100% +} + +.box .overlay, +.overlay-wrapper .overlay { + z-index: 50; + background: rgba(255, 255, 255, 0.7); + border-radius: 3px +} + +.box .overlay>.fa, +.overlay-wrapper .overlay>.fa { + position: absolute; + top: 50%; + left: 50%; + margin-left: -15px; + margin-top: -15px; + color: #000; + font-size: 30px +} + +.box .overlay.dark, +.overlay-wrapper .overlay.dark { + background: rgba(0, 0, 0, 0.5) +} + +.main-sidebar { + position: absolute; + top: 0; + left: 0; + padding-top: 10px; /* TOPO DA SIDEBAR*/ + min-height: 100%; + width: 230px; /* TAMANHO DA AREA DE BRILHO DA SIDEBAR */ + z-index: 810; + -webkit-transition: -webkit-transform .3s ease-in-out, width .3s ease-in-out; + -moz-transition: -moz-transform .3s ease-in-out, width .3s ease-in-out; + -o-transition: -o-transform .3s ease-in-out, width .3s ease-in-out; + transition: transform .3s ease-in-out, width .3s ease-in-out +} + +@media (max-width:767px) { + .main-sidebar { + padding-top: 10px /* TAMANHO TOP SIDEBAR MOBILE */ + } +} + +@media (max-width:767px) { + .main-sidebar { + -webkit-transform: translate(-230px, 0); + -ms-transform: translate(-230px, 0); + -o-transform: translate(-230px, 0); + transform: translate(-230px, 0) + } +} + +@media (min-width:768px) { + .sidebar-collapse .main-sidebar { + -webkit-transform: translate(-230px, 0); + -ms-transform: translate(-230px, 0); + -o-transform: translate(-230px, 0); + transform: translate(-230px, 0) + } +} + +@media (max-width:767px) { + .sidebar-open .main-sidebar { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0) + } +} + +.content-wrapper, +.main-footer { + -webkit-transition: -webkit-transform .3s ease-in-out, margin .3s ease-in-out; + -moz-transition: -moz-transform .3s ease-in-out, margin .3s ease-in-out; + -o-transition: -o-transform .3s ease-in-out, margin .3s ease-in-out; + transition: transform .3s ease-in-out, margin .3s ease-in-out; + margin-left: 230px; + z-index: 820 +} + +.layout-top-nav .content-wrapper, +.layout-top-nav .main-footer { + margin-left: 0 +} + +@media (max-width:767px) { + + .content-wrapper, + .main-footer { + margin-left: 0 + } +} + +.content-wrapper { + min-height: 100%; + background-color: #ecf0f5; + z-index: 800 +} + +.main-footer { + background: #fff; + padding: 15px; + color: #444; + border-top: 1px solid #d2d6de +} + +.fixed .main-header, +.fixed .main-sidebar, +.fixed .left-side { + position: fixed +} + +.fixed .main-header { + top: 0; + right: 0; + left: 0 +} + +.fixed .content-wrapper +.fixed .right-side { + padding-top: 50px +} + +@media (max-width:767px) { + + .fixed .content-wrapper + .fixed .right-side { + padding-top: 100px + } +} + +.fixed.layout-boxed .wrapper { + max-width: 100% +} + +.fixed .wrapper { + overflow: hidden +} + +.hold-transition .content-wrapper, +.hold-transition .right-side, +.hold-transition .main-footer, +.hold-transition .main-sidebar, +.hold-transition .left-side, +.hold-transition .main-header .navbar, +.hold-transition .main-header .logo, +.hold-transition .menu-open .fa-angle-left { + -webkit-transition: none; + -o-transition: none; + transition: none +} + +.sidebar { + padding-bottom: 10px; + overflow: hidden +} + +.sidebar-form input:focus { + border-color: transparent +} + +.sidebar-menu { + list-style: none; + margin: 0; + padding: 0; + overflow: hidden; +} + +.sidebar-menu>li { + background: rgba(16, 0, 22, 0.35); /* COR BARRA LATERAL NAO SELECIONADO*/ + border-radius: 30px 100px 100px 30px; + margin-top: 4px; + position: relative; + padding: 0.1rem 10px 0.1rem 0.188rem; +} +/* BARRALATERAL */ +.sidebar-menu>li>a { + padding: 12px 5px 12px 15px; + border-radius: 30px 100px 100px 30px; + text-align: left; + font-size: 20px; + display: block +} + +.sidebar-menu>li>a>.fa, +.sidebar-menu>li>a>.glyphicon, +.sidebar-menu>li>a>.ion { + width: 20px +} + +.sidebar-menu>li .label, +.sidebar-menu>li .badge { + margin-right: 5px +} + +.sidebar-menu>li .badge { + margin-top: 3px +} + +.sidebar-menu li.header { + padding: 10px 25px 10px 15px; + font-size: 12px +} + +.sidebar-menu li>a>.fa-angle-left, +.sidebar-menu li>a>.pull-right-container>.fa-angle-left { + width: auto; + height: auto; + padding: 0; + margin-right: 10px; + -webkit-transition: transform .5s ease; + -o-transition: transform .5s ease; + transition: transform .5s ease +} + +.sidebar-menu li>a>.fa-angle-left { + position: absolute; + top: 50%; + right: 10px; + margin-top: -8px +} + +.sidebar-menu .menu-open>a>.fa-angle-left, +.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left { + -webkit-transform: rotate(-90deg); + -ms-transform: rotate(-90deg); + -o-transform: rotate(-90deg); + transform: rotate(-90deg) +} + +.sidebar-menu .active>.treeview-menu { + display: block +} + +@media (min-width:768px) { + + .sidebar-mini.sidebar-collapse .content-wrapper, + .sidebar-mini.sidebar-collapse .right-side, + .sidebar-mini.sidebar-collapse .main-footer { + margin-left:80px !important; + z-index: 840 + } + + .sidebar-mini.sidebar-collapse .main-sidebar { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); + width: 80px !important; + z-index: 850 + } + + .sidebar-mini.sidebar-collapse .sidebar-menu>li { + position: relative + } + + .sidebar-mini.sidebar-collapse .sidebar-menu>li>a { + margin-right: 0 + } + + .sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span { + border-top-right-radius: 4px + } + + .sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span { + border-bottom-right-radius: 4px + } + + .sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu { + padding-top: 5px; + padding-bottom: 5px; + border-bottom-right-radius: 4px + } + + .sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info, + .sidebar-mini.sidebar-collapse .sidebar-form, + .sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span, + .sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu, + .sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right, + .sidebar-mini.sidebar-collapse .main-sidebar>a>span,/* Faz o nome sumir */ + .sidebar-mini.sidebar-collapse .sidebar-menu li.header { + display: none !important; + -webkit-transform: translateZ(0) + } + + .sidebar-mini.sidebar-collapse .main-header .logo { + width: 80px + } + + .sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini { + display: block; + margin-left: -15px; + margin-right: -15px; + font-size: 18px + } + + .sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg { + display: none + } +/* TAMANHO BARRA PTERODACTYL */ + .sidebar-mini.sidebar-collapse .main-header .navbar { + margin-left: 80px + } +} + +.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right), +.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu { + display: block !important; + position: absolute; + width: 230px; + left: 50px +} + +.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span { + top: 0; + margin-left: -3px; + padding: 12px 5px 12px 20px; + background-color: inherit +} + +.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container { + position: relative !important; + float: right; + width: auto !important; + left: 180px !important; + top: -22px !important; + z-index: 900 +} + +.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type) { + display: none +} + +.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu { + top: 44px; + margin-left: 0 +} + +.sidebar-expanded-on-hover .main-footer, +.sidebar-expanded-on-hover .content-wrapper { + margin-left: 50px +} + +.sidebar-expanded-on-hover .main-sidebar { + box-shadow: 3px 0 8px rgba(0, 0, 0, 0.125) +} + +.sidebar-menu, +.main-sidebar .user-panel, +.sidebar-menu>li.header { + white-space: nowrap; + overflow: hidden; +} + +.sidebar-menu:hover { + overflow: visible +} + +.sidebar-form, +.sidebar-menu>li.header { + overflow: hidden; + text-overflow: clip +} + +.sidebar-menu li>a { + position: relative +} + +.sidebar-menu li>a>.pull-right-container { + position: absolute; + right: 10px; + top: 50%; + margin-top: -7px +} + +.control-sidebar-bg { + position: fixed; + z-index: 1000; + bottom: 0 +} + +.control-sidebar-bg, +.control-sidebar { + top: 0; + right: -230px; + width: 230px; + -webkit-transition: right .3s ease-in-out; + -o-transition: right .3s ease-in-out; + transition: right .3s ease-in-out +} + +.control-sidebar { + position: absolute; + padding-top: 50px; + z-index: 1010 +} + +@media (max-width:768px) { + .control-sidebar { + padding-top: 100px + } +} + +.control-sidebar>.tab-content { + padding: 10px 15px +} + +.control-sidebar.control-sidebar-open, +.control-sidebar.control-sidebar-open+.control-sidebar-bg { + right: 0 +} + +.control-sidebar-open .control-sidebar-bg, +.control-sidebar-open .control-sidebar { + right: 0 +} + +@media (min-width:768px) { + + .control-sidebar-open .content-wrapper, + .control-sidebar-open .right-side, + .control-sidebar-open .main-footer { + margin-right: 230px + } +} + +.fixed .control-sidebar { + position: fixed; + height: 100%; + overflow-y: visible; + padding-bottom: 50px +} + +.nav-tabs.control-sidebar-tabs>li:first-of-type>a, +.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover, +.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus { + border-left-width: 0 +} + +.nav-tabs.control-sidebar-tabs>li>a { + border-radius: 0 +} + +.nav-tabs.control-sidebar-tabs>li>a, +.nav-tabs.control-sidebar-tabs>li>a:hover { + border-top: none; + border-right: none; + border-left: 1px solid transparent; + border-bottom: 1px solid transparent +} + +.nav-tabs.control-sidebar-tabs>li>a .icon { + font-size: 16px +} + +.nav-tabs.control-sidebar-tabs>li.active>a, +.nav-tabs.control-sidebar-tabs>li.active>a:hover, +.nav-tabs.control-sidebar-tabs>li.active>a:focus, +.nav-tabs.control-sidebar-tabs>li.active>a:active { + border-top: none; + border-right: none; + border-bottom: none +} + +@media (max-width:768px) { + .nav-tabs.control-sidebar-tabs { + display: table + } + + .nav-tabs.control-sidebar-tabs>li { + display: table-cell + } +} + +.control-sidebar-heading { + font-weight: 400; + font-size: 16px; + padding: 10px 0; + margin-bottom: 10px +} + +.control-sidebar-subheading { + display: block; + font-weight: 400; + font-size: 14px +} + +.control-sidebar-menu { + list-style: none; + padding: 0; + margin: 0 -15px +} + +.control-sidebar-menu>li>a { + display: block; + padding: 10px 15px +} + +.control-sidebar-menu>li>a:before, +.control-sidebar-menu>li>a:after { + content: " "; + display: table +} + +.control-sidebar-menu>li>a:after { + clear: both +} + +.control-sidebar-menu>li>a:before, +.control-sidebar-menu>li>a:after { + content: " "; + display: table +} + +.control-sidebar-menu>li>a:after { + clear: both +} + +.control-sidebar-menu>li>a>.control-sidebar-subheading { + margin-top: 0 +} + +.control-sidebar-menu .menu-icon { + float: left; + width: 35px; + height: 35px; + border-radius: 50%; + text-align: center; + line-height: 35px +} + +.control-sidebar-menu .menu-info { + margin-left: 45px; + margin-top: 3px +} + +.control-sidebar-menu .menu-info>.control-sidebar-subheading { + margin: 0 +} + +.control-sidebar-menu .menu-info>p { + margin: 0; + font-size: 11px +} + +.control-sidebar-menu .progress { + margin: 0 +} + +.control-sidebar-dark { + color: #b8c7ce +} + +.control-sidebar-dark, +.control-sidebar-dark+.control-sidebar-bg { + background: #222d32 +} + +.control-sidebar-dark .nav-tabs.control-sidebar-tabs { + border-bottom: #1c2529 +} + +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a { + background: #181f23; + color: #b8c7ce +} + +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus { + border-left-color: #141a1d; + border-bottom-color: #141a1d +} + +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active { + background: #1c2529 +} + +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover { + color: #fff +} + +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus, +.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active { + background: #222d32; + color: #fff +} + +.control-sidebar-dark .control-sidebar-heading, +.control-sidebar-dark .control-sidebar-subheading { + color: #fff +} + +.control-sidebar-dark .control-sidebar-menu>li>a:hover { + background: #1e282c +} + +.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p { + color: #b8c7ce +} + +.control-sidebar-light { + color: #5e5e5e +} + +.control-sidebar-light, +.control-sidebar-light+.control-sidebar-bg { + background: #f9fafc; + border-left: 1px solid #d2d6de +} + +.control-sidebar-light .nav-tabs.control-sidebar-tabs { + border-bottom: #d2d6de +} + +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a { + background: #e8ecf4; + color: #444 +} + +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a, +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus { + border-left-color: #d2d6de; + border-bottom-color: #d2d6de +} + +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus, +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active { + background: #eff1f7 +} + +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a, +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover, +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus, +.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active { + background: #f9fafc; + color: #111 +} + +.control-sidebar-light .control-sidebar-heading, +.control-sidebar-light .control-sidebar-subheading { + color: #111 +} + +.control-sidebar-light .control-sidebar-menu { + margin-left: -14px +} + +.control-sidebar-light .control-sidebar-menu>li>a:hover { + background: #f4f4f5 +} + +.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p { + color: #5e5e5e +} + +.main-header .sidebar-toggle:before { + content: "\f0c9" +} +/* +.main-header .sidebar-toggle:hover { + color: #fff +} */ + +.main-header .sidebar-toggle:focus, +.main-header .sidebar-toggle:active { + background: transparent +} +.main-header .sidebar-toggle .icon-bar { + display: none +} + +@media (min-width:768px) { + + .sidebar-collapse .content-wrapper, + .sidebar-collapse .main-footer { + margin-left: 0 + } +} + +@media (max-width:767px) { + + .sidebar-open .content-wrapper, + .sidebar-open .main-footer { + -webkit-transform: translate(230px, 0); + -ms-transform: translate(230px, 0); + -o-transform: translate(230px, 0); + transform: translate(230px, 0) + } +} + +.main-header .navbar { + -webkit-transition: margin-left .3s ease-in-out; + -o-transition: margin-left .3s ease-in-out; + transition: margin-left .3s ease-in-out; + margin-bottom: 0; + margin-left: 230px; + border: none; + min-height: 0px; + border-radius: 0 +} + +.layout-top-nav .main-header .navbar { + margin-left: 0 +} + +.main-header #navbar-search-input.form-control { + background: transparent; + border-color: transparent +} + +.main-header #navbar-search-input.form-control:focus, +.main-header #navbar-search-input.form-control:active { + border-color: rgba(0, 0, 0, 0.1); + background: rgba(255, 255, 255, 0.9) +} + +.main-header #navbar-search-input.form-control::-moz-placeholder { + color: #ccc; + opacity: 1 +} + +.main-header #navbar-search-input.form-control:-ms-input-placeholder { + color: #ccc +} + +.main-header #navbar-search-input.form-control::-webkit-input-placeholder { + color: #ccc +} + +.main-header .navbar-custom-menu, +.main-header .navbar-right { + float: right +} + +@media (max-width:991px) { + + .main-header .navbar-custom-menu a, + .main-header .navbar-right a { + color: inherit; + background: transparent + } +} + +@media (max-width:767px) { + .main-header .navbar-right { + float: none + } + + .navbar-collapse .main-header .navbar-right { + margin: 7.5px -15px + } + + .main-header .navbar-right>li { + color: inherit; + border: 0 + } +} + + +.main-header .navbar .nav>li.user>a>.fa, +.main-header .navbar .nav>li.user>a>.glyphicon, +.main-header .navbar .nav>li.user>a>.ion { + margin-right: 5px +} + +.main-header .navbar .nav>li>a>.label { + position: absolute; + top: 9px; + right: 7px; + text-align: center; + font-size: 9px; + padding: 2px 3px; + line-height: .9 +} + +.main-header .navbar-brand { + color: #fff +} + +.navbar-toggle { + color: #fff; + border: 0; + margin: 0; + padding: 15px 15px +} + +@media (max-width:991px) { + .navbar-custom-menu .navbar-nav>li { + float: left + } + + .navbar-custom-menu .navbar-nav { + margin: 0; + float: left + } + + .navbar-custom-menu .navbar-nav>li>a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px + } +} + +@media (max-width:767px) { + .main-header { + position: relative + } + + .main-header .logo, + .main-header .navbar { + width: none; + float: none + } + + .main-header .navbar { + margin: 0 + } + + .main-header .navbar-custom-menu { + float: right + } +} + +@media (max-width:991px) { + .navbar-collapse.pull-left { + float: none !important + } + + .navbar-collapse.pull-left+.navbar-custom-menu { + display: block; + position: absolute; + top: 0; + right: 40px + } +} + +.navbar-nav>.notifications-menu>.dropdown-menu, +.navbar-nav>.messages-menu>.dropdown-menu, +.navbar-nav>.tasks-menu>.dropdown-menu { + width: 280px; + padding: 0 0 0 0; + margin: 0; + top: 100% +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li, +.navbar-nav>.messages-menu>.dropdown-menu>li, +.navbar-nav>.tasks-menu>.dropdown-menu>li { + position: relative +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li.header, +.navbar-nav>.messages-menu>.dropdown-menu>li.header, +.navbar-nav>.tasks-menu>.dropdown-menu>li.header { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + background-color: #ffffff; + padding: 7px 10px; + border-bottom: 1px solid #f4f4f4; + color: #444444; + font-size: 14px +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a, +.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a, +.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; + font-size: 12px; + background-color: #fff; + padding: 7px 10px; + border-bottom: 1px solid #eeeeee; + color: #444 !important; + text-align: center +} + +@media (max-width:991px) { + + .navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a, + .navbar-nav>.messages-menu>.dropdown-menu>li.footer>a, + .navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a { + background: #fff !important; + color: #444 !important + } +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover, +.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover, +.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover { + text-decoration: none; + font-weight: normal +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li .menu, +.navbar-nav>.messages-menu>.dropdown-menu>li .menu, +.navbar-nav>.tasks-menu>.dropdown-menu>li .menu { + max-height: 200px; + margin: 0; + padding: 0; + list-style: none; + overflow-x: hidden +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a, +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a, +.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a { + display: block; + white-space: nowrap; + border-bottom: 1px solid #f4f4f4 +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover, +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover, +.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover { + background: #f4f4f4; + text-decoration: none +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a { + color: #444444; + overflow: hidden; + text-overflow: ellipsis; + padding: 10px +} + +.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon, +.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa, +.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion { + width: 20px +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a { + margin: 0; + padding: 10px 10px +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img { + margin: auto 10px auto auto; + width: 40px; + height: 40px +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4 { + padding: 0; + margin: 0 0 0 45px; + color: #444444; + font-size: 15px; + position: relative +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small { + color: #999999; + font-size: 10px; + position: absolute; + top: 0; + right: 0 +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p { + margin: 0 0 0 45px; + font-size: 12px; + color: #888888 +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before, +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after { + content: " "; + display: table +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after { + clear: both +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before, +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after { + content: " "; + display: table +} + +.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after { + clear: both +} + +.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a { + padding: 10px +} + +.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3 { + font-size: 14px; + padding: 0; + margin: 0 0 10px 0; + color: #666666 +} + +.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress { + padding: 0; + margin: 0 +} + +.navbar-nav>.user-menu>.dropdown-menu { + border-top-right-radius: 0; + border-top-left-radius: 0; + padding: 1px 0 0 0; + border-top-width: 0; + width: 280px +} + +.navbar-nav>.user-menu>.dropdown-menu, +.navbar-nav>.user-menu>.dropdown-menu>.user-body { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px +} + +.navbar-nav>.user-menu>.dropdown-menu>li.user-header { + height: 175px; + padding: 10px; + text-align: center +} + +.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img { + z-index: 5; + height: 90px; + width: 90px; + border: 3px solid; + border-color: transparent; + border-color: rgba(255, 255, 255, 0.2) +} + +.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p { + z-index: 5; + color: #fff; + color: rgba(255, 255, 255, 0.8); + font-size: 17px; + margin-top: 10px +} + +.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small { + display: block; + font-size: 12px +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-body { + padding: 15px; + border-bottom: 1px solid #f4f4f4; + border-top: 1px solid #dddddd +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-body:before, +.navbar-nav>.user-menu>.dropdown-menu>.user-body:after { + content: " "; + display: table +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-body:after { + clear: both +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-body:before, +.navbar-nav>.user-menu>.dropdown-menu>.user-body:after { + content: " "; + display: table +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-body:after { + clear: both +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-body a { + color: #444 !important +} + +@media (max-width:991px) { + .navbar-nav>.user-menu>.dropdown-menu>.user-body a { + background: #fff !important; + color: #444 !important + } +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-footer { + background-color: #f9f9f9; + padding: 10px +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before, +.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after { + content: " "; + display: table +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after { + clear: both +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before, +.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after { + content: " "; + display: table +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after { + clear: both +} + +.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default { + color: #666666 +} + +@media (max-width:991px) { + .navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover { + background-color: #f9f9f9 + } +} + +.navbar-nav>.user-menu .user-image { + float: left; + width: 25px; + height: 25px; + border-radius: 50%; + margin-right: 10px; + margin-top: -2px +} + +@media (max-width:767px) { + .navbar-nav>.user-menu .user-image { + float: none; + margin-right: 0; + margin-top: -8px; + line-height: 10px + } +} + +.navbar-custom-menu>.navbar-nav>li { + position: relative +} + +.navbar-custom-menu>.navbar-nav>li>.dropdown-menu { + position: absolute; + right: 0; + left: auto +} + +@media (max-width:991px) { + .navbar-custom-menu>.navbar-nav { + float: right + } + + .navbar-custom-menu>.navbar-nav>li { + position: static + } + + .navbar-custom-menu>.navbar-nav>li>.dropdown-menu { + position: absolute; + right: 5%; + left: auto; + border: 1px solid #ddd; + background: #fff + } +} + +@media print { + + .no-print, + .main-sidebar, + .left-side, + .main-header, + .content-header { + display: none !important + } + + .content-wrapper, + .right-side, + .main-footer { + margin-left: 0 !important; + min-height: 0 !important; + -webkit-transform: translate(0, 0) !important; + -ms-transform: translate(0, 0) !important; + -o-transform: translate(0, 0) !important; + transform: translate(0, 0) !important + } + + .fixed .content-wrapper, + .fixed .right-side { + padding-top: 0 !important + } + + .invoice { + width: 100%; + border: 0; + margin: 0; + padding: 0 + } + + .invoice-col { + float: left; + width: 33.3333333% + } + + .table-responsive { + overflow: auto + } + + .table-responsive>.table tr th, + .table-responsive>.table tr td { + white-space: normal !important + } +} + diff --git a/public/themes/default/vendor/sidejx/sidebar.css b/public/themes/default/vendor/sidejx/sidebar.css new file mode 100644 index 000000000..028bd1a00 --- /dev/null +++ b/public/themes/default/vendor/sidejx/sidebar.css @@ -0,0 +1,71 @@ +/* + * + * + * Isto foi criado para selar e permitir com que o css não de erro. versão 1.5 por Jexactyl-Brasil + * + * + */ + +/* Retorna modulo (padrão jex) */ +.sidebar-menu>li { + background: rgba(16, 0, 22, 0.35); /* COR BARRA LATERAL NAO SELECIONADO*/ + border-radius: 0px; + margin-top: 4px; + position: relative; + padding: 0.1rem 10px 0.1rem 0.188rem; +} + +.content-header>h1 { /* Titulo e sub titulo da area principal */ + margin-left: 0px; /* DA ESPAÇO PRO BOTÃO */ +} + +@media (max-width:767px) { + .main-sidebar { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0) + } +} + +/* Reduz o tamanho da barra para 90px(padrão jex) */ +.main-sidebar { + position: absolute; + top: 0; + left: 0; + padding-top: 10px; /* TOPO DA SIDEBAR*/ + min-height: 100%; + width: 90px; /* TAMANHO DA AREA DA SIDEBAR */ + z-index: 810; + -webkit-transition: -webkit-transform .3s ease-in-out, width .3s ease-in-out; + -moz-transition: -moz-transform .3s ease-in-out, width .3s ease-in-out; + -o-transition: -o-transform .3s ease-in-out, width .3s ease-in-out; + transition: transform .3s ease-in-out, width .3s ease-in-out +} + +/* Reduz o tamanho da barra para 90px(padrão jex) */ +.content-wrapper, +.main-footer { + -webkit-transition: -webkit-transform .3s ease-in-out, margin .3s ease-in-out; + -moz-transition: -moz-transform .3s ease-in-out, margin .3s ease-in-out; + -o-transition: -o-transform .3s ease-in-out, margin .3s ease-in-out; + transition: transform .3s ease-in-out, margin .3s ease-in-out; + margin-left: 90px; + z-index: 820 +} + +/* Remove TEXTO DA EMPRESA */ +a>span { + display: none; +} + +/* Remove TEXTO SIDEBAR */ +.sidebar-menu>li>a>span { + display: none +} + +/* Remove BOTAO ABRIR E FECHAR SIDEBAR */ +.skin-blue .main-header .navbar { + background-color: none; + display: none; +} diff --git a/public/themes/jexactyl/css/checkbox.css b/public/themes/jexactyl/css/checkbox.css new file mode 100644 index 000000000..a75e63af6 --- /dev/null +++ b/public/themes/jexactyl/css/checkbox.css @@ -0,0 +1,232 @@ +/** + * Bootsnip - "Bootstrap Checkboxes/Radios" + * Bootstrap 3.2.0 Snippet by i-heart-php + * + * Copyright (c) 2013 Bootsnipp.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + .checkbox { + padding-left: 20px; +} +.checkbox label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.checkbox label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + top: 2.5px; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 3px; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + transition: border 0.15s ease-in-out, color 0.15s ease-in-out; +} +.checkbox label::after { + display: inline-block; + position: absolute; + width: 16px; + height: 16px; + left: 0; + top: 2.5px; + margin-left: -20px; + padding-left: 3px; + padding-top: 1px; + font-size: 11px; + color: #555555; +} +.checkbox input[type="checkbox"] { + opacity: 0; +} +.checkbox input[type="checkbox"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.checkbox input[type="checkbox"]:checked + label::after { + font-family: 'FontAwesome'; + content: "\f00c"; +} +.checkbox input[type="checkbox"]:disabled + label { + opacity: 0.65; +} +.checkbox input[type="checkbox"]:disabled + label::before { + background-color: #eeeeee; + cursor: not-allowed; +} +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} +.checkbox.checkbox-inline { + margin-top: 0; +} +.checkbox-primary input[type="checkbox"]:checked + label::before { + background-color: #428bca; + border-color: #428bca; +} +.checkbox-primary input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-danger input[type="checkbox"]:checked + label::before { + background-color: #d9534f; + border-color: #d9534f; +} +.checkbox-danger input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-info input[type="checkbox"]:checked + label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} +.checkbox-info input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-warning input[type="checkbox"]:checked + label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} +.checkbox-warning input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-success input[type="checkbox"]:checked + label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} +.checkbox-success input[type="checkbox"]:checked + label::after { + color: #fff; +} +.radio { + padding-left: 20px; +} +.radio label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.radio label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 50%; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out; + transition: border 0.15s ease-in-out; +} +.radio label::after { + display: inline-block; + position: absolute; + content: " "; + width: 11px; + height: 11px; + left: 3px; + top: 3px; + margin-left: -20px; + border-radius: 50%; + background-color: #555555; + -webkit-transform: scale(0, 0); + -ms-transform: scale(0, 0); + -o-transform: scale(0, 0); + transform: scale(0, 0); + -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); +} +.radio input[type="radio"] { + opacity: 0; +} +.radio input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.radio input[type="radio"]:checked + label::after { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); +} +.radio input[type="radio"]:disabled + label { + opacity: 0.65; +} +.radio input[type="radio"]:disabled + label::before { + cursor: not-allowed; +} +.radio.radio-inline { + margin-top: 0; +} +.radio-primary input[type="radio"] + label::after { + background-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::before { + border-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::after { + background-color: #428bca; +} +.radio-danger input[type="radio"] + label::after { + background-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::before { + border-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::after { + background-color: #d9534f; +} +.radio-info input[type="radio"] + label::after { + background-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::before { + border-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::after { + background-color: #5bc0de; +} +.radio-warning input[type="radio"] + label::after { + background-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::before { + border-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::after { + background-color: #f0ad4e; +} +.radio-success input[type="radio"] + label::after { + background-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::before { + border-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::after { + background-color: #5cb85c; +} diff --git a/public/themes/jexactyl/css/jexactyl.css b/public/themes/jexactyl/css/jexactyl.css index a2ab07c4a..dfae5aca4 100644 --- a/public/themes/jexactyl/css/jexactyl.css +++ b/public/themes/jexactyl/css/jexactyl.css @@ -49,9 +49,6 @@ body { background: #0e111582; } -.skin-blue .main-header .navbar { - background-color: hsl(210, 23%, 18%); -} .skin-blue .main-header .navbar .sidebar-toggle:hover { background-color: #1c252e; diff --git a/public/themes/light/css/checkbox.css b/public/themes/light/css/checkbox.css new file mode 100644 index 000000000..a75e63af6 --- /dev/null +++ b/public/themes/light/css/checkbox.css @@ -0,0 +1,232 @@ +/** + * Bootsnip - "Bootstrap Checkboxes/Radios" + * Bootstrap 3.2.0 Snippet by i-heart-php + * + * Copyright (c) 2013 Bootsnipp.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + .checkbox { + padding-left: 20px; +} +.checkbox label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.checkbox label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + top: 2.5px; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 3px; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + transition: border 0.15s ease-in-out, color 0.15s ease-in-out; +} +.checkbox label::after { + display: inline-block; + position: absolute; + width: 16px; + height: 16px; + left: 0; + top: 2.5px; + margin-left: -20px; + padding-left: 3px; + padding-top: 1px; + font-size: 11px; + color: #555555; +} +.checkbox input[type="checkbox"] { + opacity: 0; +} +.checkbox input[type="checkbox"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.checkbox input[type="checkbox"]:checked + label::after { + font-family: 'FontAwesome'; + content: "\f00c"; +} +.checkbox input[type="checkbox"]:disabled + label { + opacity: 0.65; +} +.checkbox input[type="checkbox"]:disabled + label::before { + background-color: #eeeeee; + cursor: not-allowed; +} +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} +.checkbox.checkbox-inline { + margin-top: 0; +} +.checkbox-primary input[type="checkbox"]:checked + label::before { + background-color: #428bca; + border-color: #428bca; +} +.checkbox-primary input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-danger input[type="checkbox"]:checked + label::before { + background-color: #d9534f; + border-color: #d9534f; +} +.checkbox-danger input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-info input[type="checkbox"]:checked + label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} +.checkbox-info input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-warning input[type="checkbox"]:checked + label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} +.checkbox-warning input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-success input[type="checkbox"]:checked + label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} +.checkbox-success input[type="checkbox"]:checked + label::after { + color: #fff; +} +.radio { + padding-left: 20px; +} +.radio label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.radio label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 50%; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out; + transition: border 0.15s ease-in-out; +} +.radio label::after { + display: inline-block; + position: absolute; + content: " "; + width: 11px; + height: 11px; + left: 3px; + top: 3px; + margin-left: -20px; + border-radius: 50%; + background-color: #555555; + -webkit-transform: scale(0, 0); + -ms-transform: scale(0, 0); + -o-transform: scale(0, 0); + transform: scale(0, 0); + -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); +} +.radio input[type="radio"] { + opacity: 0; +} +.radio input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.radio input[type="radio"]:checked + label::after { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); +} +.radio input[type="radio"]:disabled + label { + opacity: 0.65; +} +.radio input[type="radio"]:disabled + label::before { + cursor: not-allowed; +} +.radio.radio-inline { + margin-top: 0; +} +.radio-primary input[type="radio"] + label::after { + background-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::before { + border-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::after { + background-color: #428bca; +} +.radio-danger input[type="radio"] + label::after { + background-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::before { + border-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::after { + background-color: #d9534f; +} +.radio-info input[type="radio"] + label::after { + background-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::before { + border-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::after { + background-color: #5bc0de; +} +.radio-warning input[type="radio"] + label::after { + background-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::before { + border-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::after { + background-color: #f0ad4e; +} +.radio-success input[type="radio"] + label::after { + background-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::before { + border-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::after { + background-color: #5cb85c; +} diff --git a/public/themes/minecraft/css/checkbox.css b/public/themes/minecraft/css/checkbox.css new file mode 100644 index 000000000..a75e63af6 --- /dev/null +++ b/public/themes/minecraft/css/checkbox.css @@ -0,0 +1,232 @@ +/** + * Bootsnip - "Bootstrap Checkboxes/Radios" + * Bootstrap 3.2.0 Snippet by i-heart-php + * + * Copyright (c) 2013 Bootsnipp.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + .checkbox { + padding-left: 20px; +} +.checkbox label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.checkbox label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + top: 2.5px; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 3px; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out; + transition: border 0.15s ease-in-out, color 0.15s ease-in-out; +} +.checkbox label::after { + display: inline-block; + position: absolute; + width: 16px; + height: 16px; + left: 0; + top: 2.5px; + margin-left: -20px; + padding-left: 3px; + padding-top: 1px; + font-size: 11px; + color: #555555; +} +.checkbox input[type="checkbox"] { + opacity: 0; +} +.checkbox input[type="checkbox"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.checkbox input[type="checkbox"]:checked + label::after { + font-family: 'FontAwesome'; + content: "\f00c"; +} +.checkbox input[type="checkbox"]:disabled + label { + opacity: 0.65; +} +.checkbox input[type="checkbox"]:disabled + label::before { + background-color: #eeeeee; + cursor: not-allowed; +} +.checkbox.checkbox-circle label::before { + border-radius: 50%; +} +.checkbox.checkbox-inline { + margin-top: 0; +} +.checkbox-primary input[type="checkbox"]:checked + label::before { + background-color: #428bca; + border-color: #428bca; +} +.checkbox-primary input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-danger input[type="checkbox"]:checked + label::before { + background-color: #d9534f; + border-color: #d9534f; +} +.checkbox-danger input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-info input[type="checkbox"]:checked + label::before { + background-color: #5bc0de; + border-color: #5bc0de; +} +.checkbox-info input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-warning input[type="checkbox"]:checked + label::before { + background-color: #f0ad4e; + border-color: #f0ad4e; +} +.checkbox-warning input[type="checkbox"]:checked + label::after { + color: #fff; +} +.checkbox-success input[type="checkbox"]:checked + label::before { + background-color: #5cb85c; + border-color: #5cb85c; +} +.checkbox-success input[type="checkbox"]:checked + label::after { + color: #fff; +} +.radio { + padding-left: 20px; +} +.radio label { + display: inline-block; + position: relative; + padding-left: 5px; +} +.radio label::before { + content: ""; + display: inline-block; + position: absolute; + width: 17px; + height: 17px; + left: 0; + margin-left: -20px; + border: 1px solid #cccccc; + border-radius: 50%; + background-color: #fff; + -webkit-transition: border 0.15s ease-in-out; + -o-transition: border 0.15s ease-in-out; + transition: border 0.15s ease-in-out; +} +.radio label::after { + display: inline-block; + position: absolute; + content: " "; + width: 11px; + height: 11px; + left: 3px; + top: 3px; + margin-left: -20px; + border-radius: 50%; + background-color: #555555; + -webkit-transform: scale(0, 0); + -ms-transform: scale(0, 0); + -o-transform: scale(0, 0); + transform: scale(0, 0); + -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); + transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33); +} +.radio input[type="radio"] { + opacity: 0; +} +.radio input[type="radio"]:focus + label::before { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.radio input[type="radio"]:checked + label::after { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + -o-transform: scale(1, 1); + transform: scale(1, 1); +} +.radio input[type="radio"]:disabled + label { + opacity: 0.65; +} +.radio input[type="radio"]:disabled + label::before { + cursor: not-allowed; +} +.radio.radio-inline { + margin-top: 0; +} +.radio-primary input[type="radio"] + label::after { + background-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::before { + border-color: #428bca; +} +.radio-primary input[type="radio"]:checked + label::after { + background-color: #428bca; +} +.radio-danger input[type="radio"] + label::after { + background-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::before { + border-color: #d9534f; +} +.radio-danger input[type="radio"]:checked + label::after { + background-color: #d9534f; +} +.radio-info input[type="radio"] + label::after { + background-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::before { + border-color: #5bc0de; +} +.radio-info input[type="radio"]:checked + label::after { + background-color: #5bc0de; +} +.radio-warning input[type="radio"] + label::after { + background-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::before { + border-color: #f0ad4e; +} +.radio-warning input[type="radio"]:checked + label::after { + background-color: #f0ad4e; +} +.radio-success input[type="radio"] + label::after { + background-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::before { + border-color: #5cb85c; +} +.radio-success input[type="radio"]:checked + label::after { + background-color: #5cb85c; +} diff --git a/resources/lang/en/activity.php b/resources/lang/en/activity.php deleted file mode 100644 index b950500a7..000000000 --- a/resources/lang/en/activity.php +++ /dev/null @@ -1,135 +0,0 @@ - [ - 'fail' => 'Failed log in', - 'success' => 'Logged in', - 'password-reset' => 'Password reset', - 'reset-password' => 'Requested password reset', - 'checkpoint' => 'Two-factor authentication requested', - 'recovery-token' => 'Used two-factor recovery token', - 'token' => 'Solved two-factor challenge', - 'ip-blocked' => 'Blocked request from unlisted IP address for :identifier', - 'sftp' => [ - 'fail' => 'Failed SFTP log in', - ], - ], - 'user' => [ - 'account' => [ - 'email-changed' => 'Changed email from :old to :new', - 'password-changed' => 'Changed password', - 'username-changed' => 'Changed username from :old to :new', - ], - 'api-key' => [ - 'create' => 'Created new API key :identifier', - 'delete' => 'Deleted API key :identifier', - ], - 'ssh-key' => [ - 'create' => 'Added SSH key :fingerprint to account', - 'delete' => 'Removed SSH key :fingerprint from account', - ], - 'two-factor' => [ - 'create' => 'Enabled two-factor auth', - 'delete' => 'Disabled two-factor auth', - ], - 'store' => [ - 'resource-purchase' => 'A resource was purchased', - ], - ], - - 'server' => [ - 'reinstall' => 'Reinstalled server', - 'console' => [ - 'command' => 'Executed ":command" on the server', - ], - 'power' => [ - 'start' => 'Started the server', - 'stop' => 'Stopped the server', - 'restart' => 'Restarted the server', - 'kill' => 'Killed the server process', - ], - 'backup' => [ - 'download' => 'Downloaded the :name backup', - 'delete' => 'Deleted the :name backup', - 'restore' => 'Restored the :name backup (deleted files: :truncate)', - 'restore-complete' => 'Completed restoration of the :name backup', - 'restore-failed' => 'Failed to complete restoration of the :name backup', - 'start' => 'Started a new backup :name', - 'complete' => 'Marked the :name backup as complete', - 'fail' => 'Marked the :name backup as failed', - 'lock' => 'Locked the :name backup', - 'unlock' => 'Unlocked the :name backup', - ], - 'database' => [ - 'create' => 'Created new database :name', - 'rotate-password' => 'Password rotated for database :name', - 'delete' => 'Deleted database :name', - ], - 'file' => [ - 'compress_one' => 'Compressed :directory:file', - 'compress_other' => 'Compressed :count files in :directory', - 'read' => 'Viewed the contents of :file', - 'copy' => 'Created a copy of :file', - 'create-directory' => 'Created directory :directory:name', - 'decompress' => 'Decompressed :files in :directory', - 'delete_one' => 'Deleted :directory:files.0', - 'delete_other' => 'Deleted :count files in :directory', - 'download' => 'Downloaded :file', - 'pull' => 'Downloaded a remote file from :url to :directory', - 'rename_one' => 'Renamed :directory:files.0.from to :directory:files.0.to', - 'rename_other' => 'Renamed :count files in :directory', - 'write' => 'Wrote new content to :file', - 'upload' => 'Began a file upload', - 'uploaded' => 'Uploaded :directory:file', - ], - 'sftp' => [ - 'denied' => 'Blocked SFTP access due to permissions', - 'create_one' => 'Created :files.0', - 'create_other' => 'Created :count new files', - 'write_one' => 'Modified the contents of :files.0', - 'write_other' => 'Modified the contents of :count files', - 'delete_one' => 'Deleted :files.0', - 'delete_other' => 'Deleted :count files', - 'create-directory_one' => 'Created the :files.0 directory', - 'create-directory_other' => 'Created :count directories', - 'rename_one' => 'Renamed :files.0.from to :files.0.to', - 'rename_other' => 'Renamed or moved :count files', - ], - 'allocation' => [ - 'create' => 'Added :allocation to the server', - 'notes' => 'Updated the notes for :allocation from ":old" to ":new"', - 'primary' => 'Set :allocation as the primary server allocation', - 'delete' => 'Deleted the :allocation allocation', - ], - 'schedule' => [ - 'create' => 'Created the :name schedule', - 'update' => 'Updated the :name schedule', - 'execute' => 'Manually executed the :name schedule', - 'delete' => 'Deleted the :name schedule', - ], - 'task' => [ - 'create' => 'Created a new ":action" task for the :name schedule', - 'update' => 'Updated the ":action" task for the :name schedule', - 'delete' => 'Deleted a task for the :name schedule', - ], - 'settings' => [ - 'rename' => 'Renamed the server from :old to :new', - 'description' => 'Changed the server description from :old to :new', - ], - 'startup' => [ - 'edit' => 'Changed the :variable variable from ":old" to ":new"', - 'image' => 'Updated the Docker Image for the server from :old to :new', - ], - 'subuser' => [ - 'create' => 'Added :email as a subuser', - 'update' => 'Updated the subuser permissions for :email', - 'delete' => 'Removed :email as a subuser', - ], - ], -]; diff --git a/resources/lang/en/admin/nests.php b/resources/lang/en/admin/nests.php deleted file mode 100644 index 2a6f37707..000000000 --- a/resources/lang/en/admin/nests.php +++ /dev/null @@ -1,26 +0,0 @@ - [ - 'created' => 'A new nest, :name, has been successfully created.', - 'deleted' => 'Successfully deleted the requested nest from the Panel.', - 'updated' => 'Successfully updated the nest configuration options.', - ], - 'eggs' => [ - 'notices' => [ - 'imported' => 'Successfully imported this Egg and its associated variables.', - 'updated_via_import' => 'This Egg has been updated using the file provided.', - 'deleted' => 'Successfully deleted the requested egg from the Panel.', - 'updated' => 'Egg configuration has been updated successfully.', - 'script_updated' => 'Egg install script has been updated and will run whenever servers are installed.', - 'egg_created' => 'A new egg was laid successfully. You will need to restart any running daemons to apply this new egg.', - ], - ], - 'variables' => [ - 'notices' => [ - 'variable_deleted' => 'The variable ":variable" has been deleted and will no longer be available to servers once rebuilt.', - 'variable_updated' => 'The variable ":variable" has been updated. You will need to rebuild any servers using this variable in order to apply changes.', - 'variable_created' => 'New variable has successfully been created and assigned to this egg.', - ], - ], -]; diff --git a/resources/lang/en/admin/node.php b/resources/lang/en/admin/node.php deleted file mode 100644 index cffd4d737..000000000 --- a/resources/lang/en/admin/node.php +++ /dev/null @@ -1,16 +0,0 @@ - [ - 'fqdn_not_resolvable' => 'The FQDN or IP address provided does not resolve to a valid IP address.', - 'fqdn_required_for_ssl' => 'A fully qualified domain name that resolves to a public IP address is required in order to use SSL for this node.', - ], - 'notices' => [ - 'allocations_added' => 'Allocations have successfully been added to this node.', - 'node_deleted' => 'Node has been successfully removed from the panel.', - 'location_required' => 'You must have at least one location configured before you can add a node to this panel.', - 'node_created' => 'Successfully created new node. You can automatically configure the daemon on this machine by visiting the \'Configuration\' tab. Before you can add any servers you must first allocate at least one IP address and port.', - 'node_updated' => 'Node information has been updated. If any daemon settings were changed you will need to reboot it for those changes to take effect.', - 'unallocated_deleted' => 'Deleted all un-allocated ports for :ip.', - ], -]; diff --git a/resources/lang/en/admin/server.php b/resources/lang/en/admin/server.php deleted file mode 100644 index 29cb72d18..000000000 --- a/resources/lang/en/admin/server.php +++ /dev/null @@ -1,27 +0,0 @@ - [ - 'no_new_default_allocation' => 'You are attempting to delete the default allocation for this server but there is no fallback allocation to use.', - 'marked_as_failed' => 'This server was marked as having failed a previous installation. Current status cannot be toggled in this state.', - 'bad_variable' => 'There was a validation error with the :name variable.', - 'daemon_exception' => 'There was an exception while attempting to communicate with the daemon resulting in a HTTP/:code response code. This exception has been logged. (request id: :request_id)', - 'default_allocation_not_found' => 'The requested default allocation was not found in this server\'s allocations.', - ], - 'alerts' => [ - 'startup_changed' => 'The startup configuration for this server has been updated. If this server\'s nest or egg was changed a reinstall will be occurring now.', - 'server_deleted' => 'Server has successfully been deleted from the system.', - 'server_created' => 'Server was successfully created on the panel. Please allow the daemon a few minutes to completely install this server.', - 'build_updated' => 'The build details for this server have been updated. Some changes may require a restart to take effect.', - 'suspension_toggled' => 'Server suspension status has been changed to :status.', - 'rebuild_on_boot' => 'This server has been marked as requiring a Docker Container rebuild. This will happen the next time the server is started.', - 'install_toggled' => 'The installation status for this server has been toggled.', - 'server_reinstalled' => 'This server has been queued for a reinstallation beginning now.', - 'details_updated' => 'Server details have been successfully updated.', - 'docker_image_updated' => 'Successfully changed the default Docker image to use for this server. A reboot is required to apply this change.', - 'node_required' => 'You must have at least one node configured before you can add a server to this panel.', - 'transfer_nodes_required' => 'You must have at least two nodes configured before you can transfer servers.', - 'transfer_started' => 'Server transfer has been started.', - 'transfer_not_viable' => 'The node you selected does not have the required disk space or memory available to accommodate this server.', - ], -]; diff --git a/resources/lang/en/admin/user.php b/resources/lang/en/admin/user.php deleted file mode 100644 index 65e227806..000000000 --- a/resources/lang/en/admin/user.php +++ /dev/null @@ -1,11 +0,0 @@ - [ - 'user_has_servers' => 'Cannot delete a user with active servers attached to their account. Please delete their servers before continuing.', - ], - 'notices' => [ - 'account_created' => 'Account has been created successfully.', - 'account_updated' => 'Account has been successfully updated.', - ], -]; diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php deleted file mode 100644 index 2a3a45268..000000000 --- a/resources/lang/en/auth.php +++ /dev/null @@ -1,27 +0,0 @@ - 'Sign In', - 'go_to_login' => 'Go to Login', - 'failed' => 'No account matching those credentials could be found.', - - 'forgot_password' => [ - 'label' => 'Forgot Password?', - 'label_help' => 'Enter your account email address to receive instructions on resetting your password.', - 'button' => 'Recover Account', - ], - - 'reset_password' => [ - 'button' => 'Reset and Sign In', - ], - - 'two_factor' => [ - 'label' => '2-Factor Token', - 'label_help' => 'This account requires a second layer of authentication in order to continue. Please enter the code generated by your device to complete this login.', - 'checkpoint_failed' => 'The two-factor authentication token was invalid.', - ], - - 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', - 'password_requirements' => 'Password must be at least 8 characters in length and should be unique to this site.', - '2fa_must_be_enabled' => 'The administrator has required that 2-Factor Authentication be enabled for your account in order to use the Panel.', -]; diff --git a/resources/lang/en/command/messages.php b/resources/lang/en/command/messages.php deleted file mode 100644 index a4a3aafdf..000000000 --- a/resources/lang/en/command/messages.php +++ /dev/null @@ -1,66 +0,0 @@ - [ - 'no_location_found' => 'Could not locate a record matching the provided short code.', - 'ask_short' => 'Location Short Code', - 'ask_long' => 'Location Description', - 'created' => 'Successfully created a new location (:name) with an ID of :id.', - 'deleted' => 'Successfully deleted the requested location.', - ], - 'user' => [ - 'search_users' => 'Enter a Username, User ID, or Email Address', - 'select_search_user' => 'ID of user to delete (Enter \'0\' to re-search)', - 'deleted' => 'User successfully deleted from the Panel.', - 'confirm_delete' => 'Are you sure you want to delete this user from the Panel?', - 'no_users_found' => 'No users were found for the search term provided.', - 'multiple_found' => 'Multiple accounts were found for the user provided, unable to delete a user because of the --no-interaction flag.', - 'ask_admin' => 'Is this user an administrator?', - 'ask_email' => 'Email Address', - 'ask_username' => 'Username', - 'ask_name_first' => 'First Name', - 'ask_name_last' => 'Last Name', - 'ask_password' => 'Password', - 'ask_password_tip' => 'If you would like to create an account with a random password emailed to the user, re-run this command (CTRL+C) and pass the `--no-password` flag.', - 'ask_password_help' => 'Passwords must be at least 8 characters in length and contain at least one capital letter and number.', - '2fa_help_text' => [ - 'This command will disable 2-factor authentication for a user\'s account if it is enabled. This should only be used as an account recovery command if the user is locked out of their account.', - 'If this is not what you wanted to do, press CTRL+C to exit this process.', - ], - '2fa_disabled' => '2-Factor authentication has been disabled for :email.', - ], - 'schedule' => [ - 'output_line' => 'Dispatching job for first task in `:schedule` (:hash).', - ], - 'maintenance' => [ - 'deleting_service_backup' => 'Deleting service backup file :file.', - ], - 'server' => [ - 'rebuild_failed' => 'Rebuild request for ":name" (#:id) on node ":node" failed with error: :message', - 'reinstall' => [ - 'failed' => 'Reinstall request for ":name" (#:id) on node ":node" failed with error: :message', - 'confirm' => 'You are about to reinstall against a group of servers. Do you wish to continue?', - ], - 'power' => [ - 'confirm' => 'You are about to perform a :action against :count servers. Do you wish to continue?', - 'action_failed' => 'Power action request for ":name" (#:id) on node ":node" failed with error: :message', - ], - ], - 'environment' => [ - 'mail' => [ - 'ask_smtp_host' => 'SMTP Host (e.g. smtp.gmail.com)', - 'ask_smtp_port' => 'SMTP Port', - 'ask_smtp_username' => 'SMTP Username', - 'ask_smtp_password' => 'SMTP Password', - 'ask_mailgun_domain' => 'Mailgun Domain', - 'ask_mailgun_endpoint' => 'Mailgun Endpoint', - 'ask_mailgun_secret' => 'Mailgun Secret', - 'ask_mandrill_secret' => 'Mandrill Secret', - 'ask_postmark_username' => 'Postmark API Key', - 'ask_driver' => 'Which driver should be used for sending emails?', - 'ask_mail_from' => 'Email address emails should originate from', - 'ask_mail_name' => 'Name that emails should appear from', - 'ask_encryption' => 'Encryption method to use', - ], - ], -]; diff --git a/resources/lang/en/dashboard/account.php b/resources/lang/en/dashboard/account.php deleted file mode 100644 index 85411ef65..000000000 --- a/resources/lang/en/dashboard/account.php +++ /dev/null @@ -1,28 +0,0 @@ - [ - 'title' => 'Update your email', - 'updated' => 'Your email address has been updated.', - ], - 'password' => [ - 'title' => 'Change your password', - 'requirements' => 'Your new password should be at least 8 characters in length.', - 'updated' => 'Your password has been updated.', - ], - 'two_factor' => [ - 'button' => 'Configure 2-Factor Authentication', - 'disabled' => 'Two-factor authentication has been disabled on your account. You will no longer be prompted to provide a token when logging in.', - 'enabled' => 'Two-factor authentication has been enabled on your account! From now on, when logging in, you will be required to provide the code generated by your device.', - 'invalid' => 'The token provided was invalid.', - 'setup' => [ - 'title' => 'Setup two-factor authentication', - 'help' => 'Can\'t scan the code? Enter the code below into your application:', - 'field' => 'Enter token', - ], - 'disable' => [ - 'title' => 'Disable two-factor authentication', - 'field' => 'Enter token', - ], - ], -]; diff --git a/resources/lang/en/dashboard/index.php b/resources/lang/en/dashboard/index.php deleted file mode 100644 index 8ab11e994..000000000 --- a/resources/lang/en/dashboard/index.php +++ /dev/null @@ -1,8 +0,0 @@ - 'Search for servers...', - 'no_matches' => 'There were no servers found matching the search criteria provided.', - 'cpu_title' => 'CPU', - 'memory_title' => 'Memory', -]; diff --git a/resources/lang/en/exceptions.php b/resources/lang/en/exceptions.php deleted file mode 100644 index 4d44c4ff9..000000000 --- a/resources/lang/en/exceptions.php +++ /dev/null @@ -1,59 +0,0 @@ - 'There was an exception while attempting to communicate with the daemon resulting in a HTTP/:code response code. This exception has been logged.', - 'node' => [ - 'servers_attached' => 'A node must have no servers linked to it in order to be deleted.', - 'daemon_off_config_updated' => 'The daemon configuration has been updated, however there was an error encountered while attempting to automatically update the configuration file on the Daemon. You will need to manually update the configuration file (config.yml) for the daemon to apply these changes.', - ], - 'allocations' => [ - 'server_using' => 'A server is currently assigned to this allocation. An allocation can only be deleted if no server is currently assigned.', - 'too_many_ports' => 'Adding more than 1000 ports in a single range at once is not supported.', - 'invalid_mapping' => 'The mapping provided for :port was invalid and could not be processed.', - 'cidr_out_of_range' => 'CIDR notation only allows masks between /25 and /32.', - 'port_out_of_range' => 'Ports in an allocation must be greater than 1024 and less than or equal to 65535.', - ], - 'nest' => [ - 'delete_has_servers' => 'A Nest with active servers attached to it cannot be deleted from the Panel.', - 'egg' => [ - 'delete_has_servers' => 'An Egg with active servers attached to it cannot be deleted from the Panel.', - 'invalid_copy_id' => 'The Egg selected for copying a script from either does not exist, or is copying a script itself.', - 'must_be_child' => 'The "Copy Settings From" directive for this Egg must be a child option for the selected Nest.', - 'has_children' => 'This Egg is a parent to one or more other Eggs. Please delete those Eggs before deleting this Egg.', - ], - 'variables' => [ - 'env_not_unique' => 'The environment variable :name must be unique to this Egg.', - 'reserved_name' => 'The environment variable :name is protected and cannot be assigned to a variable.', - 'bad_validation_rule' => 'The validation rule ":rule" is not a valid rule for this application.', - ], - 'importer' => [ - 'json_error' => 'There was an error while attempting to parse the JSON file: :error.', - 'file_error' => 'The JSON file provided was not valid.', - 'invalid_json_provided' => 'The JSON file provided is not in a format that can be recognized.', - ], - ], - 'subusers' => [ - 'editing_self' => 'Editing your own subuser account is not permitted.', - 'user_is_owner' => 'You cannot add the server owner as a subuser for this server.', - 'subuser_exists' => 'A user with that email address is already assigned as a subuser for this server.', - ], - 'databases' => [ - 'delete_has_databases' => 'Cannot delete a database host server that has active databases linked to it.', - ], - 'tasks' => [ - 'chain_interval_too_long' => 'The maximum interval time for a chained task is 15 minutes.', - ], - 'locations' => [ - 'has_nodes' => 'Cannot delete a location that has active nodes attached to it.', - ], - 'users' => [ - 'node_revocation_failed' => 'Failed to revoke keys on Node #:node. :error', - ], - 'deployment' => [ - 'no_viable_nodes' => 'No nodes satisfying the requirements specified for automatic deployment could be found.', - 'no_viable_allocations' => 'No allocations satisfying the requirements for automatic deployment were found.', - ], - 'api' => [ - 'resource_not_found' => 'The requested resource does not exist on this server.', - ], -]; diff --git a/resources/lang/en/server/users.php b/resources/lang/en/server/users.php deleted file mode 100644 index ce77c4101..000000000 --- a/resources/lang/en/server/users.php +++ /dev/null @@ -1,33 +0,0 @@ - [ - 'websocket_*' => 'Allows access to the websocket for this server.', - 'control_console' => 'Allows the user to send data to the server console.', - 'control_start' => 'Allows the user to start the server instance.', - 'control_stop' => 'Allows the user to stop the server instance.', - 'control_restart' => 'Allows the user to restart the server instance.', - 'control_kill' => 'Allows the user to kill the server instance.', - 'user_create' => 'Allows the user to create new user accounts for the server.', - 'user_read' => 'Allows the user permission to view users associated with this server.', - 'user_update' => 'Allows the user to modify other users associated with this server.', - 'user_delete' => 'Allows the user to delete other users associated with this server.', - 'file_create' => 'Allows the user permission to create new files and directories.', - 'file_read' => 'Allows the user to see files and folders associated with this server instance, as well as view their contents.', - 'file_update' => 'Allows the user to update files and folders associated with the server.', - 'file_delete' => 'Allows the user to delete files and directories.', - 'file_archive' => 'Allows the user to create file archives and decompress existing archives.', - 'file_sftp' => 'Allows the user to perform the above file actions using a SFTP client.', - 'allocation_read' => 'Allows access to the server allocation management pages.', - 'allocation_update' => 'Allows user permission to make modifications to the server\'s allocations.', - 'database_create' => 'Allows user permission to create a new database for the server.', - 'database_read' => 'Allows user permission to view the server databases.', - 'database_update' => 'Allows a user permission to make modifications to a database. If the user does not have the "View Password" permission as well they will not be able to modify the password.', - 'database_delete' => 'Allows a user permission to delete a database instance.', - 'database_view_password' => 'Allows a user permission to view a database password in the system.', - 'schedule_create' => 'Allows a user to create a new schedule for the server.', - 'schedule_read' => 'Allows a user permission to view schedules for a server.', - 'schedule_update' => 'Allows a user permission to make modifications to an existing server schedule.', - 'schedule_delete' => 'Allows a user to delete a schedule for the server.', - ], -]; diff --git a/resources/lang/en/strings.php b/resources/lang/en/strings.php deleted file mode 100644 index 0a69329b7..000000000 --- a/resources/lang/en/strings.php +++ /dev/null @@ -1,95 +0,0 @@ - 'Email', - 'email_address' => 'Email address', - 'user_identifier' => 'Username or Email', - 'password' => 'Password', - 'new_password' => 'New password', - 'confirm_password' => 'Confirm new password', - 'login' => 'Login', - 'home' => 'Home', - 'servers' => 'Servers', - 'id' => 'ID', - 'name' => 'Name', - 'node' => 'Node', - 'connection' => 'Connection', - 'memory' => 'Memory', - 'cpu' => 'CPU', - 'disk' => 'Disk', - 'status' => 'Status', - 'search' => 'Search', - 'suspended' => 'Suspended', - 'account' => 'Account', - 'security' => 'Security', - 'ip' => 'IP Address', - 'last_activity' => 'Last Activity', - 'revoke' => 'Revoke', - '2fa_token' => 'Authentication Token', - 'submit' => 'Submit', - 'close' => 'Close', - 'settings' => 'Settings', - 'configuration' => 'Configuration', - 'sftp' => 'SFTP', - 'databases' => 'Databases', - 'memo' => 'Memo', - 'created' => 'Created', - 'expires' => 'Expires', - 'public_key' => 'Token', - 'api_access' => 'Api Access', - 'never' => 'never', - 'sign_out' => 'Sign out', - 'admin_control' => 'Admin Control', - 'required' => 'Required', - 'port' => 'Port', - 'username' => 'Username', - 'database' => 'Database', - 'new' => 'New', - 'danger' => 'Danger', - 'create' => 'Create', - 'select_all' => 'Select All', - 'select_none' => 'Select None', - 'alias' => 'Alias', - 'primary' => 'Primary', - 'make_primary' => 'Make Primary', - 'none' => 'None', - 'cancel' => 'Cancel', - 'created_at' => 'Created At', - 'action' => 'Action', - 'data' => 'Data', - 'queued' => 'Queued', - 'last_run' => 'Last Run', - 'next_run' => 'Next Run', - 'not_run_yet' => 'Not Run Yet', - 'yes' => 'Yes', - 'no' => 'No', - 'delete' => 'Delete', - '2fa' => '2FA', - 'logout' => 'Logout', - 'admin_cp' => 'Admin Control Panel', - 'optional' => 'Optional', - 'read_only' => 'Read Only', - 'relation' => 'Relation', - 'owner' => 'Owner', - 'admin' => 'Admin', - 'subuser' => 'Subuser', - 'captcha_invalid' => 'The provided captcha is invalid.', - 'tasks' => 'Tasks', - 'seconds' => 'Seconds', - 'minutes' => 'Minutes', - 'under_maintenance' => 'Under Maintenance', - 'days' => [ - 'sun' => 'Sunday', - 'mon' => 'Monday', - 'tues' => 'Tuesday', - 'wed' => 'Wednesday', - 'thurs' => 'Thursday', - 'fri' => 'Friday', - 'sat' => 'Saturday', - ], - 'last_used' => 'Last Used', - 'enable' => 'Enable', - 'disable' => 'Disable', - 'save' => 'Save', - 'copyright' => '© 2015 - :year Jexactyl Software', -]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php deleted file mode 100644 index 834e0263a..000000000 --- a/resources/lang/en/validation.php +++ /dev/null @@ -1,106 +0,0 @@ - 'The :attribute must be accepted.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'before' => 'The :attribute must be a date before :date.', - 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', - 'between' => [ - 'numeric' => 'The :attribute must be between :min and :max.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'string' => 'The :attribute must be between :min and :max characters.', - 'array' => 'The :attribute must have between :min and :max items.', - ], - 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'dimensions' => 'The :attribute has invalid image dimensions.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'email' => 'The :attribute must be a valid email address.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', - 'filled' => 'The :attribute field is required.', - 'image' => 'The :attribute must be an image.', - 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'json' => 'The :attribute must be a valid JSON string.', - 'max' => [ - 'numeric' => 'The :attribute may not be greater than :max.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'string' => 'The :attribute may not be greater than :max characters.', - 'array' => 'The :attribute may not have more than :max items.', - ], - 'mimes' => 'The :attribute must be a file of type: :values.', - 'mimetypes' => 'The :attribute must be a file of type: :values.', - 'min' => [ - 'numeric' => 'The :attribute must be at least :min.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min characters.', - 'array' => 'The :attribute must have at least :min items.', - ], - 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_unless' => 'The :attribute field is required unless :other is in :values.', - 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', - 'required_without' => 'The :attribute field is required when :values is not present.', - 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', - 'size' => [ - 'numeric' => 'The :attribute must be :size.', - 'file' => 'The :attribute must be :size kilobytes.', - 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must contain :size items.', - ], - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'url' => 'The :attribute format is invalid.', - - /* - |-------------------------------------------------------------------------- - | Custom Validation Attributes - |-------------------------------------------------------------------------- - | - | The following language lines are used to swap attribute place-holders - | with something more reader friendly such as E-Mail Address instead - | of "email". This simply helps us make messages a little cleaner. - | - */ - - 'attributes' => [], - - // Internal validation logic for Jexactyl - 'internal' => [ - 'variable_value' => ':env variable', - 'invalid_password' => 'The password provided was invalid for this account.', - ], -]; diff --git a/resources/lang/pt/activity.php b/resources/lang/pt/activity.php new file mode 100644 index 000000000..9b017987d --- /dev/null +++ b/resources/lang/pt/activity.php @@ -0,0 +1,129 @@ + [ + 'fail' => 'falhou ao carregar', + 'success' => 'Logado a:', + 'password-reset' => 'Redefinição de senha', + 'reset-password' => 'Redefinição de senha solicitada', + 'checkpoint' => 'Autenticação de dois fatores solicitada', + 'recovery-token' => 'Token de recuperação de dois fatores usado', + 'token' => 'Desafio de dois fatores resolvido', + 'ip-blocked' => 'Solicitação bloqueada de endereço IP não listado para :identifier', + 'sftp' => [ + 'fail' => 'Login sftp com falha', + ], + ], + 'user' => [ + 'account' => [ + 'email-changed' => 'E-mail alterado de :old para :new', + 'password-changed' => 'senha alterada', + ], + 'api-key' => [ + 'create' => 'Criada nova API key :identifier', + 'delete' => 'Deletada a API key :identifier', + ], + 'ssh-key' => [ + 'create' => 'Adicionada SSH key :fingerprint to account', + 'delete' => 'Removida SSH key :fingerprint from account', + ], + 'two-factor' => [ + 'create' => 'Auth de dois fatores habilitado', + 'delete' => 'Auth de dois fatores desabilitado', + ], + ], + 'server' => [ + 'reinstall' => 'Servidor reinstalado', + 'console' => [ + 'command' => 'Executado ":command" no servidor', + ], + 'power' => [ + 'start' => 'Iniciado o servidor', + 'stop' => 'Parou o servidor', + 'restart' => 'Reiniciou o servidor', + 'kill' => 'Matou o processo do servidor', + ], + 'backup' => [ + 'download' => 'Baixou o backup :name ', + 'delete' => 'Deletou o backup :name ', + 'restore' => 'Restaurou o backup :name (deleted files: :truncate)', + 'restore-complete' => 'Restauração concluída do :name backup', + 'restore-failed' => 'Falhou em completar a restauração do :name backup', + 'start' => 'Iniciou um novo backup :name', + 'complete' => 'Marcou que o :name backup foi completo', + 'fail' => 'Marcou que o :name backup falhou', + 'lock' => 'Trancou o :name backup', + 'unlock' => 'Destrancou o :name backup', + ], + 'database' => [ + 'create' => 'Criou novo banco de dados :name', + 'rotate-password' => 'Senha girada para banco de dados :name', + 'delete' => 'Banco de dados excluído :name', + ], + 'file' => [ + 'compress_one' => 'Comprimido :directory:file', + 'compress_other' => 'Comprimido :count arquivos em :directory', + 'read' => 'Visualizado o conteúdo de :file', + 'copy' => 'Criou uma cópia de :file', + 'create-directory' => 'Diretório criado :directory:name', + 'decompress' => 'Descompactado :files no :directory', + 'delete_one' => 'Deletado :directory:files.0', + 'delete_other' => 'Deletado :count arquivos em :directory', + 'download' => 'Baixado :file', + 'pull' => 'Baixado um arquivo remoto de :url para :directory', + 'rename_one' => 'Renomeado :directory:files.0.de para :directory:files.0.to', + 'rename_other' => 'Renomeado :count arquivos em :directory', + 'write' => 'Escreveu novo conteúdo para :file', + 'upload' => 'Começou um upload de arquivo', + 'uploaded' => 'Carregado :directory:file', + ], + 'sftp' => [ + 'denied' => 'Acesso SFTP bloqueado devido a permissões', + 'create_one' => 'Criado :files.0', + 'create_other' => 'Criado :count new files', + 'write_one' => 'Modificado o conteúdo de :files.0', + 'write_other' => 'Modificado o conteúdo de :count files', + 'delete_one' => 'Deletado :files.0', + 'delete_other' => 'Deletado :count files', + 'create-directory_one' => 'Criado o :files.0 directory', + 'create-directory_other' => 'Criado :count Diretórios', + 'rename_one' => 'Renomeado :files.0.de para :files.0.to', + 'rename_other' => 'Renomeado ou movido :count arquivos', + ], + 'allocation' => [ + 'create' => 'Adicionado :allocation para o servidor', + 'notes' => 'Atualizado as notas para :allocation de ":old" para ":new"', + 'primary' => 'Pôr :allocation como a alocação do servidor principal', + 'delete' => 'Deletou a :allocation alocação', + ], + 'schedule' => [ + 'create' => 'Criou o :name schedule', + 'update' => 'Atualizou o :name schedule', + 'execute' => 'Executou manualmente o :name schedule', + 'delete' => 'Deletou o :name schedule', + ], + 'task' => [ + 'create' => 'Criou um novo ":action" tarefa para o :name schedule', + 'update' => 'Atualizou o ":action" tarefa para o :name schedule', + 'delete' => 'Excluiu uma tarefa para o :name schedule', + ], + 'settings' => [ + 'rename' => 'Renomeaou o servidor de :old para :new', + ], + 'startup' => [ + 'edit' => 'Mudou o :variable variável de ":old" para ":new"', + 'image' => 'Atualizou a Imagem Docker para o servidor de :old para :new', + ], + 'subuser' => [ + 'create' => 'Adicionou o :email como subusuário', + 'update' => 'Atualizou as permissões do subusuário :email', + 'delete' => 'Removeu :email como subusuário', + ], + ], +]; diff --git a/resources/lang/pt/admin/nests.php b/resources/lang/pt/admin/nests.php new file mode 100644 index 000000000..8c56f7b6d --- /dev/null +++ b/resources/lang/pt/admin/nests.php @@ -0,0 +1,33 @@ +. + * + * This software is licensed under the terms of the MIT license. + * https://opensource.org/licenses/MIT + */ + +return [ + 'notices' => [ + 'created' => 'Um novo Nest, :name, foi criado com sucesso.', + 'deleted' => 'Excluiu com sucesso o Nest solicitado do Painel.', + 'updated' => 'Atualizou com sucesso as opções de configuração do Nest.', + ], + 'eggs' => [ + 'notices' => [ + 'imported' => 'Importou este Egg com sucesso e suas variáveis associadas.', + 'updated_via_import' => 'Este Egg foi atualizado usando o arquivo fornecido.', + 'deleted' => 'Excluiu com sucesso o Egg solicitado do Painel.', + 'updated' => 'A configuração do Egg foi atualizada com sucesso.', + 'script_updated' => 'O script de instalação de Eggs foi atualizado e será executado sempre que os servidores forem instalados.', + 'egg_created' => 'Um novo Egg foi colocado com sucesso. Você precisará reiniciar quaisquer daemons em execução para aplicar este novo Egg.', + ], + ], + 'variables' => [ + 'notices' => [ + 'variable_deleted' => 'A variável ":variable" foi excluído e não estará mais disponível para servidores uma vez reconstruídos.', + 'variable_updated' => 'A variável ":variable" foi atualizado. Você precisará reconstruir quaisquer servidores usando essa variável para aplicar alterações.', + 'variable_created' => 'Nova variável foi criada com sucesso e atribuída a este Egg.', + ], + ], +]; diff --git a/resources/lang/pt/admin/node.php b/resources/lang/pt/admin/node.php new file mode 100644 index 000000000..b5484e0e6 --- /dev/null +++ b/resources/lang/pt/admin/node.php @@ -0,0 +1,23 @@ +. + * + * This software is licensed under the terms of the MIT license. + * https://opensource.org/licenses/MIT + */ + +return [ + 'validation' => [ + 'fqdn_not_resolvable' => 'O endereço FQDN ou IP fornecido não resolve um endereço IP válido.', + 'fqdn_required_for_ssl' => 'Um nome de domínio totalmente qualificado que se resolve com um endereço IP público é necessário para usar o SSL para este Node.', + ], + 'notices' => [ + 'allocations_added' => 'As alocações foram adicionadas com sucesso a este Node.', + 'node_deleted' => 'O Node foi removido com sucesso do painel.', + 'location_required' => 'Você deve ter pelo menos um local configurado antes de poder adicionar um Node a este painel.', + 'node_created' => 'Criou com sucesso um novo Node. Você pode configurar automaticamente o daemon nesta máquina visitando o \'Configuration\' tab. Antes de adicionar quaisquer servidores, você deve primeiro alocar pelo menos um endereço IP e porta.', + 'node_updated' => 'As informações do Node foram atualizadas. Se alguma configuração de daemon foi alterada, você precisará reiniciá-la para que essas alterações entrem em vigor.', + 'unallocated_deleted' => 'Excluiu todas as portas não alocadas para :ip.', + ], +]; diff --git a/resources/lang/pt/admin/server.php b/resources/lang/pt/admin/server.php new file mode 100644 index 000000000..ffd0e2cbf --- /dev/null +++ b/resources/lang/pt/admin/server.php @@ -0,0 +1,34 @@ +. + * + * This software is licensed under the terms of the MIT license. + * https://opensource.org/licenses/MIT + */ + +return [ + 'exceptions' => [ + 'no_new_default_allocation' => 'Você está tentando excluir a alocação padrão para este servidor, mas não há alocação de recuo para usar.', + 'marked_as_failed' => 'Este servidor foi marcado como tendo falhado em uma instalação anterior. O status atual não pode ser alternado neste estado.', + 'bad_variable' => 'Houve um erro de validação com a variável :name.', + 'daemon_exception' => 'Houve uma exceção ao tentar se comunicar com o daemon resultando em um código de resposta HTTP/: Esta exceção foi registrada. (request id: :request_id)', + 'default_allocation_not_found' => 'A alocação padrão solicitada não foi encontrada nas alocações deste servidor.', + ], + 'alerts' => [ + 'startup_changed' => 'A configuração de inicialização para este servidor foi atualizada. Se o Nests ou o Egg deste servidor for alterado, uma reinstalação estará ocorrendo agora.', + 'server_deleted' => 'O servidor foi excluído com sucesso do sistema.', + 'server_created' => 'O servidor foi criado com sucesso no painel. Por favor, permita que o daemon se instale e em alguns minutos inicie este servidor.', + 'build_updated' => 'Os detalhes da compilação deste servidor foram atualizados. Algumas alterações podem exigir um reiniciar para fazer efeito.', + 'suspension_toggled' => 'O status de suspensão do servidor foi alterado para :status.', + 'rebuild_on_boot' => 'Este servidor foi marcado como exigindo uma reconstrução do Contêiner Docker. Isso acontecerá na próxima vez que o servidor for iniciado.', + 'install_toggled' => 'O status de instalação deste servidor foi alternado.', + 'server_reinstalled' => 'Este servidor foi enfileiado para uma reinstalação a partir de agora.', + 'details_updated' => 'Os detalhes do servidor foram atualizados com sucesso.', + 'docker_image_updated' => 'Alterou com sucesso a imagem padrão do Docker para usar para este servidor. Uma reinicialização é necessária para aplicar essa alteração.', + 'node_required' => 'Você deve ter pelo menos um Node configurado antes de poder adicionar um servidor a este painel.', + 'transfer_nodes_required' => 'Você deve ter pelo menos dois Nodes configurados antes de poder transferir servidores.', + 'transfer_started' => 'A transferência do servidor foi iniciada.', + 'transfer_not_viable' => 'O Node selecionado não tem o espaço ou memória de disco necessários para acomodar este servidor.', + ], +]; diff --git a/resources/lang/pt/admin/user.php b/resources/lang/pt/admin/user.php new file mode 100644 index 000000000..2f7da09b5 --- /dev/null +++ b/resources/lang/pt/admin/user.php @@ -0,0 +1,18 @@ +. + * + * This software is licensed under the terms of the MIT license. + * https://opensource.org/licenses/MIT + */ + +return [ + 'exceptions' => [ + 'user_has_servers' => 'Não é possível excluir um usuário com servidores ativos conectados à sua conta. Por favor, exclua seus servidores antes de continuar.', + ], + 'notices' => [ + 'account_created' => 'A conta foi criada com sucesso.', + 'account_updated' => 'A conta foi atualizada com sucesso.', + ], +]; diff --git a/resources/lang/pt/auth.php b/resources/lang/pt/auth.php new file mode 100644 index 000000000..59942e397 --- /dev/null +++ b/resources/lang/pt/auth.php @@ -0,0 +1,27 @@ + 'Entrar', + 'go_to_login' => 'Vá para Login', + 'failed' => 'Nenhuma conta que corresponda a essas credenciais poderia ser encontrada.', + + 'forgot_password' => [ + 'label' => 'Esqueceu a senha?', + 'label_help' => 'Digite o endereço de e-mail da sua conta para receber instruções sobre a redefinição de sua senha.', + 'button' => 'Recuperar conta', + ], + + 'reset_password' => [ + 'button' => 'Resetar e Entrar', + ], + + 'two_factor' => [ + 'label' => 'Token de 2 fatores', + 'label_help' => 'Esta conta requer uma segunda camada de autenticação para continuar. Digite o código gerado pelo seu dispositivo para completar este login.', + 'checkpoint_failed' => 'O token de autenticação de dois fatores era inválido.', + ], + + 'throttle' => 'Muitas tentativas de login. Por favor, tente novamente em :seconds segundos.', + 'password_requirements' => 'A senha deve ter pelo menos 8 caracteres de comprimento e deve ser exclusiva deste site.', + '2fa_must_be_enabled' => 'O administrador exigiu que a autenticação de 2 fatores seja habilitada para sua conta para usar o Painel.', +]; diff --git a/resources/lang/pt/command/messages.php b/resources/lang/pt/command/messages.php new file mode 100644 index 000000000..668501cd1 --- /dev/null +++ b/resources/lang/pt/command/messages.php @@ -0,0 +1,66 @@ + [ + 'no_location_found' => 'Não foi possível localizar um registro que corresponde ao Nome Simples fornecido.', + 'ask_short' => 'Nome Simples de localização', + 'ask_long' => 'Descrição da localização', + 'created' => 'Criou com sucesso um novo local (:name) com uma ID de :id.', + 'deleted' => 'Excluiu com sucesso o local solicitado.', + ], + 'user' => [ + 'search_users' => 'Digite um nome de usuário, ID de usuário ou endereço de e-mail', + 'select_search_user' => 'ID do usuário para excluir (Enter \'0\' to re-search)', + 'deleted' => 'Usuário excluído com sucesso do Painel.', + 'confirm_delete' => 'Tem certeza de que deseja excluir este usuário do Painel?', + 'no_users_found' => 'Não foram encontrados usuários para o termo de pesquisa fornecido.', + 'multiple_found' => 'Várias contas foram encontradas para o usuário fornecido, incapaz de excluir um usuário por causa do --no-interaction flag.', + 'ask_admin' => 'Este usuário é um administrador?', + 'ask_email' => 'Endereço de E-mail', + 'ask_username' => 'Nome de Usuario', + 'ask_name_first' => 'Primeiro Nome', + 'ask_name_last' => 'Ultimo Nome', + 'ask_password' => 'Senha', + 'ask_password_tip' => 'If você gostaria de criar uma conta com uma senha aleatória enviada pelo usuário, re-executar este comando (CTRL+C) e passar o `--no-password` flag.', + 'ask_password_help' => 'As senhas devem ter pelo menos 8 caracteres de comprimento e conter pelo menos uma letra maiúscula e número.', + '2fa_help_text' => [ + 'Este comando desativará a autenticação de 2 fatores para um user\'s conta se ele está ativado. Isso só deve ser usado como um comando de recuperação de conta se o usuário estiver bloqueado fora de sua conta.', + 'Se não é isso que você queria fazer, pressione CTRL+C para sair desse processo.', + ], + '2fa_disabled' => 'A autenticação de 2 fatores foi desativada para :email.', + ], + 'schedule' => [ + 'output_line' => 'Expedição de trabalho para a primeira tarefa em `:schedule` (:hash).', + ], + 'maintenance' => [ + 'deleting_service_backup' => 'Excluindo arquivo de backup do serviço :file.', + ], + 'server' => [ + 'rebuild_failed' => 'Pedido de reconstrução para ":name" (#:id) no Node ":node" falhou com erro: :message', + 'reinstall' => [ + 'failed' => 'Solicitação de reinstalação para ":name" (#:id) no Node ":node" falhou com erro: :message', + 'confirm' => 'Você está prestes a reinstalar contra um grupo de servidores. Você deseja continuar?', + ], + 'power' => [ + 'confirm' => 'Você está prestes a realizar um :action contra :count servidores. Você deseja continuar?', + 'action_failed' => 'Pedido de ação de energia para ":name" (#:id) no Node ":node" falhou com o errr: :message', + ], + ], + 'environment' => [ + 'mail' => [ + 'ask_smtp_host' => 'SMTP Host (e.g. smtp.gmail.com)', + 'ask_smtp_port' => 'SMTP Porta', + 'ask_smtp_username' => 'SMTP Usuario', + 'ask_smtp_password' => 'SMTP Senha', + 'ask_mailgun_domain' => 'Mailgun Dominio', + 'ask_mailgun_endpoint' => 'Mailgun Extremidade', + 'ask_mailgun_secret' => 'Mailgun Secreto', + 'ask_mandrill_secret' => 'Mandrill Secreto', + 'ask_postmark_username' => 'Chave de API de marca posta', + 'ask_driver' => 'Qual driver deve ser usado para enviar e-mails?', + 'ask_mail_from' => 'Os e-mails de endereço de e-mail devem ser originários de', + 'ask_mail_name' => 'Nome que os e-mails devem aparecer de', + 'ask_encryption' => 'Método de criptografia para usar', + ], + ], +]; diff --git a/resources/lang/pt/dashboard/account.php b/resources/lang/pt/dashboard/account.php new file mode 100644 index 000000000..624f4b8f1 --- /dev/null +++ b/resources/lang/pt/dashboard/account.php @@ -0,0 +1,28 @@ + [ + 'title' => 'Atualize seu e-mail', + 'updated' => 'Seu endereço de e-mail foi atualizado.', + ], + 'password' => [ + 'title' => 'Altere sua senha', + 'requirements' => 'Sua nova senha deve ter pelo menos 8 caracteres de comprimento.', + 'updated' => 'Sua senha foi atualizada.', + ], + 'two_factor' => [ + 'button' => 'Configure autenticação de 2 fatores', + 'disabled' => 'A autenticação de dois fatores foi desativada em sua conta. Você não será mais solicitado a fornecer um token ao fazer login.', + 'enabled' => 'A autenticação de dois fatores foi ativada em sua conta! A partir de agora, ao fazer login, você será obrigado a fornecer o código gerado pelo seu dispositivo.', + 'invalid' => 'O token fornecido era inválido.', + 'setup' => [ + 'title' => 'Configuração de autenticação de dois fatores', + 'help' => 'Can\'t Digitalizar o código? Digite o código abaixo em seu aplicativo:', + 'field' => 'Coloque o token', + ], + 'disable' => [ + 'title' => 'Desativar a autenticação de dois fatores', + 'field' => 'Coloque o token', + ], + ], +]; diff --git a/resources/lang/pt/dashboard/index.php b/resources/lang/pt/dashboard/index.php new file mode 100644 index 000000000..a66960376 --- /dev/null +++ b/resources/lang/pt/dashboard/index.php @@ -0,0 +1,8 @@ + 'Busca por servidores...', + 'no_matches' => 'Não foram encontrados servidores que correspondem aos critérios de pesquisa fornecidos.', + 'cpu_title' => 'CPU', + 'memory_title' => 'Memoria', +]; diff --git a/resources/lang/pt/exceptions.php b/resources/lang/pt/exceptions.php new file mode 100644 index 000000000..1918f630e --- /dev/null +++ b/resources/lang/pt/exceptions.php @@ -0,0 +1,59 @@ + 'Houve uma exceção ao tentar se comunicar com o daemon resultando em um código de resposta http/:code. Esta exceção foi registrada.', + 'node' => [ + 'servers_attached' => 'Um Node não deve ter servidores vinculados a ele para ser excluído.', + 'daemon_off_config_updated' => 'A configuração daemon foi atualizada , no entanto, houve um erro encontrado ao tentar atualizar automaticamente o arquivo de configuração no Daemon. Você precisará atualizar manualmente o arquivo de configuração (config.yml) para que o daemon aplique essas alterações.', + ], + 'allocations' => [ + 'server_using' => 'Um servidor é atualmente atribuído a essa alocação. Uma alocação só pode ser excluída se nenhum servidor for atribuído no momento.', + 'too_many_ports' => 'Adicionar mais de 1000 portas em um único intervalo ao mesmo tempo não é suportado.', + 'invalid_mapping' => 'O mapeamento previsto para :port era inválido e não pôde ser processado.', + 'cidr_out_of_range' => 'CIDR a notação só permite máscaras entre /25 e /32.', + 'port_out_of_range' => 'Os portas em uma alocação devem ser maiores que 1024 e menores ou iguais a 65535.', + ], + 'nest' => [ + 'delete_has_servers' => 'Um Nest com servidores ativos conectados a ele não pode ser excluído do Painel.', + 'egg' => [ + 'delete_has_servers' => 'Um Egg com servidores ativos conectados a ele não pode ser excluído do Painel.', + 'invalid_copy_id' => 'O Egg selecionado para copiar o script não existe, ou está copiando o próprio script.', + 'must_be_child' => 'A diretiva "Copiar configurações a partir" para este Egg deve ser uma opção Child(Propriada) para o Nest selecionado.', + 'has_children' => 'Este Egg é pai de um ou mais Eggs. Por favor, exclua esses Eggs antes de excluir este Egg.', + ], + 'variables' => [ + 'env_not_unique' => 'A variável ambiente :name deve ser único para este Egg.', + 'reserved_name' => 'A variável ambiente :name é protegido e não pode ser atribuído a uma variável.', + 'bad_validation_rule' => 'A regra de validação ":rule" não é uma regra válida para este aplicativo.', + ], + 'importer' => [ + 'json_error' => 'Houve um erro ao tentar analisar o arquivo JSON: :error.', + 'file_error' => 'O arquivo JSON fornecido não era válido.', + 'invalid_json_provided' => 'O arquivo JSON fornecido não está em um formato que possa ser reconhecido.', + ], + ], + 'subusers' => [ + 'editing_self' => 'Editar sua própria conta de subusuário não é permitido.', + 'user_is_owner' => 'Você não pode adicionar o proprietário do servidor como um subusuário para este servidor.', + 'subuser_exists' => 'O usuário com esse endereço de e-mail já está atribuído como subusuário desse servidor.', + ], + 'databases' => [ + 'delete_has_databases' => 'Não é possível excluir um servidor host de banco de dados que tenha bancos de dados ativos vinculados a ele.', + ], + 'tasks' => [ + 'chain_interval_too_long' => 'O tempo máximo de intervalo para uma tarefa acorrentada é de 15 minutos.', + ], + 'locations' => [ + 'has_nodes' => 'Não é possível excluir uma localização que tenha Nodes ativos e anexados a ela.', + ], + 'users' => [ + 'node_revocation_failed' => 'Falhou em revogar chaves em Node #:node. :error', + ], + 'deployment' => [ + 'no_viable_nodes' => 'Não foi possível encontrar Nodes que atendessem os requisitos especificados para a implantação automática.', + 'no_viable_allocations' => 'Não foram encontradas alocações que satisfaçam os requisitos para implantação automática.', + ], + 'api' => [ + 'resource_not_found' => 'O recurso solicitado não existe neste servidor.', + ], +]; diff --git a/resources/lang/en/pagination.php b/resources/lang/pt/pagination.php similarity index 86% rename from resources/lang/en/pagination.php rename to resources/lang/pt/pagination.php index ecac3aa33..35a752795 100644 --- a/resources/lang/en/pagination.php +++ b/resources/lang/pt/pagination.php @@ -12,6 +12,6 @@ | */ - 'previous' => '« Previous', - 'next' => 'Next »', + 'previous' => '« Anterior', + 'next' => 'Proximo »', ]; diff --git a/resources/lang/en/passwords.php b/resources/lang/pt/passwords.php similarity index 55% rename from resources/lang/en/passwords.php rename to resources/lang/pt/passwords.php index 76a6959b7..9a09ed807 100644 --- a/resources/lang/en/passwords.php +++ b/resources/lang/pt/passwords.php @@ -11,9 +11,9 @@ | has failed, such as for an invalid token or invalid new password. | */ - 'password' => 'Passwords must be at least six characters and match the confirmation.', - 'reset' => 'Your password has been reset!', - 'sent' => 'We have e-mailed your password reset link!', - 'token' => 'This password reset token is invalid.', - 'user' => "We can't find a user with that e-mail address.", + 'password' => 'As senhas devem ter pelo menos seis caracteres e corresponder à confirmação.', + 'reset' => 'Sua senha foi redefinida!', + 'sent' => 'Enviamos por e-mail seu link de redefinição de senha!', + 'token' => 'Este token de redefinição de senha é inválido.', + 'user' => 'Não conseguimos encontrar um usuário com esse endereço de e-mail.', ]; diff --git a/resources/lang/pt/server/users.php b/resources/lang/pt/server/users.php new file mode 100644 index 000000000..b2ca8bd7e --- /dev/null +++ b/resources/lang/pt/server/users.php @@ -0,0 +1,33 @@ + [ + 'websocket_*' => 'Permite acesso ao websocket para este servidor.', + 'control_console' => 'Permite que o usuário envie dados para o console do servidor.', + 'control_start' => 'Permite que o usuário inicie a instância do servidor.', + 'control_stop' => 'Permite que o usuário pare a instância do servidor.', + 'control_restart' => 'Permite que o usuário reinicie a instância do servidor.', + 'control_kill' => 'Permite que o usuário mate a instância do servidor.', + 'user_create' => 'Permite que o usuário crie novas contas de usuário para o servidor.', + 'user_read' => 'Permite que o usuário permissão para visualizar usuários associados a este servidor.', + 'user_update' => 'Permite que o usuário modifique outros usuários associados a este servidor.', + 'user_delete' => 'Permite que o usuário exclua outros usuários associados a este servidor.', + 'file_create' => 'Permite que o usuário crie novas contas de usuário para o servidor.', + 'file_read' => 'Permite que o usuário veja arquivos e pastas associados a esta instância do servidor, bem como visualize seu conteúdo.', + 'file_update' => 'Permite que o usuário atualize arquivos e pastas associadas ao servidor.', + 'file_delete' => 'Permite que o usuário exclua arquivos e diretórios.', + 'file_archive' => 'Permite que o usuário crie arquivos de arquivos e descomprima os arquivos existentes.', + 'file_sftp' => 'Permite que o usuário execute as ações de arquivo acima usando um cliente SFTP.', + 'allocation_read' => 'Permite o acesso às páginas de gerenciamento de alocação de servidores.', + 'allocation_update' => 'Permite que o usuário faça modificações no server\'s Alocações.', + 'database_create' => 'Permite que o usuário crie um novo banco de dados para o servidor.', + 'database_read' => 'Permite que o usuário visualize os bancos de dados do servidor.', + 'database_update' => 'Permite que um usuário permissão para fazer modificações em um banco de dados. Se o usuário não tiver a permissão "Exibir senha", também não poderá modificar a senha.', + 'database_delete' => 'Permite que um usuário exclua uma instância de banco de dados.', + 'database_view_password' => 'Permite que um usuário exa coma a senha do banco de dados no sistema.', + 'schedule_create' => 'Permite que um usuário crie um novo cronograma para o servidor.', + 'schedule_read' => 'Permite que um usuário permissão para visualizar horários para um servidor.', + 'schedule_update' => 'Permite que um usuário permissão para fazer modificações em um cronograma de servidor existente.', + 'schedule_delete' => 'Permite que um usuário exclua um cronograma para o servidor.', + ], +]; diff --git a/resources/lang/pt/strings.php b/resources/lang/pt/strings.php new file mode 100644 index 000000000..ed54147cd --- /dev/null +++ b/resources/lang/pt/strings.php @@ -0,0 +1,95 @@ + 'E-mail', + 'email_address' => 'Endereço de E-mail', + 'user_identifier' => 'Usuario ou E-mail', + 'password' => 'Senha', + 'new_password' => 'Nova Senha', + 'confirm_password' => 'Confirmar nova Senha', + 'login' => 'Login', + 'home' => 'Casa', + 'servers' => 'Servidores', + 'id' => 'ID', + 'name' => 'Nome', + 'node' => 'Node', + 'connection' => 'Conexão', + 'memory' => 'Memoria', + 'cpu' => 'CPU', + 'disk' => 'Disco', + 'status' => 'Status', + 'search' => 'Busca', + 'suspended' => 'Suspendido', + 'account' => 'Contas', + 'security' => 'Securança', + 'ip' => 'Endereço IP', + 'last_activity' => 'Ultima Actividade', + 'revoke' => 'Revogar', + '2fa_token' => 'Token de autentificação', + 'submit' => 'Enviar', + 'close' => 'Fechar', + 'settings' => 'Configurações', + 'configuration' => 'configuração', + 'sftp' => 'SFTP', + 'databases' => 'Banco de dados', + 'memo' => 'Memo', + 'created' => 'Criado', + 'expires' => 'Expira', + 'public_key' => 'Token', + 'api_access' => 'Api de acesso', + 'never' => 'nunca', + 'sign_out' => 'Sair', + 'admin_control' => 'Console Administrativo', + 'required' => 'Necessário', + 'port' => 'Porta', + 'username' => 'Usuario', + 'database' => 'Banco de dados', + 'new' => 'Novo', + 'danger' => 'Perigo', + 'create' => 'Criar', + 'select_all' => 'Selecionar tudo', + 'select_none' => 'Selecionar nada', + 'alias' => 'Alias', + 'primary' => 'Primario', + 'make_primary' => 'fazer Primario', + 'none' => 'nada', + 'cancel' => 'Cancelar', + 'created_at' => 'Criado At', + 'action' => 'ação', + 'data' => 'Data', + 'queued' => 'Lista', + 'last_run' => 'Ultimo inicio', + 'next_run' => 'proximo inicio', + 'not_run_yet' => 'Não iniciou ainda', + 'yes' => 'Sim', + 'no' => 'Não', + 'delete' => 'Deletar', + '2fa' => '2FA', + 'logout' => 'Deslogar', + 'admin_cp' => 'Painel de Controle de Administração', + 'optional' => 'Opicional', + 'read_only' => 'Somente leitura', + 'relation' => 'Relação', + 'owner' => 'Dono', + 'admin' => 'Administrador', + 'subuser' => 'subusuário', + 'captcha_invalid' => 'O captcha fornecido é inválido.', + 'tasks' => 'Tarefas', + 'seconds' => 'Segundos', + 'minutes' => 'Minutos', + 'under_maintenance' => 'Sob manutenção', + 'days' => [ + 'sun' => 'Domingo', + 'mon' => 'Segunda', + 'tues' => 'Terça', + 'wed' => 'Quarta', + 'thurs' => 'Quinta', + 'fri' => 'Sexta', + 'sat' => 'Sabádo', + ], + 'last_used' => 'Último usado', + 'enable' => 'Habilitado', + 'disable' => 'Desabilitado', + 'save' => 'Salvar', + 'copyright' => '© 2015 - :year Jexactyl Software', +]; diff --git a/resources/lang/pt/validation.php b/resources/lang/pt/validation.php new file mode 100644 index 000000000..a95d0b6cd --- /dev/null +++ b/resources/lang/pt/validation.php @@ -0,0 +1,106 @@ + 'O :attribute deve ser aceito.', + 'active_url' => 'O :attribute não é uma URL válida.', + 'after' => 'O :attribute deve ser uma data depois :date.', + 'after_or_equal' => 'O :attribute deve ser uma data depois ou igual a :date.', + 'alpha' => 'O :attribute só pode conter letras.', + 'alpha_dash' => 'O :attribute só pode conter letras, números e traços.', + 'alpha_num' => 'O :attribute só pode conter letras e números.', + 'array' => 'O :attribute deve ser uma matriz.', + 'before' => 'O :attribute deve ser uma data antes :date.', + 'before_or_equal' => 'O :attribute deve ser uma data antes ou igual a :date.', + 'between' => [ + 'numeric' => 'O :attribute deve ser entre :min e :max.', + 'file' => 'O :attribute deve ser entre :min e :max kilobytes.', + 'string' => 'O :attribute deve estar entre :min e :max caracteres.', + 'array' => 'O :attribute deve ter entre :min e :max items.', + ], + 'boolean' => 'O :attribute campo deve ser verdadeiro ou falso.', + 'confirmed' => 'A confirmação :attribute não corresponde.', + 'date' => 'O :attribute is not a valid date.', + 'date_format' => 'O :attribute não corresponde ao formato :format.', + 'different' => 'O :attribute e :other deve ser diferente.', + 'digits' => 'O :attribute deve ser :digits digits.', + 'digits_between' => 'O :attribute deve ser entre :min e :max digitos.', + 'dimensions' => 'O :attribute tem dimensões de imagem inválidas.', + 'distinct' => 'O :attribute campo tem um valor duplicado.', + 'email' => 'O :attribute deve ser um endereço de e-mail válido.', + 'exists' => 'O :attribute selecionado é inválido.', + 'file' => 'O :attribute deve ser um arquivo.', + 'filled' => 'O campo :attribute é obrigatório.', + 'image' => 'O :attribute deve ser uma imagem.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'O :attribute campo não existe em :other.', + 'integer' => 'O :attribute deve ser um inteiro.', + 'ip' => 'O :attribute deve ser um endereço IP válido.', + 'json' => 'O :attribute deve ser uma sequência JSON válida.', + 'max' => [ + 'numeric' => 'O :attribute não pode ser maior do que :max.', + 'file' => 'O :attribute não pode ser maior do que :max kilobytes.', + 'string' => 'O :attribute não pode ser maior que :max caracteres.', + 'array' => 'O :attribute não pode ter mais do que :max itens.', + ], + 'mimes' => 'O :attribute deve ser um arquivo de tipo: :values.', + 'mimetypes' => 'O :attribute deve ser um arquivo de tipo: :values.', + 'min' => [ + 'numeric' => 'O :attribute deve ser, pelo menos, :min.', + 'file' => 'O :attribute deve ser, pelo menos, :min kilobytes.', + 'string' => 'O :attribute deve ser, pelo menos, :min Caracteres.', + 'array' => 'O :attribute deve ter, pelo menos, :min items.', + ], + 'not_in' => 'O :attribute is invalid.', + 'numeric' => 'O :attribute deve ser um número.', + 'present' => 'O :attribute campo deve estar presente.', + 'regex' => 'O :attribute o formato é inválido.', + 'required' => 'O campo :attribute é obrigatório.', + 'required_if' => 'O :attribute campo é necessário quando :other é :value.', + 'required_unless' => 'O :attribute campo é necessário a menos que :other está em :values.', + 'required_with' => 'O :attribute campo é necessário quando :values está presente.', + 'required_with_all' => 'O :attribute campo é necessário quando :values está presente.', + 'required_without' => 'O :attribute campo é necessário quando :values não está presente.', + 'required_without_all' => 'O :attribute campo é necessário quando nenhum dos :values estão presentes.', + 'same' => 'O :attribute e :other deve corresponder.', + 'size' => [ + 'numeric' => 'O :attribute deve ser :size.', + 'file' => 'O :attribute deve ser :size kilobytes.', + 'string' => 'O :attribute deve ser :size characters.', + 'array' => 'O :attribute deve conter :size items.', + ], + 'string' => 'O :attribute deve ser uma corda.', + 'timezone' => 'O :attribute deve ser uma zona válida.', + 'unique' => 'O :attribute já foi tomada.', + 'uploaded' => 'O :attribute não fez upload.', + 'url' => 'O :attribute o formato é inválido.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + + // Internal validation logic for Jexactyl + 'internal' => [ + 'variable_value' => ':env variable', + 'invalid_password' => 'A senha fornecida é inválida para esta conta.', + ], +]; diff --git a/resources/scripts/api/account/enableAccountTwoFactor.ts b/resources/scripts/api/account/enableAccountTwoFactor.ts index 25c63ad47..013a30db2 100644 --- a/resources/scripts/api/account/enableAccountTwoFactor.ts +++ b/resources/scripts/api/account/enableAccountTwoFactor.ts @@ -1,7 +1,10 @@ import http from '@/api/http'; export default async (code: string, password: string): Promise => { - const { data } = await http.post('/api/client/account/two-factor', { code, password }); + const { data } = await http.post('/api/client/account/two-factor', { + code, + password, + }); return data.attributes.tokens; }; diff --git a/resources/scripts/api/account/ssh-keys.ts b/resources/scripts/api/account/ssh-keys.ts index e98b14028..3e08c57c9 100644 --- a/resources/scripts/api/account/ssh-keys.ts +++ b/resources/scripts/api/account/ssh-keys.ts @@ -21,7 +21,10 @@ const useSSHKeys = (config?: ConfigInterface) => { }; const createSSHKey = async (name: string, publicKey: string): Promise => { - const { data } = await http.post('/api/client/account/ssh-keys', { name, public_key: publicKey }); + const { data } = await http.post('/api/client/account/ssh-keys', { + name, + public_key: publicKey, + }); return Transformers.toSSHKey(data.attributes); }; diff --git a/resources/scripts/api/account/tickets.ts b/resources/scripts/api/account/tickets.ts index 346cd5d7c..f7374f238 100644 --- a/resources/scripts/api/account/tickets.ts +++ b/resources/scripts/api/account/tickets.ts @@ -1,6 +1,6 @@ import http from '@/api/http'; -export type TicketStatus = 'pending' | 'resolved' | 'unresolved' | 'in-progress'; +export type TicketStatus = 'pendente' | 'resolvido' | 'não-resolvido' | 'em-andamento'; export interface Ticket { id: number; diff --git a/resources/scripts/api/auth/login.ts b/resources/scripts/api/auth/login.ts index ff0de7ac6..649112106 100644 --- a/resources/scripts/api/auth/login.ts +++ b/resources/scripts/api/auth/login.ts @@ -24,7 +24,7 @@ export default ({ username, password, recaptchaData }: LoginData): Promise { if (!(response.data instanceof Object)) { - return reject(new Error('An error occurred while processing the login request.')); + return reject(new Error('Ocorreu um erro ao processar a solicitação de login.')); } return resolve({ diff --git a/resources/scripts/api/auth/register.ts b/resources/scripts/api/auth/register.ts index 7b7663292..fa6fa933c 100644 --- a/resources/scripts/api/auth/register.ts +++ b/resources/scripts/api/auth/register.ts @@ -26,7 +26,9 @@ export default ({ username, email, password, recaptchaData }: RegisterData): Pro ) .then((response) => { if (!(response.data instanceof Object)) { - return reject(new Error('Unable to register account. Please contact an administrator.')); + return reject( + new Error('Não foi possível registrar a conta. Entre em contato com um administrador.') + ); } return resolve({ diff --git a/resources/scripts/api/auth/requestPasswordResetEmail.ts b/resources/scripts/api/auth/requestPasswordResetEmail.ts index d68fa4447..037663a89 100644 --- a/resources/scripts/api/auth/requestPasswordResetEmail.ts +++ b/resources/scripts/api/auth/requestPasswordResetEmail.ts @@ -2,7 +2,10 @@ import http from '@/api/http'; export default (email: string, recaptchaData?: string): Promise => { return new Promise((resolve, reject) => { - http.post('/auth/password', { email, 'g-recaptcha-response': recaptchaData }) + http.post('/auth/password', { + email, + 'g-recaptcha-response': recaptchaData, + }) .then((response) => resolve(response.data.status || '')) .catch(reject); }); diff --git a/resources/scripts/api/interceptors.ts b/resources/scripts/api/interceptors.ts index f7a171e97..79ab0c6f7 100644 --- a/resources/scripts/api/interceptors.ts +++ b/resources/scripts/api/interceptors.ts @@ -11,7 +11,9 @@ export const setupInterceptors = (history: History) => { (error.response?.data as Record).errors?.[0].code === 'TwoFactorAuthRequiredException' ) { if (!window.location.pathname.startsWith('/account')) { - history.replace('/account', { twoFactorRedirect: true }); + history.replace('/account', { + twoFactorRedirect: true, + }); } } } diff --git a/resources/scripts/api/server/files/chmodFiles.ts b/resources/scripts/api/server/files/chmodFiles.ts index 8bafd6d6e..1c50655ab 100644 --- a/resources/scripts/api/server/files/chmodFiles.ts +++ b/resources/scripts/api/server/files/chmodFiles.ts @@ -7,7 +7,10 @@ interface Data { export default (uuid: string, directory: string, files: Data[]): Promise => { return new Promise((resolve, reject) => { - http.post(`/api/client/servers/${uuid}/files/chmod`, { root: directory, files }) + http.post(`/api/client/servers/${uuid}/files/chmod`, { + root: directory, + files, + }) .then(() => resolve()) .catch(reject); }); diff --git a/resources/scripts/api/server/files/compressFiles.ts b/resources/scripts/api/server/files/compressFiles.ts index b9f5edeea..61e1bb7d7 100644 --- a/resources/scripts/api/server/files/compressFiles.ts +++ b/resources/scripts/api/server/files/compressFiles.ts @@ -9,7 +9,7 @@ export default async (uuid: string, directory: string, files: string[]): Promise { timeout: 60000, timeoutErrorMessage: - 'It looks like this archive is taking a long time to generate. It will appear once completed.', + 'Parece que este arquivo está demorando muito para ser gerado. Ele aparecerá de uma vez concluído.', } ); diff --git a/resources/scripts/api/server/files/createDirectory.ts b/resources/scripts/api/server/files/createDirectory.ts index 588868655..a16b4a254 100644 --- a/resources/scripts/api/server/files/createDirectory.ts +++ b/resources/scripts/api/server/files/createDirectory.ts @@ -2,7 +2,10 @@ import http from '@/api/http'; export default (uuid: string, root: string, name: string): Promise => { return new Promise((resolve, reject) => { - http.post(`/api/client/servers/${uuid}/files/create-folder`, { root, name }) + http.post(`/api/client/servers/${uuid}/files/create-folder`, { + root, + name, + }) .then(() => resolve()) .catch(reject); }); diff --git a/resources/scripts/api/server/files/decompressFiles.ts b/resources/scripts/api/server/files/decompressFiles.ts index 37557a671..35628bca4 100644 --- a/resources/scripts/api/server/files/decompressFiles.ts +++ b/resources/scripts/api/server/files/decompressFiles.ts @@ -7,7 +7,7 @@ export default async (uuid: string, directory: string, file: string): Promise => { return new Promise((resolve, reject) => { - http.post(`/api/client/servers/${uuid}/files/delete`, { root: directory, files }) + http.post(`/api/client/servers/${uuid}/files/delete`, { + root: directory, + files, + }) .then(() => resolve()) .catch(reject); }); diff --git a/resources/scripts/api/server/files/getFileDownloadUrl.ts b/resources/scripts/api/server/files/getFileDownloadUrl.ts index 39db97290..8cfb21f38 100644 --- a/resources/scripts/api/server/files/getFileDownloadUrl.ts +++ b/resources/scripts/api/server/files/getFileDownloadUrl.ts @@ -2,7 +2,9 @@ import http from '@/api/http'; export default (uuid: string, file: string): Promise => { return new Promise((resolve, reject) => { - http.get(`/api/client/servers/${uuid}/files/download`, { params: { file } }) + http.get(`/api/client/servers/${uuid}/files/download`, { + params: { file }, + }) .then(({ data }) => resolve(data.attributes.url)) .catch(reject); }); diff --git a/resources/scripts/api/server/files/pullFile.ts b/resources/scripts/api/server/files/pullFile.ts index f7a021fe4..837fde81a 100644 --- a/resources/scripts/api/server/files/pullFile.ts +++ b/resources/scripts/api/server/files/pullFile.ts @@ -2,7 +2,10 @@ import http from '@/api/http'; export default (uuid: string, directory: string, url: string): Promise => { return new Promise((resolve, reject) => { - http.post(`/api/client/servers/${uuid}/files/pull`, { root: directory, url }) + http.post(`/api/client/servers/${uuid}/files/pull`, { + root: directory, + url, + }) .then(() => resolve()) .catch(reject); }); diff --git a/resources/scripts/api/server/files/renameFiles.ts b/resources/scripts/api/server/files/renameFiles.ts index 53f92c4c3..6a3c5399c 100644 --- a/resources/scripts/api/server/files/renameFiles.ts +++ b/resources/scripts/api/server/files/renameFiles.ts @@ -7,7 +7,10 @@ interface Data { export default (uuid: string, directory: string, files: Data[]): Promise => { return new Promise((resolve, reject) => { - http.put(`/api/client/servers/${uuid}/files/rename`, { root: directory, files }) + http.put(`/api/client/servers/${uuid}/files/rename`, { + root: directory, + files, + }) .then(() => resolve()) .catch(reject); }); diff --git a/resources/scripts/api/server/renameServer.ts b/resources/scripts/api/server/renameServer.ts index 4622f9d4d..3e3578397 100644 --- a/resources/scripts/api/server/renameServer.ts +++ b/resources/scripts/api/server/renameServer.ts @@ -2,7 +2,10 @@ import http from '@/api/http'; export default (uuid: string, name: string, description?: string): Promise => { return new Promise((resolve, reject) => { - http.post(`/api/client/servers/${uuid}/settings/rename`, { name, description }) + http.post(`/api/client/servers/${uuid}/settings/rename`, { + name, + description, + }) .then(() => resolve()) .catch(reject); }); diff --git a/resources/scripts/api/server/schedules/createOrUpdateSchedule.ts b/resources/scripts/api/server/schedules/createOrUpdateSchedule.ts index 2cc5d7c0f..6fa40f45b 100644 --- a/resources/scripts/api/server/schedules/createOrUpdateSchedule.ts +++ b/resources/scripts/api/server/schedules/createOrUpdateSchedule.ts @@ -1,7 +1,9 @@ import http from '@/api/http'; import { rawDataToServerSchedule, Schedule } from '@/api/server/schedules/getServerSchedules'; -type Data = Pick & { id?: number }; +type Data = Pick & { + id?: number; +}; export default async (uuid: string, schedule: Data): Promise => { const { data } = await http.post(`/api/client/servers/${uuid}/schedules${schedule.id ? `/${schedule.id}` : ''}`, { diff --git a/resources/scripts/api/server/setSelectedDockerImage.ts b/resources/scripts/api/server/setSelectedDockerImage.ts index 70042f3a6..bd5dfc77b 100644 --- a/resources/scripts/api/server/setSelectedDockerImage.ts +++ b/resources/scripts/api/server/setSelectedDockerImage.ts @@ -1,5 +1,7 @@ import http from '@/api/http'; export default async (uuid: string, image: string): Promise => { - await http.put(`/api/client/servers/${uuid}/settings/docker-image`, { docker_image: image }); + await http.put(`/api/client/servers/${uuid}/settings/docker-image`, { + docker_image: image, + }); }; diff --git a/resources/scripts/api/swr/getServerBackups.ts b/resources/scripts/api/swr/getServerBackups.ts index f2582d6db..0fd171a07 100644 --- a/resources/scripts/api/swr/getServerBackups.ts +++ b/resources/scripts/api/swr/getServerBackups.ts @@ -19,7 +19,9 @@ export default () => { const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid); return useSWR(['server:backups', uuid, page], async () => { - const { data } = await http.get(`/api/client/servers/${uuid}/backups`, { params: { page } }); + const { data } = await http.get(`/api/client/servers/${uuid}/backups`, { + params: { page }, + }); return { items: (data.data || []).map(rawDataToServerBackup), diff --git a/resources/scripts/api/swr/getServerStartup.ts b/resources/scripts/api/swr/getServerStartup.ts index 2c0f987cb..31ba98e5b 100644 --- a/resources/scripts/api/swr/getServerStartup.ts +++ b/resources/scripts/api/swr/getServerStartup.ts @@ -23,5 +23,9 @@ export default (uuid: string, initialData?: Response | null, config?: ConfigInte dockerImages: data.meta.docker_images || {}, }; }, - { initialData: initialData || undefined, errorRetryCount: 3, ...(config || {}) } + { + initialData: initialData || undefined, + errorRetryCount: 3, + ...(config || {}), + } ); diff --git a/resources/scripts/components/auth/DiscordContainer.tsx b/resources/scripts/components/auth/DiscordContainer.tsx index ddd3f469e..8127d5352 100644 --- a/resources/scripts/components/auth/DiscordContainer.tsx +++ b/resources/scripts/components/auth/DiscordContainer.tsx @@ -16,7 +16,10 @@ const DiscordContainer = () => { discordLogin() .then((data) => { - if (!data) return clearAndAddHttpError({ error: 'Discord auth failed. Please try again.' }); + if (!data) + return clearAndAddHttpError({ + error: 'A autenticação do Discord falhou. Por favor tente novamente.', + }); window.location.href = data; }) .then(() => setLoading(false)) @@ -31,7 +34,7 @@ const DiscordContainer = () => {
@@ -39,7 +42,7 @@ const DiscordContainer = () => { to={'/auth/login'} css={tw`text-xs text-neutral-500 tracking-wide no-underline uppercase hover:text-neutral-600`} > - Return to login + Voltar ao Login
diff --git a/resources/scripts/components/auth/DiscordFormContainer.tsx b/resources/scripts/components/auth/DiscordFormContainer.tsx index e60704f9a..3134f783e 100644 --- a/resources/scripts/components/auth/DiscordFormContainer.tsx +++ b/resources/scripts/components/auth/DiscordFormContainer.tsx @@ -27,7 +27,7 @@ const DiscordFormContainer = ({ children }: { children: React.ReactNode }) => { return (
-

Login to {name}

+

Logar no Painel {name}

@@ -36,13 +36,14 @@ const DiscordFormContainer = ({ children }: { children: React.ReactNode }) => {
{children}

- © Jexactyl, built on{' '} - Jexactyl. + © Jexactyl-Brasil, feito sobre{' '} + Jexactyl. apartir do{' '} + Pterodactyl.

- Site + Site • - GitHub + GitHub

diff --git a/resources/scripts/components/auth/ForgotPasswordContainer.tsx b/resources/scripts/components/auth/ForgotPasswordContainer.tsx index 0a0b801df..936bb84bd 100644 --- a/resources/scripts/components/auth/ForgotPasswordContainer.tsx +++ b/resources/scripts/components/auth/ForgotPasswordContainer.tsx @@ -38,7 +38,11 @@ export default () => { console.error(error); setSubmitting(false); - addFlash({ type: 'danger', title: 'Error', message: httpErrorToHuman(error) }); + addFlash({ + type: 'danger', + title: 'Error', + message: httpErrorToHuman(error), + }); }); return; @@ -47,11 +51,19 @@ export default () => { requestPasswordResetEmail(email, token) .then((response) => { resetForm(); - addFlash({ type: 'success', title: 'Success', message: response }); + addFlash({ + type: 'success', + title: 'Success', + message: response, + }); }) .catch((error) => { console.error(error); - addFlash({ type: 'danger', title: 'Error', message: httpErrorToHuman(error) }); + addFlash({ + type: 'danger', + title: 'Error', + message: httpErrorToHuman(error), + }); }) .then(() => { setToken(''); @@ -67,24 +79,24 @@ export default () => { initialValues={{ email: '' }} validationSchema={object().shape({ email: string() - .email('A valid email address must be provided to continue.') - .required('A valid email address must be provided to continue.'), + .email('Deve ser fornecido um endereço de E-Mail válido para continuar.') + .required('Deve ser fornecido um endereço de E-Mail válido para continuar.'), })} > {({ isSubmitting, setSubmitting, submitForm }) => ( - +
{recaptchaEnabled && ( @@ -107,7 +119,7 @@ export default () => { to={'/auth/login'} css={tw`text-xs text-neutral-500 tracking-wide uppercase no-underline hover:text-neutral-700`} > - Return to Login + Voltar ao Login
diff --git a/resources/scripts/components/auth/LoginCheckpointContainer.tsx b/resources/scripts/components/auth/LoginCheckpointContainer.tsx index fee3dd1c1..61bd2c24f 100644 --- a/resources/scripts/components/auth/LoginCheckpointContainer.tsx +++ b/resources/scripts/components/auth/LoginCheckpointContainer.tsx @@ -27,16 +27,16 @@ const LoginCheckpointContainer = () => { const [isMissingDevice, setIsMissingDevice] = useState(false); return ( - +
{ }} css={tw`cursor-pointer text-xs text-neutral-500 tracking-wide uppercase no-underline hover:text-neutral-700`} > - {!isMissingDevice ? "I've Lost My Device" : 'I Have My Device'} + {!isMissingDevice ? 'Perdi o meu aparelho' : 'Eu tenho o meu dispositivo'}
@@ -65,7 +65,7 @@ const LoginCheckpointContainer = () => { to={'/auth/login'} css={tw`text-xs text-neutral-500 tracking-wide uppercase no-underline hover:text-neutral-700`} > - Return to Login + Voltar ao Login
diff --git a/resources/scripts/components/auth/LoginContainer.tsx b/resources/scripts/components/auth/LoginContainer.tsx index 65de72e86..8b53c9c7d 100644 --- a/resources/scripts/components/auth/LoginContainer.tsx +++ b/resources/scripts/components/auth/LoginContainer.tsx @@ -54,7 +54,9 @@ const LoginContainer = ({ history }: RouteComponentProps) => { return; } - history.replace('/auth/login/checkpoint', { token: response.confirmationToken }); + history.replace('/auth/login/checkpoint', { + token: response.confirmationToken, + }); }) .catch((error) => { console.error(error); @@ -72,19 +74,19 @@ const LoginContainer = ({ history }: RouteComponentProps) => { onSubmit={onSubmit} initialValues={{ username: '', password: '' }} validationSchema={object().shape({ - username: string().required('A username or email must be provided.'), - password: string().required('Please enter your account password.'), + username: string().required('Deve ser fornecido um nome de usuário ou e-mail.'), + password: string().required('Por favor introduza a senha da sua conta.'), })} > {({ isSubmitting, setSubmitting, submitForm }) => ( - - + +
- +
{recaptchaEnabled && ( @@ -107,7 +109,7 @@ const LoginContainer = ({ history }: RouteComponentProps) => { to={'/auth/password'} css={tw`text-xs text-neutral-500 tracking-wide no-underline uppercase hover:text-neutral-600`} > - Forgot password? + Esqueceu sua senha?
@@ -116,15 +118,15 @@ const LoginContainer = ({ history }: RouteComponentProps) => { to={'/auth/register'} css={tw`text-xs text-neutral-500 tracking-wide no-underline uppercase hover:text-neutral-600`} > - Signup with Email + Registrar com E-mail )} {discord && ( - Authenticate with Discord + Logar com Discord )}
diff --git a/resources/scripts/components/auth/LoginFormContainer.tsx b/resources/scripts/components/auth/LoginFormContainer.tsx index 33b500263..3cf77e254 100644 --- a/resources/scripts/components/auth/LoginFormContainer.tsx +++ b/resources/scripts/components/auth/LoginFormContainer.tsx @@ -30,7 +30,8 @@ const Container = styled.div` `; export default forwardRef(({ title, ...props }, ref) => { - const logo = useStoreState((state) => state.settings.data?.logo); + const logo_string = useStoreState((state) => state.settings.data?.logo); + const logo = logo_string === '' ? '/assets/svgs/pterodactyl.svg' : `${logo_string}`; return ( @@ -39,19 +40,20 @@ export default forwardRef(({ title, ...props }, ref) =>
- +
{props.children}
-

- © Jexactyl, built on{' '} - Jexactyl. +

+ © Jexactyl-Brasil, feito sobre{' '} + Jexactyl. apartir do{' '} + Pterodactyl.

-

- Site +

+ Site • - GitHub + GitHub

); diff --git a/resources/scripts/components/auth/RegisterContainer.tsx b/resources/scripts/components/auth/RegisterContainer.tsx index 607df613a..9599065c7 100644 --- a/resources/scripts/components/auth/RegisterContainer.tsx +++ b/resources/scripts/components/auth/RegisterContainer.tsx @@ -52,7 +52,7 @@ const RegisterContainer = ({ history }: RouteComponentProps) => { addFlash({ key: 'auth:register', type: 'success', - message: 'Account has been successfully created.', + message: 'A conta foi criada com sucesso.', }); return; } @@ -81,25 +81,25 @@ const RegisterContainer = ({ history }: RouteComponentProps) => { })} > {({ isSubmitting, setSubmitting, submitForm }) => ( - + - + {recaptchaEnabled && ( { to={'/auth/login'} css={tw`text-xs text-neutral-500 tracking-wide no-underline uppercase hover:text-neutral-600`} > - Return to login + Voltar ao login diff --git a/resources/scripts/components/auth/ResetPasswordContainer.tsx b/resources/scripts/components/auth/ResetPasswordContainer.tsx index 89c3514f3..c0fdb7026 100644 --- a/resources/scripts/components/auth/ResetPasswordContainer.tsx +++ b/resources/scripts/components/auth/ResetPasswordContainer.tsx @@ -30,7 +30,11 @@ export default ({ match, location }: RouteComponentProps<{ token: string }>) => const submit = ({ password, passwordConfirmation }: Values, { setSubmitting }: FormikHelpers) => { clearFlashes(); - performPasswordReset(email, { token: match.params.token, password, passwordConfirmation }) + performPasswordReset(email, { + token: match.params.token, + password, + passwordConfirmation, + }) .then(() => { // @ts-expect-error this is valid window.location = '/'; @@ -39,7 +43,11 @@ export default ({ match, location }: RouteComponentProps<{ token: string }>) => console.error(error); setSubmitting(false); - addFlash({ type: 'danger', title: 'Error', message: httpErrorToHuman(error) }); + addFlash({ + type: 'danger', + title: 'Error', + message: httpErrorToHuman(error), + }); }); }; @@ -52,35 +60,35 @@ export default ({ match, location }: RouteComponentProps<{ token: string }>) => }} validationSchema={object().shape({ password: string() - .required('A new password is required.') - .min(8, 'Your new password should be at least 8 characters in length.'), + .required('É necessária uma nova palavra-passe.') + .min(8, 'A sua nova senha deve ter pelo menos 8 caracteres.'), passwordConfirmation: string() - .required('Your new password does not match.') + .required('A sua nova senha não corresponde.') // @ts-expect-error this is valid - .oneOf([ref('password'), null], 'Your new password does not match.'), + .oneOf([ref('password'), null], 'A sua nova senha não corresponde.'), })} > {({ isSubmitting }) => ( - +
- +
- +
@@ -88,7 +96,7 @@ export default ({ match, location }: RouteComponentProps<{ token: string }>) => to={'/auth/login'} css={tw`text-xs text-neutral-500 tracking-wide no-underline uppercase hover:text-neutral-600`} > - Return to Login + Voltar ao login
diff --git a/resources/scripts/components/dashboard/AccountApiContainer.tsx b/resources/scripts/components/dashboard/AccountApiContainer.tsx index 51bf9192d..1cb0574fe 100644 --- a/resources/scripts/components/dashboard/AccountApiContainer.tsx +++ b/resources/scripts/components/dashboard/AccountApiContainer.tsx @@ -41,28 +41,28 @@ export default () => { return (
- + setKeys((s) => [...s!, key])} /> - + setDeleteIdentifier('')} onConfirmed={() => doDeletion(deleteIdentifier)} > - All requests using the {deleteIdentifier} key will be invalidated. + Todos os pedidos utilizando a chave {deleteIdentifier} será invalidado. {keys.length === 0 ? (

- {loading ? 'Loading...' : 'No API keys exist for this account.'} + {loading ? 'Carregando...' : 'Não existem chaves API para esta conta.'}

) : ( keys.map((key, index) => ( diff --git a/resources/scripts/components/dashboard/AccountOverviewContainer.tsx b/resources/scripts/components/dashboard/AccountOverviewContainer.tsx index ea3fe19b2..2be132b0b 100644 --- a/resources/scripts/components/dashboard/AccountOverviewContainer.tsx +++ b/resources/scripts/components/dashboard/AccountOverviewContainer.tsx @@ -34,29 +34,27 @@ export default () => { const referrals = useStoreState((state) => state.storefront.data!.referrals.enabled); return ( - + {state?.twoFactorRedirect && ( - - Your account must have two-factor authentication enabled in order to continue. - + Sua conta deve ter autenticação de dois fatores ativada para continuar. )} - + - + {referrals && ( - + )} {discord && ( - + )} diff --git a/resources/scripts/components/dashboard/AccountSecurityContainer.tsx b/resources/scripts/components/dashboard/AccountSecurityContainer.tsx index d0ab3aa54..ddbe7dd28 100644 --- a/resources/scripts/components/dashboard/AccountSecurityContainer.tsx +++ b/resources/scripts/components/dashboard/AccountSecurityContainer.tsx @@ -25,19 +25,24 @@ const Container = styled.div` `; export default () => ( - +
- + - +
diff --git a/resources/scripts/components/dashboard/ApiKeyModal.tsx b/resources/scripts/components/dashboard/ApiKeyModal.tsx index a9a4ef08f..4ca17ac8d 100644 --- a/resources/scripts/components/dashboard/ApiKeyModal.tsx +++ b/resources/scripts/components/dashboard/ApiKeyModal.tsx @@ -14,10 +14,10 @@ const ApiKeyModal = ({ apiKey }: Props) => { return ( <> -

Your API Key

+

Sua Chave API

- The API key you have requested is shown below. Please store this in a safe location, it will not be - shown again. + A chave API que solicitou é mostrada abaixo. Por favor, guarde-a em um local seguro, ela não será + mostrada novamente.

                 
@@ -26,7 +26,7 @@ const ApiKeyModal = ({ apiKey }: Props) => {
             
diff --git a/resources/scripts/components/dashboard/CouponContainer.tsx b/resources/scripts/components/dashboard/CouponContainer.tsx index 20797cc84..2bcb5023c 100644 --- a/resources/scripts/components/dashboard/CouponContainer.tsx +++ b/resources/scripts/components/dashboard/CouponContainer.tsx @@ -13,7 +13,7 @@ import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; const schema = object().shape({ - code: string().required('You must specify the code you wish to redeem.'), + code: string().required('Você deve especificar o código que deseja resgatar.'), }); export default () => { @@ -23,7 +23,7 @@ export default () => { clearFlashes(); redeemCoupon(values.code) .then(() => { - addFlash({ type: 'success', key: 'coupons', message: 'Successfully redeemed the coupon.' }); + addFlash({ type: 'success', key: 'coupons', message: 'Cupom resgatado com sucesso.' }); }) .catch((err) => { addFlash({ type: 'danger', key: 'coupons', message: httpErrorToHuman(err) }); @@ -35,19 +35,19 @@ export default () => { }; return ( - -

Coupons

-

Redeem coupons given to you.

+ +

Cupons

+

Resgatar cupons dados a você.

- + {({ isSubmitting, isValid }) => (
- +
- +
diff --git a/resources/scripts/components/dashboard/DashboardContainer.tsx b/resources/scripts/components/dashboard/DashboardContainer.tsx index c74a33422..cdd2d8f9c 100644 --- a/resources/scripts/components/dashboard/DashboardContainer.tsx +++ b/resources/scripts/components/dashboard/DashboardContainer.tsx @@ -17,8 +17,11 @@ import { usePersistedState } from '@/plugins/usePersistedState'; import ResourceBar from '@/components/elements/store/ResourceBar'; import PageContentBlock from '@/components/elements/PageContentBlock'; +import useWindowDimensions from '@/plugins/useWindowDimensions'; + export default () => { const { search } = useLocation(); + const { width } = useWindowDimensions(); const defaultPage = Number(new URLSearchParams(search).get('page') || '1'); const [page, setPage] = useState(!isNaN(defaultPage) && defaultPage > 0 ? defaultPage : 1); @@ -29,7 +32,11 @@ export default () => { const { data: servers, error } = useSWR>( ['/api/client/servers', showOnlyAdmin && rootAdmin, page], - () => getServers({ page, type: showOnlyAdmin && rootAdmin ? 'admin' : undefined }) + () => + getServers({ + page, + type: showOnlyAdmin && rootAdmin ? 'admin' : undefined, + }) ); useEffect(() => { @@ -52,16 +59,16 @@ export default () => { }, [error]); return ( - - + + {width >= 1024 && } {rootAdmin && (

- {showOnlyAdmin ? "Showing others' servers" : 'Showing your servers'} + {showOnlyAdmin ? 'Mostrando os servidores dos outros' : 'Mostrando seus servidores'}

- Select a server to view, update or modify. + Selecione um servidor para visualizar, atualizar ou modificar.

{
) : ( diff --git a/resources/scripts/components/dashboard/ReferralContainer.tsx b/resources/scripts/components/dashboard/ReferralContainer.tsx index f4c43b2f1..61aa14b79 100644 --- a/resources/scripts/components/dashboard/ReferralContainer.tsx +++ b/resources/scripts/components/dashboard/ReferralContainer.tsx @@ -71,7 +71,7 @@ export default () => { addFlash({ type: 'success', key: 'referrals', - message: 'Referral code has been created.', + message: 'O código de referência foi criado.', }); }) .catch((error) => clearAndAddHttpError(error)) @@ -90,7 +90,7 @@ export default () => { addFlash({ type: 'success', key: 'referrals', - message: 'Referral code has been deleted.', + message: 'O código de referência foi deletado.', }); }) .catch((error) => clearAndAddHttpError(error)) @@ -102,24 +102,26 @@ export default () => { return ( - + setCode('')} onConfirmed={() => doDeletion(code)} > - Users will no longer be able to use this key for signup. + Os usuários não poderão mais usar esta chave para se inscreverem. {codes.length === 0 ? ( -

{!loading && 'No referral codes exist for this account.'}

+

+ {!loading && 'Não existem códigos de referência para esta conta.'} +

) : ( codes.map((code, index) => ( {

{code.code}

- Created at:  + Criado em:  {code.createdAt ? format(code.createdAt, 'MMM do, yyyy HH:mm') : 'Never'}

@@ -143,19 +145,21 @@ export default () => { )) )}
- +

- You will recieve {reward} credits for every user you - refer to this Panel. + Você receberá {reward} créditos para cada usuário que + você indicar para este Painel.

- + {activity.length === 0 ? ( -

{!loading && 'No referral activity exists for this account.'}

+

+ {!loading && 'Não existe nenhuma atividade de indicação para esta conta.'} +

) : ( activity.map((act, index) => ( { {act.userEmail} (ID: {act.userId})

- Used at:  - {act.createdAt ? format(act.createdAt, 'MMM do, yyyy HH:mm') : 'Never'} + Usado em:  + {act.createdAt ? format(act.createdAt, 'MMM do, yyyy HH:mm') : 'Nunca'} +

+

+ Código utilizado: {act.code}

-

Code used: {act.code}

)) diff --git a/resources/scripts/components/dashboard/ServerRow.tsx b/resources/scripts/components/dashboard/ServerRow.tsx index d7c4061aa..65f006c5b 100644 --- a/resources/scripts/components/dashboard/ServerRow.tsx +++ b/resources/scripts/components/dashboard/ServerRow.tsx @@ -19,7 +19,10 @@ const IconDescription = styled.p<{ $alarm?: boolean }>` ${(props) => (props.$alarm ? tw`text-white` : tw`text-neutral-400`)}; `; -const StatusIndicatorBox = styled(GreyRowBox)<{ $status: ServerPowerState | undefined; $bg: string }>` +const StatusIndicatorBox = styled(GreyRowBox)<{ + $status: ServerPowerState | undefined; + $bg: string; +}>` ${tw`grid grid-cols-12 gap-4 relative`}; ${({ $bg }) => `background-image: url("${$bg}");`} @@ -107,19 +110,19 @@ export default ({ server, className }: { server: Server; className?: string }) = isSuspended ? (
- {server.status === 'suspended' ? 'Suspended' : 'Connection Error'} + {server.status === 'suspended' ? 'Suspenso' : 'Erro de conexão'}
) : server.isTransferring || server.status ? (
{server.isTransferring - ? 'Transferring' + ? 'Transferindo' : server.status === 'installing' - ? 'Installing' + ? 'Instalando' : server.status === 'restoring_backup' - ? 'Restoring Backup' - : 'Unavailable'} + ? 'Restaurando Backup' + : 'Não Válido'}
) : ( diff --git a/resources/scripts/components/dashboard/activity/ActivityLogContainer.tsx b/resources/scripts/components/dashboard/activity/ActivityLogContainer.tsx index f00ea99c1..83a13ddf3 100644 --- a/resources/scripts/components/dashboard/activity/ActivityLogContainer.tsx +++ b/resources/scripts/components/dashboard/activity/ActivityLogContainer.tsx @@ -15,14 +15,20 @@ import ActivityLogEntry from '@/components/elements/activity/ActivityLogEntry'; export default () => { const { hash } = useLocationHash(); const { clearAndAddHttpError } = useFlashKey('account'); - const [filters, setFilters] = useState({ page: 1, sorts: { timestamp: -1 } }); + const [filters, setFilters] = useState({ + page: 1, + sorts: { timestamp: -1 }, + }); const { data, isValidating, error } = useActivityLogs(filters, { revalidateOnMount: true, revalidateOnFocus: false, }); useEffect(() => { - setFilters((value) => ({ ...value, filters: { ip: hash.ip, event: hash.event } })); + setFilters((value) => ({ + ...value, + filters: { ip: hash.ip, event: hash.event }, + })); }, [hash]); useEffect(() => { @@ -39,7 +45,7 @@ export default () => { className={classNames(btnStyles.button, btnStyles.text, 'w-full sm:w-auto')} onClick={() => setFilters((value) => ({ ...value, filters: {} }))} > - Clear Filters + Limpar Filtros )} diff --git a/resources/scripts/components/dashboard/forms/AddReferralCodeForm.tsx b/resources/scripts/components/dashboard/forms/AddReferralCodeForm.tsx index 741276c73..4e9c8e134 100644 --- a/resources/scripts/components/dashboard/forms/AddReferralCodeForm.tsx +++ b/resources/scripts/components/dashboard/forms/AddReferralCodeForm.tsx @@ -16,7 +16,7 @@ interface Values { const schema = Yup.object().shape({ code: Yup.string().length(16).required(), - password: Yup.string().required('You must provide your current account password.'), + password: Yup.string().required('Deve fornecer a sua senha de conta corrente.'), }); export default () => { @@ -31,14 +31,14 @@ export default () => { addFlash({ type: 'success', key: 'account:referral', - message: 'You are now using a referral code.', + message: 'Agora você está usando o Código de referência.', }) ) .catch((error) => addFlash({ type: 'danger', key: 'account:referral', - title: 'Error', + title: 'Erro', message: httpErrorToHuman(error), }) ) @@ -55,7 +55,7 @@ export default () => { <> {code ? (

- You have already used a referral code. + Voce ja usou um código de referência {code}

) : ( @@ -63,17 +63,22 @@ export default () => { {({ isSubmitting, isValid }) => (
- +
- +
diff --git a/resources/scripts/components/dashboard/forms/ConfigureTwoFactorForm.tsx b/resources/scripts/components/dashboard/forms/ConfigureTwoFactorForm.tsx index a59977f5f..06fd7f6b9 100644 --- a/resources/scripts/components/dashboard/forms/ConfigureTwoFactorForm.tsx +++ b/resources/scripts/components/dashboard/forms/ConfigureTwoFactorForm.tsx @@ -32,14 +32,14 @@ export default () => { setVisible(null)} />

{isEnabled - ? 'Two-step verification is currently enabled on your account.' - : 'You do not currently have two-step verification enabled on your account. Click the button below to begin configuring it.'} + ? 'A verificação em duas etapas está atualmente activa na sua conta.' + : ' Atualmente não tem a verificação em duas etapas ativada na sua conta. Clique no botão abaixo para iniciar a sua configuração.'}

{isEnabled ? ( - setVisible('disable')}>Disable Two-Step + setVisible('disable')}>Desativar Duas Etapas ) : ( - + )}
diff --git a/resources/scripts/components/dashboard/forms/CreateApiKeyForm.tsx b/resources/scripts/components/dashboard/forms/CreateApiKeyForm.tsx index 38dd736c0..eebbc577b 100644 --- a/resources/scripts/components/dashboard/forms/CreateApiKeyForm.tsx +++ b/resources/scripts/components/dashboard/forms/CreateApiKeyForm.tsx @@ -59,24 +59,24 @@ export default ({ onKeyCreated }: { onKeyCreated: (key: ApiKey) => void }) => {
- +
)} diff --git a/resources/scripts/components/dashboard/forms/CreateSSHKeyForm.tsx b/resources/scripts/components/dashboard/forms/CreateSSHKeyForm.tsx index 723de1180..cfbe7b006 100644 --- a/resources/scripts/components/dashboard/forms/CreateSSHKeyForm.tsx +++ b/resources/scripts/components/dashboard/forms/CreateSSHKeyForm.tsx @@ -48,18 +48,18 @@ export default () => { {({ isSubmitting }) => (
- +
- +
)} diff --git a/resources/scripts/components/dashboard/forms/DisableTOTPDialog.tsx b/resources/scripts/components/dashboard/forms/DisableTOTPDialog.tsx index 125376eb5..b5d25fcfa 100644 --- a/resources/scripts/components/dashboard/forms/DisableTOTPDialog.tsx +++ b/resources/scripts/components/dashboard/forms/DisableTOTPDialog.tsx @@ -41,7 +41,7 @@ const DisableTOTPDialog = () => {
{ onChange={(e) => setPassword(e.currentTarget.value)} /> - Cancel + Cancelar 0} - content={'You must enter your account password to continue.'} + content={'Deve introduzir a senha da sua conta para continuar.'} > - Disable + Desativar diff --git a/resources/scripts/components/dashboard/forms/DiscordAccountForm.tsx b/resources/scripts/components/dashboard/forms/DiscordAccountForm.tsx index 557b11fa3..5c7909b6a 100644 --- a/resources/scripts/components/dashboard/forms/DiscordAccountForm.tsx +++ b/resources/scripts/components/dashboard/forms/DiscordAccountForm.tsx @@ -22,16 +22,16 @@ export default () => { <> {discordId ? ( <> -

Your account is currently linked to the Discord: {discordId}

+

Sua conta está atualmente vinculada ao Discord: {discordId}

unlink()}> - Unlink Discord Account + Desvincular conta do Discord ) : ( <> -

Your account is not linked to Discord.

+

A sua conta não está ligada ao Discord.

link()}> - Link Discord Account + Vincular conta do Discord )} diff --git a/resources/scripts/components/dashboard/forms/RecoveryTokensDialog.tsx b/resources/scripts/components/dashboard/forms/RecoveryTokensDialog.tsx index 3e2d0ba20..0e8f82cf8 100644 --- a/resources/scripts/components/dashboard/forms/RecoveryTokensDialog.tsx +++ b/resources/scripts/components/dashboard/forms/RecoveryTokensDialog.tsx @@ -20,9 +20,9 @@ export default ({ tokens, open, onClose }: RecoveryTokenDialogProps) => { { - These codes will not be shown again. + Estes códigos não serão mostrados novamente. - Done + Pronto ); diff --git a/resources/scripts/components/dashboard/forms/SetupTOTPDialog.tsx b/resources/scripts/components/dashboard/forms/SetupTOTPDialog.tsx index 836b2ef87..e1283d762 100644 --- a/resources/scripts/components/dashboard/forms/SetupTOTPDialog.tsx +++ b/resources/scripts/components/dashboard/forms/SetupTOTPDialog.tsx @@ -70,12 +70,12 @@ const ConfigureTwoFactorForm = ({ onTokens }: Props) => {

- {token?.secret.match(/.{1,4}/g)!.join(' ') || 'Loading...'} + {token?.secret.match(/.{1,4}/g)!.join(' ') || 'Carregando...'}

- Scan the QR code above using the two-step authentication app of your choice. Then, enter the 6-digit - code generated into the field below. + Digitalize o código QR acima usando a aplicação de autenticação em duas etapas à sua escolha. Em + seguida, introduza o código de 6 dígitos gerado no campo abaixo.

{ onChange={(e) => setPassword(e.currentTarget.value)} /> - Cancel + Cancelar 0 && value.length === 6} content={ !token - ? 'Waiting for QR code to load...' - : 'You must enter the 6-digit code and your password to continue.' + ? 'À espera do código QR para carregar...' + : 'Deve introduzir o código de 6 dígitos e a sua palavra-passe para continuar.' } delay={100} > @@ -124,7 +124,7 @@ const ConfigureTwoFactorForm = ({ onTokens }: Props) => { }; export default asDialog({ - title: 'Enable Two-Step Verification', + title: 'Activar a Verificação em Duas Etapas', description: - "Help protect your account from unauthorized access. You'll be prompted for a verification code each time you sign in.", + 'Ajude a proteger a sua conta contra o acesso não autorizado. Ser-lhe-á pedido um código de verificação cada vez que entrar na sua conta.', })(ConfigureTwoFactorForm); diff --git a/resources/scripts/components/dashboard/forms/UpdateEmailAddressForm.tsx b/resources/scripts/components/dashboard/forms/UpdateEmailAddressForm.tsx index c69240051..a17f910fe 100644 --- a/resources/scripts/components/dashboard/forms/UpdateEmailAddressForm.tsx +++ b/resources/scripts/components/dashboard/forms/UpdateEmailAddressForm.tsx @@ -16,7 +16,7 @@ interface Values { const schema = Yup.object().shape({ email: Yup.string().email().required(), - password: Yup.string().required('You must provide your current account password.'), + password: Yup.string().required('Deve fornecer a sua senha de conta corrente.'), }); export default () => { @@ -33,14 +33,14 @@ export default () => { addFlash({ type: 'success', key: 'account:email', - message: 'Your primary email has been updated.', + message: 'O seu e-mail principal foi atualizado.', }) ) .catch((error) => addFlash({ type: 'danger', key: 'account:email', - title: 'Error', + title: 'Erro', message: httpErrorToHuman(error), }) ) @@ -56,17 +56,17 @@ export default () => { - +
- +
diff --git a/resources/scripts/components/dashboard/forms/UpdatePasswordForm.tsx b/resources/scripts/components/dashboard/forms/UpdatePasswordForm.tsx index aad49b8ad..1f74a8165 100644 --- a/resources/scripts/components/dashboard/forms/UpdatePasswordForm.tsx +++ b/resources/scripts/components/dashboard/forms/UpdatePasswordForm.tsx @@ -17,11 +17,11 @@ interface Values { } const schema = Yup.object().shape({ - current: Yup.string().min(1).required('You must provide your current password.'), + current: Yup.string().min(1).required('Você deve fornecer sua senha atual.'), password: Yup.string().min(8).required(), confirmPassword: Yup.string().test( 'password', - 'Password confirmation does not match the password you entered.', + 'A confirmação da senha não corresponde à senha que você digitou.', function (value) { return value === this.parent.password; } @@ -59,26 +59,25 @@ export default () => { {({ isSubmitting, isValid }) => (
- +
@@ -87,11 +86,11 @@ export default () => { id={'confirm_new_password'} type={'password'} name={'confirmPassword'} - label={'Confirm New Password'} + label={'Confirmar Nova Senha'} />
- +
diff --git a/resources/scripts/components/dashboard/forms/UpdateUsernameForm.tsx b/resources/scripts/components/dashboard/forms/UpdateUsernameForm.tsx index 8ff1a09e4..a368e6df9 100644 --- a/resources/scripts/components/dashboard/forms/UpdateUsernameForm.tsx +++ b/resources/scripts/components/dashboard/forms/UpdateUsernameForm.tsx @@ -17,7 +17,7 @@ interface Values { const schema = Yup.object().shape({ username: Yup.string().min(3).required(), - password: Yup.string().required('You must provide your current account password.'), + password: Yup.string().required('Deve fornecer a sua senha de conta corrente.'), }); export default () => { @@ -31,14 +31,14 @@ export default () => { addFlash({ type: 'success', key: 'account:username', - message: 'Your username has been changed.', + message: 'O seu usuário foi alterado.', }) ) .catch((error) => addFlash({ type: 'danger', key: 'account:username', - title: 'Error', + title: 'Erro', message: httpErrorToHuman(error), }) ) @@ -54,17 +54,17 @@ export default () => {
- +
- +
diff --git a/resources/scripts/components/dashboard/search/SearchContainer.tsx b/resources/scripts/components/dashboard/search/SearchContainer.tsx index 65a5af6d2..ff4515835 100644 --- a/resources/scripts/components/dashboard/search/SearchContainer.tsx +++ b/resources/scripts/components/dashboard/search/SearchContainer.tsx @@ -22,7 +22,7 @@ export default ({ size }: Props) => { return ( <> {visible && setVisible(false)} />} - +
setVisible(true)}>
diff --git a/resources/scripts/components/dashboard/search/SearchModal.tsx b/resources/scripts/components/dashboard/search/SearchModal.tsx index c1244da2b..857445e55 100644 --- a/resources/scripts/components/dashboard/search/SearchModal.tsx +++ b/resources/scripts/components/dashboard/search/SearchModal.tsx @@ -80,7 +80,7 @@ export default ({ ...props }: Props) => { @@ -89,8 +89,8 @@ export default ({ ...props }: Props) => {
diff --git a/resources/scripts/components/dashboard/ssh/AccountSSHContainer.tsx b/resources/scripts/components/dashboard/ssh/AccountSSHContainer.tsx index 6b8832992..062c865d5 100644 --- a/resources/scripts/components/dashboard/ssh/AccountSSHContainer.tsx +++ b/resources/scripts/components/dashboard/ssh/AccountSSHContainer.tsx @@ -25,19 +25,19 @@ export default () => { return (
- + - + {!data || !data.length ? (

- {!data ? 'Loading...' : 'No SSH Keys exist for this account.'} + {!data ? 'Carregando...' : 'Não existem chaves SSH para esta conta.'}

) : ( data.map((key, index) => ( @@ -50,7 +50,7 @@ export default () => {

{key.name}

SHA256:{key.fingerprint}

- Added on:  + Adicionada na:  {format(key.createdAt, 'MMM do, yyyy HH:mm')}

diff --git a/resources/scripts/components/dashboard/ssh/DeleteSSHKeyButton.tsx b/resources/scripts/components/dashboard/ssh/DeleteSSHKeyButton.tsx index ef96f54da..f98747ee2 100644 --- a/resources/scripts/components/dashboard/ssh/DeleteSSHKeyButton.tsx +++ b/resources/scripts/components/dashboard/ssh/DeleteSSHKeyButton.tsx @@ -27,12 +27,12 @@ export default ({ name, fingerprint }: { name: string; fingerprint: string }) => <> setVisible(false)} > - Removing the {name} SSH key will invalidate its usage across the Panel. + Remover a chave {name} SSH irá invalidar a sua utilização em todo o Painel. @@ -112,32 +112,32 @@ export default () => { css={tw`w-full sm:w-3/4 md:w-1/2 p-12 md:p-20 bg-neutral-900 rounded-lg shadow-lg text-center relative`} > -

Suspended

+

Suspenso

{renewable ? ( <>

- Your server has been suspended due to it not being renewed on time. Please click the - 'Renew' button in order to reactivate your server. If you want to delete - your server, the resources will automatically be added back to your account so you - can re-deploy a new server easily. + Seu servidor foi suspenso por não ser renovado a tempo. Clique no Renove o botão + para reativar seu servidor. Se você quiser excluir Seu servidor, os recursos serão + adicionados automaticamente à sua conta para que você pode implantar novamente um + novo servidor facilmente.

setDeleteDialog(true)} disabled={isSubmit} > - Delete Server + Excluir servidor ) : ( - <>This server is suspended and cannot be accessed. + <>Este servidor está suspenso e não pode ser acessado. )} diff --git a/resources/scripts/components/elements/activity/ActivityLogEntry.tsx b/resources/scripts/components/elements/activity/ActivityLogEntry.tsx index 77fdb0bc6..434936bc7 100644 --- a/resources/scripts/components/elements/activity/ActivityLogEntry.tsx +++ b/resources/scripts/components/elements/activity/ActivityLogEntry.tsx @@ -53,8 +53,8 @@ export default ({ activity, children }: Props) => {
- - {actor?.username || 'System'} + + {actor?.username || 'Sistema'}  —  {
{activity.isApi && ( - + )} {activity.event.startsWith('server:sftp.') && ( - + )} @@ -88,7 +88,11 @@ export default ({ activity, children }: Props) => { )} - {formatDistanceToNowStrict(activity.timestamp, { addSuffix: true })} + + {formatDistanceToNowStrict(activity.timestamp, { + addSuffix: true, + })} +
diff --git a/resources/scripts/components/elements/activity/ActivityLogMetaButton.tsx b/resources/scripts/components/elements/activity/ActivityLogMetaButton.tsx index f1460ac7c..d89fea55b 100644 --- a/resources/scripts/components/elements/activity/ActivityLogMetaButton.tsx +++ b/resources/scripts/components/elements/activity/ActivityLogMetaButton.tsx @@ -17,11 +17,11 @@ export default ({ meta }: { meta: Record }) => { {JSON.stringify(meta, null, 2)} - setOpen(false)}>Close + setOpen(false)}>Fechar
@@ -85,19 +85,19 @@ export default () => { setOpen(false)} - title={'Plugin Installation'} + title={'Instalar Plugin'} onConfirmed={() => doDownload(pluginId)} > - Are you sure you wish to download this plugin? + Você tem certeza de que deseja baixar este plugin? {!data ? null : ( <> {!data.plugins ? ( -

Waiting for a search query to be provided...

+

Aguardando uma consulta de pesquisa...

) : ( <> {data.plugins.length < 1 ? ( -

Couldn't find any plugins.

+

Não foi encontrado nenhum plugin.

) : (
{data.plugins.map((plugin, key) => ( diff --git a/resources/scripts/components/server/ServerActivityLogContainer.tsx b/resources/scripts/components/server/ServerActivityLogContainer.tsx index c215f122e..6dd4272c2 100644 --- a/resources/scripts/components/server/ServerActivityLogContainer.tsx +++ b/resources/scripts/components/server/ServerActivityLogContainer.tsx @@ -15,7 +15,10 @@ import ActivityLogEntry from '@/components/elements/activity/ActivityLogEntry'; export default () => { const { hash } = useLocationHash(); const { clearAndAddHttpError } = useFlashKey('server:activity'); - const [filters, setFilters] = useState({ page: 1, sorts: { timestamp: -1 } }); + const [filters, setFilters] = useState({ + page: 1, + sorts: { timestamp: -1 }, + }); const { data, isValidating, error } = useActivityLogs(filters, { revalidateOnMount: true, @@ -23,7 +26,10 @@ export default () => { }); useEffect(() => { - setFilters((value) => ({ ...value, filters: { ip: hash.ip, event: hash.event } })); + setFilters((value) => ({ + ...value, + filters: { ip: hash.ip, event: hash.event }, + })); }, [hash]); useEffect(() => { @@ -32,8 +38,8 @@ export default () => { return ( {(filters.filters?.event || filters.filters?.ip) && ( @@ -43,14 +49,16 @@ export default () => { className={classNames(btnStyles.button, btnStyles.text, 'w-full sm:w-auto')} onClick={() => setFilters((value) => ({ ...value, filters: {} }))} > - Clear Filters + Limpar Filtros
)} {!data && isValidating ? ( ) : !data?.items.length ? ( -

No activity logs available for this server.

+

+ Nenhum registro de atividade disponível para este servidor. +

) : (
{data?.items.map((activity) => ( diff --git a/resources/scripts/components/server/TransferListener.tsx b/resources/scripts/components/server/TransferListener.tsx index 3c0016f18..5854bb3a8 100644 --- a/resources/scripts/components/server/TransferListener.tsx +++ b/resources/scripts/components/server/TransferListener.tsx @@ -7,19 +7,19 @@ const TransferListener = () => { const getServer = ServerContext.useStoreActions((actions) => actions.server.getServer); const setServerFromState = ServerContext.useStoreActions((actions) => actions.server.setServerFromState); - // Listen for the transfer status event, so we can update the state of the server. + // Listen for the transfer status event so we can update the state of the server. useWebsocketEvent(SocketEvent.TRANSFER_STATUS, (status: string) => { if (status === 'pending' || status === 'processing') { setServerFromState((s) => ({ ...s, isTransferring: true })); return; } - if (status === 'failed') { + if (status === 'failure') { setServerFromState((s) => ({ ...s, isTransferring: false })); return; } - if (status !== 'completed') { + if (status !== 'success') { return; } diff --git a/resources/scripts/components/server/WebsocketHandler.tsx b/resources/scripts/components/server/WebsocketHandler.tsx index 26335382f..b8bec0ad4 100644 --- a/resources/scripts/components/server/WebsocketHandler.tsx +++ b/resources/scripts/components/server/WebsocketHandler.tsx @@ -53,9 +53,7 @@ export default () => { if (reconnectErrors.find((v) => error.toLowerCase().indexOf(v) >= 0)) { updateToken(uuid, socket); } else { - setError( - 'There was an error validating the credentials provided for the websocket. Please refresh the page.' - ); + setError('Houve um erro validando as credenciais fornecidas para o WebSocket. Atualize a página.'); } }); @@ -111,7 +109,7 @@ export default () => { {error === 'connecting' ? ( <> -

Please wait while we connect to your instance.

+

Aguarde enquanto nos conectarmos à sua instância.

) : (

{error}

diff --git a/resources/scripts/components/server/backups/BackupContainer.tsx b/resources/scripts/components/server/backups/BackupContainer.tsx index b036d0b21..502cfbc57 100644 --- a/resources/scripts/components/server/backups/BackupContainer.tsx +++ b/resources/scripts/components/server/backups/BackupContainer.tsx @@ -32,7 +32,7 @@ const BackupContainer = () => { } return ( - + {({ items }) => !items.length ? ( @@ -41,8 +41,8 @@ const BackupContainer = () => { !backupLimit ? null : (

{page > 1 - ? "Looks like we've run out of backups to show you, try going back a page." - : 'It looks like there are no backups currently stored for this server.'} + ? 'Parece que ficamos sem backups para mostrar, tente voltar uma página.' + : 'Parece que atualmente não há backups armazenados para este servidor.'}

) ) : ( @@ -54,14 +54,14 @@ const BackupContainer = () => {
{backupLimit === 0 && (

- Backups cannot be created for this server because the backup limit is set to 0. + Os backups não podem ser criados para este servidor porque o limite de backup é definido como 0.

)}
{backupLimit > 0 && backups.backupCount > 0 && (

- {backups.backupCount} of {backupLimit} backups have been created for this server. + {backups.backupCount} de {backupLimit} backups foram criados para este servidor.

)} {backupLimit > 0 && backupLimit > backups.backupCount && ( diff --git a/resources/scripts/components/server/backups/BackupContextMenu.tsx b/resources/scripts/components/server/backups/BackupContextMenu.tsx index eb08850c7..fd0db3a61 100644 --- a/resources/scripts/components/server/backups/BackupContextMenu.tsx +++ b/resources/scripts/components/server/backups/BackupContextMenu.tsx @@ -117,18 +117,18 @@ export default ({ backup }: Props) => { title={`Unlock "${backup.name}"`} onConfirmed={onLockToggle} > - This backup will no longer be protected from automated or accidental deletions. + Esse backup não será mais protegido das deleções automatizadas ou acidentais. setModal('')} - confirm={'Restore'} - title={`Restore "${backup.name}"`} + confirm={'Restaurar'} + title={`Restaurar "${backup.name}"`} onConfirmed={() => doRestorationAction()} >

- Your server will be stopped. You will not be able to control the power state, access the file - manager, or create additional backups until completed. + Seu servidor será interrompido.Você não poderá controlar o estado de energia, acessar o arquivo + Gerente ou crie backups adicionais até concluir.

setModal('')} onConfirmed={doDeletion} > - This is a permanent operation. The backup cannot be recovered once deleted. + Esta é uma operação permanente.O backup não pode ser recuperado depois de excluído. {backup.isSuccessful ? ( @@ -175,7 +175,7 @@ export default ({ backup }: Props) => { setModal('restore')}> - Restore + Restaurar @@ -184,12 +184,12 @@ export default ({ backup }: Props) => { {backup.isLocked ? ( <> - Unlock + Desbloquear ) : ( <> - Lock + Trancar )} diff --git a/resources/scripts/components/server/backups/BackupRow.tsx b/resources/scripts/components/server/backups/BackupRow.tsx index 1e56444c5..76a538022 100644 --- a/resources/scripts/components/server/backups/BackupRow.tsx +++ b/resources/scripts/components/server/backups/BackupRow.tsx @@ -66,7 +66,7 @@ export default ({ backup, className }: Props) => { - Failed + Falhou )}

{backup.name}

@@ -81,7 +81,10 @@ export default ({ backup, className }: Props) => {

- {formatDistanceToNow(backup.createdAt, { includeSeconds: true, addSuffix: true })} + {formatDistanceToNow(backup.createdAt, { + includeSeconds: true, + addSuffix: true, + })}

Created

diff --git a/resources/scripts/components/server/backups/CreateBackupButton.tsx b/resources/scripts/components/server/backups/CreateBackupButton.tsx index 2cc675410..44bc12d06 100644 --- a/resources/scripts/components/server/backups/CreateBackupButton.tsx +++ b/resources/scripts/components/server/backups/CreateBackupButton.tsx @@ -28,21 +28,21 @@ const ModalContent = ({ ...props }: RequiredModalProps) => {
-

Create server backup

+

Crie backup do servidor

@@ -52,14 +52,14 @@ const ModalContent = ({ ...props }: RequiredModalProps) => {
@@ -82,7 +82,11 @@ export default () => { createServerBackup(uuid, values) .then((backup) => { mutate( - (data) => ({ ...data, items: data.items.concat(backup), backupCount: data.backupCount + 1 }), + (data) => ({ + ...data, + items: data.items.concat(backup), + backupCount: data.backupCount + 1, + }), false ); setVisible(false); @@ -109,7 +113,7 @@ export default () => { )} ); diff --git a/resources/scripts/components/server/console/Console.tsx b/resources/scripts/components/server/console/Console.tsx index 6aa06636b..d80dc7878 100644 --- a/resources/scripts/components/server/console/Console.tsx +++ b/resources/scripts/components/server/console/Console.tsx @@ -79,7 +79,7 @@ export default () => { switch (status) { // Sent by either the source or target node if a failure occurs. case 'failure': - terminal.writeln(TERMINAL_PRELUDE + 'Transfer has failed.\u001b[0m'); + terminal.writeln(TERMINAL_PRELUDE + 'A transferência falhou.\u001b[0m'); return; } }; @@ -94,7 +94,7 @@ export default () => { ); const handlePowerChangeEvent = (state: string) => - terminal.writeln(TERMINAL_PRELUDE + 'Server marked as ' + state + '...\u001b[0m'); + terminal.writeln(TERMINAL_PRELUDE + 'Servidor marcado como ' + state + '...\u001b[0m'); const handleCommandKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'ArrowUp') { @@ -216,11 +216,11 @@ export default () => { />
{!isConsoleDetached && ( - + popout()} /> )} - + { diff --git a/resources/scripts/components/server/console/ConsoleShareContainer.tsx b/resources/scripts/components/server/console/ConsoleShareContainer.tsx index 47be23b52..441369494 100644 --- a/resources/scripts/components/server/console/ConsoleShareContainer.tsx +++ b/resources/scripts/components/server/console/ConsoleShareContainer.tsx @@ -28,11 +28,15 @@ export default () => { addFlash({ key: 'console:share', type: 'success', - message: 'Your server logs have been saved to the /share folder.', + message: 'Os logs do seu servidor foram salvos na pasta /share.', }); }) .catch((error) => { - addFlash({ key: 'console:share', type: 'danger', message: httpErrorToHuman(error) }); + addFlash({ + key: 'console:share', + type: 'danger', + message: httpErrorToHuman(error), + }); }); }; @@ -49,10 +53,10 @@ export default () => { return ( <> {status === 'offline' ? ( - Offline + Desligado ) : (
- Save + Salvar
)} diff --git a/resources/scripts/components/server/console/PowerButtons.tsx b/resources/scripts/components/server/console/PowerButtons.tsx index 5139f3b01..554ca6277 100644 --- a/resources/scripts/components/server/console/PowerButtons.tsx +++ b/resources/scripts/components/server/console/PowerButtons.tsx @@ -42,11 +42,11 @@ export default ({ className }: PowerButtonProps) => { open={open} hideCloseIcon onClose={() => setOpen(false)} - title={'Forcibly Stop Process'} - confirm={'Continue'} + title={'Parar o processo à força'} + confirm={'Continuar'} onConfirmed={onButtonClick.bind(this, 'kill-confirmed')} > - Forcibly stopping a server can lead to data corruption. + Parar à força um servidor pode levar à corrupção de dados. { disabled={status !== 'offline'} onClick={onButtonClick.bind(this, 'start')} > - Start + Iniciar - Restart + Reiniciar @@ -68,7 +68,7 @@ export default ({ className }: PowerButtonProps) => { disabled={status === 'offline'} onClick={onButtonClick.bind(this, killable ? 'kill' : 'stop')} > - {killable ? 'Kill' : 'Stop'} + {killable ? 'Matar' : 'Parar'}
diff --git a/resources/scripts/components/server/console/RenewalInfo.tsx b/resources/scripts/components/server/console/RenewalInfo.tsx index 4c5447b9c..1a0d30aa5 100644 --- a/resources/scripts/components/server/console/RenewalInfo.tsx +++ b/resources/scripts/components/server/console/RenewalInfo.tsx @@ -27,7 +27,7 @@ export default () => { addFlash({ key: 'console:share', type: 'success', - message: 'Server has been renewed.', + message: 'O servidor foi renovado.', }); }) .catch((error) => { @@ -38,26 +38,25 @@ export default () => { addFlash({ key: 'console:share', type: 'danger', - message: 'Unable to renew your server. Are you sure you have enough credits?', + message: 'Incapaz de renovar seu servidor. Tem certeza de que tem créditos suficientes?', }); }); }; - return ( <> setOpen(false)} - title={'Confirm server renewal'} + title={'Confirme a renovação do servidor'} onConfirmed={() => doRenewal()} > - You will be charged {store.renewals.cost} credits to add {store.renewals.days} days until your next - renewal is due. + Você será cobrado {store.renewals.cost} créditos para adicionar {store.renewals.days} dias até sua + próxima renovação é devida. - in {renewal} days{' '} + em {renewal} dias{' '} setOpen(true)}> - {'('}Renew{')'} + {'('}Renovar{')'} ); diff --git a/resources/scripts/components/server/console/ServerConsoleContainer.tsx b/resources/scripts/components/server/console/ServerConsoleContainer.tsx index 767ececdc..d70c3b52a 100644 --- a/resources/scripts/components/server/console/ServerConsoleContainer.tsx +++ b/resources/scripts/components/server/console/ServerConsoleContainer.tsx @@ -25,10 +25,10 @@ const ServerConsoleContainer = () => { {(isNodeUnderMaintenance || isInstalling || isTransferring) && ( {isNodeUnderMaintenance - ? 'The node of this server is currently under maintenance and all actions are unavailable.' + ? 'O Node deste servidor está atualmente em manutenção e todas as ações não estão disponíveis.' : isInstalling - ? 'This server is currently running its installation process and most actions are unavailable.' - : 'This server is currently being transferred to another node and all actions are unavailable.'} + ? 'Atualmente, este servidor está executando seu processo de instalação e a maioria das ações não está disponível.' + : 'Atualmente, este servidor está sendo transferido para outro Node e todas as ações não estão disponíveis.'} )}
diff --git a/resources/scripts/components/server/console/ServerDetailsBlock.tsx b/resources/scripts/components/server/console/ServerDetailsBlock.tsx index 88856754a..a6e911508 100644 --- a/resources/scripts/components/server/console/ServerDetailsBlock.tsx +++ b/resources/scripts/components/server/console/ServerDetailsBlock.tsx @@ -28,7 +28,12 @@ const Bar = styled.div` `; export default ({ className }: { className?: string }) => { - const [stats, setStats] = useState({ memory: 0, cpu: 0, disk: 0, uptime: 0 }); + const [stats, setStats] = useState({ + memory: 0, + cpu: 0, + disk: 0, + uptime: 0, + }); const status = ServerContext.useStoreState((state) => state.status.value); const instance = ServerContext.useStoreState((state) => state.socket.instance); @@ -81,7 +86,7 @@ export default ({ className }: { className?: string }) => { return (
- + {status === null ? ( 'Offline' ) : stats.uptime > 0 ? ( @@ -90,12 +95,12 @@ export default ({ className }: { className?: string }) => { capitalize(status) )} - + {allocation} {status === 'offline' ? ( - Offline + Desligado ) : ( {stats.cpu.toFixed(2)}% )} @@ -104,12 +109,16 @@ export default ({ className }: { className?: string }) => { ) : limits.cpu === 0 ? ( ) : ( - + )} - + {status === 'offline' ? ( - Offline + Desligado ) : ( {bytesToString(stats.memory)} )} @@ -118,24 +127,32 @@ export default ({ className }: { className?: string }) => { ) : limits.memory === 0 ? ( ) : ( - + )} - + {bytesToString(stats.disk)} {diskUsed > 90 ? ( ) : limits.disk === 0 ? ( ) : ( - + )} - + {renewable && ( - + )} diff --git a/resources/scripts/components/server/console/StatGraphs.tsx b/resources/scripts/components/server/console/StatGraphs.tsx index cd951740f..e4e906c4f 100644 --- a/resources/scripts/components/server/console/StatGraphs.tsx +++ b/resources/scripts/components/server/console/StatGraphs.tsx @@ -67,28 +67,31 @@ export default () => { previous.current.rx < 0 ? 0 : Math.max(0, values.network.rx_bytes - previous.current.rx), ]); - previous.current = { tx: values.network.tx_bytes, rx: values.network.rx_bytes }; + previous.current = { + tx: values.network.tx_bytes, + rx: values.network.rx_bytes, + }; }); return ( <> - + - + - + - + - + diff --git a/resources/scripts/components/server/console/style.module.css b/resources/scripts/components/server/console/style.module.css index 6c1d3ab03..2a109205d 100644 --- a/resources/scripts/components/server/console/style.module.css +++ b/resources/scripts/components/server/console/style.module.css @@ -35,7 +35,7 @@ @apply rounded-t p-1 sm:p-2 bg-black min-h-[16rem] flex-1 font-mono text-sm; & #terminal { - @apply h-full; + @apply h-[330px] md:h-full; &::-webkit-scrollbar-track { @apply w-2; diff --git a/resources/scripts/components/server/databases/CreateDatabaseButton.tsx b/resources/scripts/components/server/databases/CreateDatabaseButton.tsx index bb291ff83..ba306b6ac 100644 --- a/resources/scripts/components/server/databases/CreateDatabaseButton.tsx +++ b/resources/scripts/components/server/databases/CreateDatabaseButton.tsx @@ -18,14 +18,14 @@ interface Values { const schema = object().shape({ databaseName: string() - .required('A database name must be provided.') - .min(3, 'Database name must be at least 3 characters.') - .max(48, 'Database name must not exceed 48 characters.') + .required('Um nome de banco de dados deve ser fornecido.') + .min(3, 'O nome do banco de dados deve ter pelo menos 3 caracteres.') + .max(48, 'O nome do banco de dados não deve exceder 48 caracteres.') .matches( /^[\w\-.]{3,48}$/, - 'Database name should only contain alphanumeric characters, underscores, dashes, and/or periods.' + 'O nome do banco de dados deve conter apenas caracteres alfanuméricos, sublinhados, traços e/ou períodos.' ), - connectionsFrom: string().matches(/^[\w\-/.%:]+$/, 'A valid host address must be provided.'), + connectionsFrom: string().matches(/^[\w\-/.%:]+$/, 'Um endereço de host válido deve ser fornecido.'), }); export default () => { @@ -46,7 +46,10 @@ export default () => { setVisible(false); }) .catch((error) => { - addError({ key: 'database:create', message: httpErrorToHuman(error) }); + addError({ + key: 'database:create', + message: httpErrorToHuman(error), + }); setSubmitting(false); }); }; @@ -69,23 +72,23 @@ export default () => { }} > -

Create new database

+

Criar novo banco de dados

@@ -96,17 +99,17 @@ export default () => { css={tw`w-full sm:w-auto sm:mr-2`} onClick={() => setVisible(false)} > - Cancel + Cancelar
)} - + ); }; diff --git a/resources/scripts/components/server/databases/DatabaseRow.tsx b/resources/scripts/components/server/databases/DatabaseRow.tsx index eaa9245e4..4ed890184 100644 --- a/resources/scripts/components/server/databases/DatabaseRow.tsx +++ b/resources/scripts/components/server/databases/DatabaseRow.tsx @@ -39,8 +39,8 @@ export default ({ database, className }: Props) => { const schema = object().shape({ confirm: string() - .required('The database name must be provided.') - .oneOf([database.name.split('_', 2)[1], database.name], 'The database name must be provided.'), + .required('O nome do banco de dados deve ser fornecido.') + .oneOf([database.name.split('_', 2)[1], database.name], 'O nome do banco de dados deve ser fornecido.'), }); const submit = (values: { confirm: string }, { setSubmitting }: FormikHelpers<{ confirm: string }>) => { @@ -53,7 +53,10 @@ export default ({ database, className }: Props) => { .catch((error) => { console.error(error); setSubmitting(false); - addError({ key: 'database:delete', message: httpErrorToHuman(error) }); + addError({ + key: 'database:delete', + message: httpErrorToHuman(error), + }); }); }; @@ -71,18 +74,19 @@ export default ({ database, className }: Props) => { }} > -

Confirm database deletion

+

Confirme a exclusão do banco de dados

- Deleting a database is a permanent action, it cannot be undone. This will permanently delete - the {database.name} database and remove all associated data. + A exclusão de um banco de dados é uma ação permanente, não pode ser desfeita. Isso vai + excluir permanentemente a {database.name} + banco de dados e remova todos os dados associados.

@@ -103,7 +107,7 @@ export default ({ database, className }: Props) => { setConnectionVisible(false)}> -

Database connection details

+

Detalhes da conexão do banco de dados

@@ -111,7 +115,7 @@ export default ({ database, className }: Props) => {
- +
@@ -122,14 +126,14 @@ export default ({ database, className }: Props) => {
- +
- + @@ -139,7 +143,7 @@ export default ({ database, className }: Props) => {
@@ -160,7 +164,7 @@ export default ({ database, className }: Props) => {
diff --git a/resources/scripts/components/server/files/ChmodFileModal.tsx b/resources/scripts/components/server/files/ChmodFileModal.tsx index 332e74985..9cf5c7200 100644 --- a/resources/scripts/components/server/files/ChmodFileModal.tsx +++ b/resources/scripts/components/server/files/ChmodFileModal.tsx @@ -34,7 +34,13 @@ const ChmodFileModal = ({ files, ...props }: OwnProps) => { mutate( (data) => data.map((f) => - f.name === files[0].file ? { ...f, mode: fileBitsToString(mode, !f.isFile), modeBits: mode } : f + f.name === files[0].file + ? { + ...f, + mode: fileBitsToString(mode, !f.isFile), + modeBits: mode, + } + : f ), false ); @@ -53,7 +59,12 @@ const ChmodFileModal = ({ files, ...props }: OwnProps) => { }; return ( - 1 ? '' : files[0].mode || '' }}> + 1 ? '' : files[0].mode || '', + }} + > {({ isSubmitting }) => (
@@ -62,7 +73,7 @@ const ChmodFileModal = ({ files, ...props }: OwnProps) => {
- +
diff --git a/resources/scripts/components/server/files/FileDropdownMenu.tsx b/resources/scripts/components/server/files/FileDropdownMenu.tsx index 4583911ea..843b41f15 100644 --- a/resources/scripts/components/server/files/FileDropdownMenu.tsx +++ b/resources/scripts/components/server/files/FileDropdownMenu.tsx @@ -122,8 +122,8 @@ const FileDropdownMenu = ({ file }: { file: FileObject }) => { confirm={'Delete'} onConfirmed={doDeletion} > - You will not be able to recover the contents of  - {file.name} once deleted. + Você não será capaz de recuperar o conteúdo de  + {file.name} Uma vez excluído. { setModal(null)} /> ) : ( @@ -153,27 +158,27 @@ const FileDropdownMenu = ({ file }: { file: FileObject }) => { )} > - setModal('rename')} title={'Rename'} /> - setModal('move')} title={'Move'} /> - setModal('chmod')} title={'Permissions'} /> + setModal('rename')} title={'Renomear'} /> + setModal('move')} title={'Mover'} /> + setModal('chmod')} title={'Permissões'} /> {file.isFile && ( - + )} {file.isArchiveType() ? ( - + ) : ( - + )} {file.isFile && } - setShowConfirmation(true)} title={'Delete'} $danger /> + setShowConfirmation(true)} title={'Deletar'} $danger /> diff --git a/resources/scripts/components/server/files/FileEditContainer.tsx b/resources/scripts/components/server/files/FileEditContainer.tsx index a8f66c72a..7978688bb 100644 --- a/resources/scripts/components/server/files/FileEditContainer.tsx +++ b/resources/scripts/components/server/files/FileEditContainer.tsx @@ -74,7 +74,10 @@ export default () => { }) .catch((error) => { console.error(error); - addError({ message: httpErrorToHuman(error), key: 'files:view' }); + addError({ + message: httpErrorToHuman(error), + key: 'files:view', + }); }) .then(() => setLoading(false)); }; @@ -94,11 +97,14 @@ export default () => { {hash.replace(/^#/, '').endsWith('.pteroignore') && (

- You're editing a .pteroignore{' '} - file. Any files or directories listed in here will be excluded from backups. Wildcards are - supported by using an asterisk (*). - You can negate a prior rule by prepending an exclamation point ( - !). + Você está editando um arquivo + .pteroignore .Quaisquer arquivos ou + diretórios listados aqui serão excluídos de backups. Wildcards são suportados usando um + asterisco( + * + ). Você pode negar uma regra anterior precendendo um ponto de exclamação ( + ! + ).

)} @@ -142,13 +148,13 @@ export default () => { {action === 'edit' ? ( ) : ( )} diff --git a/resources/scripts/components/server/files/FileManagerBreadcrumbs.tsx b/resources/scripts/components/server/files/FileManagerBreadcrumbs.tsx index d139f944b..4d75204dc 100644 --- a/resources/scripts/components/server/files/FileManagerBreadcrumbs.tsx +++ b/resources/scripts/components/server/files/FileManagerBreadcrumbs.tsx @@ -34,7 +34,10 @@ export default ({ renderLeft, withinFileEditor, isNewFile }: Props) => { return { name: directory }; } - return { name: directory, path: `/${dirs.slice(0, index + 1).join('/')}` }; + return { + name: directory, + path: `/${dirs.slice(0, index + 1).join('/')}`, + }; }); return ( diff --git a/resources/scripts/components/server/files/FileManagerContainer.tsx b/resources/scripts/components/server/files/FileManagerContainer.tsx index 1ec3d1c9a..72bff4029 100644 --- a/resources/scripts/components/server/files/FileManagerContainer.tsx +++ b/resources/scripts/components/server/files/FileManagerContainer.tsx @@ -80,8 +80,12 @@ export default () => { }; return ( - - + +
@@ -104,7 +108,7 @@ export default () => { - +
@@ -115,15 +119,15 @@ export default () => { ) : ( <> {!files.length ? ( -

This directory seems to be empty.

+

Este diretório parece estar vazio.

) : ( <> {files.length > 250 && (

- This directory is too large to display in the browser, limiting the output - to the first 250 files. + Este diretório é muito grande para ser exibido no navegador, limitando a + saída para os primeiros 250 arquivos.

)} @@ -137,15 +141,15 @@ export default () => { )} - +
- +
diff --git a/resources/scripts/components/server/files/FileManagerStatus.tsx b/resources/scripts/components/server/files/FileManagerStatus.tsx index 3e1c2df24..4c3d29c8e 100644 --- a/resources/scripts/components/server/files/FileManagerStatus.tsx +++ b/resources/scripts/components/server/files/FileManagerStatus.tsx @@ -25,7 +25,9 @@ const Spinner = ({ progress, className }: { progress: number; className?: string stroke={'white'} strokeDasharray={28 * Math.PI} className={'rotate-[-90deg] origin-[50%_50%] transition-[stroke-dashoffset] duration-300'} - style={{ strokeDashoffset: ((100 - progress) / 100) * 28 * Math.PI }} + style={{ + strokeDashoffset: ((100 - progress) / 100) * 28 * Math.PI, + }} /> ); @@ -58,17 +60,17 @@ const FileUploadList = () => { ))} clearFileUploads()}> - Cancel Uploads + Cancelar Uploads - Close + Fechar
); }; const FileUploadListDialog = asDialog({ - title: 'File Uploads', - description: 'The following files are being uploaded to your server.', + title: 'Upload de Arquivos', + description: 'Os seguintes arquivos estão sendo enviados para o seu servidor.', })(FileUploadList); export default () => { @@ -89,7 +91,7 @@ export default () => { return ( <> {count > 0 && ( - + +
diff --git a/resources/scripts/components/server/files/MassActionsBar.tsx b/resources/scripts/components/server/files/MassActionsBar.tsx index cf4012ae1..b61a058f6 100644 --- a/resources/scripts/components/server/files/MassActionsBar.tsx +++ b/resources/scripts/components/server/files/MassActionsBar.tsx @@ -33,7 +33,7 @@ const MassActionsBar = () => { const onClickCompress = () => { setLoading(true); clearFlashes('files'); - setLoadingMessage('Archiving files...'); + setLoadingMessage('Arquivando arquivos...'); compressFiles(uuid, directory, selectedFiles) .then(() => mutate()) @@ -46,7 +46,7 @@ const MassActionsBar = () => { setLoading(true); setShowConfirm(false); clearFlashes('files'); - setLoadingMessage('Deleting files...'); + setLoadingMessage('Excluindo arquivos...'); deleteFiles(uuid, directory, selectedFiles) .then(() => { @@ -67,21 +67,21 @@ const MassActionsBar = () => { {loadingMessage}
setShowConfirm(false)} onConfirmed={onClickConfirmDeletion} >

- Are you sure you want to delete  - {selectedFiles.length} files? This is a - permanent action and the files cannot be recovered. + Tem certeza de que deseja excluir  + {selectedFiles.length} arquivos? Isto é + uma ação permanente e os arquivos não podem ser recuperados.

{selectedFiles.slice(0, 15).map((file) => (
  • {file}
  • ))} - {selectedFiles.length > 15 &&
  • and {selectedFiles.length - 15} others
  • } + {selectedFiles.length > 15 &&
  • e {selectedFiles.length - 15} outros
  • }
    {showMove && ( {
    0} unmountOnExit>
    - - + + setShowConfirm(true)}> - Delete + Excluir
    diff --git a/resources/scripts/components/server/files/NewDirectoryButton.tsx b/resources/scripts/components/server/files/NewDirectoryButton.tsx index ff74357cf..620141c68 100644 --- a/resources/scripts/components/server/files/NewDirectoryButton.tsx +++ b/resources/scripts/components/server/files/NewDirectoryButton.tsx @@ -21,7 +21,7 @@ interface Values { } const schema = object().shape({ - directoryName: string().required('A valid directory name must be provided.'), + directoryName: string().required('Um nome de diretório válido deve ser fornecido.'), }); const generateDirectoryData = (name: string): FileObject => ({ @@ -40,7 +40,7 @@ const generateDirectoryData = (name: string): FileObject => ({ }); const NewDirectoryDialog = asDialog({ - title: 'Create Directory', + title: 'Criar diretório', })(() => { const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid); const directory = ServerContext.useStoreState((state) => state.files.directory); @@ -73,7 +73,7 @@ const NewDirectoryDialog = asDialog({

    - This directory will be created as  + Este diretório será criado como  /home/container/ @@ -84,10 +84,10 @@ const NewDirectoryDialog = asDialog({ - Cancel + Cancelar @@ -103,7 +103,7 @@ export default ({ className }: WithClassname) => { <> - Create Directory + Criar diretório ); diff --git a/resources/scripts/components/server/files/PullFileModal.tsx b/resources/scripts/components/server/files/PullFileModal.tsx index a5801a136..37a94d17b 100644 --- a/resources/scripts/components/server/files/PullFileModal.tsx +++ b/resources/scripts/components/server/files/PullFileModal.tsx @@ -76,7 +76,7 @@ export default ({ className }: WithClassname) => { url: string() .required() .url() - .test('unique', 'File or directory with that name already exists.', (v) => { + .test('unique', 'Arquivo ou diretório com esse nome já existe.', (v) => { return ( v !== undefined && data !== undefined && @@ -87,7 +87,7 @@ export default ({ className }: WithClassname) => { > {({ resetForm, submitForm, isSubmitting: _, values }) => (

    { setVisible(false); @@ -98,7 +98,7 @@ export default ({ className }: WithClassname) => {

    - This file will be downloaded to  + Este arquivo será baixado para  /home/container/ @@ -118,10 +118,10 @@ export default ({ className }: WithClassname) => { resetForm(); }} > - Cancel + Cancelar

    @@ -129,7 +129,7 @@ export default ({ className }: WithClassname) => { setVisible(true)} className={className}> - Pull Remote File + Baixar arquivo remoto ); diff --git a/resources/scripts/components/server/files/RenameFileModal.tsx b/resources/scripts/components/server/files/RenameFileModal.tsx index 75a39495f..4c3b3cd5d 100644 --- a/resources/scripts/components/server/files/RenameFileModal.tsx +++ b/resources/scripts/components/server/files/RenameFileModal.tsx @@ -14,7 +14,10 @@ interface FormikValues { name: string; } -type OwnProps = RequiredModalProps & { files: string[]; useMoveTerminology?: boolean }; +type OwnProps = RequiredModalProps & { + files: string[]; + useMoveTerminology?: boolean; +}; const RenameFileModal = ({ files, useMoveTerminology, ...props }: OwnProps) => { const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid); @@ -66,23 +69,24 @@ const RenameFileModal = ({ files, useMoveTerminology, ...props }: OwnProps) => { type={'string'} id={'file_name'} name={'name'} - label={'File Name'} + label={'Nome do arquivo'} description={ useMoveTerminology - ? 'Enter the new name and directory of this file or folder, relative to the current directory.' + ? 'Digite o novo nome e diretório deste arquivo ou pasta, em relação ao diretório atual.' : undefined } autoFocus />
    - +
    {useMoveTerminology && (

    - New location: -  /home/container/{join(directory, values.name).replace(/^(\.\.\/|\/)+/, '')} + Nova localização: +  /home/container/ + {join(directory, values.name).replace(/^(\.\.\/|\/)+/, '')}

    )} diff --git a/resources/scripts/components/server/files/UploadButton.tsx b/resources/scripts/components/server/files/UploadButton.tsx index 9ab889b8f..b88feff66 100644 --- a/resources/scripts/components/server/files/UploadButton.tsx +++ b/resources/scripts/components/server/files/UploadButton.tsx @@ -49,7 +49,9 @@ export default ({ className }: WithClassname) => { { capture: true } ); - useEventListener('dragexit', () => (visible.value = false), { capture: true }); + useEventListener('dragexit', () => (visible.value = false), { + capture: true, + }); useEventListener('keydown', () => (visible.value = false)); @@ -65,7 +67,7 @@ export default ({ className }: WithClassname) => { clearAndAddHttpError(); const list = Array.from(files); if (list.some((file) => !file.size || (!file.type && file.size === 4096))) { - return addError('Folder uploads are not supported at this time.', 'Error'); + return addError('Uploads de pastas não são suportados no momento.', 'Error'); } const uploads = list.map((file) => { @@ -125,7 +127,7 @@ export default ({ className }: WithClassname) => { >

    - Drag and drop files to upload. + Arraste e solte arquivos para carregar.

    diff --git a/resources/scripts/components/server/network/AllocationRow.tsx b/resources/scripts/components/server/network/AllocationRow.tsx index f380c199b..4b698b5f5 100644 --- a/resources/scripts/components/server/network/AllocationRow.tsx +++ b/resources/scripts/components/server/network/AllocationRow.tsx @@ -76,18 +76,18 @@ const AllocationRow = ({ allocation }: Props) => { {ip(allocation.ip)} )} - +
    {allocation.port} - +
    -

    A description of this Egg.

    +

    Uma descrição deste egg.

    - +

    - Forces all outgoing network traffic to have its Source IP NATed to the IP of the server's primary allocation IP. - Required for certain games to work properly when the Node has multiple public IP addresses. + Força todo o tráfego de saída da rede a ter seu IP de origem NAT no IP do IP primário de alocação do servidor. + Necessário para que certos jogos funcionem corretamente quando o Node tem múltiplos endereços IP públicos.
    - Enabling this option will disable internal networking for any servers using this egg, - causing them to be unable to internally access other servers on the same node. + A habilitação desta opção desabilitará a rede interna para qualquer servidor que utilize este egg, + fazendo com que eles não possam acessar internamente outros servidores no mesmo node.

    @@ -63,14 +63,14 @@
    - + -

    The docker images available to servers using this egg. Enter one per line. Users will be able to select from this list of images if more than one value is provided.

    +

    As imagens dos dockers disponíveis para os servidores que utilizam este egg. Insira uma por linha. Os usuários poderão selecionar a partir desta lista de imagens se mais de um valor for fornecido.

    - + -

    The default startup command that should be used for new servers created with this Egg. You can change this per-server as needed.

    +

    O comando de inicialização padrão que deve ser usado para novos servidores criados com este Egg. Você pode alterar este por servidor conforme necessário.

    @@ -80,51 +80,51 @@
    -

    Process Management

    +

    Gestão de processos

    -

    All fields are required unless you select a separate option from the 'Copy Settings From' dropdown, in which case fields may be left blank to use the values from that option.

    +

    Todos os campos são obrigatórios a menos que você selecione uma opção separada da caixa suspensa "Copiar Configurações de", caso em que os campos podem ser deixados em branco para usar os valores dessa opção.

    - + -

    If you would like to default to settings from another Egg select it from the dropdown above.

    +

    Se você gostaria de definir as configurações padrão a partir de outro Egg, selecione-o a partir do menu suspenso acima.

    - + -

    The command that should be sent to server processes to stop them gracefully. If you need to send a SIGINT you should enter ^C here.

    +

    O comando que deve ser enviado aos processos do servidor para interrompê-los normalmente. Se você precisar enviar um SIGINT você deve digitar ^C aqui.

    - + -

    This should be a JSON representation of where log files are stored, and whether or not the daemon should be creating custom logs.

    +

    Essa deve ser uma representação JSON de onde os arquivos de log são armazenados e se o daemon deve ou não estar criando logs personalizados.

    - + -

    This should be a JSON representation of configuration files to modify and what parts should be changed.

    +

    Esta deve ser uma representação JSON dos arquivos de configuração a serem modificados e que partes devem ser alteradas.

    - + -

    This should be a JSON representation of what values the daemon should be looking for when booting a server to determine completion.

    +

    Esta deve ser uma representação JSON dos valores que o daemon deve estar procurando ao iniciar um servidor para determinar a conclusão.

    diff --git a/resources/views/admin/eggs/scripts.blade.php b/resources/views/admin/eggs/scripts.blade.php index 5bbc9ee3a..8eac2bb07 100644 --- a/resources/views/admin/eggs/scripts.blade.php +++ b/resources/views/admin/eggs/scripts.blade.php @@ -1,13 +1,13 @@ @extends('layouts.admin') @section('title') - Nests → Egg: {{ $egg->name }} → Install Script + Nests → Egg: {{ $egg->name }} → Instalação do Script @endsection @section('content-header') -

    {{ $egg->name }}Manage the install script for this Egg.

    +

    {{ $egg->name }}Gerencie o script de instalação para este Egg.