Merge branch 'develop' into staging-new

This commit is contained in:
Denis Bykhov
2026-02-07 17:37:13 +05:00
160 changed files with 6082 additions and 204 deletions
+6
View File
@@ -24660,6 +24660,9 @@ importers:
../../plugins/process-resources:
dependencies:
'@hcengineering/account-client':
specifier: workspace:^0.7.21
version: link:../../foundations/core/packages/account-client
'@hcengineering/analytics':
specifier: workspace:^0.7.17
version: link:../../foundations/core/packages/analytics
@@ -24681,6 +24684,9 @@ importers:
'@hcengineering/core':
specifier: workspace:^0.7.24
version: link:../../foundations/core/packages/core
'@hcengineering/login':
specifier: workspace:^0.7.0
version: link:../login
'@hcengineering/platform':
specifier: workspace:^0.7.19
version: link:../../foundations/core/packages/platform
+1 -1
View File
@@ -412,7 +412,7 @@ export async function configurePlatform (onWorkbenchConnect?: () => Promise<void
const languages =
myBranding.languages !== undefined && myBranding.languages !== ''
? myBranding.languages.split(',').map((l) => l.trim())
: ['en', 'ru', 'es', 'pt', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'tr']
: ['en', 'ru', 'es', 'pt', 'pt-br', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'tr']
setMetadata(uiPlugin.metadata.Languages, languages)
+2 -2
View File
@@ -1,7 +1,7 @@
{
"huly.local:8080": {
"title": "Huly",
"languages": "en,ru,pt,es,zh,fr,de,ja,tr",
"languages": "en,ru,pt,pt-br,es,zh,fr,de,ja,tr",
"defaultLanguage": "en",
"defaultApplication": "tracker",
"defaultSpace": "tracker:project:DefaultProject",
@@ -30,7 +30,7 @@
},
"huly.local:8087": {
"title": "Huly",
"languages": "en,ru,pt,es,zh,fr,de,ja,tr",
"languages": "en,ru,pt,pt-br,es,zh,fr,de,ja,tr",
"defaultLanguage": "en",
"defaultApplication": "tracker",
"defaultSpace": "tracker:project:DefaultProject",
+1 -1
View File
@@ -543,7 +543,7 @@ export async function configurePlatform() {
const languages = myBranding.languages
? myBranding.languages.split(',').map((l) => l.trim())
: ['en', 'ru', 'es', 'pt', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'tr']
: ['en', 'ru', 'es', 'pt', 'pt-br', 'zh', 'fr', 'cs', 'it', 'de', 'ja', 'tr']
setMetadata(uiPlugin.metadata.Languages, languages)
@@ -0,0 +1,68 @@
{
"string": {
"Id": "Id",
"Space": "Espaço",
"Spaces": "Espaços",
"SpacesDescription": "Gestão do tipo de espaço para todas as espaços",
"Modified": "Modificado",
"ModifiedDate": "Data de modificação",
"ModifiedBy": "Modificado por",
"Class": "Classe",
"AttachedTo": "Anexado a",
"AttachedToClass": "Classe anexada",
"Name": "Nome",
"Description": "Descrição",
"Private": "Privado",
"Archived": "Arquivado",
"ClassLabel": "Tipo",
"ClassPropertyLabel": "Rótulo",
"String": "Texto",
"Markup": "Marcação",
"Number": "Número",
"Boolean": "Caixa de seleção",
"Timestamp": "Marca de data/hora",
"Date": "Data",
"IntlString": "Cadeia de texto internacionalizada",
"Ref": "Referência",
"Collection": "Coleção",
"Array": "Seleção múltipla",
"Enum": "Seleção",
"Members": "Membros",
"Hyperlink": "URL",
"MarkupBlobRef": "Colaborativo",
"Object": "Objeto",
"System": "Sistema",
"CreatedBy": "Criado por",
"CreatedDate": "Data de criação",
"Status": "Estado",
"StatusCategory": "Categoria de estado",
"Account": "Conta",
"Rank": "Ranking",
"Owners": "Proprietários",
"Permission": "Permissão",
"CreateObject": "Criar objeto",
"UpdateObject": "Atualizar objeto",
"DeleteObject": "Apagar objeto",
"ForbidDeleteObject": "Proibir apagar objeto",
"UpdateSpace": "Atualizar espaço",
"ArchiveSpace": "Arquivar espaço",
"CreateObjectDescription": "Concede aos usuários a capacidade de criar objetos no espaço",
"UpdateObjectDescription": "Concede aos usuários a capacidade de atualizar objetos no espaço",
"DeleteObjectDescription": "Concede aos usuários a capacidade de apagar objetos no espaço",
"ForbidDeleteObjectDescription": "Proíbe aos usuários a capacidade de apagar objetos no espaço",
"UpdateSpaceDescription": "Concede aos usuários a capacidade de atualizar o espaço",
"ArchiveSpaceDescription": "Concede aos usuários a capacidade de arquivar o espaço",
"AutoJoin": "Auto adesão",
"AutoJoinDescr": "Adesão automática de novos funcionários a este espaço",
"RBAC": "Controle de acesso baseado em funções",
"RBACDescr": "Exigir acesso baseado em funções para executar ações neste espaço",
"BlobSize": "Tamanho",
"BlobContentType": "Tipo de conteúdo",
"Relation": "Relação",
"Relations": "Relações",
"AddRelation": "Adicionar relação",
"PersonId": "ID de pessoa",
"AccountId": "Conta",
"Version": "Versão"
}
}
@@ -0,0 +1,31 @@
{
"status": {
"LoadingPlugin": "Carregando plugin {plugin}...",
"UnknownError": "Erro desconhecido: {message}",
"InvalidId": "Id inválido: {id}",
"BadRequest": "Pedido inválido",
"Forbidden": "Proibido",
"Conflict": "Conflito",
"ExpiredLink": "Este link de convite expirou",
"Unauthorized": "Não autorizado",
"UnknownMethod": "Método desconhecido: {method}",
"InternalServerError": "Erro interno do servidor",
"MaintenanceWarning": "Manutenção programada dentro de",
"MaintenanceWarningTime": "{time, plural, =1 {menos de um minuto} other {# minutos}}",
"AccountNotFound": "Conta não encontrada",
"AccountNotConfirmed": "Conta não confirmada",
"WorkspaceNotFound": "Espaço de trabalho não encontrado",
"InvalidPassword": "Senha inválida",
"AccountAlreadyExists": "Conta já existe",
"WorkspaceRateLimit": "O servidor está ocupado. Por favor, espere um pouco e tente novamente",
"AccountAlreadyConfirmed": "Conta já confirmada",
"WorkspaceAlreadyExists": "Espaço de trabalho já existe",
"InvalidOtp": "Código inválido",
"PasswordLoginLocked": "O login com senha está bloqueado devido a muitas tentativas falhadas. Use um método de login OTP para desbloquear sua conta.",
"InviteNotFound": "Convite com e-mail:{email} não encontrado.",
"WorkspaceLimitReached": "Você atingiu o limite de espaço de trabalho. Entre em contato conosco...",
"ReadOnlyAccount": "Demonstração anônima de convidado",
"SystemAccount": "Conta do sistema",
"SocialIdAlreadyExists": "ID social já existe"
}
}
+54 -3
View File
@@ -234,6 +234,12 @@ function defineDrive (builder: Builder): void {
icon: drive.icon.Drive,
baseClass: drive.class.Drive,
availablePermissions: [
drive.permission.CreateFolder,
drive.permission.UpdateFolder,
drive.permission.RemoveFolder,
drive.permission.CreateFile,
drive.permission.UpdateFile,
drive.permission.RemoveFile,
core.permission.UpdateSpace,
core.permission.ArchiveSpace,
core.permission.ForbidDeleteObject
@@ -326,7 +332,8 @@ function defineDrive (builder: Builder): void {
mode: ['context', 'browser'],
application: drive.app.Drive,
group: 'create'
}
},
visibilityTester: drive.function.CanCreateFolder
},
drive.action.CreateRootFolder
)
@@ -475,6 +482,7 @@ function defineFolder (builder: Builder): void {
actions: [
view.action.Open,
view.action.OpenInNewTab,
view.action.Delete,
print.action.Print,
tracker.action.EditRelatedTargets,
tracker.action.NewRelatedIssue
@@ -494,7 +502,8 @@ function defineFolder (builder: Builder): void {
mode: ['context', 'browser'],
application: drive.app.Drive,
group: 'create'
}
},
visibilityTester: drive.function.CanCreateFolder
},
drive.action.CreateChildFolder
)
@@ -518,6 +527,25 @@ function defineFolder (builder: Builder): void {
drive.action.RenameFolder
)
createAction(
builder,
{
action: view.actionImpl.Delete,
label: view.string.Delete,
icon: view.icon.Delete,
category: drive.category.Drive,
input: 'none',
target: drive.class.Folder,
context: {
mode: ['context', 'browser'],
application: drive.app.Drive,
group: 'edit'
},
visibilityTester: drive.function.CanDeleteFolder
},
drive.action.DeleteFolder
)
createAction(builder, {
...actionTemplates.move,
action: view.actionImpl.ShowPopup,
@@ -529,6 +557,7 @@ function defineFolder (builder: Builder): void {
}
},
target: drive.class.Folder,
visibilityTester: drive.function.CanUpdateFolder,
context: {
mode: ['browser', 'context'],
group: 'tools'
@@ -569,7 +598,8 @@ function defineFileVersion (builder: Builder): void {
mode: ['context', 'browser'],
application: drive.app.Drive,
group: 'edit'
}
},
visibilityTester: drive.function.CanUpdateFileVersion
},
drive.action.RestoreFileVersion
)
@@ -649,6 +679,7 @@ function defineFile (builder: Builder): void {
actions: [
view.action.Open,
view.action.OpenInNewTab,
view.action.Delete,
print.action.Print,
tracker.action.EditRelatedTargets,
tracker.action.NewRelatedIssue
@@ -692,6 +723,25 @@ function defineFile (builder: Builder): void {
drive.action.RenameFile
)
createAction(
builder,
{
action: view.actionImpl.Delete,
label: view.string.Delete,
icon: view.icon.Delete,
category: drive.category.Drive,
input: 'none',
target: drive.class.File,
context: {
mode: ['context', 'browser'],
application: drive.app.Drive,
group: 'edit'
},
visibilityTester: drive.function.CanDeleteFile
},
drive.action.DeleteFile
)
// createAction(
// builder,
// {
@@ -721,6 +771,7 @@ function defineFile (builder: Builder): void {
}
},
target: drive.class.File,
visibilityTester: drive.function.CanUpdateFile,
context: {
mode: ['browser', 'context'],
group: 'tools'
+2 -2
View File
@@ -14,7 +14,7 @@
//
import core, { type Blob, type Ref, DOMAIN_BLOB, generateId, toIdMap } from '@hcengineering/core'
import type { Drive, File, FileVersion, Resource } from '@hcengineering/drive'
import type { File, FileVersion, Resource } from '@hcengineering/drive'
import {
type MigrateOperation,
type MigrationClient,
@@ -56,7 +56,7 @@ async function migrateFileVersions (client: MigrationClient): Promise<void> {
collection: 'versions',
modifiedOn: file.modifiedOn,
modifiedBy: file.modifiedBy,
space: file.space as Ref<Drive>,
space: file.space,
title: exfile.title,
file: blob._id,
size: blob.size,
+78
View File
@@ -3,6 +3,84 @@ import core from '@hcengineering/core'
import drive from '@hcengineering/drive'
export function definePermissions (builder: Builder): void {
builder.createDoc(
core.class.Permission,
core.space.Model,
{
scope: 'space',
label: drive.string.CreateFilePermission,
description: drive.string.CreateFilePermissionDescription,
txClass: core.class.TxCreateDoc,
objectClass: drive.class.File
},
drive.permission.CreateFile
)
builder.createDoc(
core.class.Permission,
core.space.Model,
{
scope: 'space',
label: drive.string.UpdateFilePermission,
description: drive.string.UpdateFilePermissionDescription,
txClass: core.class.TxUpdateDoc,
objectClass: drive.class.File
},
drive.permission.UpdateFile
)
builder.createDoc(
core.class.Permission,
core.space.Model,
{
scope: 'space',
label: drive.string.RemoveFilePermission,
description: drive.string.RemoveFilePermissionDescription,
txClass: core.class.TxRemoveDoc,
objectClass: drive.class.File
},
drive.permission.RemoveFile
)
builder.createDoc(
core.class.Permission,
core.space.Model,
{
scope: 'space',
label: drive.string.CreateFolderPermission,
description: drive.string.CreateFolderPermissionDescription,
txClass: core.class.TxCreateDoc,
objectClass: drive.class.Folder
},
drive.permission.CreateFolder
)
builder.createDoc(
core.class.Permission,
core.space.Model,
{
scope: 'space',
label: drive.string.UpdateFolderPermission,
description: drive.string.UpdateFolderPermissionDescription,
txClass: core.class.TxUpdateDoc,
objectClass: drive.class.Folder
},
drive.permission.UpdateFolder
)
builder.createDoc(
core.class.Permission,
core.space.Model,
{
scope: 'space',
label: drive.string.RemoveFolderPermission,
description: drive.string.RemoveFolderPermissionDescription,
txClass: core.class.TxRemoveDoc,
objectClass: drive.class.Folder
},
drive.permission.RemoveFolder
)
builder.createDoc(
core.class.Permission,
core.space.Model,
+8
View File
@@ -53,8 +53,14 @@ export default mergeIds(driveId, drive, {
DriveLinkProvider: '' as Resource<(doc: Doc, props: Record<string, any>) => Promise<Location>>,
FolderLinkProvider: '' as Resource<(doc: Doc, props: Record<string, any>) => Promise<Location>>,
FileLinkProvider: '' as Resource<(doc: Doc, props: Record<string, any>) => Promise<Location>>,
CanCreateFolder: '' as Resource<ViewActionAvailabilityFunction>,
CanUpdateFile: '' as Resource<ViewActionAvailabilityFunction>,
CanUpdateFolder: '' as Resource<ViewActionAvailabilityFunction>,
CanDeleteFile: '' as Resource<ViewActionAvailabilityFunction>,
CanDeleteFolder: '' as Resource<ViewActionAvailabilityFunction>,
CanRenameFile: '' as Resource<ViewActionAvailabilityFunction>,
CanRenameFolder: '' as Resource<ViewActionAvailabilityFunction>,
CanUpdateFileVersion: '' as Resource<ViewActionAvailabilityFunction>,
CanDeleteFileVersion: '' as Resource<ViewActionAvailabilityFunction>,
FileTitleProvider: '' as Resource<(client: Client, ref: Ref<Doc>, doc?: Doc) => Promise<string>>,
FolderTitleProvider: '' as Resource<(client: Client, ref: Ref<Doc>, doc?: Doc) => Promise<string>>
@@ -79,6 +85,8 @@ export default mergeIds(driveId, drive, {
CreateRootFolder: '' as Ref<Action>,
EditDrive: '' as Ref<Action>,
DownloadFile: '' as Ref<Action>,
DeleteFile: '' as Ref<Action>,
DeleteFolder: '' as Ref<Action>,
RenameFile: '' as Ref<Action>,
RenameFolder: '' as Ref<Action>,
DeleteFileVersion: '' as Ref<Action>,
+43
View File
@@ -31,6 +31,23 @@ export function defineMethods (builder: Builder): void {
process.method.RunSubProcess
)
builder.createDoc(
process.class.Method,
core.space.Model,
{
label: process.string.RequestApproval,
objectClass: process.class.ApproveRequest,
editor: process.component.ApproveRequestEditor,
presenter: process.component.ApproveRequestPresenter,
createdContext: {
_class: process.class.ApproveRequest,
nameField: 'title'
},
requiredParams: ['user']
},
process.method.RequestApproval
)
builder.createDoc(
process.class.Method,
core.space.Model,
@@ -103,4 +120,30 @@ export function defineMethods (builder: Builder): void {
},
process.method.AddTag
)
builder.createDoc(
process.class.Method,
core.space.Model,
{
label: process.string.LockCard,
objectClass: card.class.Card,
requiredParams: [],
createdContext: null
},
process.method.LockCard
)
builder.createDoc(
process.class.Method,
core.space.Model,
{
label: process.string.LockSection,
objectClass: card.class.Card,
editor: process.component.LockSectionEditor,
presenter: process.component.LockSectionPresenter,
requiredParams: ['_id'],
createdContext: null
},
process.method.LockSection
)
}
+92
View File
@@ -46,6 +46,7 @@ import workbench from '@hcengineering/model-workbench'
import notification from '@hcengineering/notification'
import { type Asset, type IntlString, type Resource } from '@hcengineering/platform'
import {
type ApproveRequest,
type CheckFunc,
type ContextId,
type CreatedContext,
@@ -204,6 +205,19 @@ export class TProcessToDo extends TToDo implements ProcessToDo {
withRollback!: boolean
}
@Model(process.class.ApproveRequest, process.class.ProcessToDo)
export class TApproveRequest extends TProcessToDo implements ApproveRequest {
@Prop(TypeBoolean(), process.string.IsApproved)
approved?: boolean
@Prop(TypeString(), process.string.RejectionReason)
reason?: string
group!: string
card!: Ref<Card>
}
@Model(process.class.Method, core.class.Doc, DOMAIN_MODEL)
export class TMethod extends TDoc implements Method<Doc> {
label!: IntlString
@@ -290,6 +304,7 @@ export function createModel (builder: Builder): void {
TProcess,
TExecution,
TProcessToDo,
TApproveRequest,
TMethod,
TState,
TProcessFunction,
@@ -323,6 +338,28 @@ export function createModel (builder: Builder): void {
process.ids.ProcessToDoCreated
)
builder.createDoc(
notification.class.NotificationType,
core.space.Model,
{
hidden: false,
generated: false,
allowedForAuthor: true,
label: process.string.ApproveRequest,
group: time.ids.TimeNotificationGroup,
txClasses: [core.class.TxCreateDoc],
objectClass: process.class.ApproveRequest,
onlyOwn: true,
defaultEnabled: true,
templates: {
textTemplate: '{body}',
htmlTemplate: '<p>{body}</p>',
subjectTemplate: '{title}'
}
},
process.ids.ApproveRequestCreated
)
createAction(builder, {
action: view.actionImpl.Delete,
label: view.string.Delete,
@@ -413,6 +450,42 @@ export function createModel (builder: Builder): void {
presenter: process.component.StatePresenter
})
builder.createDoc(
view.class.Viewlet,
core.space.Model,
{
variant: 'cardRequests',
attachTo: process.class.ApproveRequest,
descriptor: view.viewlet.List,
props: {
baseMenuClass: process.class.ApproveRequest
},
viewOptions: {
groupBy: ['user', 'approved'],
orderBy: [
['approved', SortingOrder.Descending],
['modifiedOn', SortingOrder.Descending],
['createdOn', SortingOrder.Descending]
],
other: []
},
configOptions: {
strict: true
},
config: [
{
key: '',
label: process.string.ApproveRequest,
presenter: process.component.ApproveRequestPresenter
},
'user',
'approved',
'reason'
]
},
process.viewlet.CardRequests
)
builder.createDoc(
view.class.Viewlet,
core.space.Model,
@@ -600,6 +673,12 @@ export function createModel (builder: Builder): void {
props: {}
})
builder.createDoc(presentation.class.ComponentPointExtension, core.space.Model, {
extension: card.extensions.EditCardExtension,
component: process.component.RequestsExtension,
props: {}
})
builder.createDoc(presentation.class.ComponentPointExtension, core.space.Model, {
extension: card.extensions.EditCardHeaderExtension,
component: process.component.ProcessesHeaderExtension,
@@ -623,6 +702,19 @@ export function createModel (builder: Builder): void {
process.section.CardProcesses
)
builder.createDoc(
card.class.CardSection,
core.space.Model,
{
label: process.string.ApproveRequest,
component: process.component.RequestsCardSection,
checkVisibility: process.function.CheckRequestsSectionVisibility,
order: 360,
navigation: []
},
process.section.CardApproveRequest
)
builder.createDoc(card.class.MasterTagEditorSection, core.space.Model, {
id: 'processes',
label: process.string.Processes,
+4 -2
View File
@@ -24,14 +24,16 @@ export default mergeIds(processId, process, {
Process: '' as Ref<Doc>
},
section: {
CardProcesses: '' as Ref<CardSection>
CardProcesses: '' as Ref<CardSection>,
CardApproveRequest: '' as Ref<CardSection>
},
pipeline: {
ProcessMiddleware: '' as Ref<PresentationMiddlewareFactory>
},
ids: {
ProcessSettings: '' as Ref<Doc>,
ProcessToDoCreated: '' as Ref<Doc>
ProcessToDoCreated: '' as Ref<Doc>,
ApproveRequestCreated: '' as Ref<Doc>
},
actionImpl: {
ContinueExecution: '' as ViewAction
+32
View File
@@ -16,6 +16,38 @@ import { type Builder } from '@hcengineering/model'
import process from './plugin'
export function defineTriggers (builder: Builder): void {
builder.createDoc(
process.class.Trigger,
core.space.Model,
{
label: process.string.OnApproveRequestApproved,
icon: process.icon.ToDo,
editor: process.component.ApproveRequestTriggerEditor,
presenter: process.component.ApproveRequestTriggerPresenter,
requiredParams: ['_id'],
checkFunction: process.triggerCheck.ApproveRequestApproved,
init: false,
auto: true
},
process.trigger.OnApproveRequestApproved
)
builder.createDoc(
process.class.Trigger,
core.space.Model,
{
label: process.string.OnApproveRequestRejected,
icon: process.icon.ToDoRemove,
editor: process.component.ApproveRequestTriggerEditor,
presenter: process.component.ApproveRequestTriggerPresenter,
requiredParams: ['_id'],
checkFunction: process.triggerCheck.ApproveRequestRejected,
init: false,
auto: true
},
process.trigger.OnApproveRequestRejected
)
builder.createDoc(
process.class.Trigger,
core.space.Model,
+22
View File
@@ -70,6 +70,16 @@ export function createModel (builder: Builder): void {
serverCheckFunc: serverProcess.func.FieldChangedCheck
})
builder.mixin(process.trigger.OnApproveRequestApproved, process.class.Trigger, serverProcess.mixin.TriggerImpl, {
preventRollback: true,
serverCheckFunc: serverProcess.func.ApproveRequestApproved
})
builder.mixin(process.trigger.OnApproveRequestRejected, process.class.Trigger, serverProcess.mixin.TriggerImpl, {
preventRollback: true,
serverCheckFunc: serverProcess.func.ApproveRequestRejected
})
builder.mixin(process.trigger.OnExecutionStart, process.class.Trigger, serverProcess.mixin.TriggerImpl, {
preventRollback: true
})
@@ -117,6 +127,18 @@ export function createModel (builder: Builder): void {
func: serverProcess.func.AddTag
})
builder.mixin(process.method.RequestApproval, process.class.Method, serverProcess.mixin.MethodImpl, {
func: serverProcess.func.RequestApproval
})
builder.mixin(process.method.LockCard, process.class.Method, serverProcess.mixin.MethodImpl, {
func: serverProcess.func.LockCard
})
builder.mixin(process.method.LockSection, process.class.Method, serverProcess.mixin.MethodImpl, {
func: serverProcess.func.LockSection
})
builder.mixin(process.function.FirstValue, process.class.ProcessFunction, serverProcess.mixin.FuncImpl, {
func: serverProcess.transform.FirstValue
})
+64
View File
@@ -0,0 +1,64 @@
{
"string": {
"Create": "Criar",
"Cancel": "Cancelar",
"Ok": "Ok",
"Save": "Guardar",
"Saved": "Guardado...",
"Download": "Transferir",
"DownloadOriginal": "Transferir original",
"Delete": "Eliminar",
"Close": "Fechar",
"NotSelected": "Não selecionado",
"Deselect": "Desmarcar",
"Archived": "(arquivado)",
"AddSocialLinks": "Adicionar links sociais",
"EditSocialLinks": "Editar links sociais",
"Change": "Alterar",
"Remove": "Remover",
"Search": "Pesquisar...",
"Spaces": "Espaços",
"NumberSpaces": "{count, plural, =0 {Em} =1 {Em 1 local} other {Em # locais}}",
"InThis": "Neste {space}",
"NoMatchesInThis": "Sem correspondências neste {space}",
"NoMatchesFound": "Sem correspondências encontradas",
"NotInThis": "Não está neste {space}",
"Match": "Correspondência",
"Add": "Adicionar",
"Edit": "Editar",
"DocumentPreview": "Visualizar",
"MakePrivate": "Tornar privado",
"MakePrivateDescription": "Apenas os membros podem ver",
"Created": "Criado",
"Selected": "Selecionado",
"NoResults": "Sem resultados para mostrar",
"Next": "Seguinte",
"FailedToPreview": "Falha ao pré-visualizar",
"ContentType": "Tipo de conteúdo",
"ContentTypeNotSupported": "A visualização não está disponível para este tipo de conteúdo",
"StartDrawing": "Scarabocchiare sopra",
"DrawingHistory": "História de rabiscos",
"ColorAdd": "Adicionar predefinição de cor",
"ColorRemove": "Remover predefinição de cor",
"ColorReset": "Repor predefinições de cores",
"Copy": "Copiar",
"DocumentUrlCopied": "Copiado!",
"CopyLink": "Copiar link",
"AccessDenied": "O objeto não existe ou você não tem permissão para acessá-lo.",
"UnableToFollowMention": "Não foi possível abrir o objeto mencionado",
"Undo": "Desfazer",
"Redo": "Refazer",
"ClearCanvas": "Limpar tela",
"PenTool": "Caneta",
"EraserTool": "Borracha",
"PanTool": "Mover",
"TextTool": "Texto",
"LineTool": "Linha",
"RectangleTool": "Retângulo",
"EllipseTool": "Elipse",
"PaletteManagementMenu": "Gerenciar predefinições de cor"
},
"status": {
"FileTooLarge": "Ficheiro demasiado grande"
}
}
+3 -1
View File
@@ -584,9 +584,11 @@ pre.proseCodeBlock>pre.proseCode {
.mermaidPreview {
width: 100%;
display: flex;
justify-content: center;
svg {
width: 100%;
width: auto;
max-width: 100%;
height: auto;
display: block;
+1
View File
@@ -50,6 +50,7 @@
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+1
View File
@@ -50,6 +50,7 @@
"English": "Englisch",
"Russian": "Russisch",
"Portuguese": "Portugiesisch",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Spanisch",
"Chinese": "Chinesisch",
"French": "Französisch",
+1
View File
@@ -50,6 +50,7 @@
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+1
View File
@@ -50,6 +50,7 @@
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+1
View File
@@ -50,6 +50,7 @@
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+1
View File
@@ -50,6 +50,7 @@
"English": "Inglese",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+1
View File
@@ -50,6 +50,7 @@
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+114
View File
@@ -0,0 +1,114 @@
{
"string": {
"EditBoxPlaceholder": "Digite o texto...",
"Ok": "Ok",
"Cancel": "Cancelar",
"Save": "Salvar",
"Publish": "Publicar",
"SaveDraft": "Salvar rascunho",
"MinutesAgo": "{minutes, plural, =0 {há menos de um minuto} =1 {há um minuto} other {há # minutos}}",
"HoursAgo": "{hours, plural, =0 {há menos de uma hora} =1 {há uma hora} other {há # horas}}",
"DaysAgo": "{days, plural, =0 {hoje} =1 {ontem} other {há # dias}}",
"MonthsAgo": "{months, plural, =0 {este mês} =1 {há um mês} other {há # meses}}",
"YearsAgo": "{years, plural, =0 {este ano} =1 {há um ano} other {há # anos}}",
"Minutes": "{minutes, plural, =0 {menos de um minuto} =1 {um minuto} other {# minutos}}",
"Hours": "{hours, plural, =0 {menos de uma hora} =1 {uma hora} other {# horas}}",
"Days": "{days, plural, =0 {hoje} =1 {1 dia} other {# dias}}",
"Weeks": "{weeks, plural, =0 {esta semana} =1 {1 semana} other {# semanas}}",
"Months": "{months, plural, =0 {este mês} =1 {1 mês} other {# meses}}",
"Years": "{years, plural, =0 {este ano} =1 {um ano} other {# anos}}",
"Before": "Antes",
"After": "Depois",
"MinutesShort": "{value}m",
"HoursShort": "{value}h",
"DaysShort": "{value}d",
"ShowMore": "Mostrar mais",
"ShowLess": "Mostrar menos",
"Search": "Pesquisar",
"SearchDots": "Pesquisar...",
"SearchResults": "Resultados da pesquisa",
"Suggested": "Sugerido",
"TimeTooltip": "{value}",
"SelectDate": "Selecionar data",
"None": "Nenhum",
"NotSelected": "Não selecionado",
"Today": "Hoje",
"NoDate": "Sem data",
"StartDate": "Data de início",
"TargetDate": "Data alvo",
"Overdue": "Atrasado",
"DueDate": "Data de vencimento",
"AddDueDate": "Adicionar data de vencimento",
"SetDueDate": "Definir data de vencimento",
"EditDueDate": "Editar data de vencimento",
"SaveDueDate": "Salvar data de vencimento",
"NeedsToBeCompletedByThisDate": "Precisa ser concluído até esta data",
"DueDatePopupTitle": "Vence em {value}",
"DueDatePopupOverdueTitle": "Venceu em {value}",
"DueDatePopupDescription": "{value, plural, =0 {Hoje} =1 {Amanhã} other {# dias restantes}}",
"DueDatePopupOverdueDescription": "{value, plural, =1 {1 dia em atraso} other {# dias em atraso}}",
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
"Italian": "Italiano",
"Czech": "Čeština",
"German": "Deutsch",
"Japanese": "日本語",
"Turkish": "Türkçe",
"MinutesBefore": "{minutes, plural, =1 {um minuto antes} other {# minutos antes}}",
"HoursBefore": "{hours, plural, =1 {uma hora antes} other {# horas antes}}",
"DaysBefore": "{days, plural, =1 {um dia antes} other {# dias antes}}",
"WeeksBefore": "{weeks, plural, =1 {uma semana antes} other {# semanas antes}}",
"MonthsBefore": "{months, plural, =1 {um mês antes} other {# meses antes}}",
"MinutesAfter": "{minutes, plural, =1 {em um minuto} other {em # minutos}}",
"HoursAfter": "{hours, plural, =1 {em uma hora} other {em # horas}}",
"DaysAfter": "{days, plural, =1 {em um dia} other {em # dias}}",
"WeeksAfter": "{weeks, plural, =1 {daqui a um dia} other {daqui a # semanas}}",
"MonthsAfter": "{months, plural, =1 {daqui a um mês} other {daqui a # meses}}",
"NoActionsDefined": "Nenhuma ação aplicável",
"Incoming": "Entrada",
"HoursLabel": "Horas",
"Back": "Voltar",
"Next": "Próximo",
"DropdownDefaultLabel": "Selecionar item",
"DD": "DD",
"MM": "MM",
"YYYY": "AAAA",
"HH": "HH",
"Remove": "Remover",
"NoResults": "Sem resultados",
"MoreCount": "{count} mais",
"Spacious": "Espaçoso",
"Compact": "Compacto",
"ThemeLight": "Claro",
"ThemeDark": "Escuro",
"ThemeSystem": "Sistema",
"NoTimeZonesFound": "Nenhum fuso horário encontrado",
"Selected": "Selecionado:",
"Submit": "Enviar",
"NextStep": "Próximo passo",
"TypeHere": "Digite aqui...",
"NormalSize": "Tamanho normal",
"FullSize": "Tamanho completo",
"UseMaxWidth": "Largura máxima",
"Sidebar": "Barra lateral",
"FontSize": "Tamanho da fonte",
"Language": "Idioma",
"DaysWOValue": "{days, plural, =1 {dia} other {dias}}",
"WeeksWOValue": "{weeks, plural, =1 {semana} other {semanas}}",
"MonthsWOValue": "{months, plural, =1 {mês} other {meses}}",
"Filter": "Filtrar",
"Clear": "Limpar",
"Yesterday": "Ontem",
"ThisWeek": "Esta semana",
"ThisMonth": "Este mês",
"ThisYear": "Este ano",
"EmojiStyle": "Estilo de emoji",
"EmojiSystem": "Padrão do sistema",
"EmojiNoto": "Noto Color"
}
}
+1
View File
@@ -50,6 +50,7 @@
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+1
View File
@@ -51,6 +51,7 @@
"Russian": "Русский",
"Spanish": "Español",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Chinese": "中文",
"French": "Français",
"Italian": "Italiano",
+1
View File
@@ -50,6 +50,7 @@
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+1
View File
@@ -50,6 +50,7 @@
"English": "English",
"Russian": "Русский",
"Portuguese": "Português",
"PortugueseBrazil": "Português (Brasil)",
"Spanish": "Español",
"Chinese": "中文",
"French": "Français",
+1 -29
View File
@@ -14,29 +14,11 @@
-->
<script lang="ts">
import { onDestroy } from 'svelte'
import Loading from './Loading.svelte'
export let src: string
export let name: string
export let fit: boolean = false
export let css: string | undefined = undefined
let iframeSrc: string | undefined = undefined
async function loadFile (src: string): Promise<void> {
if (iframeSrc !== undefined) {
URL.revokeObjectURL(iframeSrc)
iframeSrc = undefined
}
const response = await fetch(src)
const blob = await response.blob()
iframeSrc = URL.createObjectURL(blob)
}
$: void loadFile(src)
let iframe: HTMLIFrameElement | undefined = undefined
// eslint-disable-next-line @typescript-eslint/prefer-optional-chain
@@ -58,19 +40,9 @@
}
}
}
onDestroy(() => {
if (iframeSrc !== undefined) {
URL.revokeObjectURL(iframeSrc)
}
})
</script>
{#if iframeSrc}
<iframe bind:this={iframe} class:fit src={iframeSrc + '#view=FitH&navpanes=0'} title={name} on:load />
{:else}
<Loading />
{/if}
<iframe bind:this={iframe} class:fit src={src + '#view=FitH&navpanes=0'} title={name} on:load />
<style lang="scss">
iframe {
@@ -72,6 +72,7 @@
const langs = [
{ id: 'en', label: ui.string.English, logo: '&#x1F1FA;&#x1F1F8;' },
{ id: 'pt', label: ui.string.Portuguese, logo: '&#x1F1F5;&#x1F1F9;' },
{ id: 'pt-br', label: ui.string.PortugueseBrazil, logo: '&#x1F1E7;&#x1F1F7;' },
{ id: 'es', label: ui.string.Spanish, logo: '&#x1F1EA;&#x1F1F8;' },
{ id: 'ru', label: ui.string.Russian, logo: '&#x1F1F7;&#x1F1FA;' },
{ id: 'zh', label: ui.string.Chinese, logo: '&#x1F1E8;&#x1F1F3;' },
+1
View File
@@ -83,6 +83,7 @@ export const uis = plugin(uiId, {
German: '' as IntlString,
Japanese: '' as IntlString,
Turkish: '' as IntlString,
PortugueseBrazil: '' as IntlString,
MinutesBefore: '' as IntlString,
HoursBefore: '' as IntlString,
DaysBefore: '' as IntlString,
@@ -0,0 +1,8 @@
{
"string": {
"Achievements": "Conquistas",
"EarliestAdopter": "Primeiro Adoptante",
"Epic": "Epic",
"Legendary": "Legendário"
}
}
+60
View File
@@ -0,0 +1,60 @@
{
"string": {
"Activity": "Atividade",
"Added": "adicionado",
"All": "Tudo",
"AllActivity": "Toda a atividade",
"Attributes": "Atributos",
"Changed": "alterado",
"CollectionUpdated": "Atualizar {collection}",
"Created": "Criado",
"DocAdded": "adicionado {_class}",
"DocCreated": "criado {_class}",
"DocDeleted": "eliminado {_class}",
"Edit": "Editar",
"Edited": "Editado",
"Emoji": "Emoji",
"For": "Para",
"From": "de",
"In": "Em",
"LastReply": "Última resposta",
"New": "Novo",
"NewestFirst": "Mais recente primeiro",
"Pinned": "Fixado",
"Reacted": "Reagiu",
"Reactions": "Reações",
"Reaction": "Reação",
"Removed": "removido",
"Replies": "Respostas",
"RepliesCount": "{replies, plural, =1 {# resposta} other {# respostas}}",
"Set": "definido",
"To": "para",
"Unset": "Não definido",
"Update": "Atualizar",
"Updated": "Atualizado",
"UpdatedCollection": "Atualizado",
"Message": "Mensagem",
"Mentioned": "Mencionado",
"You": "Tu",
"Mentions": "Menções",
"MentionedYouIn": "Foste Mencionado em {title}",
"Messages": "Mensagens",
"Thread": "Tópico",
"AddReaction": "Adicionar Reação",
"SaveForLater": "Guardar para mais tarde",
"RemoveFromLater": "Remover dos Guardados",
"ReactionNotificationTitle": "Reação em {title}",
"ReactionNotificationBody": "{senderName}: {reaction}",
"NewObject": "Novo {object}",
"RemovedObject": "Removido {object}",
"ChangedObject": "Alterado {object}",
"UnsetObject": "Não definido {object}",
"UpdatedObject": "Atualizado {object}",
"NewObjectType": "Novo {type}: {title}",
"RemovedObjectType": "Removido {type} : {title}",
"AttributeSetTo": "{name} definido para {value}",
"AddedTag": "Tag adicionado: {title}",
"RemovedTag": "Tag removido: {title}",
"ValueTooLarge": "Valor demasiado grande para mostrar"
}
}
@@ -0,0 +1,13 @@
{
"string": {
"IntegrationLabel": "Assistente de IA",
"IntegrationDescription": "Seu assistente pessoal alimentado por IA que ajuda a organizar, automatizar e simplificar seu fluxo de trabalho diário na plataforma",
"ConfigLabel": "Assistente de IA",
"ConfigDescription": "Assistente pessoal alimentado por IA",
"Connect": "Conectar",
"Cancel": "Cancelar",
"Status": "Status",
"FailedToConnect": "O serviço do Assistente de IA não está disponível",
"Configure": "Configurar Assistente de IA"
}
}
@@ -0,0 +1,22 @@
{
"string": {
"OnboardingChannelDescription": "User: {user}; Workspace: {workspace}",
"Error": "Error: ",
"InProject": " in project ",
"NavigateToSpecial": "{app}: open {special}",
"OpenSpecial": "open {special} ",
"Set": "Set ",
"To": " to ",
"Open": "open ",
"Workbench": "Workbench: ",
"OnboardingChannel": "Canal de incorporación",
"OnboardingChannels": "Canales de incorporación",
"WorkspaceId": "Workspace id",
"WorkspaceName": "Workspace name",
"WorkspaceUrl": "Workspace url",
"Account": "Conta",
"UserName": "User name",
"DisableAIReplies": "Disable AI replies",
"ShowAIReplies": "Show AI replies"
}
}
+59
View File
@@ -0,0 +1,59 @@
{
"string": {
"UploadDropFilesHere": "Carregar ou largar ficheiros aqui",
"NoAttachments": "Não existem anexos para isto",
"NoParticipants": "Não foram adicionados participantes",
"AddAttachment": "anexou um ficheiro",
"Attachments": "Anexos",
"Photos": "Fotos",
"File": "Ficheiro",
"Files": "Ficheiros",
"NoFiles": "Não existem ficheiros",
"ShowMoreAttachments": "Mostrar mais",
"Type": "Tipo",
"Size": "Tamanho",
"Photo": "Foto",
"Date": "Data",
"LastModified": "Última modificação",
"Name": "Nome",
"FileBrowser": "Navegador de ficheiros",
"FileBrowserFileCounter": "{results, plural, =1 {# resultado} other {# resultados}}",
"FileBrowserListView": "Lista",
"FileBrowserGridView": "Grelha",
"FileBrowserFilterFrom": "De",
"FileBrowserFilterIn": "Em",
"FileBrowserFilterDate": "Data",
"FileBrowserFilterFileType": "Tipo de ficheiro",
"FileBrowserSort": "Ordenar",
"FileBrowserSortNewest": "Ficheiro mais recente",
"FileBrowserSortOldest": "Ficheiro mais antigo",
"FileBrowserSortAZ": "A a Z",
"FileBrowserSortZA": "Z a A",
"FileBrowserSortSmallest": "Ficheiro mais pequeno",
"FileBrowserSortBiggest": "Ficheiro maior",
"FileBrowserDateFilterAny": "Qualquer momento",
"FileBrowserDateFilterToday": "Hoje",
"FileBrowserDateFilterYesterday": "Ontem",
"FileBrowserDateFilter7Days": "Últimos 7 dias",
"FileBrowserDateFilter30Days": "Últimos 30 dias",
"FileBrowserDateFilter3Months": "Últimos 3 meses",
"FileBrowserDateFilter12Months": "Últimos 12 meses",
"FileBrowserTypeFilterAny": "Qualquer tipo de ficheiro",
"FileBrowserTypeFilterImages": "Imagens",
"FileBrowserTypeFilterAudio": "Áudio",
"FileBrowserTypeFilterVideos": "Vídeos",
"FileBrowserTypeFilterPDFs": "PDFs",
"AddAttachmentToSaved": "Adicionar anexo aos guardados",
"RemoveAttachmentFromSaved": "Remover anexo dos guardados",
"DeleteFile": "Eliminar ficheiro",
"Description": "Descrição",
"Pinned": "Importante",
"PinAttachment": "Marcar como importante",
"UnPinAttachment": "Marcar como menos importante",
"FilterAttachments": "Anexos",
"RemovedAttachment": "Anexo removido",
"ContentType": "Tipo de conteúdo",
"OpenInWindow": "Abrir numa janela",
"Embeddings": "Incorporações"
}
}
+61
View File
@@ -0,0 +1,61 @@
{
"string": {
"Billing": "Faturamento",
"Subscriptions": "Assinaturas",
"AllPlans": "Todos os planos",
"ActivePlan": "Plano ativo",
"ResourceUsage": "Uso de recursos",
"DriveSize": "Tamanho dos arquivos",
"DriveCount": "Quantidade de arquivos",
"OfficeSessionsDuration": "Tempo de reuniões",
"OfficeSessionsBandwidth": "Largura de banda de reuniões",
"OfficeEgressDuration": "Tempo de gravação",
"AI": "IA",
"TranscriptionTime": "Tempo de transcrição",
"TotalTokens": "Total de tokens",
"Tier": "Plano",
"StorageLimit": "{limit} {unit} de armazenamento",
"TrafficLimit": "{limit} {unit} de tráfego de vídeo/áudio",
"Common": "Common",
"CommonDescription": "Para indivíduos e equipes começando com Huly.",
"Rare": "Rare",
"RareDescription": "Para criativos individuais, freelancers e micro-agências.",
"Epic": "Epic",
"EpicDescription": "Para empresas criativas profissionais e pequenas empresas.",
"Legendary": "Legendary",
"LegendaryDescription": "Melhor para grandes equipes que precisam de capacidades máximas.",
"UnlimitedUsers": "Usuários ilimitados",
"UnlimitedObjects": "Objetos Huly ilimitados",
"ChangePlan": "Alterar plano",
"Subscribe": "Assinar",
"Monthly": "Mensal",
"Active": "Ativo",
"NoActivePlan": "Nenhum plano ativo",
"SelectPlanToBegin": "Selecione um plano abaixo para começar",
"SubscriptionEnds": "Até {date}",
"SubscriptionRenews": "Próxima renovação: {date}",
"SubscriptionValidUntil": "Válido até {date}",
"ProcessingPayment": "Processando pagamento...",
"Downgrade": "Fazer downgrade",
"CancelSubscription": "Cancelar assinatura",
"ConfirmUpgrade": "Atualizar assinatura?",
"ConfirmDowngrade": "Fazer downgrade da assinatura?",
"ConfirmCancel": "Cancelar assinatura?",
"UpgradeDescription": "Você será cobrado até ${amount} imediatamente. O valor exato depende de seu período de faturamento atual.",
"DowngradeDescription": "Você receberá um crédito de até ${amount} pelo tempo de assinatura restante. O downgrade entra em vigor imediatamente.",
"CancelDescription": "Sua assinatura permanecerá ativa até o final do período de faturamento.",
"UncancelSubscription": "Reativar assinatura",
"ConfirmUncancel": "Reativar assinatura?",
"UncancelDescription": "Sua assinatura será reativada e continuará a partir do final do período de faturamento atual.",
"PriceDifference": "Diferença de preço: {amount}",
"DialogCancel": "Cancelar",
"DialogConfirm": "Confirmar",
"StorageUsage": "Armazenamento",
"TrafficUsage": "Tráfego de vídeo/áudio",
"Usage": "Uso",
"Of": "de",
"UpgradePlan": "Atualizar Plano",
"LimitReached": "Limite do workspace atingido, algumas funcionalidades podem estar desabilitadas. Atualize para restaurar acesso completo.",
"RestrictedPlans": "Apenas o proprietário do workspace ou o administrador de faturamento podem alterar o plano de assinatura."
}
}
+18
View File
@@ -0,0 +1,18 @@
{
"string": {
"BitrixTokenUrl": "URL do Token Bitrix24",
"Bitrix": "",
"BitrixDesc": "Integração com Bitrix24",
"Settings": "Configurar",
"NotAllowed": "Não permitido sem direitos administrativos",
"BitrixEntityType": "Mapeamento de entidades",
"FieldMapping": "Mapeamento de campos",
"AddField": "Adicionar mapeamento",
"Attribute": "Atributo",
"MapField": "Mapear...",
"BitrixImport": "Sincronizar com Bitrix",
"AddMapping": "Adicionar mapeamento de entidade",
"ConfigLabel": "Bitrix24",
"ConfigDescription": "Extensão para integração com Bitrix 24"
}
}
+107
View File
@@ -0,0 +1,107 @@
{
"string": {
"Completed": "Concluído",
"Name": "Nome",
"CreateBoard": "Criar quadro",
"OpenCard": "Abrir cartão",
"CreateCard": "Criar cartão",
"CardName": "Nome do cartão",
"Cards": "Cartões",
"SelectBoard": "Selecionar quadro",
"More": "Mais...",
"Title": "Título",
"ManageBoardStatuses": "Gerenciar status do quadro",
"BoardName": "Quadro",
"CardCreateLabel": "Cartão",
"CardPlaceholder": "Espaço para cartão",
"Board": "Quadro",
"Boards": "Quadros",
"MyBoards": "Meus quadros",
"BoardApplication": "Quadros",
"Card": "Cartão",
"Assignee": "Responsável",
"Description": "Descrição",
"DescriptionPlaceholder": "Adicione uma descrição mais detalhada...",
"Location": "Localização",
"Members": "Membros",
"IsArchived": "Arquivado",
"BoardCreateLabel": "Quadro",
"Settings": "Configurações",
"Suggested": "Sugerido",
"Labels": "Etiquetas",
"CreateLabel": "Criar uma nova etiqueta",
"SearchLabels": "Procurar etiquetas...",
"SelectColor": "Selecionar uma cor",
"NoColor": "Sem cor.",
"NoColorInfo": "Isso não aparecerá na frente dos cartões.",
"Checklists": "Listas de verificação",
"ChecklistDropdownNone": "(nenhum)",
"ShowDoneChecklistItems": "Mostrar itens marcados ({done})",
"HideDoneChecklistItems": "Ocultar itens marcados",
"CopyChecklistFrom": "Copiar itens de...",
"Dates": "Datas",
"Attachments": "Anexos",
"AddAttachment": "Adicionar um anexo",
"DropFileToUpload": "Solte arquivos para enviar.",
"AttachFrom": "Anexar de...",
"AttachmentTip": "Dica: Pode arrastar e soltar arquivos nos cartões para enviá-los.",
"Computer": "Computador",
"CustomFields": "Campos personalizados",
"AddButton": "Adicionar botão",
"Actions": "Ações",
"Cover": "Capa",
"Join": "Participar",
"Move": "Mover",
"Copy": "Copiar",
"MakeTemplate": "Criar modelo",
"Archive": "Arquivar",
"SendToBoard": "Enviar para o quadro",
"Delete": "Apagar",
"HideDetails": "Ocultar detalhes",
"ShowDetails": "Mostrar detalhes",
"NewList": "Adicionar outra lista",
"AddList": "Adicionar lista",
"NewListPlaceholder": "Digite o título da lista...",
"AddACard": "Adicionar um cartão",
"AddCard": "Adicionar cartão",
"CardTitlePlaceholder": "Digite um título para este cartão...",
"MoveCard": "Mover cartão",
"SelectDestination": "Selecionar destino",
"Create": "Criar",
"CreateDescription": "Se desejar, podemos criar um cartão para cada nova linha ({number}). Você também pode criar um cartão com um título longo.",
"CreateSingle": "Apenas um cartão",
"CreateMultiple": "Criar {number} cartões",
"Cancel": "Cancelar",
"List": "Lista",
"Position": "Posição",
"Current": "{label} (atual)",
"Save": "Salvar",
"Remove": "Remover",
"NullDate": "D/M/AAAA",
"ViewProfile": "Ver perfil",
"RemoveFromCard": "Remover do cartão",
"LinkName": "Nome do link",
"Edit": "Editar",
"Update": "Atualizar",
"DeleteAttachment": "Excluir um anexo é permanente. Não há como desfazer.",
"DeleteCard": "Todas as ações serão removidas do feed de atividades e você não poderá reabrir o cartão. Não há como desfazer.",
"SearchMembers": "Procurar membros",
"Menu": "Menu",
"ShowMenu": "Mostrar menu",
"ToArchive": "Arquivar",
"CopyCard": "Copiar cartão",
"AlsoCopy": "Manter...",
"CopyTo": "Copiar para...",
"NoResults": "Sem resultados",
"SwitchToLists": "Alternar para listas",
"SwitchToCards": "Alternar para cartões",
"SearchArchive": "Pesquisar arquivo...",
"Size": "Tamanho",
"RemoveCover": "Remover capa",
"DeleteChecklist": "Apagar lista de verificação",
"DeleteChecklistConfirm": "Apagar uma lista de verificação é permanente e não há forma de a recuperar.",
"ConvertToCard": "Converter para cartão",
"ConfigLabel": "Quadro",
"ConfigDescription": "Extensão para gerir quadros Kanban."
}
}
+129
View File
@@ -0,0 +1,129 @@
{
"string": {
"ApplicationLabelCalendar": "Calendário",
"Calendars": "Calendários",
"Participants": "Participantes",
"NoParticipants": "Nenhum participante adicionado",
"PersonsLabel": "{name}",
"AddDescription": "Adicionar descrição",
"Date": "Data",
"DueTo": "Data de vencimento",
"Description": "Descrição",
"Title": "Título",
"Location": "Localização",
"Company": "Empresa",
"CreateCalendar": "Criar Calendário",
"Calendar": "Calendário",
"Events": "Eventos",
"Event": "Evento",
"ModeDay": "Dia",
"ModeWeek": "Semana",
"ModeMonth": "Mês",
"ModeYear": "Ano",
"Today": "Hoje",
"TableView": "Tabela",
"DueMinutes": "{minutes, plural, =0 {menos de um minuto} =1 {um minuto} other {# minutos}}",
"DueHours": "{hours, plural, =0 {menos de uma hora} =1 {1 hora} other {# horas}}",
"DueDays": "{days, plural, =0 {hoje} =1 {1 dia} other {# dias}}",
"Reminder": "Lembrete",
"ReminderTime": "Hora do lembrete",
"RemindMeAt": "Lembrar-me às",
"CreateReminder": "Criar lembrete",
"CreatedReminder": "Lembrete criado",
"Reminders": "Lembretes",
"Shift": "Turno",
"State": "Estado",
"NoReminders": "Sem lembretes",
"AllDay": "Todo o dia",
"AndMore": "E mais {count}",
"CreateEvent": "Criar evento",
"EventFor": "Evento para: ",
"ConfigLabel": "Calendário",
"ConfigDescription": "Extensão para ver calendário com Eventos",
"HideDetails": "Esconder detalhes",
"ReccuringEvent": "Evento recorrente",
"ExternalParticipants": "Participantes externos",
"IntegrationDescr": "Utilize a integração com o Google Calendar",
"Connect": "Conectar",
"RedirectGoogle": "Será redirecionado para a página de autenticação do Google. Certifique-se de selecionar todas as permissões.",
"ConnectCalendar": "Conectar conta Google Calendar",
"EditRecEvent": "Editar evento recorrente",
"RemoveRecEvent": "Remover evento recorrente",
"ThisEvent": "Este evento",
"ThisAndNext": "Este e os seguintes eventos",
"AllEvents": "Todos os eventos",
"EventTitlePlaceholder": "Título do evento",
"TimeZone": "Fuso horário",
"Repeat": "Repetir",
"On": "Em",
"Every": "Todos os",
"After": "Depois de",
"Ends": "Termina",
"Never": "Nunca",
"Day": "Dia",
"Week": "Semana",
"Month": "Mês",
"Year": "Ano",
"MondayShort": "Seg",
"TuesdayShort": "Ter",
"WednesdayShort": "Qua",
"ThursdayShort": "Qui",
"FridayShort": "Sex",
"SaturdayShort": "Sáb",
"SundayShort": "Dom",
"OnUntil": "Em",
"Times": "{count, plural, one {vez} other {vezes}}",
"AddParticipants": "Adicionar participantes",
"Sync": "Sincronização",
"Busy": "Ocupado",
"AddReminder": "Adicionar lembrete",
"SeeAllNumberParticipants": "{value, plural, other {Ver todos # participantes}}",
"SeeAllNumberReminders": "{value, plural, other {Ver todos # lembretes}}",
"Visibility": "Visibilidade",
"Private": "Apenas visível para si",
"Public": "Visível para todos",
"FreeBusy": "Ocupado/Livre",
"DefaultVisibility": "Visibilidade padrão",
"NotAllPermissions": "Não foram concedidas todas as permissões",
"GooglePrivacy": "Hulys use and transfer of information received from Google APIs to any other app will adhere to <a href=\"https://developers.google.com/terms/api-services-user-data-policy#additional_requirements_for_specific_api_scopes\" target=\"_blank\">Google API Services User Data Policy</a>, including the Limited Use requirements.",
"Value": "{value}",
"Schedule": "Agenda pública",
"ScheduleNew": "Adicionar agenda",
"ScheduleDeleteConfirm": "A agenda será eliminada. Confirma?",
"ScheduleShareLink": "Partilhar link",
"ScheduleSharedLinkMessage": "<p>Partilhe este link para permitir que outras pessoas agendem uma reunião consigo:</p><p><a href=\"{link}\" ></p>",
"ScheduleAvailability": "Disponibilidade",
"ScheduleUnavailable": "Indisponível",
"ScheduleTitlePlaceholder": "Título da agenda",
"ScheduleAddPeriod": "Adicionar período",
"ScheduleRemovePeriod": "Remover período",
"MeetingDuration": "Duração da reunião",
"MeetingInterval": "Pausa entre reuniões",
"CalDavAccess": "CalDAV Access",
"CalDavAccessPrompt": "O protocolo CalDAV permite sincronizar o seu calendário pessoal Huly com aplicações de calendário externas. Utilize esta conta e a palavra-passe sugerida para registar o servidor Huly CalDAV numa aplicação cliente de calendário.",
"CalDavAccessEnable": "Ativar o acesso CalDAV ao calendário pessoal no espaço de trabalho {ws}",
"CalDavAccessServer": "Servidor CalDAV",
"CalDavAccessAccount": "Conta Huly",
"CalDavAccessPassword": "Password",
"CalDavAccessPasswordWarning": "Não será possível ver esta palavra-passe novamente. Guarde-a num local seguro.",
"MeetingScheduledNotification": "Reunião agendada",
"MeetingRescheduledNotification": "Horário da reunião alterado",
"MeetingCanceledNotification": "Reunião cancelada: {title}",
"PrimaryCalendar": "Calendário principal",
"Hidden": "Oculto",
"Each": "Cada",
"OnThe": "No dia",
"First": "Primeiro",
"Second": "Segundo",
"Third": "Terceiro",
"Fourth": "Quarto",
"Fifth": "Quinto",
"NextToLast": "Penúltimo",
"Last": "Último",
"Weekday": "Dia da semana",
"WeekendDay": "Folga",
"SynchronizedCalendars": "Calendários sincronizados",
"Account": "Conta",
"NoCalendars": "Nenhum calendário encontrado"
}
}
+75
View File
@@ -0,0 +1,75 @@
{
"string": {
"Card": "Cartão",
"CardApplication": "Cartões",
"Cards": "Cartões",
"Content": "Conteúdo",
"CreateCard": "Criar Cartão",
"CreateMasterTag": "Criar Tipo",
"CreateTag": "Criar Tag",
"MasterTag": "Tipo",
"MasterTags": "Tipos",
"Parent": "Principal",
"Tags": "Tags",
"Tag": "Tag",
"AddTag": "Adicionar Tag",
"CardLibrary": "Biblioteca de Cartões",
"MinimizeAll": "Minimizar Tudo",
"ExpandAll": "Expandir Tudo",
"DeleteTag": "Excluir Tag",
"TagRelations": "Relações de Tag",
"DeleteTagConfirm": "Tem certeza que deseja excluir esta tag? Todas as propriedades relacionadas serão excluídas",
"DeleteMasterTag": "Excluir Tipo",
"DeleteMasterTagConfirm": "Tem certeza que deseja excluir este tipo? Todos os objetos relacionados a este tipo serão excluídos",
"UnsetParent": "Remover pai",
"SetParent": "Definir pai",
"CreateChild": "Criar filho",
"Children": "Filhos",
"Views": "Visualizações",
"CreateView": "Criar visualização",
"EditView": "Editar visualização",
"SelectViewType": "Selecionar tipo de visualização",
"Document": "Documento",
"Documents": "Documentos",
"ChangeType": "Alterar tipo",
"ChangeTypeWarning": "Aviso: Alterar o tipo de um cartão irá remover todos os dados para quaisquer atributos que não existem no tipo de destino. Dados anteriores do atributo podem ser restaurados alterando o cartão de volta para um tipo anterior. O conteúdo do cartão não será afetado.",
"MasterDetailViews": "Visualizações Master-Detail",
"SelectType": "Selecionar tipo",
"CreateSpace": "Criar espaço",
"NumberTypes": "{count, plural, one {# tipo} other {# tipos}}",
"Labels": "Etiquetas",
"Properties": "Propriedades",
"NoChildren": "Sem filhos",
"ConfigDescription": "Extensão para gerenciamento de conhecimento no estilo de banco de dados.",
"AddCollaborators": "Adicionar colaboradores",
"CardTitle": "Título",
"Post": "Publicar",
"GetIndividualPublicLink": "Obter link público personalizado",
"ShowLess": "Mostrar menos",
"CardContent": "O que você quer compartilhar?",
"Feed": "Feed",
"AllCards": "Todos os Cartões",
"Favorites": "Favoritos",
"RemoveCard": "Remover cartão",
"UpdateCard": "Atualizar cartão",
"CreateCardPermission": "Criar cartão",
"AddTagPermission": "Adicionar etiqueta",
"RemoveTag": "Remover etiqueta",
"ForbidRemoveCard": "Proibir remoção de cartão",
"ForbidUpdateCard": "Proibir atualização de cartão",
"ForbidCreateCardPermission": "Proibir criação de cartão",
"ForbidAddTagPermission": "Proibir adicionar etiqueta",
"ForbidRemoveTag": "Proibir remover etiqueta",
"Duplicate": "Duplicar",
"Version": "Versão",
"Versions": "Versões",
"NewVersion": "Nova versão",
"Versioning": "Controle de versões",
"EnableVersioning": "Ativar controle de versões",
"EnableVersioningConfirm": "Deseja ativar o controle de versões?",
"NewVersionConfirmation": "Deseja criar uma nova versão?",
"RelationCopyDescr": "Quais relações você deseja copiar?",
"Import": "Importar",
"Export": "Exportar"
}
}
@@ -55,14 +55,26 @@
<div class="divider" />
{/if}
<div class="masterTag">
<MasterTagAttributes bind:this={masterTagAttributes} {readonly} {value} {ignoreKeys} fourRows={columns === 2} />
<MasterTagAttributes
bind:this={masterTagAttributes}
readonly={readonly || value.readonlySections?.includes(value._class)}
{value}
{ignoreKeys}
fourRows={columns === 2}
/>
</div>
{#if mixins.length > 0}
<div class="divider" />
<Grid column={columns} columnGap={0} rowGap={0} alignItems={'start'}>
{#each mixins as tag, i (tag._id)}
<div class="tag" class:withoutBorder={Math.ceil((i + 1) / columns) === Math.ceil(mixins.length / columns)}>
<TagAttributes bind:this={tagAttributes[i]} {readonly} {tag} {value} {ignoreKeys} />
<TagAttributes
bind:this={tagAttributes[i]}
readonly={readonly || value.readonlySections?.includes(tag._id)}
{tag}
{value}
{ignoreKeys}
/>
</div>
{/each}
</Grid>
@@ -52,7 +52,7 @@
<div class="content" class:hidden>
<Content
{doc}
readonly={readonly || updatePermissionForbidden}
readonly={readonly || updatePermissionForbidden || doc.readonlySections?.includes(doc._class)}
content={contentDiv}
showToc={false}
on:loaded
+2 -1
View File
@@ -57,9 +57,10 @@ export interface Card extends Doc, IconProps, VersionableDoc {
parentInfo: ParentInfo[]
parent?: Ref<Card> | null
rank: Rank
readonly?: boolean
peerId?: string
readonlySections?: Ref<MasterTag>[]
}
export interface CardSpace extends TypedSpace {
+19
View File
@@ -0,0 +1,19 @@
{
"string": {
"Channel": "Canal",
"Channels": "Canais",
"Chat": "Chat",
"Description": "Descrição",
"Loading": "Carregando...",
"MessageIn": "Mensagem em #{title}",
"Thread": "Tópico",
"Threads": "Tópicos",
"Title": "Título",
"All": "Tudo",
"Inbox": "Caixa de entrada",
"ReactedToYourMessage": "reacionou ao seu mensagem",
"ClearAll": "Limpar tudo",
"InboxIsClear": "Caixa de entrada está vazia",
"YouDontHaveAnyNewMessages": "Não tem nenhuma nova mensagem"
}
}
+137
View File
@@ -0,0 +1,137 @@
{
"string": {
"ApplicationLabelChunter": "Conversas",
"LeftComment": "deixou um comentário",
"Channels": "Canais",
"DirectMessages": "Mensagens diretas",
"CreateChannel": "Criar canal",
"NewDirectMessage": "Nova mensagem direta",
"ChannelName": "Nome",
"ChannelNamePlaceholder": "Canal",
"ChannelDescription": "Descrição",
"Channel": "Canal",
"DirectMessage": "Mensagem direta",
"EditUpdate": "Guardar...",
"EditCancel": "Cancelar",
"Comments": "Comentários",
"About": "Sobre",
"Members": "Membros",
"NoMembers": "Sem membros",
"MentionedIn": "Mencionou-o(a) em ",
"Mentioned": "Mencionado(a)",
"ContactInfo": "Informações de contacto",
"Content": "Conteúdo",
"Comment": "Comentário",
"Message": "Mensagem",
"MessageOn": "Mensagem em",
"On": "em",
"Reference": "Referência",
"Chat": "Conversa",
"In": "Em",
"MentionNotification": "Mencionado(a)",
"Topic": "Tópico",
"Thread": "Conversa em cadeia",
"Threads": "Conversas em cadeia",
"New": "Novo(a)",
"MarkUnread": "Marcar como não lido",
"GetNewReplies": "Ser notificado sobre novas respostas",
"TurnOffReplies": "Desativar notificações para respostas",
"PinMessage": "Fixar mensagem",
"UnpinMessage": "Desafixar mensagem",
"Pinned": "Fixado(a)",
"EditMessage": "Editar mensagem",
"Edited": "editado(a)",
"DeleteMessage": "Eliminar mensagem",
"AndYou": "{participants, plural, =0 {Apenas tu} other {e tu}}",
"ShowMoreReplies": "Mostrar mais {count} respostas",
"Settings": "Definições",
"ArchiveChannel": "Arquivar canal",
"UnarchiveChannel": "Desarquivar canal",
"ArchiveConfirm": "Quando arquivar um canal, ele é arquivado para todos.<br/><br/>Ninguém poderá enviar mensagens, mas ainda terão acesso ao histórico do canal.<br/><br/>Ainda poderá encontrar o conteúdo do canal através da pesquisa.<br/>E poderá sempre desarquivar o canal no futuro, se necessário.\n",
"UnarchiveConfirm": "Deseja desarquivar o canal?",
"AddToSaved": "Adicionar aos guardados",
"RemoveFromSaved": "Remover dos guardados",
"EmptySavedHeader": "Adicione mensagens para consultar mais tarde",
"EmptySavedText": "Marque as suas tarefas pendentes ou guarde algo para mais tarde. Apenas tu podes ver os seus itens guardados, por isso use-os como quiser.",
"SharedBy": "Partilhado por {name} {time}",
"LeaveChannel": "Sair do canal",
"ChannelBrowser": "Explorador de canais",
"Saved": "Guardado(a)",
"ConvertToPrivate": "Converter em canal privado",
"MessagesBrowser": "Explorador de mensagens",
"CreateBy": "Criado por",
"ThreadMessage": "Mensagem em cadeia",
"ChunterBrowser": "Explorador",
"Messages": "Mensagens",
"NoResults": "Nenhum resultado",
"CopyLink": "Copiar ligação",
"FilterBacklinks": "Links anteriores",
"DM": "MD (Mensagem direta)",
"DMNotification": "Enviou-lhe uma mensagem",
"ConfigLabel": "Conversas",
"ConfigDescription": "Extensão para realizar comunicações por texto",
"LastMessage": "Última mensagem",
"You": "Tu",
"YouHaveJoinedTheConversation": "Entrou na conversa",
"NoMessages": "Ainda não existem mensagens",
"DirectNotificationTitle": "{senderName}",
"DirectNotificationBody": "{message}",
"MessageNotificationBody": "{senderName}: {message}",
"AddCommentPlaceholder": "Adicionar comentário...",
"Reacted": "Reagiu",
"Docs": "Documentos",
"NewestFirst": "Mais recentes primeiro",
"ReplyToThread": "Responder à conversa em cadeia",
"SentMessage": "Mensagem enviada",
"Direct": "Direto(a)",
"RepliedToThread": "Respondido à conversa em cadeia",
"RepliedTo": "respondeu a: {message}",
"AllChannels": "Todos os canais",
"AllContacts": "Todos os contatos",
"NewChannel": "Novo canal",
"TopicOptional": "Tópico (opcional)",
"Visibility": "Visibilidade",
"Public": "Público",
"Private": "Privado",
"NewDirectChat": "Novo chat direto",
"AddMembers": "Adicionar membros",
"PinnedCount": "{count} fixados",
"LoadingHistory": "Carregando histórico...",
"UnpinChannels": "Desafixar todos os canais",
"ArchiveActivityConfirmationTitle": "Arquivar todos os canais de atividade?",
"ArchiveActivityConfirmationMessage": "Tem a certeza de que deseja arquivar todos os canais de atividade? Esta operação não pode ser desfeita.",
"CloseConversation": "Fechar conversa",
"Starred": "Em destaque",
"DeleteStarred": "Eliminar em destaque",
"StarChannel": "Colocar em destaque o canal",
"StarConversation": "Colocar em destaque a conversa",
"UnstarChannel": "Remover destaque do canal",
"UnstarConversation": "Remover destaque da conversa",
"JoinChannelHeader": "Clique em \"Participar\" para começar.",
"JoinChannelText": "Depois de entrar, você poderá ler todas as mensagens e contribuir na discussão.",
"NoMessagesInChannel": "Ainda não existem mensagens neste canal.",
"SendMessagesInChannel": "Envie a sua primeira mensagem!",
"LatestMessages": "↓ Últimas mensagens",
"Joined": "Entrou",
"Left": "Saiu",
"Added": "Adicionado(a)",
"Removed": "Removido(a)",
"CreatedChannelOn": "Criou este canal em {date}",
"ChannelMessages": "Mensagens do canal",
"JoinChannel": "Participar no canal",
"YouJoinedChannel": "Entrou no canal",
"AndMore": "e mais {count}",
"IsTyping": "está a escrever...",
"ThreadIn": "Conversa em cadeia em {name}",
"TranslateMessage": "Traduzir mensagem",
"Translate": "Traduzir",
"ShowOriginal": "Mostrar original",
"Translating": "A traduzir...",
"StartConversation": "Iniciar conversa",
"ViewingThreadFromArchivedChannel": "Está a visualizar uma conversa em cadeia de um canal arquivado",
"ViewingArchivedChannel": "Está a visualizar um canal arquivado",
"OpenChatInSidebar": "Abrir chat na barra lateral",
"NoThreadsYet": "Não há conversas ainda.",
"SummarizeMessages": "Resumir discussão"
}
}
@@ -0,0 +1,98 @@
{
"string": {
"Messages": "Mensagens",
"FirstMessages": "Primeiras Mensagens",
"LatestMessages": "Últimas Mensagens",
"Subscribe": "Subscrever",
"Unsubscribe": "Cancelar subscrição",
"File": "Arquivo",
"Files": "Arquivos",
"Added": "Adicionado",
"All": "Todos ({count})",
"Attach": "Anexar",
"Cancel": "Cancelar",
"Edit": "Editar",
"Edited": "Editado",
"Emoji": "Emoji",
"HoursAgo": "{hours, plural, =0 {há menos de uma hora} =1 {há uma hora} other {há # horas}}",
"JustNow": "Agora mesmo",
"LastReply": "Última resposta",
"Mention": "Mencionar",
"MinutesAgo": "{minutes, plural, =0 {há menos de um minuto} =1 {há um minuto} other {há # minutos}}",
"MonthAt": "{month} às {time}",
"New": "Novo",
"Removed": "Removido",
"RepliesCount": "{count, plural, =0 {sem respostas} =1 {1 resposta} other {# respostas}}",
"Reply": "Responder",
"Send": "Enviar",
"Set": "Definir",
"ShowFormatting": "Mostrar formatação",
"To": "Para",
"Today": "Hoje",
"Unset": "Não definido",
"WeekdayAt": "{weekday} às {time}",
"YearAt": "{year} às {time}",
"Yesterday": "Ontem",
"YesterdayAt": "Ontem às {time}",
"AndMore": "e mais {count}",
"IsTyping": "{count, plural, =1 {está digitando} other {estão digitando}}",
"IsThinking": "{count, plural, =1 {está pensando} other {estão pensando}}",
"Loading": "Carregando...",
"MessageIn": "Mensagem #{title}",
"ThreadWasDeleted": "Este thread foi excluído.",
"MessageWasRemoved": "Este mensagem foi removida.",
"JoinedThe": "Juntou-se ao",
"LeftThe": "Deixou o",
"Translating": "Traduzindo...",
"ShowOriginal": "Mostrar original",
"AddReaction": "Adicionar reação",
"ReplyInThread": "Responder no thread",
"TranslateMessage": "Traduzir mensagem",
"ShowOriginalMessage": "Mostrar mensagem original",
"EditMessage": "Editar mensagem",
"RemoveMessage": "Remover mensagem",
"CreateCard": "Criar cartão",
"MessageAlreadyHasCardAttached": "Oops! Este mensagem já tem um cartão anexado.",
"CreatePoll": "Criar enquete",
"Poll": "Enquete",
"QuestionIsRequired": "É necessária uma pergunta.",
"AnswerIsRequired": "É necessária uma resposta.",
"OptionIsRequired": "É necessária uma opção.",
"StartDateMustBeInTheFuture": "A data de início deve estar no futuro.",
"EndDateMustBeInTheFuture": "A data de término deve estar no futuro.",
"Question": "Pergunta",
"AskQuestion": "Fazer uma pergunta",
"PollOptions": "Opções do enquete",
"Option": "Opção",
"AnonymousVoting": "Votação anônima",
"MultipleChoice": "Escolha múltipla",
"QuizMode": "Modo de quiz",
"StartTime": "Hora de início",
"EndTime": "Hora de término",
"OpenPoll": "Abrir enquete",
"RetractVote": "Retirar voto",
"Quiz": "Quiz",
"VotesCount": "{count, plural, =0 {nenhum voto} =1 {1 voto} other {# votos}}",
"Vote": "Votar",
"ShowResults": "Mostrar resultados",
"Ended": "Termina",
"StartsAt": "Começa às {date}",
"EndsAt": "Termina às {date}",
"StartsTomorrow": "Começa amanhã às {date}",
"EndsTomorrow": "Termina amanhã às {date}",
"PollResults": "Resultados do enquete",
"Polls": "Enquetes",
"TotalVotes": "Total de votos",
"Voted": "Votado",
"VotedFor": "Votado para",
"RevokedVote": "Revogar voto",
"AnonymousQuiz": "Quiz anônimo",
"Direct": "Direto",
"Directs": "Diretos",
"Members": "Membros",
"Translate": "Traduzir",
"WriteMessageEllipsis": "Escreva uma mensagem...",
"EditMessageEllipsis": "Editar mensagem...",
"ArrowDownMessages": "↓ Últimas mensagens"
}
}
+134
View File
@@ -0,0 +1,134 @@
{
"string": {
"Apply": "Aplicar",
"Contacts": "Contatos",
"Persons": "Pessoas",
"Organizations": "Empresas",
"CreatePerson": "Pessoa",
"CreateOrganization": "Empresa",
"OrganizationNamePlaceholder": "Nome da empresa",
"OrganizationsNamePlaceholder": "Empresas",
"PersonFirstNamePlaceholder": "Primeiro nome",
"PersonLastNamePlaceholder": "Último nome",
"PersonLocationPlaceholder": "Localização",
"PersonsNamePlaceholder": "Pasta",
"Name": "Nome",
"SelectFolder": "Selecionar pasta",
"OrganizationsFolder": "Pasta de empresas",
"PersonsFolder": "Pasta de pessoas",
"ContactCreateLabel": "Criar contato",
"SearchEmployee": "Procurar por funcionário...",
"SearchPerson": "Procurar por pessoa...",
"SearchOrganization": "Procurar por empresa...",
"ContactInfo": "Informações de contato",
"Contact": "Contato",
"Location": "Localização",
"Channel": "Registro de contato",
"ChannelProvider": "Provedor de canal",
"Person": "Pessoa",
"Organization": "Empresa",
"Employee": "Funcionário",
"DeleteEmployee": "Excluir funcionário",
"DeleteEmployeeDescr": "Tem certeza de que deseja excluir o funcionário da área de trabalho?",
"Value": "Valor",
"FullDescription": "Descrição completa",
"Phone": "Telefone",
"LinkedIn": "LinkedIn",
"GitHub": "GitHub",
"Twitter": "Twitter",
"Google": "Google",
"Telegram": "Telegram",
"PhonePlaceholder": "+351 21 123 4567",
"LinkedInPlaceholder": "https://pt.linkedin.com/in/jappleseed",
"AtPlaceHolder": "@appleseed",
"FacebookPlaceholder": "https://www.facebook.com/jappleseed",
"Facebook": "Facebook",
"HomepagePlaceholder": "https://jappleseed.com",
"Homepage": "Página inicial",
"SocialLinks": "Links sociais",
"ViewActivity": "Ver atividade",
"PersonAlreadyExists": "Contato já existe...",
"Status": "Estado",
"SetStatus": "Definir estado",
"ClearStatus": "Limpar estado",
"SaveStatus": "Salvar",
"Cancel": "Cancelar",
"StatusDueDate": "Data de vencimento",
"NoExpire": "Sem expiração",
"TypeLabel": "Tipo",
"StatusDueDateTooltip": "Até {date}",
"CopyToClipboard": "Copiar",
"ViewFullProfile": "Ver perfil completo",
"Member": "Membro",
"Members": "Membros",
"NoMembers": "Nenhum membro adicionado",
"AddMember": "Adicionar membro",
"KickEmployee": "Expulsar funcionário",
"KickEmployeeDescr": "Tem certeza de que deseja expulsar o funcionário da área de trabalho? Esta ação não pode ser desfeita",
"ResendInvite": "Reenviar Convite",
"ResendInviteDescr": "Tem certeza de que deseja reenviar um convite para este usuário no espaço de trabalho?",
"Email": "E-mail",
"CreateEmployee": "Criar funcionário",
"Inactive": "Inativo",
"Active": "Ativo",
"Role": "Função",
"Birthday": "Aniversário",
"UseImage": "Foto anexada",
"UseGravatar": "Gravatar",
"UseColor": "Cor",
"NotSpecified": "Não especificado",
"Whatsapp": "WhatsApp",
"WhatsappPlaceholder": "WhatsApp",
"Skype": "Skype",
"SkypePlaceholder": "Skype",
"Profile": "Perfil",
"ProfilePlaceholder": "Perfil...",
"CurrentEmployee": "Funcionário atual",
"MergePersons": "Mesclar contatos",
"MergePersonsFrom": "Contato de origem",
"MergePersonsTo": "Contato final",
"SelectAvatar": "Selecionar avatar",
"Avatar": "Avatar",
"AvatarProvider": "Provedor de avatar",
"GravatarsManaged": "Gravatars gerenciados",
"Through": "através de",
"AddMembersHeader": "Adicionar membros a {value}:",
"Assigned": "Atribuído",
"Unassigned": "Não atribuído",
"CategoryCurrentUser": "Utilizador atual",
"CategoryOther": "Outro",
"NumberMembers": "{count, plural, =0 {sem membros} =1 {1 membro} other {# membros}}",
"Position": "Posição",
"ConfigLabel": "Contactos",
"ConfigDescription": "Extensão para armazenar informações sobre todos os Funcionários e outros contactos de Pessoas/Organizações.",
"HasMessagesIn": "tem mensagens em",
"HasNewMessagesIn": "tem novas mensagens em",
"Employees": "Funcionários",
"People": "Pessoas",
"For": "Para",
"SelectUsers": "Selecionar utilizadores",
"AddGuest": "Adicionar convidado",
"ViewProfile": "Ver perfil",
"Viber": "Viber",
"ViberPlaceholder": "Viber",
"SocialId": "Identificação social",
"SocialIds": "Identificações sociais",
"Type": "Tipo",
"Confirmed": "Confirmado",
"UserProfile": "Perfil do usuário",
"DeactivatedAccount": "Conta desativada",
"LocalTime": "hora local",
"Everyone": "Todos",
"Here": "Aqui",
"EveryoneDescription": "Notificar todos neste {title}",
"HereDescription": "Notificar todos neste {title}",
"Guest": "Convidado",
"Deleted": "Excluído",
"CannotMerge": "Erro: Não é possível mesclar pessoas globais",
"AutoTranslation": "Tradução automática",
"TranslateTo": "Traduzir para",
"DontTranslate": "Não traduzir",
"SelectLanguage": "Selecionar idioma",
"SelectLanguages": "Selecionar idiomas"
}
}
@@ -0,0 +1,115 @@
{
"string": {
"ID": "ID",
"Code": "Código",
"Number": "Número",
"Category": "Categoria",
"CollaborativeDocument": "Documento colaborativo",
"ControlledDocument": "Documento controlado",
"Requests": "Solicitações",
"EffectiveDate": "Data de vigência",
"PlannedEffectiveDate": "Data de vigência planejada",
"Rank": "Classificação",
"DocumentRequest": "Solicitação de documento",
"DocumentReviewRequest": "Solicitação de revisão de documento",
"DocumentApprovalRequest": "Solicitação de aprovação de documento",
"ControlledStatus": "Status de controle",
"Categories": "Categorias",
"Guidance": "Orientação",
"Required": "Obrigatório",
"Description": "Descrição",
"Major": "Principal",
"Minor": "Secundária",
"Patch": "Correção",
"ValidationWorkflow": "Fluxo de validação",
"Creator": "Criador",
"ChangeOwner": "Alterar autor do documento",
"ChangeOwnerHintBeginning": "Transferir autoria do documento",
"ChangeOwnerHintEnd": "para outra pessoa.",
"ChangeOwnerWarning": "Você não poderá mais editar este documento após essa ação.",
"SelectOwner": "Selecionar novo autor",
"CreateDocument": "Criar novo documento",
"CreateTemplate": "Criar novo modelo",
"Documents": "Documentos",
"Document": "Documento",
"NewDocumentDialogClose": "Deseja fechar este diálogo?",
"NewDocumentCloseNote": "Todas as alterações serão perdidas",
"Cancel": "Cancelar",
"EditorPlaceholder": "Digite para começar a editar...",
"Version": "Versão",
"TemplateVersion": "Versão do modelo",
"VersionValue": "v{major}.{minor}",
"SearchDocument": "Buscar documento...",
"CreateEnVersion": "Criar versão para revisão",
"Approvers": "Aprovadores",
"ExternalApprovers": "Aprovadores externos",
"CoAuthors": "Coautores",
"Status": "Status",
"TemplateName": "Nome do modelo",
"DocumentApplication": "Documentos controlados",
"MyDocuments": "Meus documentos",
"Library": "Biblioteca",
"Labels": "Etiquetas",
"Author": "Autor",
"Review": "Revisão",
"Approval": "Aprovação",
"Reviewer": "Revisor",
"Approver": "Aprovador",
"DeleteCategory": "Excluir categoria?",
"DeleteCategoryHint": "Essa ação não pode ser desfeita",
"DeleteCategoryWarning": "A categoria não pode ser excluída porque está em uso",
"Latest": "Atual",
"Draft": "Rascunho",
"Reviewers": "Revisores",
"ViewMode": "Visualização",
"EditMode": "Edição",
"ComparisonMode": "Comparar",
"Compare": "Comparar:",
"Against": "Contra:",
"ComparisonModeNotSupported": "Modo de comparação não suportado.",
"CreateDraft": "Criar rascunho",
"SendForApproval": "Enviar para aprovação",
"SendForReview": "Enviar para revisão",
"CompleteReview": "Finalizar revisão",
"Approve": "Aprovar",
"Reject": "Rejeitar",
"ConfirmApproval": "Confirmar aprovação",
"ConfirmRejection": "Confirmar rejeição",
"ProvideRejectionReason": "Informe o motivo da rejeição...",
"RejectionReason": "Motivo da rejeição",
"ConfirmReviewCompletion": "Confirmar conclusão da revisão",
"ConfirmApprovalSubmission": "Confirmar envio para aprovação",
"ConfirmReviewSubmission": "Confirmar envio para revisão",
"AddApprovalTitle": "Envie seu documento para aprovação",
"AddApprovalDescription1": "Para que seu documento seja aprovado, ele deve atender a alguns requisitos:",
"AddApprovalDescription2": "deve estar no status 'Rascunho' ou 'Revisado'",
"AddApprovalDescription3": "não deve conter comentários não resolvidos",
"AddApprovalDescription4": "se houver treinamento planejado, ele deve estar no status 'Liberado'",
"NoApprovalsDescription": "Não há aprovações para esta versão do documento",
"CurrentVersion": "Versão atual",
"FirstDraftVersion": "Esta é a primeira versão de rascunho do documento. Ainda não há histórico.",
"FirstOrNotAvailable": "Esta é a primeira versão disponível do documento. Ainda não há histórico ou não está disponível.",
"Obsolete": "Obsoleto",
"MakeDocumentObsolete": "Marcar como obsoleto",
"MakeDocumentObsoleteConfirm": "Tem certeza de que deseja marcar os seguintes documentos como obsoletos: {titles}?",
"ModificationDate": "Modificado em",
"Modified": "Modificado",
"Owner": "Responsável",
"AssignedTo": "Atribuído a",
"Unassigned": "Não atribuído",
"Title": "Título",
"CreateFolder": "Criar nova pasta",
"RenameFolder": "Renomear pasta",
"CreateChildFolder": "Criar subpasta",
"AllDocumentSpaces": "Todos os espaços de documentos"
},
"controlledDocStates": {
"Empty": "",
"Approved": "Aprovado",
"InApproval": "Em aprovação",
"InReview": "Em revisão",
"Reviewed": "Revisado",
"Rejected": "Rejeitado",
"ToReview": "A revisar"
}
}
@@ -0,0 +1,10 @@
{
"string": {
"Downloads": "Descargas",
"Completed": "Completado",
"Cancelled": "Cancelado",
"Interrupted": "Interrumpido",
"Paused": "Pausado",
"Progressing": "Progresando"
}
}
@@ -0,0 +1,11 @@
{
"string": {
"ShowNotifications": "Mostrar notificações",
"PlaySound": "Reproduzir som",
"BounceAppIcon": "Fazer o ícone da aplicação saltar (apenas Mac)",
"ShowBadge": "Mostrar um distintivo no ícone da aplicação",
"SoundAndAppearance": "Som e aparência",
"HaveGotANotification": "Recebeu uma notificação",
"TotalNotificationsCount": "Tem {count, plural, =1 {# notificação} other {# notificações}} no total"
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"string": {
"ViewMode": "Modo de visualização",
"Unified": "Unificado",
"Split": "Dividido",
"Viewed": "Visualizado",
"ShowDiff": "Mostrar diferença",
"NoChanges": "A diferença do ficheiro não tem alterações",
"LargeDiffsAreHidden": "As diferenças grandes não são renderizadas por padrão.",
"FileIsTooLarge": "O ficheiro é demasiado grande para ser exibido.",
"FileWasRenamed": "O ficheiro foi renomeado sem alterações.",
"FileWasDeleted": "O ficheiro foi eliminado."
}
}
+57
View File
@@ -0,0 +1,57 @@
{
"string": {
"Document": "Documento",
"ParentDocument": "Documento superior",
"ChildDocument": "Documento inferior",
"CreateDocument": "Criar um documento",
"Documents": "Documentos",
"CreateAnVersion": "Criar uma nova versão",
"DocumentNamePlaceholder": "Sin título",
"Name": "Nome",
"Cancel": "Cancelar",
"Version": "Versão",
"SearchDocument": "Pesquisar documento...",
"Snapshot": "Instantâneo",
"NoVersions": "Não há versões definidas",
"DocumentApplication": "Documentos",
"MyDocuments": "Meus documentos",
"Teamspace": "Espaço de trabalho",
"Teamspaces": "Espaços de trabalho",
"Labels": "Etiquetas",
"AddLabel": "Adicionar etiqueta",
"Authors": "Autores",
"Backlinks": "Links de retorno",
"History": "Histórico",
"DescriptionPlaceholder": "digite detalhes...",
"CreateTeamspace": "Criar espaço de trabalho",
"EditTeamspace": "Editar espaço de trabalho",
"NewTeamspace": "Novo espaço de trabalho",
"TeamspaceTitle": "Título do espaço de trabalho",
"TeamspaceTitlePlaceholder": "Novo espaço de trabalho",
"TeamspaceDescriptionPlaceholder": "Adicionar descrição ...",
"ChooseIcon": "Escolher ícone",
"TeamspaceMembers": "Membros",
"NoParentDocument": "Sem documento pai",
"NoBacklinks": "Sem links de retorno",
"NoHistory": "Sem histórico anterior",
"Untitled": "Sin título",
"Description": "Descrição",
"CopyDocumentUrl": "Copiar URL do documento para a área de transferência",
"DocumentUrlCopied": "Copiado!",
"ViewMode": "Visualização",
"EditMode": "Edição",
"SuggestMode": "Sugestão",
"CompareTo": "Comparar com...",
"Star": "Destacar",
"Unstar": "Remover destaque",
"Lock": "Bloquear",
"Unlock": "Desbloquear",
"Locked": "Bloqueado",
"ConfigLabel": "Documentos",
"ConfigDescription": "Extensão para edição colaborativa de documentos",
"Icon": "Ícone",
"Color": "Cor",
"ForbidCreateTeamspacePermission": "Proibir criação de espaço de trabalho",
"ForbidCreateTeamspacePermissionDescription": "Proíbe os utilizadores de criar novos espaços de trabalho"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "Obnovit",
"Root": "/",
"ForbidCreateDrivePermission": "Zakázat vytvoření disku",
"ForbidCreateDrivePermissionDescription": "Zakazuje uživatelům vytvářet nové disky"
"ForbidCreateDrivePermissionDescription": "Zakazuje uživatelům vytvářet nové disky",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "Wiederherstellen",
"Root": "/",
"ForbidCreateDrivePermission": "Laufwerkserstellung verbieten",
"ForbidCreateDrivePermissionDescription": "Verbietet Benutzern die Erstellung neuer Laufwerke"
"ForbidCreateDrivePermissionDescription": "Verbietet Benutzern die Erstellung neuer Laufwerke",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "Restore",
"Root": "/",
"ForbidCreateDrivePermission": "Forbid create drive",
"ForbidCreateDrivePermissionDescription": "Forbid users creating new drives"
"ForbidCreateDrivePermissionDescription": "Forbid users creating new drives",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "Restaurar",
"Root": "/",
"ForbidCreateDrivePermission": "Prohibir crear unidad",
"ForbidCreateDrivePermissionDescription": "Prohíbe a los usuarios crear nuevas unidades"
"ForbidCreateDrivePermissionDescription": "Prohíbe a los usuarios crear nuevas unidades",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "Restaurer",
"Root": "/",
"ForbidCreateDrivePermission": "Interdire la création de disque",
"ForbidCreateDrivePermissionDescription": "Interdit aux utilisateurs de créer de nouveaux disques"
"ForbidCreateDrivePermissionDescription": "Interdit aux utilisateurs de créer de nouveaux disques",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "Ripristina",
"Root": "/",
"ForbidCreateDrivePermission": "Vieta creazione drive",
"ForbidCreateDrivePermissionDescription": "Vieta agli utenti di creare nuovi drive"
"ForbidCreateDrivePermissionDescription": "Vieta agli utenti di creare nuovi drive",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "復元",
"Root": "/",
"ForbidCreateDrivePermission": "ドライブの作成禁止",
"ForbidCreateDrivePermissionDescription": "ユーザーが新しいドライブを作成することを禁止します"
"ForbidCreateDrivePermissionDescription": "ユーザーが新しいドライブを作成することを禁止します",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+33
View File
@@ -0,0 +1,33 @@
{
"string": {
"Drive": "Unidade",
"Drives": "Unidades",
"Grid": "Grade",
"File": "Ficheiro",
"Files": "Ficheiros",
"FileVersion": "Versão do ficheiro",
"FileVersions": "Versões de ficheiro",
"Folder": "Pasta",
"Folders": "Pastas",
"Resource": "Recurso",
"Name": "Nome",
"Description": "Descrição",
"Parent": "Pai",
"Path": "Caminho",
"Version": "Versão",
"Size": "Tamanho",
"ContentType": "Tipo de conteúdo",
"LastModified": "Última modificação",
"Download": "Descarregar",
"Upload": "Carregar",
"CreateDrive": "Criar unidade",
"CreateFolder": "Criar pasta",
"UploadFile": "Carregar ficheiros",
"EditDrive": "Editar unidade",
"Rename": "Renomear",
"Restore": "Restaurar",
"Root": "/",
"ForbidCreateDrivePermission": "Proibir criação de unidade",
"ForbidCreateDrivePermissionDescription": "Proíbe os utilizadores de criar novas unidades"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "Restaurar",
"Root": "/",
"ForbidCreateDrivePermission": "Proibir criação de unidade",
"ForbidCreateDrivePermissionDescription": "Proíbe os utilizadores de criar novas unidades"
"ForbidCreateDrivePermissionDescription": "Proíbe os utilizadores de criar novas unidades",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "Восстановить",
"Root": "/",
"ForbidCreateDrivePermission": "Запретить создание диска",
"ForbidCreateDrivePermissionDescription": "Запрещает пользователям создавать новые диски"
"ForbidCreateDrivePermissionDescription": "Запрещает пользователям создавать новые диски",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -26,6 +26,18 @@
"EditDrive": "Sürücüyü Düzenle",
"Rename": "Yeniden adlandır",
"Restore": "Geri yükle",
"Root": "/"
"Root": "/",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
+13 -1
View File
@@ -28,6 +28,18 @@
"Restore": "恢复",
"Root": "/",
"ForbidCreateDrivePermission": "禁止创建磁盘",
"ForbidCreateDrivePermissionDescription": "禁止用户创建新磁盘"
"ForbidCreateDrivePermissionDescription": "禁止用户创建新磁盘",
"CreateFilePermission": "Create File",
"CreateFilePermissionDescription": "Grants users ability to create files",
"UpdateFilePermission": "Update File",
"UpdateFilePermissionDescription": "Grants users ability to update files",
"RemoveFilePermission": "Remove File",
"RemoveFilePermissionDescription": "Grants users ability to remove files",
"CreateFolderPermission": "Create Folder",
"CreateFolderPermissionDescription": "Grants users ability to create folders",
"UpdateFolderPermission": "Update Folder",
"UpdateFolderPermissionDescription": "Grants users ability to update folders",
"RemoveFolderPermission": "Remove Folder",
"RemoveFolderPermissionDescription": "Grants users ability to remove folders"
}
}
@@ -18,7 +18,6 @@
import { AccountArrayEditor, employeeRefByAccountUuidStore } from '@hcengineering/contact-resources'
import core, {
Data,
DocumentUpdate,
RolesAssignment,
Ref,
Role,
@@ -48,6 +47,8 @@
let description: string = drive?.description ?? ''
let isPrivate: boolean = drive?.private ?? false
let autoJoin = drive?.autoJoin ?? false
let restricted: boolean = drive?.restricted ?? false
let members: AccountUuid[] =
drive?.members !== undefined ? hierarchy.clone(drive.members) : [getCurrentAccount().uuid]
let owners: AccountUuid[] = drive?.owners !== undefined ? hierarchy.clone(drive.owners) : [getCurrentAccount().uuid]
@@ -102,7 +103,9 @@
private: isPrivate,
members,
owners,
archived: false
autoJoin,
archived: false,
restricted
}
}
@@ -111,41 +114,8 @@
return
}
const data = getDriveData()
const update: DocumentUpdate<Drive> = {}
if (data.name !== drive?.name) {
update.name = data.name
}
if (data.description !== drive?.description) {
update.description = data.description
}
if (data.private !== drive?.private) {
update.private = data.private
}
if (data.members.length !== drive?.members.length) {
update.members = data.members
} else {
for (const member of data.members) {
if (drive.members.findIndex((p) => p === member) === -1) {
update.members = data.members
break
}
}
}
if (data.owners?.length !== drive?.owners?.length) {
update.owners = data.owners
} else {
for (const owner of data.owners ?? []) {
if (drive.owners?.findIndex((p) => p === owner) === -1) {
update.owners = data.owners
break
}
}
}
if (Object.keys(update).length > 0) {
await client.update(drive, update)
}
const update = getDriveData()
await client.diffUpdate(drive, update)
if (!deepEqual(rolesAssignment, getRolesAssignment())) {
await client.updateMixin(
@@ -307,6 +277,22 @@
/>
</div>
<div class="antiGrid-row">
<div class="antiGrid-row__header withDesciption">
<Label label={core.string.AutoJoin} />
<span><Label label={core.string.AutoJoinDescr} /></span>
</div>
<Toggle id={'space-autoJoin'} bind:on={autoJoin} />
</div>
<div class="antiGrid-row">
<div class="antiGrid-row__header withDesciption">
<Label label={core.string.RBAC} />
<span><Label label={core.string.RBACDescr} /></span>
</div>
<Toggle id={'space-restricted'} bind:on={restricted} />
</div>
{#each roles as role}
<div class="antiGrid-row">
<div class="antiGrid-row__header">
@@ -14,6 +14,7 @@
-->
<script lang="ts">
import { AccountRole, Ref, getCurrentAccount } from '@hcengineering/core'
import { checkMyPermission, permissionsStore } from '@hcengineering/contact-resources'
import { type Drive } from '@hcengineering/drive'
import { getResource } from '@hcengineering/platform'
import { createQuery, getClient } from '@hcengineering/presentation'
@@ -23,6 +24,7 @@
import { getFolderIdFromFragment } from '../navigation'
import { showCreateDrivePopup, showCreateFolderPopup, getUploadOptionsByFragment } from '../utils'
import { onMount } from 'svelte'
import { canCreateObject } from '@hcengineering/view-resources'
export let currentSpace: Ref<Drive> | undefined
export let currentFragment: string | undefined
@@ -44,6 +46,8 @@
]
let uploadActions: HeaderButtonAction[] = []
let filteredUploadActions: HeaderButtonAction[] = []
let filteredBasicActions: HeaderButtonAction[] = []
let allActions: HeaderButtonAction[] = []
const myAcc = getCurrentAccount()
@@ -84,6 +88,12 @@
)
$: parent = getFolderIdFromFragment(currentFragment ?? '') ?? drive.ids.Root
$: canCreateFolder =
currentSpace !== undefined && canCreateObject(drive.class.Folder, currentSpace, $permissionsStore)
$: canUpload = currentSpace !== undefined && canCreateObject(drive.class.File, currentSpace, $permissionsStore)
$: filteredBasicActions = [basicActions[0], ...(canCreateFolder ? [basicActions[1]] : [])]
$: filteredUploadActions = canUpload ? uploadActions : []
function handleCreateDrive (): void {
void showCreateDrivePopup()
@@ -94,7 +104,11 @@
}
let visibleActions: (string | number | null)[] = []
function updateActions (hasSpace: boolean, uploadActions: HeaderButtonAction[]): void {
function updateActions (
hasSpace: boolean,
uploadActions: HeaderButtonAction[],
basicActions: HeaderButtonAction[]
): void {
allActions = [...basicActions, ...uploadActions]
if (hasSpace) {
visibleActions = allActions.map((a) => a.id)
@@ -103,7 +117,13 @@
}
}
$: updateActions(hasDrive, uploadActions)
$: updateActions(hasDrive, filteredUploadActions, filteredBasicActions)
</script>
<HeaderButton loading={false} {client} mainActionId={uploadActions[0]?.id} {visibleActions} actions={allActions} />
<HeaderButton
loading={false}
{client}
mainActionId={filteredUploadActions[0]?.id}
{visibleActions}
actions={allActions}
/>
@@ -13,19 +13,14 @@
// limitations under the License.
-->
<script lang="ts">
import { type Drive, type Folder } from '@hcengineering/drive'
import { type Folder } from '@hcengineering/drive'
import { type Ref } from '@hcengineering/core'
import FolderBrowser from './FolderBrowser.svelte'
export let object: Folder
export let readonly: boolean = false
function getSpace (object: Folder): Ref<Drive> {
return object.space as Ref<Drive>
}
</script>
{#if object}
<FolderBrowser space={getSpace(object)} parent={object._id} {readonly} type={'folder'} />
<FolderBrowser space={object.space} parent={object._id} {readonly} type={'folder'} />
{/if}
@@ -14,13 +14,14 @@
-->
<script lang="ts">
import { type Ref, type WithLookup } from '@hcengineering/core'
import { checkMyPermission, permissionsStore } from '@hcengineering/contact-resources'
import { createFileVersion, type File as DriveFile, type FileVersion } from '@hcengineering/drive'
import { Panel } from '@hcengineering/panel'
import { createQuery, getClient, getFileUrl } from '@hcengineering/presentation'
import { Button, IconMoreH } from '@hcengineering/ui'
import { FileUploadCallbackParams, showFilesUploadPopup } from '@hcengineering/uploader'
import view from '@hcengineering/view'
import { showMenu } from '@hcengineering/view-resources'
import { canChangeDoc, showMenu } from '@hcengineering/view-resources'
import EditFile from './EditFile.svelte'
import FileAside from './FileAside.svelte'
@@ -58,6 +59,7 @@
}
}
)
$: canUploadVersion = object !== undefined && canChangeDoc(drive.class.File, object.space, $permissionsStore)
function handleDownloadFile (): void {
if (object != null && download != null) {
@@ -66,7 +68,7 @@
}
function handleUploadFile (): void {
if (object != null) {
if (object != null && canUploadVersion) {
const target = { objectId: object._id, objectClass: object._class }
void showFilesUploadPopup(
{
@@ -123,13 +125,15 @@
on:click={handleDownloadFile}
/>
</a>
<Button
icon={IconUpload}
iconProps={{ size: 'medium' }}
kind={'icon'}
showTooltip={{ label: drive.string.Upload }}
on:click={handleUploadFile}
/>
{#if canUploadVersion}
<Button
icon={IconUpload}
iconProps={{ size: 'medium' }}
kind={'icon'}
showTooltip={{ label: drive.string.Upload }}
on:click={handleUploadFile}
/>
{/if}
<Button
icon={IconMoreH}
iconProps={{ size: 'medium' }}
@@ -13,7 +13,8 @@
// limitations under the License.
-->
<script lang="ts">
import { type Doc, type DocumentQuery, type Space, type Ref, type WithLookup } from '@hcengineering/core'
import { type Doc, type DocumentQuery, type Ref, type WithLookup } from '@hcengineering/core'
import { permissionsStore } from '@hcengineering/contact-resources'
import drive, { type Drive, type Folder } from '@hcengineering/drive'
import { Scroller, SearchInput, Panel, Button, IconMoreH } from '@hcengineering/ui'
import view, { Viewlet, ViewOptions } from '@hcengineering/view'
@@ -24,7 +25,8 @@
ViewletSelector,
ViewletSettingButton,
DocAttributeBar,
showMenu
showMenu,
canCreateObject
} from '@hcengineering/view-resources'
import DrivePresenter from './DrivePresenter.svelte'
@@ -42,6 +44,7 @@
$: object = type === 'drive' ? (object as Drive) : (object as Folder)
$: query = { space, parent }
$: canUpload = canCreateObject(drive.class.File, space, $permissionsStore)
let viewlet: WithLookup<Viewlet> | undefined = undefined
let viewOptions: ViewOptions | undefined
@@ -101,7 +104,7 @@
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div class="popupPanel-body" on:contextmenu>
{#if viewlet}
<FileDropArea {space} {parent} canDrop={() => !readonly}>
<FileDropArea {space} {parent} canDrop={() => !readonly && canUpload}>
<Scroller horizontal={true}>
<ViewletContentView {_class} {viewlet} query={resultQuery} {space} {viewOptions} />
</Scroller>
@@ -29,7 +29,7 @@
const dispatch = createEventDispatcher()
let space: Ref<Drive> = value.space as Ref<Drive>
let space: Ref<Drive> = value.space
let parent: Ref<Folder> = value.parent as Ref<Folder>
async function save (): Promise<void> {
+87 -4
View File
@@ -13,11 +13,14 @@
// limitations under the License.
//
import { permissionsStore } from '@hcengineering/contact-resources'
import type { Class, Client, Doc, DocumentQuery, Ref, RelatedDocument, WithLookup } from '@hcengineering/core'
import drive, { type Drive, type File, type FileVersion, type Folder } from '@hcengineering/drive'
import { type Resources } from '@hcengineering/platform'
import { type ObjectSearchResult, getFileUrl } from '@hcengineering/presentation'
import { showPopup, type Location } from '@hcengineering/ui'
import { canChangeDoc, canCreateObject, canDeleteObject, canRemoveDoc } from '@hcengineering/view-resources'
import { get } from 'svelte/store'
import CreateDrive from './components/CreateDrive.svelte'
import DrivePanel from './components/DrivePanel.svelte'
@@ -153,22 +156,96 @@ async function RestoreFileVersion (doc: FileVersion | FileVersion[]): Promise<vo
}
export async function CanRenameFile (doc: File | File[] | undefined): Promise<boolean> {
return doc !== undefined && !Array.isArray(doc)
if (doc === undefined || Array.isArray(doc)) {
return false
}
return canChangeDoc(drive.class.File, doc.space, get(permissionsStore))
}
export async function CanRenameFolder (doc: Folder | Folder[] | undefined): Promise<boolean> {
return doc !== undefined && !Array.isArray(doc)
if (doc === undefined || Array.isArray(doc)) {
return false
}
return canChangeDoc(drive.class.Folder, doc.space, get(permissionsStore))
}
export async function CanUpdateFileVersion (doc: FileVersion | FileVersion[] | undefined): Promise<boolean> {
if (doc === undefined || Array.isArray(doc)) {
return false
}
return canChangeDoc(drive.class.File, doc.space, get(permissionsStore))
}
export async function CanDeleteFileVersion (
doc: WithLookup<FileVersion> | Array<WithLookup<FileVersion>> | undefined
): Promise<boolean> {
if (doc === undefined) {
if (doc === undefined || Array.isArray(doc)) {
return false
}
const docs = Array.isArray(doc) ? doc : [doc]
return docs.every((p) => p.$lookup?.attachedTo !== undefined && p.$lookup?.attachedTo.file !== p._id)
const canDeleteByVersion = docs.every(
(p) => p.$lookup?.attachedTo !== undefined && p.$lookup?.attachedTo.file !== p._id
)
if (!canDeleteByVersion) {
return false
}
const permissions = get(permissionsStore)
return docs.every((p) => canChangeDoc(drive.class.File, doc.space, permissions))
}
export async function CanCreateFolder (doc: Drive | Folder | Array<Drive | Folder> | undefined): Promise<boolean> {
if (doc === undefined || Array.isArray(doc)) {
return false
}
const space = ((doc as Drive).space ?? doc._id) as Ref<Drive>
return canCreateObject(drive.class.Folder, space, get(permissionsStore))
}
export async function CanUpdateFile (doc: File | File[] | undefined): Promise<boolean> {
if (doc === undefined || Array.isArray(doc)) {
return false
}
return canChangeDoc(drive.class.File, doc.space, get(permissionsStore))
}
export async function CanUpdateFolder (doc: Folder | Folder[] | undefined): Promise<boolean> {
if (doc === undefined || Array.isArray(doc)) {
return false
}
return canChangeDoc(drive.class.Folder, doc.space, get(permissionsStore))
}
export async function CanDeleteFile (doc: File | File[] | undefined): Promise<boolean> {
if (doc === undefined) return false
doc = Array.isArray(doc) ? doc : [doc]
const permissions = get(permissionsStore)
const results = await Promise.all(
doc.map(async (p) => {
return permissions.restrictedSpaces.has(p.space)
? canRemoveDoc(drive.class.File, p.space, permissions)
: await canDeleteObject(doc)
})
)
return results.every(Boolean)
}
export async function CanDeleteFolder (doc: Folder | Folder[] | undefined): Promise<boolean> {
if (doc === undefined) return false
doc = Array.isArray(doc) ? doc : [doc]
const permissions = get(permissionsStore)
const results = await Promise.all(
doc.map(async (p) => {
return permissions.restrictedSpaces.has(p.space)
? canRemoveDoc(drive.class.Folder, p.space, permissions)
: await canDeleteObject(doc)
})
)
return results.every(Boolean)
}
export async function FileTitleProvider (client: Client, ref: Ref<File>, doc?: File): Promise<string> {
@@ -222,8 +299,14 @@ export default async (): Promise<Resources> => ({
DriveLinkProvider,
FileLinkProvider,
FolderLinkProvider,
CanCreateFolder,
CanUpdateFile,
CanUpdateFolder,
CanDeleteFile,
CanDeleteFolder,
CanRenameFile,
CanRenameFolder,
CanUpdateFileVersion,
CanDeleteFileVersion,
FileTitleProvider,
FolderTitleProvider
+1 -1
View File
@@ -161,7 +161,7 @@ export async function resolveParents (object: Resource): Promise<Doc[]> {
}
}
const root = await client.findOne(drive.class.Drive, { _id: object.space as Ref<Drive> })
const root = await client.findOne(drive.class.Drive, { _id: object.space })
if (root !== undefined) {
parents.push(root)
}
+20 -2
View File
@@ -66,7 +66,19 @@ export const drivePlugin = plugin(driveId, {
Folder: '' as IntlString,
Resource: '' as IntlString,
ForbidCreateDrivePermission: '' as IntlString,
ForbidCreateDrivePermissionDescription: '' as IntlString
ForbidCreateDrivePermissionDescription: '' as IntlString,
CreateFilePermission: '' as IntlString,
CreateFilePermissionDescription: '' as IntlString,
UpdateFilePermission: '' as IntlString,
UpdateFilePermissionDescription: '' as IntlString,
RemoveFilePermission: '' as IntlString,
RemoveFilePermissionDescription: '' as IntlString,
CreateFolderPermission: '' as IntlString,
CreateFolderPermissionDescription: '' as IntlString,
UpdateFolderPermission: '' as IntlString,
UpdateFolderPermissionDescription: '' as IntlString,
RemoveFolderPermission: '' as IntlString,
RemoveFolderPermissionDescription: '' as IntlString
},
descriptor: {
DriveType: '' as Ref<SpaceTypeDescriptor>
@@ -75,7 +87,13 @@ export const drivePlugin = plugin(driveId, {
DefaultDrive: '' as Ref<SpaceType>
},
permission: {
ForbidCreateDrive: '' as Ref<Permission>
ForbidCreateDrive: '' as Ref<Permission>,
CreateFile: '' as Ref<Permission>,
UpdateFile: '' as Ref<Permission>,
RemoveFile: '' as Ref<Permission>,
CreateFolder: '' as Ref<Permission>,
UpdateFolder: '' as Ref<Permission>,
RemoveFolder: '' as Ref<Permission>
}
})
+1 -1
View File
@@ -26,7 +26,7 @@ export function TypeFileVersion (): Type<number> {
export interface Drive extends TypedSpace {}
/** @public */
export interface Resource extends Doc {
export interface Resource extends Doc<Drive> {
title: string
parent: Ref<Resource>
path: Ref<Resource>[]
+41
View File
@@ -0,0 +1,41 @@
{
"string": {
"SmileysAndPeople": "Carinhas & Pessoas",
"Components": "Componentes",
"AnimalsAndNature": "Animais & Natureza",
"FoodAndDrink": "Alimentos & Bebidas",
"TravelAndPlaces": "Viagens e Locais",
"Activities": "Actividades",
"Objects": "Objetos",
"Symbols": "Símbolos",
"Flags": "Bandeiras",
"FrequentlyUsed": "Frequentemente utilizado",
"GettingWorkDone": "A fazer",
"DefaultSkinTone": "Tom de pele padrão",
"NoTone": "Sem tom",
"Light": "Claro",
"MediumLight": "Médio Claro",
"Medium": "Médio",
"MediumDark": "Médio Escuro",
"Dark": "Escuro",
"Remove": "Remover",
"SearchDots": "Pesquisar...",
"SearchResults": "Resultados da pesquisa",
"CustomEmojis": "Emojis personalizados",
"Shortcode": "Nome",
"ShortcodeDescription": "Pode conter letras, números e os símbolos '-', '+' e '_'.",
"Image": "Imagem",
"ImageDescription": "Especifique um arquivo .gif, .png ou .jpg para seu emoji.",
"UploadImage": "Carregar",
"Preview": "Pré-visualização",
"PreviewTextBegin": "Esta é uma frase com ",
"PreviewTextEnd": " dentro.",
"CreateTitle": "Criar emoji personalizado",
"Create": "Criar",
"ImageAspectError": "A imagem deve ter proporção 1:1.",
"ShortcodeMatchError": "Pode conter letras, números e os símbolos '-', '+' e '_'.",
"ShortcodeExistsError": "Este nome já está em uso. Escolha outro nome.",
"NewCustomEmojiDialogClose": "Fechar diálogo?",
"NewCustomEmojiDialogCloseNote": "Todas as alterações serão perdidas"
}
}
+58
View File
@@ -0,0 +1,58 @@
{
"string": {
"WorkspaceNamePattern": "O nome deve ter 40 caracteres ou menos, não está vazio e não pode conter caracteres especiais (<, >, /)",
"Export": "Exportar",
"DataToExport": "Dados para exportar",
"ExportDocuments": "Documentos",
"ExportMilestones": "Marco",
"ExportIssues": "Problemas",
"ExportTestCases": "Casos de teste",
"ExportTestRuns": "Execuções de teste",
"ExportTestPlans": "Planos de teste",
"ExportFormat": "Formato de exportação",
"ExportJSON": "JSON",
"ExportCSV": "CSV",
"ExportUnifiedFormat": "Formato Unificado Huly",
"ExportIncludeContent": "Incluir conteúdo",
"ExportEverything": "Tudo",
"ExportAttributesOnly": "Apenas atributos",
"ExportRequestSuccess": "Exportação iniciada.",
"ExportRequestSuccessMessage": "Exportação iniciada. Você receberá uma notificação em sua caixa de entrada quando for concluída.",
"ExportRequestFailed": "Falha ao enviar exportação.",
"ExportRequestFailedMessage": "Ocorreu um erro ao enviar a exportação. Por favor, tente novamente mais tarde.",
"ExportCompleted": "Exportação concluída. Seus arquivos estão prontos. Você pode baixá-los do drive.",
"ExportFailed": "Falha ao exportar dados. Por favor, tente novamente mais tarde.",
"ExportToWorkspace": "Exportar para outro espaço de trabalho",
"TargetWorkspace": "Espaço de destino",
"ExportSource": "Fonte de exportação",
"ExportSelected": "Itens selecionados",
"ExportAll": "Todos os itens",
"ExportStarted": "Exportação iniciada",
"ExportStartedMessage": "Exportação iniciada. Você receberá uma notificação quando for concluída.",
"ExportToWorkspaceCompleted": "Exportação concluída",
"ExportToWorkspaceCompletedMessage": "Exportação concluída com sucesso.",
"ImportToWorkspaceNotificationMessage": "{count} documentos importados para o seu espaço de trabalho",
"ImportCompleted": "Documentos importados para o espaço de trabalho",
"SourceWorkspace": "Espaço de trabalho de origem",
"ExportedCount": "Quantidade exportada",
"ExportedDocumentIds": "IDs dos documentos exportados",
"DocumentsImportedFromWorkspace": "{count, plural, one {1 documento foi importado do espaço de trabalho {workspace}} other {# documentos foram importados do espaço de trabalho {workspace}}}:",
"ExportedDocumentClass": "Classe dos documentos exportados",
"Import": "Importar",
"ImportedDocuments": "Novos documentos",
"ExportToWorkspaceFailed": "Exportação falhou",
"SelectWorkspace": "Selecionar espaço de trabalho",
"SelectWorkspaceToExport": "Selecionar espaço de trabalho para exportar {count, plural, =1 {1 documento} other {# documentos}}",
"SelectWorkspaceToExportSpace": "Selecionar espaço de trabalho para exportar documentos do espaço",
"SelectSpace": "Selecionar espaço",
"NoSelectedDocuments": "Nenhum documento selecionado",
"RequestPermissionToImport": "Por favor, solicite permissão ao proprietário do espaço de trabalho de destino para importar documentos.",
"SkipDeletedObsolete": "Pular documentos arquivados ou obsoletos",
"ExportOnlyEffective": "Exportar apenas documentos com status efetivo",
"ExportFilterMode": "Documentos a exportar",
"ExportFilterEffectiveOnly": "Apenas documentos efetivos",
"ExportFilterSkipArchivedObsolete": "Todos exceto arquivados e obsoletos",
"ExportFilterAll": "Todos os documentos",
"ExportResultRecordTitle": "Exportação de documentos do espaço de trabalho {workspace} ({date})"
}
}
@@ -0,0 +1,29 @@
{
"string": {
"GlobalProfile": "Perfil global",
"EditProfile": "Editar perfil",
"GeneralInformation": "Informações gerais",
"FirstName": "Nome",
"LastName": "Sobrenome",
"City": "Cidade",
"Country": "País",
"Bio": "Bio",
"FirstNamePlaceholder": "Digite o nome",
"LastNamePlaceholder": "Digite o sobrenome",
"CityPlaceholder": "Digite a cidade",
"CountryPlaceholder": "Digite o país",
"BioPlaceholder": "Conte-nos sobre você...",
"Save": "Salvar",
"Cancel": "Cancelar",
"MaximumLength": "Máximo {count} caracteres",
"Required": "Este campo é obrigatório",
"ProfileVisibility": "Visibilidade do perfil",
"PublicProfile": "Público",
"PrivateProfile": "Privado",
"PublicProfileDescription": "Seu perfil é visível para todos",
"PrivateProfileDescription": "Seu perfil é visível apenas para você",
"AddBioPlaceholder": "Adicione uma biografia para contar aos outros sobre você...",
"AddLocationPlaceholder": "Adicione sua localização...",
"ProfileNotAvailable": "Perfil não disponível"
}
}
+50
View File
@@ -0,0 +1,50 @@
{
"string": {
"MessageID": "ID da mensagem",
"IntegrationLabel": "Gmail",
"IntegrationDescription": "Usar integração do Gmail",
"SharedMessages": "emails partilhados",
"To": "Para:",
"From": "De:",
"Copy": "Cópia",
"MessagesSelected": "mensagens selecionadas",
"PublishSelected": "Publicar selecionados",
"CreateMessage": "Criar mensagem",
"ShareMessages": "Partilhar mensagens",
"Connect": "Conectar",
"RedirectGoogle": "Será redirecionado para a página de autenticação do Google",
"ConnectGmail": "Conectar conta do Gmail",
"Reply": "Responder",
"Subject": "Assunto",
"Send": "Enviar",
"Resend": "Reenviar",
"NewMessage": "Nova mensagem",
"NewMessageTo": "Nova mensagem para",
"Cancel": "Cancelar",
"SubjectPlaceholder": "Assunto da mensagem",
"CopyPlaceholder": "Cópia para",
"ReplyTo": "Responder a",
"Message": "Mensagem",
"Messages": "Mensagens",
"Incoming": "Recebido",
"Email": "Email",
"Status": "Estado",
"EmailPlaceholder": "joao.silva@gmail.com",
"WriteEmail": "Escrever Email",
"Shared": "Partilhado",
"AvailableTo": "Disponível para",
"HaveWrittenEmail": "escreveram um email",
"NewIncomingMessage": "Recebeu um novo email",
"ConfigLabel": "Email",
"ConfigDescription": "Extensão para a integração de email do Gmail",
"GooglePrivacy": "Hulys use and transfer of information received from Google APIs to any other app will adhere to <a href=\"https://developers.google.com/terms/api-services-user-data-policy#additional_requirements_for_specific_api_scopes\" target=\"_blank\">Google API Services User Data Policy</a>, including the Limited Use requirements.",
"EmailNotificationsDescription": "Receba notificações pessoais por e-mail.",
"FailedToConnect": "O serviço Gmail não está disponível",
"TotalMessages": "Total de mensagens:",
"Configure": "Configurar integração do Gmail",
"GmailSpace": "Espaço para mensagens do Gmail",
"PersonSpaceInfo": "O email estará disponível apenas para você",
"SharedSpaceInfo": "O email estará disponível para todos os participantes do espaço",
"ConfigurationRequired": "Por favor, configure sua integração de Gmail para começar a usá-la"
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"string": {
"CreatePublicLink": "Criar link público",
"PublicLink": "Link público",
"Revoke": "Revogar",
"RevokeConfirmation": "Isto fará com que o link compartilhado anteriormente pare de funcionar. Tem certeza de que deseja revogar este link público?",
"LinkWasRevoked": "Link público revogado",
"Copy": "Copiar"
}
}
+69
View File
@@ -0,0 +1,69 @@
{
"string": {
"Department": "Departamento",
"ParentDepartmentLabel": "Departamento Superior",
"Structure": "Estrutura",
"CreateDepartment": "Criar departamento",
"CreateDepartmentLabel": "Departamento",
"DepartmentPlaceholder": "Departamento",
"TeamLead": "Líder de equipa",
"UnAssignLead": "Retirar líder de equipa",
"MemberCount": "{count, plural, =0 {sem colaboradores} =1 {1 colaborador} other {# colaboradores}}",
"AssignLead": "Atribuir líder de equipa",
"TeamLeadTooltip": "{value}",
"HRApplication": "Recursos Humanos (beta)",
"MoveStaff": "Transferência de colaborador",
"MoveStaffDescr": "Pretende transferir o colaborador de {current} para {department}?",
"Departments": "Departamentos",
"Positions": "Cargos",
"ShowEmployees": "Mostrar colaboradores",
"AddEmployee": "Adicionar colaborador",
"SelectEmployee": "Selecionar colaborador",
"Schedule": "Calendário",
"RequestType": "Tipo",
"CreateRequest": "Criar {type}",
"Today": "Hoje",
"Summary": "Total",
"NoEmployeesInDepartment": "Não existem colaboradores no departamento selecionado",
"Vacation": "Férias",
"Sick": "Doença",
"PTO": "Ausência remunerada",
"PTOs": "PTOs",
"Remote": "Remoto",
"Overtime": "Horas extra",
"PTO2": "Ausência remunerada/2",
"Overtime2": "Horas extra/2",
"EditRequest": "Editar {type}",
"EditRequestType": "Editar tipo",
"ChooseNewType": "Escolher novo tipo:",
"UnchangeableType": "Este tipo não pode ser alterado",
"Request": "Pedido",
"ExistingRequests": "Já existem pedidos para as datas selecionadas",
"Staff": "Colaborador",
"Member": "Membro",
"Members": "Membros",
"NoMembers": "Nenhum membro adicionado",
"AddMember": "Adicionar membro",
"Subscribers": "Subscritores",
"PublicHoliday": "Feriado",
"Title": "Título",
"Description": "Descrição",
"PublicHolidays": "Public holidays",
"MarkAsPublicHoliday": "Marcar como feriado",
"EditPublicHoliday": "Editar feriado",
"Managers": "Gestores",
"Export": "Exportar",
"Separator": "Separador",
"ChooseSeparator": "Escolher separador",
"RequestCreated": "Pedido criado",
"RequestUpdated": "Pedido atualizado",
"RequestRemoved": "Pedido removido",
"ConfigLabel": "Recursos humanos",
"ConfigDescription": "Extensão para gestão da estrutura organizacional e calendário de trabalho dos colaboradors",
"WorkingDays": "Working days",
"ReportedDays": "Reported days",
"Tasks": "Tasks",
"TPD": "TPD",
"EXTRa": "EXTRa"
}
}
+20
View File
@@ -0,0 +1,20 @@
{
"string": {
"IntegrationLabel": "Huly Mail",
"IntegrationDescription": "Conecte sua caixa de correio Huly para enviar, receber e gerenciar e-mails",
"Connect": "Conectar",
"ConnectHulyMail": "Conectar caixa de correio Huly",
"Cancel": "Cancelar",
"Email": "E-mail",
"Status": "Status",
"FailedToConnect": "O serviço de e-mail Huly não está disponível",
"TotalMessages": "Total de mensagens:",
"Configure": "Configurar Huly Mail",
"ChannelSpace": "Espaço para canal de mensagens",
"PersonSpaceInfo": "O e-mail estará disponível apenas para você",
"SharedSpaceInfo": "O e-mail estará disponível para todos os participantes do espaço",
"Mailbox": "Caixa de correio",
"MailboxesNotConfigured": "Nenhuma caixa de correio encontrada",
"ConfigureMailBoxes": "Por favor, adicione uma caixa de correio na seção de Caixas de correio para começar"
}
}
+13
View File
@@ -0,0 +1,13 @@
{
"string": {
"Inbox": "Caixa de entrada",
"ReactedToYourMessage": "reacionou ao seu mensagem",
"ClearAll": "Limpar tudo",
"InboxIsClear": "Caixa de entrada está vazia",
"YouDontHaveAnyNewMessages": "Não tem nenhuma nova mensagem",
"ReadAll": "Ler tudo",
"Clearing": "Limpando...",
"Reading": "Lendo...",
"HideUserNames": "Esconder nomes de usuário"
}
}
+25
View File
@@ -0,0 +1,25 @@
{
"status": {
"CategoryRequired": "Categoria Obrigatória",
"NameRequired": "Nome Obrigatório"
},
"string": {
"Categories": "Categorias",
"Category": "Categoria",
"CategoryCreateLabel": "Categoria",
"CreateCategory": "Criar Categoria",
"CreateSubcategory": "Criar Sub-Categoria",
"Inventory": "Inventário",
"ProductCreateLabel": "Produto",
"CreateProduct": "Criar Produto",
"Products": "Produtos",
"Product": "Produto",
"Variant": "Variante",
"SKU": "SKU",
"Variants": "Variantes",
"NoVariantsForProduct": "Não existem variantes para este produto.",
"CreateVariant": "Criar Variante",
"ConfigLabel": "Inventário",
"ConfigDescription": "Extensão para gerir extensões"
}
}
+40
View File
@@ -0,0 +1,40 @@
{
"string": {
"CreateFunnel": "Criar Funil",
"CreateLead": "Criar Lead",
"Funnel": "Funil",
"FunnelName": "Nome do Funil",
"Funnels": "Funis",
"LeadApplication": "Leads (beta)",
"LeadCreateLabel": "Lead",
"SelectFunnel": "Selecionar Funil",
"LeadName": "Nome do Lead",
"More": "Mais...",
"Customer": "Cliente",
"Customers": "Clientes",
"Leads": "Leads",
"MyLeads": "As minhas leads",
"SelectCustomer": "Selecionar Cliente",
"Lead": "Lead",
"Assignee": "Atribuído a",
"Title": "Título",
"LeadPlaceholder": "O lead simples",
"ManageFunnelStatuses": "Gerir estados do Funil",
"GotoLeadApplication": "Mudar para a aplicação de Leads",
"IssueDescriptionPlaceholder": "Adicionar descrição...",
"CreateCustomer": "Criar Cliente",
"CreateCustomerLabel": "Novo Cliente",
"NoLeadsForDocument": "Sem leads para o documento",
"Description": "Cliente Descrição",
"FullDescription": "Descrição completa",
"FunnelPlaceholder": "O Funil simples",
"Members": "Membros",
"UnAssign": "Desatribuir",
"ConfigLabel": "CRM",
"ConfigDescription": "Extensão para gestão de relacionamento com o Cliente",
"EditFunnel": "Editar Funil",
"FunnelMembers": "Membros",
"ForbidCreateFunnelPermission": "Proibir criação de funil",
"ForbidCreateFunnelPermissionDescription": "Proíbe os utilizadores de criar novos funis"
}
}
+88
View File
@@ -0,0 +1,88 @@
{
"status": {
"RequiredField": "Campo obrigatório {field}",
"FieldsDoNotMatch": "{field} não coincidem com {field2}",
"ConnectingToServer": "A ligar ao servidor....",
"IncorrectValue": "Valor incorreto {field}"
},
"string": {
"ChangePassword": "Mudar senha",
"CurrentPassword": "Senha atual",
"NewPassword": "Nova senha",
"EnterCurrentPassword": "Digite a senha atual",
"EnterNewPassword": "Digite a nova senha",
"RepeatNewPassword": "Repita a nova senha",
"PasswordExpiredDesc": "A sua senha expirou. Por favor, defina uma nova senha para continuar.",
"LogIn": "Iniciar Sessão",
"SignUp": "Registar",
"CreateWorkspace": "Criar espaço de trabalho",
"HaveWorkspace": "Já tem um espaço de trabalho?",
"LastName": "Apelido",
"FirstName": "Nome",
"Join": "Participar",
"Email": "Email",
"Password": "Palavra-Passe",
"Workspace": "Nome do espaço de trabalho",
"DoNotHaveAnAccount": "Não tem uma conta?",
"PasswordRepeat": "Repetir palavra-passe",
"HaveAccount": "Já tem uma conta?",
"LoadingAccount": "Carregando...",
"SelectWorkspace": "Selecionar espaço de trabalho",
"Copy": "Copiar",
"Copied": "Copiado",
"Close": "Fechar",
"InviteDescription": "Partilhe este link para convidar outros utilizadores",
"WantAnotherWorkspace": "Quer criar outro espaço de trabalho?",
"ChangeAccount": "Alterar conta",
"NotSeeingWorkspace": "Não vê o seu espaço de trabalho?",
"ForgotPassword": "Esqueceu-se da palavra-passe?",
"KnowPassword": "Sabe a sua palavra-passe?",
"Recover": "Recuperar",
"PasswordRecovery": "Recuperação da palavra-passe",
"RecoveryLinkSent": "Link de recuperação de palavra-passe enviado para o email",
"UseWorkspaceInviteSettings": "Utilizar definições de convite para o espaço de trabalho",
"LinkValidHours": "Link válido (horas):",
"EmailMask": "Máscara de email:",
"InviteLimit": "Limite de convites:",
"GetLink": "Obter link de convite",
"NoLimit": "Sem limite",
"AlreadyJoined": "Já participou?",
"ConfirmationSent": "Foi enviada uma mensagem para o seu email contendo um link para confirmar o seu endereço.",
"ConfirmationSent2": "Por favor, siga o link para concluir o seu registo.",
"ContinueWith": "Continuar com {provider}",
"HaventReceivedCode": "Não recebeu o código?",
"ResendCode": "Reenviar código",
"WrongEmail": "Email errado?",
"ChangeEmail": "Alterar email",
"SentTo": "Enviamos um código para ",
"CanFindCode": "Não encontra o seu código? Verifique a sua pasta de spam.",
"LoginWithPassword": "Iniciar sessão com palavra-passe",
"LoginWithCode": "Iniciar sessão com código",
"SignUpWithPassword": "Registar com palavra-passe",
"SignUpWithCode": "Registar com código",
"FillInProfile": "Preencha o seu perfil",
"SetUpPassword": "Definir a sua palavra-passe",
"Next": "Seguinte",
"Skip": "Saltar",
"SignUpCompleted": "Registo concluído",
"StartUsingHuly": "Começar a usar Huly",
"PasswordMinLength": "{count, plural, =1 {A senha deve ter pelo menos # caractere} other {A senha deve ter pelo menos # caracteres}}",
"PasswordMinSpecialChars": "{count, plural, =1 {A senha deve conter pelo menos # caractere especial} other {A senha deve conter pelo menos # caracteres especiais}}",
"PasswordMinDigits": "{count, plural, =1 {A senha deve conter pelo menos # número} other {A senha deve conter pelo menos # números}}",
"PasswordMinUpperChars": "{count, plural, =1 {A senha deve conter pelo menos # letra maiúscula} other {A senha deve conter pelo menos # letras maiúsculas}}",
"PasswordMinLowerChars": "{count, plural, =1 {A senha deve conter pelo menos # letra minúscula} other {A senha deve conter pelo menos # letras minúsculas}}",
"WorkspaceArchivedDesc": "O espaço de trabalho está arquivado por estar inativo.",
"RestoreArchivedWorkspace": "Restaurar",
"Hello": "Olá {name},",
"ProcessingInvite": "Processando convite, aguarde...",
"SignToProceed": "Por favor, inicie sessão para continuar",
"Proceed": "Continuar",
"SetPasswordLater": "Vou definir uma senha mais tarde",
"SetPasswordNow": "Vou definir uma senha agora",
"LoginAsGuest": "Continuar como convidado",
"SignUpToCreateWorkspace": "Não há espaços de trabalho com acesso de convidado. Por favor, cadastre-se para criar o seu.",
"WhatIsYourName": "Qual é o seu nome?",
"AccessExpired": "O tempo de acesso expirou. Por favor, solicite um novo link de acesso.",
"AccessNotActive": "O tempo de acesso ainda não começou. Começa em: "
}
}
-3
View File
@@ -34,9 +34,6 @@ export default mergeIds(loginId, login, {
HaveAccount: '' as IntlString,
LoadingAccount: '' as IntlString,
Join: '' as IntlString,
Email: '' as IntlString,
Password: '' as IntlString,
PasswordRepeat: '' as IntlString,
Workspace: '' as IntlString,
SignUp: '' as IntlString,
DoNotHaveAnAccount: '' as IntlString,
+4 -1
View File
@@ -89,7 +89,10 @@ export default plugin(loginId, {
WorkspaceArchived: '' as IntlString,
WorkspaceArchivedDesc: '' as IntlString,
RestoreArchivedWorkspace: '' as IntlString,
PasswordExpiredDesc: '' as IntlString
PasswordExpiredDesc: '' as IntlString,
Email: '' as IntlString,
Password: '' as IntlString,
PasswordRepeat: '' as IntlString
},
function: {
SendInvite: '' as Resource<(email: string, role: AccountRole) => Promise<void>>,
+98
View File
@@ -0,0 +1,98 @@
{
"string": {
"Office": "Escritório",
"Room": "Sala",
"RoomType": "Tipo de sala",
"Share": "Compartilhar",
"StopShare": "Parar compartilhamento",
"StartVideo": "Iniciar vídeo",
"StopVideo": "Parar vídeo",
"Mute": "Mudo",
"UnMute": "Desmutar",
"LeaveRoom": "Sair da sala",
"Floors": "Andares",
"MyOffice": "Meu Escritório",
"EditOffice": "Editar escritório",
"FinalizeEditing": "Feito",
"Floor": "Andar",
"ChangeFloor": "Trocar andar",
"IsKnocking": "{name} está batendo...",
"Accept": "Aceitar",
"Decline": "Recusar",
"EnterRoom": "Entrar na sala",
"TeamRoom": "Sala de equipe",
"MeetingRoom": "Sala de reunião",
"KnockingTo": "Estamos batendo em...",
"Cancel": "Cancelar",
"AnotherWindowError": "Você já está conectado em outra janela. Por favor, utilize essa janela ou reconecte-se",
"Speaker": "Alto-falante",
"Microphone": "Microfone",
"Camera": "Câmera",
"Settings": "Configurações",
"LoveDescription": "Ambiente Virtual de Escritório ao Vivo",
"DefaultDevice": "Dispositivo Padrão",
"Knock": "Bater",
"Open": "Aberto",
"DND": "Não Perturbe",
"ChangeAccess": "Alterar acesso",
"AddAFloor": "Adicionar um piso",
"RenameAFloor": "Mudar o nome de um piso",
"StartWithoutVideo": "Sempre começar sem vídeo",
"StartWithMutedMic": "Sempre começar com o microfone silenciado",
"InvitingYou": "{name} está te convidando para entrar",
"YouInivite": "Você está convidando para entrar",
"NoiseCancellation": "Cancelamento de ruído",
"KnockingLabel": "Batendo",
"InivitingLabel": "Convite",
"Invite": "Convidar",
"KnockAction": "Bater",
"NoiseCancellationNotSupported": "Seu navegador não suporta cancelamento de ruído",
"Blur": "Desfoque de fundo",
"BlurRadius": "Raio de desfoque",
"BlurTooltip": "A função de desfoque aumenta significativamente o consumo da CPU, o que pode afetar o desempenho geral do sistema.",
"GuestLink": "Link de convidado",
"CopyGuestLink": "Copiar link de convidado",
"Record": "Gravar",
"StopRecord": "Parar gravação",
"LeaveRoomConfirmation": "Tem certeza de que deseja sair da sala?",
"ServiceNotConfigured": "O serviço não está configurado",
"FullscreenMode": "Modo de ecrã inteiro",
"ExitingFullscreenMode": "Saindo do modo de tela cheia",
"Select": "Seleccione",
"ChooseShare": "Escolha o que partilhar",
"CreateMeeting": "Criar reunião",
"MoreOptions": "Mais opções",
"StartTranscription": "Iniciar transcrição",
"StopTranscription": "Parar transcrição",
"Meeting": "Reunião",
"Transcription": "Transcrição",
"StartWithTranscription": "Começar com transcrição",
"MeetingMinutes": "Minutos da reunião",
"MeetingsMinutes": "Minutos das reuniões",
"StartMeeting": "Iniciar reunião",
"Video": "Vídeo",
"NoMeetingMinutes": "Sem minutos de reunião",
"JoinMeeting": "Participar na reunião",
"MeetingStart": "Início da reunião",
"MeetingEnd": "Fim da reunião",
"EndMeeting": "Terminar reunião",
"Status": "Estado",
"Active": "Ativo",
"Finished": "Finalizado",
"StartWithRecording": "Começar com gravação",
"Language": "Idioma",
"Kick": "Expulsar",
"WithAudio": "Incluir áudio do sistema",
"ShareWithAudioTooltip": "Compartilhe sua tela com o áudio do sistema. Reinicie o compartilhamento de tela para aplicar as alterações.",
"MicPermission": "Microfone não encontrado, verifique as permissões do navegador",
"CamPermission": "Câmera não encontrada, verifique as permissões do navegador",
"SearchMeetingMinutes": "Procurar minutos de reunião...",
"Sharing": "A partilhar...",
"Browser": "Navegador",
"Monitor": "Monitor",
"Window": "Janela",
"MeetingEmptyTitle": "Reunião encerrada?",
"MeetingEmptyMessage": "Todos os participantes saíram. Você será desconectado em 1 minuto. Deseja permanecer?",
"StayInRoom": "Permanecer na sala"
}
}
+1 -1
View File
@@ -80,7 +80,7 @@ export const languagesDisplayData: {
no: { emoji: '🇳🇴', label: 'Norsk' },
pl: { emoji: '🇵🇱', label: 'Polski' },
pt: { emoji: '🇵🇹', label: 'Português' },
'pt-BR': { emoji: '🇧🇷', label: 'Português (Brasil)' },
'pt-br': { emoji: '🇧🇷', label: 'Português (Brasil)' },
'pt-PT': { emoji: '🇵🇹', label: 'Português (Portugal)' },
ro: { emoji: '🇷🇴', label: 'Română' },
ru: { emoji: '🇷🇺', label: 'Русский' },
+1 -1
View File
@@ -60,7 +60,7 @@ export type RoomLanguage =
| 'no'
| 'pl'
| 'pt'
| 'pt-BR'
| 'pt-br'
| 'pt-PT'
| 'ro'
| 'ru'
+5
View File
@@ -0,0 +1,5 @@
{
"string": {
"MailTag": "Correio"
}
}
+19
View File
@@ -0,0 +1,19 @@
{
"string": {
"Camera": "Câmera",
"Microphone": "Microfone",
"Speaker": "Alto-falante",
"DefaultCam": "Câmera padrão",
"DefaultMic": "Microfone padrão",
"DefaultSpeaker": "Alto-falante padrão",
"TurnOnCam": "Ligar câmera",
"TurnOffCam": "Desligar câmera",
"TurnOnMic": "Ligar microfone",
"TurnOffMic": "Desligar microfone",
"NoCam": "Sem câmera",
"NoMic": "Sem microfone",
"NoSpeaker": "Sem alto-falante",
"On": "Ligado",
"Off": "Desligado"
}
}
@@ -0,0 +1,61 @@
{
"string": {
"Notification": "Notificação",
"Notifications": "Notificações",
"NoNotifications": "Sem notificações",
"EmailNotification": "Correio eletrónico",
"PlatformNotification": "na plataforma",
"Track": "Seguir",
"DontTrack": "Não seguir",
"BrowserNotification": "no navegador",
"Remove": "Remover notificação",
"RemoveAll": "Remover todas as notificações",
"MarkAllAsRead": "Marcar todas as notificações como lidas",
"MarkAsRead": "Marcar como lido",
"MarkAsUnread": "Marcar como não lido",
"Archive": "Arquivar",
"Inbox": "Caixa de Entrada",
"Collaborators": "Colaboradores",
"Change": "Alteração",
"AddedRemoved": "Adicionado/Removido",
"YouAddedCollaborators": "Foi adicionado a colaboradores",
"YouHaveJoinedTheConversation": "Você se juntou à conversa",
"ChangeCollaborators": "Colaboradores Alterados",
"Activity": "Atividade",
"People": "Pessoas",
"All": "Todos",
"Read": "Lido",
"Unread": "Não lido",
"CommonNotificationTitle": "{title}",
"CommonNotificationBody": "Atualizado por {senderName}",
"CommonNotificationChanged": "{senderName} alterou {property}",
"CommonNotificationChangedProperty": "{senderName} alterou {property} para \"{newValue}\"",
"ChangedCollaborators": "Colaboradores alterados",
"NewCollaborators": "Novos colaboradores",
"RemovedCollaborators": "Colaboradores removidos",
"Edited": "Editado",
"Pinned": "Fixado",
"Message": "Mensagem",
"FlatList": "Lista Plana",
"GroupedList": "Lista Agrupada",
"ArchiveAll": "Arquivar tudo",
"MarkReadAll": "Marcar tudo como lido",
"MarkUnreadAll": "Marcar tudo como não lido",
"ArchiveAllConfirmationTitle": "Arquivar todas as notificações?",
"ArchiveAllConfirmationMessage": "Esta seguro que quer arquivar todas as notificações? Esta operação não se pode desfazer.",
"StarDocument": "Marcar documento",
"UnstarDocument": "Desmarcar documento",
"Push": "Push",
"EnablePush": "Ativar notificações push",
"NotificationBlockedInBrowser": "Notificações bloqueadas no navegador. Por favor habilite las notificaciones en la configuración de su navegador.",
"General": "Geral",
"InboxNotificationsDescription": "Receba notificações pessoais em sua caixa de entrada do Huly.",
"PushNotificationsDescription": "Receba notificações pessoais no desktop.",
"Sound": "Som",
"SoundNotificationsDescription": "Receba notificações sonoras para eventos.",
"CommonNotificationCollectionAdded": "{senderName} adicionou {collection}",
"CommonNotificationCollectionRemoved": "{senderName} removeu {collection}",
"NoAccessToObject": "Você não tem mais acesso a este objeto",
"ViewIn": "Ver em {app}"
}
}
+19
View File
@@ -0,0 +1,19 @@
{
"status": {
"RequiredField": "Campo obrigatório {field}",
"FieldsDoNotMatch": "{field} não coincidem com {field2}",
"ConnectingToServer": "A ligar ao servidor...."
},
"string": {
"CreateWorkspace": "Criar espaço de trabalho",
"LastName": "Apelido",
"FirstName": "Nome",
"Workspace": "Nome do espaço de trabalho",
"FillInProfile": "Preencha o seu perfil",
"SetUpPassword": "Definir a sua palavra-passe",
"Next": "Seguinte",
"Skip": "Saltar",
"SignUpCompleted": "Registo concluído",
"StartUsingHuly": "Começar a usar Huly"
}
}
@@ -0,0 +1,7 @@
{
"string": {
"Starred": "Destacados",
"Star": "Destacar",
"Unstar": "Remover destaque"
}
}
+8
View File
@@ -0,0 +1,8 @@
{
"string": {
"PrintToPDF": "Imprimir em PDF",
"PrintingDocumentOf": "Imprimindo documento {current} de {total}",
"DownloadAll": "Descarregar tudo",
"PrintFailed": "Falha na impressão"
}
}
+17 -1
View File
@@ -121,7 +121,23 @@
"RunProcessPermission": "Spustit proces",
"CancelProcessPermission": "Zrušit proces",
"ForbidRunProcessPermission": "Zakázat spuštění procesu",
"ForbidCancelProcessPermission": "Zakázat zrušení procesu"
"ForbidCancelProcessPermission": "Forbid cancelling process",
"RequestApproval": "Požádat o schválení",
"IsApproved": "Schváleno",
"Approve": "Schválit",
"Reject": "Odmítnout",
"Reason": "Důvod",
"ApproveRequest": "Schválit požadavek",
"OnApproveRequestApproved": "Při schválení požadavku",
"OnApproveRequestRejected": "Při zamítnutí požadavku",
"ConfirmApproval": "Potvrdit schválení",
"ConfirmRejection": "Potvrdit zamítnutí",
"RejectionReason": "Důvod zamítnutí",
"ProvideRejectionReason": "Poskytnout důvod zamítnutí",
"FieldIsEmpty": "Pole je prázdné",
"Reviewers": "Recenzenti",
"LockCard": "Zamknout kartu",
"LockSection": "Zamknout sekci"
},
"error": {
"MethodNotFound": "Metoda nenalezena: {methodId}",
+17 -1
View File
@@ -121,7 +121,23 @@
"RunProcessPermission": "Prozess ausführen",
"CancelProcessPermission": "Prozess abbrechen",
"ForbidRunProcessPermission": "Ausführen des Prozesses verbieten",
"ForbidCancelProcessPermission": "Abbrechen des Prozesses verbieten"
"ForbidCancelProcessPermission": "Abbrechen des Prozesses verbieten",
"RequestApproval": "Genehmigung anfordern",
"IsApproved": "Ist genehmigt",
"Approve": "Genehmigen",
"Reject": "Ablehnen",
"Reason": "Grund",
"ApproveRequest": "Genehmigungsanfrage",
"OnApproveRequestApproved": "Bei Genehmigung der Anfrage",
"OnApproveRequestRejected": "Bei Ablehnung der Anfrage",
"ConfirmApproval": "Genehmigung bestätigen",
"ConfirmRejection": "Ablehnung bestätigen",
"RejectionReason": "Ablehnungsgrund",
"ProvideRejectionReason": "Ablehnungsgrund angeben",
"FieldIsEmpty": "Feld ist leer",
"Reviewers": "Prüfer",
"LockCard": "Karte sperren",
"LockSection": "Abschnitt sperren"
},
"error": {
"MethodNotFound": "Methode nicht gefunden: {methodId}",

Some files were not shown because too many files have changed in this diff Show More