mirror of
https://github.com/strapi/strapi.git
synced 2025-12-27 23:24:03 +00:00
Merge branch 'master' into develop
This commit is contained in:
commit
ec0a573cef
@ -125,7 +125,7 @@ For general help using Strapi, please refer to [the official Strapi documentatio
|
||||
|
||||
## Migration
|
||||
|
||||
Follow our [migration guides](https://github.com/strapi/strapi/wiki) on the wiki to keep your projects up-to-date.
|
||||
Follow our [migration guides](https://strapi.io/documentation/3.0.0-beta.x/migration-guide/) on the documentation to keep your projects up-to-date.
|
||||
|
||||
## Roadmap
|
||||
|
||||
|
||||
@ -1,11 +1,14 @@
|
||||
# Parameters
|
||||
|
||||
See the [parameters' concepts](../concepts/parameters.md) for details.
|
||||
<!-- See the [parameter concepts](../concepts/parameters.md) for details. -->
|
||||
|
||||
::: warning
|
||||
By default, the filters can only be used from `find` and `count` endpoints generated by the Content Type Builder and the [CLI](../cli/CLI.md). If you need to implement a filter system somewhere else, read the [programmatic usage](../concepts/parameters.md) section.
|
||||
By default, the filters can only be used from `find` and `count` endpoints generated by the Content Type Builder and the [CLI](../cli/CLI.md).
|
||||
:::
|
||||
|
||||
<!-- This sentance belongs in the above warning block but was removed and commented until new docs can be written -->
|
||||
<!-- If you need to implement a filter system somewhere else, read the [programmatic usage](../concepts/parameters.md) section. -->
|
||||
|
||||
## Available operators
|
||||
|
||||
The available operators are separated in four different categories:
|
||||
|
||||
@ -10,32 +10,123 @@ For this example, we will see how to change the WYSIWYG with [CKEditor](https://
|
||||
|
||||
1. Create a new project:
|
||||
|
||||
```bash
|
||||
:::: tabs
|
||||
|
||||
::: tab yarn
|
||||
|
||||
```
|
||||
# Create an application using SQLite and prevent the server from starting automatically as we will create a plugin
|
||||
# right after the project generation
|
||||
yarn create strapi-app my-app --quickstart --no-run
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: tab npx
|
||||
|
||||
```
|
||||
# Create an application using SQLite and prevent the server from starting automatically as we will create a plugin
|
||||
# right after the project generation
|
||||
npx create-strapi-app my-app --quickstart --no-run
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::::
|
||||
|
||||
2. Generate a plugin:
|
||||
|
||||
```bash
|
||||
yarn run strapi generate:plugin wysiwyg
|
||||
:::: tabs
|
||||
|
||||
::: tab yarn
|
||||
|
||||
```
|
||||
cd my-app
|
||||
yarn strapi generate:plugin wysiwyg
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: tab npm
|
||||
|
||||
```
|
||||
cd my-app
|
||||
npm run strapi generate:plugin wysiwyg
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: tab strapi
|
||||
|
||||
```
|
||||
cd my-app
|
||||
strapi generate:plugin wysiwyg
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::::
|
||||
|
||||
3. Install the needed dependencies:
|
||||
|
||||
```bash
|
||||
cd my-app/plugins/wysiwyg
|
||||
:::: tabs
|
||||
|
||||
::: tab yarn
|
||||
|
||||
```
|
||||
cd plugins/wysiwyg
|
||||
yarn add @ckeditor/ckeditor5-react @ckeditor/ckeditor5-build-classic
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: tab npm
|
||||
|
||||
```
|
||||
cd plugins/wysiwyg
|
||||
npm install @ckeditor/ckeditor5-react @ckeditor/ckeditor5-build-classic
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::::
|
||||
|
||||
4. Start your application with the front-end development mode:
|
||||
|
||||
```bash
|
||||
cd my-app
|
||||
:::: tabs
|
||||
|
||||
::: tab yarn
|
||||
|
||||
```
|
||||
# Go back to to strapi root folder
|
||||
cd ../..
|
||||
yarn develop --watch-admin
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: tab npm
|
||||
|
||||
```
|
||||
# Go back to to strapi root folder
|
||||
cd ../..
|
||||
npm run develop --watch-admin
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: tab strapi
|
||||
|
||||
```
|
||||
# Go back to to strapi root folder
|
||||
cd ../..
|
||||
strapi develop --watch-admin
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::::
|
||||
|
||||
Once this step is over all we need to do is to create our new WYSIWYG which will replace the default one in the **Content Manager** plugin.
|
||||
|
||||
### Creating the WYSIWYG
|
||||
@ -294,7 +385,10 @@ At this point we have simply created a new plugin which is mounted in our projec
|
||||
|
||||
### Registering a our new Field
|
||||
|
||||
Since the goal of our plugin is to override the current WYSIWYG we don't want it to be displayed in the administration panel but we need it to register our new **Field**. In order to do so, we will simply modify the front-end entry point of our plugin:
|
||||
Since the goal of our plugin is to override the current WYSIWYG we don't want it to be displayed in the administration panel but we need it to register our new **Field**.
|
||||
In order to do so, we will simply **modify** the front-end entry point of our plugin.
|
||||
|
||||
This file is already present. Please replace the content of this file wit the following:
|
||||
|
||||
**Path —** `./plugins/wysiwyg/admin/src/index.js`
|
||||
|
||||
@ -331,4 +425,38 @@ export default strapi => {
|
||||
};
|
||||
```
|
||||
|
||||
Finally you will have to rebuild strapi so the new plugin is loaded correctly
|
||||
|
||||
:::: tabs
|
||||
|
||||
::: tab yarn
|
||||
|
||||
```
|
||||
yarn build
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: tab npm
|
||||
|
||||
```
|
||||
npm run build
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::: tab strapi
|
||||
|
||||
```
|
||||
strapi build
|
||||
```
|
||||
|
||||
:::
|
||||
|
||||
::::
|
||||
|
||||
::: tip
|
||||
If the plugin still doesn't show up, you should probably empty the `.cache` folder too.
|
||||
:::
|
||||
|
||||
And VOILA, if you create a new `collectionType` or a `singleType` with a `richtext` field you will see the implementation of [CKEditor](https://ckeditor.com/ckeditor-5/) instead of the default WYSIWYG.
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
# Migrations guides
|
||||
|
||||
Please also refer to the following [documentation](../guides/update-version.md) for a better understanding of how to update your project
|
||||
|
||||
## Migrating from Alpha ?
|
||||
|
||||
Read the [Migration guide from alpha.26 to beta](migration-guide-alpha.26-to-beta.md) first then read the [Beta migration guides](#beta-guides)
|
||||
|
||||
@ -50,7 +50,7 @@ You can also enable the Apollo server tracing feature, which is supported by the
|
||||
|
||||
You can edit these configurations by creating following file.
|
||||
|
||||
**Path —** `./extensions/graphql/config/settings.json`.
|
||||
**Path —** `./extensions/graphql/config/settings.json`
|
||||
|
||||
```json
|
||||
{
|
||||
@ -271,7 +271,7 @@ If you use a local plugin, the controller methods of your plugin are not created
|
||||
|
||||
If you've generated an API called `Restaurant` using the CLI `strapi generate:api restaurant` or the administration panel, your model looks like this:
|
||||
|
||||
**Path —** `./api/restaurant/models/Restaurant.settings.json`.
|
||||
**Path —** `./api/restaurant/models/Restaurant.settings.json`
|
||||
|
||||
```json
|
||||
{
|
||||
@ -478,9 +478,9 @@ Result
|
||||
|
||||
## Customise the GraphQL schema
|
||||
|
||||
If you want to define a new scalar, input or enum types, this section is for you. To do so, you will have to create a `schema.graphql` file. This file has to be placed into the config folder of each API `./api/*/config/schema.graphql` or plugin `./extensions/*/config/schema.graphql`.
|
||||
If you want to define a new scalar, input or enum types, this section is for you. To do so, you will have to create a `schema.graphql.js` file. This file has to be placed into the config folder of each API `./api/*/config/schema.graphql.js` or plugin `./extensions/*/config/schema.graphql.js`.
|
||||
|
||||
**Structure —** `schema.graphql`.
|
||||
**Structure —** `schema.graphql.js`.
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
@ -505,11 +505,11 @@ module.exports = {
|
||||
|
||||
Let say we are using the same previous `Restaurant` model.
|
||||
|
||||
**Path —** `./api/restaurant/config/schema.graphql`.
|
||||
**Path —** `./api/restaurant/config/schema.graphql.js`
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
definition:`
|
||||
definition: `
|
||||
enum RestaurantStatusInput {
|
||||
work
|
||||
open
|
||||
@ -530,37 +530,38 @@ module.exports = {
|
||||
},
|
||||
restaurants: {
|
||||
description: 'Return a list of restaurants', // Add a description to the query.
|
||||
deprecated: 'This query should not be used anymore. Please consider using restaurantsByChef instead.'
|
||||
deprecated:
|
||||
'This query should not be used anymore. Please consider using restaurantsByChef instead.',
|
||||
},
|
||||
restaurantsByChef: {
|
||||
description: 'Return the restaurants open by the chef',
|
||||
resolver: 'application::restaurant.restaurant.findByChef'
|
||||
resolver: 'application::restaurant.restaurant.findByChef',
|
||||
},
|
||||
restaurantsByCategories: {
|
||||
description: 'Return the restaurants open by the category',
|
||||
resolverOf: 'application::restaurant.restaurant.findByCategories', // Will apply the same policy on the custom resolver as the controller's action `findByCategories`.
|
||||
resolver: (obj, options, ctx) => {
|
||||
resolver: async (obj, options, ctx) => {
|
||||
// ctx is the context of the Koa request.
|
||||
await strapi.controllers.restaurants.findByCategories(ctx);
|
||||
|
||||
return ctx.body.restaurants || `There is no restaurant.`;
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
Mutation: {
|
||||
attachRestaurantToChef: {
|
||||
description: 'Attach a restaurant to an chef',
|
||||
policies: ['plugins::users-permissions.isAuthenticated', 'isOwner'],
|
||||
resolver: 'application::restaurant.restaurant.attachToChef'
|
||||
}
|
||||
}
|
||||
}
|
||||
resolver: 'application::restaurant.restaurant.attachToChef',
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
### Define a new type
|
||||
|
||||
Edit the `definition` attribute in one of the `schema.graphql` files of your project by using the GraphQL Type language string.
|
||||
Edit the `definition` attribute in one of the `schema.graphql.js` files of your project by using the GraphQL Type language string.
|
||||
|
||||
::: tip
|
||||
The easiest way is to create a new model using the CLI `strapi generate:model category --api restaurant`, so you don't need to customise anything.
|
||||
@ -641,7 +642,7 @@ module.exports = {
|
||||
|
||||
One of the most powerful features of GraphQL is the auto-documentation of the schema. The GraphQL plugin allows you to add a description to a type, a field and a query. You can also deprecate a field or a query.
|
||||
|
||||
**Path —** `./api/restaurant/models/Restaurant.settings.json`.
|
||||
**Path —** `./api/restaurant/models/Restaurant.settings.json`
|
||||
|
||||
```json
|
||||
{
|
||||
@ -670,13 +671,13 @@ One of the most powerful features of GraphQL is the auto-documentation of the sc
|
||||
}
|
||||
```
|
||||
|
||||
It might happen that you want to add a description to a query or deprecate it. To do that, you need to use the `schema.graphql` file.
|
||||
It might happen that you want to add a description to a query or deprecate it. To do that, you need to use the `schema.graphql.js` file.
|
||||
|
||||
::: warning
|
||||
The `schema.graphql` file has to be placed into the config folder of each API `./api/*/config/schema.graphql` or plugin `./extensions/*/config/schema.graphql`.
|
||||
The `schema.graphql.js` file has to be placed into the config folder of each API `./api/*/config/schema.graphql.js` or plugin `./extensions/*/config/schema.graphql.js`.
|
||||
:::
|
||||
|
||||
**Path —** `./api/restaurant/config/schema.graphql`.
|
||||
**Path —** `./api/restaurant/config/schema.graphql.js`
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
@ -778,27 +779,29 @@ module.exports = {
|
||||
resolver: (obj, options, { context }) => {
|
||||
// You can return a raw JSON object or a promise.
|
||||
|
||||
return [{
|
||||
name: 'My first blog restaurant',
|
||||
description: 'Whatever you want...'
|
||||
}];
|
||||
}
|
||||
}
|
||||
return [
|
||||
{
|
||||
name: 'My first blog restaurant',
|
||||
description: 'Whatever you want...',
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
},
|
||||
Mutation: {
|
||||
updateRestaurant: {
|
||||
description: 'Update an existing restaurant',
|
||||
resolver: (obj, options, { context }) => {
|
||||
resolver: async (obj, options, { context }) => {
|
||||
// The `where` and `data` parameters passed as arguments
|
||||
// of the GraphQL mutation are available via the `context` object.
|
||||
const where = context.params;
|
||||
const data = context.request.body;
|
||||
|
||||
return await strapi.api.restaurant.services.restaurant.addRestaurant(data, where);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
@ -818,47 +821,49 @@ module.exports = {
|
||||
resolver: (obj, options, context) => {
|
||||
// You can return a raw JSON object or a promise.
|
||||
|
||||
return [{
|
||||
name: 'My first blog restaurant',
|
||||
description: 'Whatever you want...'
|
||||
}];
|
||||
}
|
||||
}
|
||||
return [
|
||||
{
|
||||
name: 'My first blog restaurant',
|
||||
description: 'Whatever you want...',
|
||||
},
|
||||
];
|
||||
},
|
||||
},
|
||||
},
|
||||
Mutation: {
|
||||
updateRestaurant: {
|
||||
description: 'Update an existing restaurant',
|
||||
resolverOf: 'application::restaurant.restaurant.update', // Will apply the same policy on the custom resolver than the controller's action `update` located in `Restaurant.js`.
|
||||
resolver: (obj, options, { context }) => {
|
||||
resolver: async (obj, options, { context }) => {
|
||||
const where = context.params;
|
||||
const data = context.request.body;
|
||||
|
||||
return await strapi.api.restaurant.services.restaurant.addRestaurant(data, where);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
### Disable a query or a type
|
||||
|
||||
To do that, we need to use the `schema.graphql` like below:
|
||||
To do that, we need to use the `schema.graphql.js` like below:
|
||||
|
||||
```js
|
||||
module.exports = {
|
||||
type: {
|
||||
Restaurant: false // The Restaurant type won't be "queriable" or "mutable".
|
||||
}
|
||||
Restaurant: false, // The Restaurant type won't be "queriable" or "mutable".
|
||||
},
|
||||
resolver: {
|
||||
Query: {
|
||||
restaurants: false // The `restaurants` query will no longer be in the GraphQL schema.
|
||||
restaurants: false, // The `restaurants` query will no longer be in the GraphQL schema.
|
||||
},
|
||||
Mutation: {
|
||||
createRestaurant: false,
|
||||
deletePOst: false
|
||||
}
|
||||
}
|
||||
deletePOst: false,
|
||||
},
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
@ -873,7 +878,7 @@ The type name is the global ID of the model. You can find the global ID of a mod
|
||||
We recommend putting the field description and deprecated reason in the model. Right now, the GraphQL plugin is the only which uses these fields. Another plugin could use this description in the future as well. However, sometimes you don't have the choice, especially when you're defining a custom type.
|
||||
|
||||
::: tip
|
||||
It's not a bad practice to put the description and deprecated attribute in the `schema.graphql`, though.
|
||||
It's not a bad practice to put the description and deprecated attribute in the `schema.graphql.js`, though.
|
||||
:::
|
||||
|
||||
**Why are the "createdAt" and "updatedAt" field added to my type?**
|
||||
|
||||
@ -1,173 +1,217 @@
|
||||
{
|
||||
"Analytics": "Analytics",
|
||||
"Content Manager": "Gestor de conteúdo",
|
||||
"Analytics": "Estatísticas",
|
||||
"Content Manager": "Gestor de Conteúdo",
|
||||
"Content Type Builder": "Construtor de Tipos de Conteúdo",
|
||||
"Documentation": "Documentação",
|
||||
"Email": "Email",
|
||||
"HomePage.notification.newsLetter.success": "Subscrito à newsletter com sucesso",
|
||||
"New entry": "Nova entrada",
|
||||
"Files Upload": "Carregamento de Ficheiros",
|
||||
"HomePage.notification.newsLetter.success": "Subscrição à newsletter efetuada com sucesso",
|
||||
"New entry": "Novo item",
|
||||
"Password": "Palavra-passe",
|
||||
"Provider": "Provedor",
|
||||
"ResetPasswordToken": "Redefinir o token de senha",
|
||||
"ResetPasswordToken": "Código de redefinição da palavra-passe",
|
||||
"Role": "Função",
|
||||
"Settings Manager": "Gerenciador de configurações",
|
||||
"Roles & Permissions": "Grupos & Permissões",
|
||||
"Settings Manager": "Gestor de Configurações",
|
||||
"Username": "Nome de utilizador",
|
||||
"Users": "Utilizadores",
|
||||
"Users & Permissions": "Utilizador & Permissões",
|
||||
"Files Upload": "Carregamento de Ficheiros",
|
||||
"Roles & Permissions": "Grupos e Permissões",
|
||||
"app.components.BlockLink.code": "Exemplos de codigos",
|
||||
"app.components.BlockLink.code.content": "Aprenda testando projetos reais desenvolvidos pela comunidade.",
|
||||
"app.components.BlockLink.documentation": "Leia a documentação",
|
||||
"app.components.BlockLink.documentation.content": "Descubra os conceptos, reference guides and tutorials.",
|
||||
"Users & Permissions": "Utilizadores & Permissões",
|
||||
"app.components.BlockLink.code": "Exemplos de código",
|
||||
"app.components.BlockLink.code.content": "Aprende através de projetos reais desenvolvidos pela comunidade.",
|
||||
"app.components.BlockLink.documentation": "Lê a documentação",
|
||||
"app.components.BlockLink.documentation.content": "Descobre os conceitos, guias e tutoriais.",
|
||||
"app.components.Button.cancel": "Cancelar",
|
||||
"app.components.Button.save": "Guardar",
|
||||
"app.components.Button.reset": "Restaurar",
|
||||
"app.components.ComingSoonPage.comingSoon": "Em breve",
|
||||
"app.components.ComingSoonPage.featuresNotAvailable": "Esta funcionalidade continua em desenvolvimento",
|
||||
"app.components.DownloadInfo.download": "Transferência em curso...",
|
||||
"app.components.ComingSoonPage.featuresNotAvailable": "Esta funcionalidade ainda se encontra em desenvolvimento",
|
||||
"app.components.DownloadInfo.download": "Transferência em progresso...",
|
||||
"app.components.DownloadInfo.text": "Isto poderá levar alguns minutos. Obrigado pela sua paciência",
|
||||
"app.components.EmptyAttributes.title": "Ainda não há campos",
|
||||
"app.components.HomePage.button.blog": "VEJA MAIS NO BLOG",
|
||||
"app.components.HomePage.button.quickStart": "COMEÇAR UM BREVE TUTORIAL",
|
||||
"app.components.EmptyAttributes.title": "Ainda não há atributos",
|
||||
"app.components.HomePage.button.blog": "VÊ MAIS NO BLOG",
|
||||
"app.components.HomePage.button.quickStart": "COMEÇAR O GUIA DE INICIAÇÃO RÁPIDA",
|
||||
"app.components.HomePage.community": "Encontre a comunidade na web",
|
||||
"app.components.HomePage.community.content": "Converse com membros da equipe, colaboradores e desenvolvedores em diferentes canais.",
|
||||
"app.components.HomePage.community.content": "Conversa com membros da equipa, contribuidores e desenvolvedores através de diferentes canais.",
|
||||
"app.components.HomePage.create": "Cria o teu primeiro Tipo de Conteúdo",
|
||||
"app.components.HomePage.createBlock.content.first": "A ",
|
||||
"app.components.HomePage.createBlock.content.second": " extensão irá ajudar-vos a definir a estrutura de dados de seus modelos. Se é novo aqui, nós recomendamos fortemente que você siga o nosso ",
|
||||
"app.components.HomePage.createBlock.content.second": " extensão irá ajudar-te a definir a estrutura de dados dos teus modelos. Se és novo aqui, recomendamos fortemente que sigas o nosso ",
|
||||
"app.components.HomePage.createBlock.content.tutorial": " tutorial.",
|
||||
"app.components.HomePage.cta": "CONFIRME",
|
||||
"app.components.HomePage.newsLetter": "Subscreva-se à newsletter para ficar a par sobre Strapi",
|
||||
"app.components.HomePage.cta": "CONFIRMAR",
|
||||
"app.components.HomePage.newsLetter": "Subscreve-te à newsletter para ficares a par do Strapi",
|
||||
"app.components.HomePage.support": "SUPORTE-NOS",
|
||||
"app.components.HomePage.support.content": "Comprando a camisola, permitirá-nos continuar o nosso trabalho no projecto para dar à si a melhor experiência possível!",
|
||||
"app.components.HomePage.support.link": "OBTENHA A SUA CAMISOLA AGORA",
|
||||
"app.components.HomePage.support.content": "Ao comprar a t-shirt, irá permitir-nos continuar o nosso trabalho no projeto para te proporcionar a melhor experiência possível!",
|
||||
"app.components.HomePage.support.link": "OBTENHA A SUA T-SHIRT AGORA",
|
||||
"app.components.HomePage.welcome": "Bem-vindo(a) a bordo",
|
||||
"app.components.HomePage.welcome.again": "Bem-vindo(a) ",
|
||||
"app.components.HomePage.welcomeBlock.content": "Estamos felizes em tê-lo como um dos membros da comunidade. Estamos constantemente a procura de feeback então sinta-se à vontade para enviar-nos uma mensagem em privado no ",
|
||||
"app.components.HomePage.welcomeBlock.content.again": "Esperamos que estejas a progredir em seu projecto... SInta-se à vontade em ler as nossas últimas publicações sobre Strapi. Estamos dando o nosso melhor para amelhorar o produto baseando-se no seu feedback.",
|
||||
"app.components.HomePage.welcomeBlock.content": "Estamos felizes em ter-te como um dos membros da comunidade. Estamos constantemente à procura de feedback, por isso sente-te à vontade para nos enviares uma mensagem em privado no ",
|
||||
"app.components.HomePage.welcomeBlock.content.again": "Esperamos que estejas a progredir no teu projeto... Sente-te à vontade em ler as nossas últimas publicações sobre o Strapi. Estamos a dar o nosso melhor para melhorar o produto, baseando-nos no teu feedback.",
|
||||
"app.components.HomePage.welcomeBlock.content.issues": "problemas.",
|
||||
"app.components.HomePage.welcomeBlock.content.raise": " ou levante ",
|
||||
"app.components.ImgPreview.hint": "Arraste & solte o seu arquivo nesta area ou {browse} um arquivo para fazer a transferência",
|
||||
"app.components.ImgPreview.hint.browse": "procure",
|
||||
"app.components.InputFile.newFile": "Adicionar um novo arquivo",
|
||||
"app.components.InputFileDetails.open": "Abrir numa nova aba",
|
||||
"app.components.ImgPreview.hint": "Arraste & solte o seu arquivo nesta area ou {browse} um arquivo para o carregar",
|
||||
"app.components.ImgPreview.hint.browse": "escolha",
|
||||
"app.components.InputFile.newFile": "Adicionar um novo ficheiro",
|
||||
"app.components.InputFileDetails.open": "Abrir num novo separador",
|
||||
"app.components.InputFileDetails.originalName": "Nome original:",
|
||||
"app.components.InputFileDetails.remove": "Remova este arquivo",
|
||||
"app.components.InputFileDetails.remove": "Remover este ficheiro",
|
||||
"app.components.InputFileDetails.size": "Tamanho:",
|
||||
"app.components.InstallPluginPage.Download.title": "Descarregando...",
|
||||
"app.components.InstallPluginPage.Download.description": "Pode demorar alguns segundos a descarregar e instalar o plugin.",
|
||||
"app.components.InstallPluginPage.InputSearch.label": " ",
|
||||
"app.components.InstallPluginPage.InputSearch.placeholder": "Procurar uma extensão... (ex: autenticação)",
|
||||
"app.components.InstallPluginPage.description": "Extenda seu aplicativo sem esforço.",
|
||||
"app.components.InstallPluginPage.helmet": "Marketplace - Extensões",
|
||||
"app.components.InstallPluginPage.plugin.support-us.description": "Apoie-nos comprando a camisola Strapi. Isso permitirá-nos continuar trabalhando no projecto e dar à si a melhor experiência possível!",
|
||||
"app.components.InstallPluginPage.title": "Marketplace - Extensões",
|
||||
"app.components.InstallPluginPage.description": "Extende a tua aplicação sem problemas.",
|
||||
"app.components.InstallPluginPage.helmet": "Loja - Extensões",
|
||||
"app.components.InstallPluginPage.plugin.support-us.description": "Apoia-nos ao comprar uma t-shirt do Strapi. Isso irá permitir-nos continuar a trabalhar no projeto e proporcionarte-te a melhor experiência possível!",
|
||||
"app.components.InstallPluginPage.title": "Loja - Extensões",
|
||||
"app.components.InstallPluginPopup.downloads": "transferir",
|
||||
"app.components.InstallPluginPopup.navLink.avis": "opiniões",
|
||||
"app.components.InstallPluginPopup.navLink.changelog": "changelog",
|
||||
"app.components.InstallPluginPopup.navLink.changelog": "registo de alterações",
|
||||
"app.components.InstallPluginPopup.navLink.description": "Descrição",
|
||||
"app.components.InstallPluginPopup.navLink.faq": "faq",
|
||||
"app.components.InstallPluginPopup.navLink.faq": "perguntas frequentes",
|
||||
"app.components.InstallPluginPopup.navLink.screenshots": "Capturas de ecrã",
|
||||
"app.components.InstallPluginPopup.noDescription": "Nenhuma descrição disponível",
|
||||
"app.components.LeftMenuFooter.poweredBy": "Destribuído por ",
|
||||
"app.components.LeftMenuLinkContainer.configuration": "Definições",
|
||||
"app.components.InstallPluginPopup.noDescription": "Descrição não disponível",
|
||||
"app.components.LeftMenuFooter.documentation": "Documentação",
|
||||
"app.components.LeftMenuFooter.help": "Ajuda",
|
||||
"app.components.LeftMenuFooter.poweredBy": "Feito com ",
|
||||
"app.components.LeftMenuLinkContainer.configuration": "Configurações",
|
||||
"app.components.LeftMenuLinkContainer.general": "Geral",
|
||||
"app.components.LeftMenuLinkContainer.installNewPlugin": "Loja",
|
||||
"app.components.LeftMenuLinkContainer.listPlugins": "Extensões",
|
||||
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "Ainda sem extensões instaladas",
|
||||
"app.components.LeftMenuLinkContainer.collectionTypes": "Modelos",
|
||||
"app.components.LeftMenuLinkContainer.singleTypes": "Modelos Únicos",
|
||||
"app.components.LeftMenuLinkContainer.noPluginsInstalled": "Nenhuma extensão instalada",
|
||||
"app.components.LeftMenuLinkContainer.plugins": "Extensões",
|
||||
"app.components.ListPluginsPage.description": "Lista de extensões instaladas no projecto.",
|
||||
"app.components.LeftMenuLinkContainer.settings": "Definições",
|
||||
"app.components.ListPluginsPage.description": "Lista de extensões instaladas no projeto.",
|
||||
"app.components.ListPluginsPage.helmet.title": "Lista de extensões",
|
||||
"app.components.ListPluginsPage.title": "Extensões",
|
||||
"app.components.Logout.admin": "Gerir administradores",
|
||||
"app.components.Logout.profile": "Perfil",
|
||||
"app.components.Logout.logout": "Sair",
|
||||
"app.components.NotFoundPage.back": "Voltar à página inicial",
|
||||
"app.components.NotFoundPage.description": "Não encontrado",
|
||||
"app.components.Official": "Oficial",
|
||||
"app.components.Onboarding.label.completed": "% completo",
|
||||
"app.components.Onboarding.title": "Como Começar - Vídeos",
|
||||
"app.components.PluginCard.Button.label.download": "Transferir",
|
||||
"app.components.PluginCard.Button.label.install": "Já instalado",
|
||||
"app.components.PluginCard.Button.label.support": "Suporte-nos",
|
||||
"app.components.PluginCard.compatible": "Compatível com a sua aplicação",
|
||||
"app.components.PluginCard.compatibleCommunity": "Compativel com a comunidade",
|
||||
"app.components.PluginCard.compatible": "Compatível com a tua aplicação",
|
||||
"app.components.PluginCard.compatibleCommunity": "Compatível com a comunidade",
|
||||
"app.components.PluginCard.more-details": "Mais detalhes",
|
||||
"app.components.PluginCard.price.free": "Gratuito",
|
||||
"app.components.listPlugins.button": "Adicionar nova Extensão",
|
||||
"app.components.listPlugins.title.none": "Sem extensões instaladas",
|
||||
"app.components.listPlugins.title.plural": "{number} de extensões instaladas",
|
||||
"app.components.listPlugins.title.singular": "{number} de extensão instalada",
|
||||
"app.components.listPluginsPage.deletePlugin.error": "Ocorreu um erro ao desinstalar extensão",
|
||||
"app.components.PluginCard.PopUpWarning.install.impossible.autoReload.needed": "A funcionalidade autoReload precisa de estar ligada. Por favor inicia a tua aplicação com `yarn develop`.",
|
||||
"app.components.PluginCard.PopUpWarning.install.impossible.environment": "Por questões de segurança, um plugin só pode ser descarregado num ambiente de desenvolvimento.",
|
||||
"app.components.PluginCard.PopUpWarning.install.impossible.confirm": "Compreendo!",
|
||||
"app.components.PluginCard.PopUpWarning.install.impossible.title": "Impossível descarregar",
|
||||
"app.components.PluginCard.price.free": "Grátis",
|
||||
"app.components.PluginCard.settings": "Definições",
|
||||
"app.components.listPlugins.button": "Adicionar Nova Extensão",
|
||||
"app.components.listPlugins.title.none": "Nenhuma extensão instalada",
|
||||
"app.components.listPlugins.title.plural": "{number} extensões instaladas",
|
||||
"app.components.listPlugins.title.singular": "{number} extensão instalada",
|
||||
"app.components.listPluginsPage.deletePlugin.error": "Ocorreu um erro ao desinstalar a extensão",
|
||||
|
||||
"app.links.configure-view": "Configurar o editor",
|
||||
|
||||
"app.utils.SelectOption.defaultMessage": " ",
|
||||
"app.utils.defaultMessage": " ",
|
||||
"app.utils.placeholder.defaultMessage": " ",
|
||||
"components.AutoReloadBlocker.header": "Recurso de recarga é necessário para esta extensão.",
|
||||
"components.ErrorBoundary.title": "Algo deu errado...",
|
||||
"components.AutoReloadBlocker.description": "Inicia o Strapi com um dos seguintes comandos:",
|
||||
"components.AutoReloadBlocker.header": "A funcionalidade autoReload é necessária para esta extensão.",
|
||||
"components.ErrorBoundary.title": "Algo correu mal...",
|
||||
"components.FilterOptions.FILTER_TYPES.=": "é",
|
||||
"components.FilterOptions.FILTER_TYPES._contains": "contém",
|
||||
"components.FilterOptions.FILTER_TYPES._containss": "contém (case sensitive)",
|
||||
"components.FilterOptions.FILTER_TYPES._containss": "contém (sensível a maiúsculas)",
|
||||
"components.FilterOptions.FILTER_TYPES._gt": "é maior que",
|
||||
"components.FilterOptions.FILTER_TYPES._gte": "é maior que ou igual à",
|
||||
"components.FilterOptions.FILTER_TYPES._gte": "é maior que ou igual a",
|
||||
"components.FilterOptions.FILTER_TYPES._lt": "é menor que",
|
||||
"components.FilterOptions.FILTER_TYPES._lte": "é menor que ou igual à",
|
||||
"components.FilterOptions.FILTER_TYPES._lte": "é menor que ou igual a",
|
||||
"components.FilterOptions.FILTER_TYPES._ne": "não é",
|
||||
"components.FilterOptions.FILTER_TYPES._ncontains": "não contém",
|
||||
"components.FilterOptions.FILTER_TYPES._in": "corresponde a um valor na lista de valores",
|
||||
"components.FilterOptions.FILTER_TYPES._nin": "não corresponde a nenhum valor na lista de valores",
|
||||
"components.Input.error.attribute.key.taken": "Este valor já existe",
|
||||
"components.Input.error.attribute.sameKeyAndName": "Não pode ser igual",
|
||||
"components.Input.error.attribute.taken": "O nome deste campo já existe",
|
||||
"components.Input.error.contentTypeName.taken": "Este nome já existe",
|
||||
"components.Input.error.attribute.taken": "Já existe um atributo com este nome",
|
||||
"components.Input.error.contentTypeName.taken": "Já existe um tipo de conteúdo com este nome",
|
||||
"components.Input.error.custom-error": "{errorMessage} ",
|
||||
"components.Input.error.validation.email": "Isto não é um email",
|
||||
"components.Input.error.validation.json": "Isto não corresponde com o formato JSON",
|
||||
"components.Input.error.validation.max": "O valor é muito alto.",
|
||||
"components.Input.error.validation.maxLength": "O valor é muito longo.",
|
||||
"components.Input.error.validation.min": "O valor é muito baixo.",
|
||||
"components.Input.error.validation.minLength": "O valor é muito curto.",
|
||||
"components.Input.error.validation.json": "Não está em formato JSON",
|
||||
"components.Input.error.validation.max": "Valor demasiado elevado.",
|
||||
"components.Input.error.validation.maxLength": "Valor demasiado longo.",
|
||||
"components.Input.error.validation.min": "Valor demasiado baixo.",
|
||||
"components.Input.error.validation.minLength": "Valor demasiado curto.",
|
||||
"components.Input.error.validation.minSupMax": "Não pode ser superior",
|
||||
"components.Input.error.validation.regex": "O valor não corresponde ao regex.",
|
||||
"components.Input.error.validation.regex": "O valor não corresponde com a expressão regex.",
|
||||
"components.Input.error.validation.required": "Este valor é obrigatório.",
|
||||
"components.ListRow.empty": "Nenhuma data para ser mostrada.",
|
||||
"components.OverlayBlocker.description": "Você está a usar um recurso que precisa que o servidor seja reiniciado. Por favor, aguarde até que o servidor esteja totalmente reiniciado.",
|
||||
"components.OverlayBlocker.title": "Aguardando pela reinicialização...",
|
||||
"components.PageFooter.select": "entradas por página",
|
||||
"components.ProductionBlocker.description": "Por motivos de segurança, temos que desativar esta extensão em outros ambientes.",
|
||||
"components.ProductionBlocker.header": "Esta extensão está disponível apenas em desenvolvimento.",
|
||||
"components.Wysiwyg.ToggleMode.markdown": "Mudar para markdown",
|
||||
"components.Wysiwyg.ToggleMode.preview": "Mudar para preview",
|
||||
"components.Wysiwyg.collapse": "Colapso",
|
||||
"components.Input.error.validation.unique": "Este valor tem de ser único, mas já está a ser utilizado.",
|
||||
"components.InputSelect.option.placeholder": "Escolhe aqui",
|
||||
"component.Input.error.validation.integer": "Este valor precisa de ser um número inteiro",
|
||||
"components.ListRow.empty": "Não existem dados para mostrar.",
|
||||
"components.OverlayBlocker.description": "Estás a usar uma funcionalidade que precisa que o servidor seja reiniciado. Por favor, aguarda até que o servidor esteja totalmente reiniciado.",
|
||||
"components.OverlayBlocker.description.serverError": "O servidor já deveria ter reiniciado. Por favor verifica os logs no terminal.",
|
||||
"components.OverlayBlocker.title": "A aguardar pela reinicialização...",
|
||||
"components.OverlayBlocker.title.serverError": "A reinicialização está a demorar mais do que o esperado",
|
||||
"components.PageFooter.select": "itens por página",
|
||||
"components.ProductionBlocker.description": "Por motivos de segurança, temos que desativar esta extensão noutros ambientes.",
|
||||
"components.ProductionBlocker.header": "Esta extensão está disponível apenas em ambiente de desenvolvimento.",
|
||||
"components.Search.placeholder": "Procurar...",
|
||||
"components.Wysiwyg.ToggleMode.markdown": "Editar",
|
||||
"components.Wysiwyg.ToggleMode.preview": "Pré-visualizar",
|
||||
"components.Wysiwyg.collapse": "Colapsar",
|
||||
"components.Wysiwyg.selectOptions.H1": "Título H1",
|
||||
"components.Wysiwyg.selectOptions.H2": "Título H2",
|
||||
"components.Wysiwyg.selectOptions.H3": "Título H3",
|
||||
"components.Wysiwyg.selectOptions.H4": "Título H4",
|
||||
"components.Wysiwyg.selectOptions.H5": "Título H5",
|
||||
"components.Wysiwyg.selectOptions.H6": "Título H6",
|
||||
"components.Wysiwyg.selectOptions.title": "Adicionar um título",
|
||||
"components.Wysiwyg.selectOptions.title": "Adicionar título",
|
||||
"components.WysiwygBottomControls.charactersIndicators": "caracteres",
|
||||
"components.WysiwygBottomControls.fullscreen": "Expandir",
|
||||
"components.WysiwygBottomControls.uploadFiles": "Arraste e solte arquivos, cole na área de transferência ou {browse}.",
|
||||
"components.WysiwygBottomControls.uploadFiles.browse": "Selecione-os",
|
||||
"components.WysiwygBottomControls.uploadFiles": "Arrasta e solta ficheiros, cola da área de transferência ou {browse}.",
|
||||
"components.WysiwygBottomControls.uploadFiles.browse": "selecione-os",
|
||||
"components.popUpWarning.button.cancel": "Cancelar",
|
||||
"components.popUpWarning.button.confirm": "Confirmar",
|
||||
"components.popUpWarning.message": "Tem a certeza que pretende apagar isto?",
|
||||
"components.popUpWarning.title": "Por favor, confirme",
|
||||
"components.popUpWarning.message": "Tens a certeza que pretendes apagar isto?",
|
||||
"components.popUpWarning.title": "Por favor confirma",
|
||||
"notification.error": "Ocorreu um erro",
|
||||
"notification.error.layout": "Não foi possível recuperar o layout",
|
||||
"notification.error.layout": "Não foi possível encontrar o layout",
|
||||
"request.error.model.unknown": "Este modelo não existe",
|
||||
"app.utils.delete": "Eliminar",
|
||||
"app.utils.filters": "Filtros",
|
||||
"HomePage.helmet.title": "Página principal",
|
||||
"HomePage.welcome.congrats": "Parabéns!",
|
||||
"HomePage.welcome.congrats.content": "Iniciaste sessão como o primeiro administrador. Para descobrires as poderosas funcionalidades do Strapi,",
|
||||
"HomePage.welcome.congrats.content.bold": "recomendamos que cries o teu primeiro modelo.",
|
||||
"HomePage.community": "Junta-te à Comunidade",
|
||||
"HomePage.roadmap": "Vê o nosso roadmap",
|
||||
"HomePage.greetings": "Olá {name}!",
|
||||
|
||||
"Auth.advanced.allow_register": "Permitir registo",
|
||||
"Auth.privacy-policy-agreement.terms": "termos de serviço",
|
||||
"Auth.privacy-policy-agreement.policy": "política de privacidade",
|
||||
"Auth.form.button.forgot-password": "Enviar email",
|
||||
"Auth.form.button.forgot-password.success": "Enviar novamente",
|
||||
"Auth.form.button.login": "Entrar",
|
||||
"Auth.form.button.register": "Preparado para começar",
|
||||
"Auth.form.button.register": "Pronto para começar",
|
||||
"Auth.form.button.register-success": "Enviar novamente",
|
||||
"Auth.form.button.reset-password": "Alterar palavra-passe",
|
||||
"Auth.form.error.blocked": "A sua conta foi bloqueada por um administrador.",
|
||||
"Auth.form.error.blocked": "A tua conta foi bloqueada por um administrador.",
|
||||
"Auth.form.error.code.provide": "O código fornecido está incorreto.",
|
||||
"Auth.form.error.confirmed": "O email da sua conta não está confirmado.",
|
||||
"Auth.form.error.confirmed": "O email da tua conta não foi confirmado.",
|
||||
"Auth.form.error.email.invalid": "Este email é inválido.",
|
||||
"Auth.form.error.email.provide": "Por favor preencha com o nome de utilizador ou email.",
|
||||
"Auth.form.error.email.taken": "O email já está a ser utilizado.",
|
||||
"Auth.form.error.invalid": "Identificador ou password inválida.",
|
||||
"Auth.form.error.noAdminAccess": "Não pode aceder ao painel administrativo.",
|
||||
"Auth.form.error.email.provide": "Por favor, preenche com o nome de utilizador ou email.",
|
||||
"Auth.form.error.email.taken": "Este email já está a ser utilizado.",
|
||||
"Auth.form.error.invalid": "Utilizador ou palavra-passe inválidos.",
|
||||
"Auth.form.error.noAdminAccess": "Não tens acesso ao painel de administrador.",
|
||||
"Auth.form.error.params.provide": "Os parâmetros submetidos estão errados.",
|
||||
"Auth.form.error.password.format": "A password não pode conter o símbolo `$` mais do que 3 vezes.",
|
||||
"Auth.form.error.password.local": "Este utilizador nunca definiu a palavra-passe local, por favor faça login pelo serviço utilizado aquando a criação da conta.",
|
||||
"Auth.form.error.password.matching": "As passwords não coincidem.",
|
||||
"Auth.form.error.password.provide": "Por favor submeta a palavra-passe.",
|
||||
"Auth.form.error.ratelimit": "Demasiadas tentativas, por favor tente novamente dentro de um minuto.",
|
||||
"Auth.form.error.password.format": "A sua palavra-passe não pode conter o símbolo `$` mais do que 3 vezes.",
|
||||
"Auth.form.error.password.local": "Este utilizador nunca definiu uma palavra-passe local, por favor faz login pelo serviço utilizado durante a criação da conta.",
|
||||
"Auth.form.error.password.matching": "As palavra-passes não coincidem.",
|
||||
"Auth.form.error.password.provide": "Por favor digita a tua palavra-passe.",
|
||||
"Auth.form.error.ratelimit": "Demasiadas tentativas, por favor tenta novamente daqui a um minuto.",
|
||||
"Auth.form.error.user.not-exist": "Este email não existe.",
|
||||
"Auth.form.error.username.taken": "O nome de utilizador já está utilizado.",
|
||||
"Auth.form.forgot-password.email.label": "Insira o seu email",
|
||||
"Auth.form.error.username.taken": "Este nome de utilizador já está a ser utilizado.",
|
||||
"Auth.form.forgot-password.email.label": "Introduz o teu email",
|
||||
"Auth.form.forgot-password.email.label.success": "Email enviado com sucesso",
|
||||
"Auth.form.forgot-password.email.placeholder": "mysuperemail@gmail.com",
|
||||
"Auth.form.header.forgot-password": "strapi",
|
||||
@ -183,12 +227,52 @@
|
||||
"Auth.form.register.confirmPassword.label": "Confirmação de palavra-passe",
|
||||
"Auth.form.register.email.label": "Email",
|
||||
"Auth.form.register.email.placeholder": "johndoe@gmail.com",
|
||||
|
||||
"Auth.form.register.news.label": "Manter-me atualizado sobre novas funcionalidades e futuras melhorias (ao fazê-lo, estás a aceitar os {terms} e a {policy}).",
|
||||
"Auth.form.register.password.label": "Palavra-passe",
|
||||
"Auth.form.register.username.label": "Nome de utilizador",
|
||||
"Auth.form.register.username.placeholder": "John Doe",
|
||||
"Auth.header.register.description": "Para terminar a configuração e melhorar a segurança da sua aplicação, por favor crie o primeiro utilizador (root admin) inserindo a informação necessária abaixo.",
|
||||
"Auth.link.forgot-password": "Esqueceu a palavra-passe?",
|
||||
"Auth.link.ready": "Preparado para entrar?",
|
||||
"components.Input.error.password.noMatch": "As passwords não coincidem"
|
||||
"Auth.header.register.description": "Para terminar a configuração e melhorar a segurança da sua aplicação, por favor cria o primeiro utilizador (root admin) inserindo a informação necessária abaixo.",
|
||||
"Auth.link.forgot-password": "Esqueceu-se da palavra-passe?",
|
||||
"Auth.link.ready": "Pronto para entrar?",
|
||||
"Settings.global": "Definições Globais",
|
||||
"Settings.error": "Erro",
|
||||
"Settings.webhooks.title": "Webhooks",
|
||||
"Settings.webhooks.singular": "webhook",
|
||||
"Settings.webhooks.list.description": "Obtém notificações POST de alterações.",
|
||||
"Settings.webhooks.list.button.add": "Adicionar novo webhook",
|
||||
"Settings.webhooks.list.button.delete": "Eliminar",
|
||||
"Settings.webhooks.list.empty.title": "Ainda não há nenhum webhook",
|
||||
"Settings.webhooks.list.empty.description": "Adiciona o teu primeiro webhook a esta lista.",
|
||||
"Settings.webhooks.list.empty.link": "Vê a nossa documentação",
|
||||
"Settings.webhooks.enabled": "Ativo",
|
||||
"Settings.webhooks.disabled": "Inativo",
|
||||
"Settings.webhooks.create": "Criar um webhook",
|
||||
"Settings.webhooks.create.header": "Criar um novo header",
|
||||
"Settings.webhooks.form.name": "Nome",
|
||||
"Settings.webhooks.form.url": "Url",
|
||||
"Settings.webhooks.form.headers": "Headers",
|
||||
"Settings.webhooks.form.events": "Eventos",
|
||||
"Settings.webhooks.key": "Key",
|
||||
"Settings.webhooks.value": "Value",
|
||||
"Settings.webhooks.trigger": "Executar",
|
||||
"Settings.webhooks.trigger.title": "Gravar antes de executar",
|
||||
"Settings.webhooks.trigger.cancel": "Cancelar execução",
|
||||
"Settings.webhooks.trigger.pending": "Pendente…",
|
||||
"Settings.webhooks.trigger.success": "Sucesso!",
|
||||
"Settings.webhooks.trigger.success.label": "Execução com sucesso",
|
||||
"Settings.webhooks.trigger.save": "Por favor grava antes de executar",
|
||||
"Settings.webhooks.trigger.test": "Execução de teste",
|
||||
"Settings.webhooks.events.create": "Ao criar",
|
||||
"Settings.webhooks.events.edit": "Ao editar",
|
||||
"Settings.webhooks.events.delete": "Ao eliminar",
|
||||
"Settings.webhooks.created": "Webhook criado",
|
||||
"app.containers.App.notification.error.init": "Ocorreu um erro ao efetuar um pedido para a API",
|
||||
"components.Input.error.password.noMatch": "As palavra-passes não coincidem",
|
||||
"form.button.done": "Concluir",
|
||||
"form.button.finish": "Confirmar",
|
||||
"notification.contentType.relations.conflict": "O tipo de conteúdo tem relações que entram em conflito",
|
||||
"notification.form.error.fields": "O formulário contém erros",
|
||||
"notification.form.success.fields": "Alterações gravadas",
|
||||
"notification.success.delete": "O item foi eliminado",
|
||||
"global.prompt.unsaved": "Tens a certeza que queres sair desta página? Todas as tuas modificações serão perdidas"
|
||||
}
|
||||
|
||||
@ -11811,11 +11811,6 @@ lodash@4.17.10:
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7"
|
||||
integrity sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==
|
||||
|
||||
lodash@4.17.11:
|
||||
version "4.17.11"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
|
||||
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
|
||||
|
||||
lodash@4.17.12:
|
||||
version "4.17.12"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.12.tgz#a712c74fdc31f7ecb20fe44f157d802d208097ef"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user