New Drive UI initial version
@@ -8,37 +8,37 @@
|
||||
"mobile_appstore": "https://apps.apple.com/fr/app/twake/id1588764852?l=en",
|
||||
"mobile_googleplay": "https://play.google.com/store/apps/details?id=com.twake.twake&gl=FR"
|
||||
},
|
||||
"app_grid": [
|
||||
{
|
||||
"name": "Tmail",
|
||||
"logo": "/public/img/grid/tmail.png",
|
||||
"url": "https://tmail.linagora.com/"
|
||||
},
|
||||
{
|
||||
"name": "Twake",
|
||||
"logo": "/public/img/grid/twake.png",
|
||||
"url": "https://twake.app/"
|
||||
}
|
||||
],
|
||||
"accounts": {
|
||||
"_type": "console",
|
||||
"_type": "remote",
|
||||
"type": "internal",
|
||||
"internal": {
|
||||
"disable_account_creation": false
|
||||
},
|
||||
"console": {
|
||||
"account_management_url": "http://web.twake-console.local/profile?company-code={company_id}",
|
||||
"remote": {
|
||||
"authority": "http://auth.example.com/",
|
||||
"client_id": "twakeweb",
|
||||
"client_secret": "",
|
||||
"issuer": "",
|
||||
"audience": "",
|
||||
"redirect_uris": [""],
|
||||
"account_management_url": "http://web.twake-console.local/profile?company-code={company_id}",
|
||||
"collaborators_management_url": "http://web.twake-console.local/compaies/{company_id}/users?company-code={company_id}",
|
||||
"company_management_url": "http://web.twake-console.local/companies?company-code={company_id}"
|
||||
}
|
||||
}
|
||||
},
|
||||
"console": {
|
||||
"_type": "remote",
|
||||
"type": "internal",
|
||||
"remote": {
|
||||
"new_console": false,
|
||||
"username": "",
|
||||
"password": "12345678",
|
||||
"url": "https://some-remote-console-url/",
|
||||
"hook": {
|
||||
"token": "12345678"
|
||||
}
|
||||
},
|
||||
"internal": {
|
||||
"disable_account_creation": false
|
||||
}
|
||||
},
|
||||
"sentry": {
|
||||
"dsn": ""
|
||||
},
|
||||
@@ -63,10 +63,6 @@
|
||||
"root": "./public"
|
||||
}
|
||||
},
|
||||
"phpnode": {
|
||||
"secret": "api_supersecret",
|
||||
"php_endpoint": "http://nginx:80"
|
||||
},
|
||||
"websocket": {
|
||||
"path": "/socket/",
|
||||
"adapters": {
|
||||
@@ -154,7 +150,6 @@
|
||||
"api_key": "secret",
|
||||
"sender": "noreply@twake.app"
|
||||
},
|
||||
"applications": [],
|
||||
"services": [
|
||||
"auth",
|
||||
"push",
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
"@fastify/formbody": "^6.0.0",
|
||||
"@fastify/static": "^5.0.1",
|
||||
"@ffprobe-installer/ffprobe": "^1.4.1",
|
||||
"@okta/jwt-verifier": "^3.0.1",
|
||||
"@sentry/node": "^6.19.7",
|
||||
"@sentry/tracing": "^6.19.7",
|
||||
"@socket.io/redis-adapter": "^7.1.0",
|
||||
@@ -160,6 +161,7 @@
|
||||
"get-website-favicon": "^0.0.7",
|
||||
"html-metadata-parser": "^2.0.4",
|
||||
"html-to-text": "^8.2.1",
|
||||
"idtoken-verifier": "^2.2.3",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"keyv": "^4.5.0",
|
||||
"lodash": "^4.17.21",
|
||||
@@ -172,6 +174,7 @@
|
||||
"node-cron": "^3.0.0",
|
||||
"node-fetch": "^2.6.7",
|
||||
"node-uuid": "^1.4.8",
|
||||
"openid-client": "^5.4.0",
|
||||
"ora": "^5.4.0",
|
||||
"pdf-parse": "^1.1.1",
|
||||
"pdf2pic": "^2.1.4",
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
import { CommandModule } from "yargs";
|
||||
|
||||
const command: CommandModule = {
|
||||
describe: "Manage Twake Console",
|
||||
command: "console <command>",
|
||||
builder: yargs =>
|
||||
yargs.commandDir("console_cmds", {
|
||||
visit: commandModule => commandModule.default,
|
||||
}),
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
||||
handler: () => {},
|
||||
};
|
||||
|
||||
export default command;
|
||||
@@ -1,257 +0,0 @@
|
||||
import yargs from "yargs";
|
||||
import ora from "ora";
|
||||
import twake from "../../../twake";
|
||||
import { CompanyReport, UserReport } from "../../../services/console/types";
|
||||
import Company from "../../../services/user/entities/company";
|
||||
import gr from "../../../services/global-resolver";
|
||||
import { ConsoleServiceImpl } from "../../../services/console/service";
|
||||
|
||||
/**
|
||||
* Merge command parameters. Check the builder definition below for more details.
|
||||
*/
|
||||
type MergeParams = {
|
||||
url: string;
|
||||
concurrent: number;
|
||||
dry: boolean;
|
||||
console: string;
|
||||
link: boolean;
|
||||
csv: boolean;
|
||||
client: string;
|
||||
secret: string;
|
||||
};
|
||||
|
||||
const services = [
|
||||
"platform-services",
|
||||
"user",
|
||||
"channels",
|
||||
"notifications",
|
||||
"database",
|
||||
"webserver",
|
||||
"message-queue",
|
||||
"console",
|
||||
];
|
||||
|
||||
const command: yargs.CommandModule<MergeParams, MergeParams> = {
|
||||
command: "merge",
|
||||
describe: "Merge Twake Chat users in the Twake Console",
|
||||
builder: {
|
||||
url: {
|
||||
default: "http://localhost:8080",
|
||||
type: "string",
|
||||
description: "URL of the Twake console",
|
||||
},
|
||||
concurrent: {
|
||||
default: 1,
|
||||
type: "number",
|
||||
description: "Number of concurrent imports",
|
||||
},
|
||||
dry: {
|
||||
default: false,
|
||||
type: "boolean",
|
||||
description: "Make a dry run without creating anything on the Twake console",
|
||||
},
|
||||
csv: {
|
||||
default: false,
|
||||
type: "boolean",
|
||||
description: "Generate result as CSV",
|
||||
},
|
||||
console: {
|
||||
default: "console",
|
||||
type: "string",
|
||||
description: "The console service identifier to user to link user and companies",
|
||||
},
|
||||
link: {
|
||||
default: true,
|
||||
type: "boolean",
|
||||
description:
|
||||
"Link the companies/users to external companies/user. Works with the --console parameter",
|
||||
implies: "console",
|
||||
},
|
||||
client: {
|
||||
default: "twake",
|
||||
type: "string",
|
||||
description: "Client identifier to be used to authenticate calls to the Console",
|
||||
},
|
||||
secret: {
|
||||
default: "secret",
|
||||
type: "string",
|
||||
description: "Client secret to be used to authenticate calls to the Console",
|
||||
},
|
||||
},
|
||||
handler: async argv => {
|
||||
const spinner = ora({ text: `Importing Twake data on ${argv.url}` }).start();
|
||||
const platform = await twake.run(services);
|
||||
await gr.doInit(platform);
|
||||
const consoleService = platform.getProvider<ConsoleServiceImpl>("console");
|
||||
const merge = consoleService.merge(
|
||||
argv.url,
|
||||
argv.concurrent,
|
||||
argv.dry,
|
||||
argv.console,
|
||||
argv.link,
|
||||
argv.client,
|
||||
argv.secret,
|
||||
);
|
||||
const start = Date.now();
|
||||
let stop: number = start;
|
||||
const userReports: UserReport[] = [];
|
||||
const companyReports: CompanyReport[] = [];
|
||||
const ownerReports: UserReport[] = [];
|
||||
let companiesWithoutAdmin: Company[] = [];
|
||||
|
||||
const process = merge.subscribe({
|
||||
next: report => {
|
||||
if (report.type === "company:created") {
|
||||
const companyReport = report.data as CompanyReport;
|
||||
companyReports.push(companyReport);
|
||||
|
||||
if (companyReport.status === "success") {
|
||||
spinner.succeed(
|
||||
`Company created: ${companyReport.company.source.id} ${companyReport.company.source.displayName}`,
|
||||
);
|
||||
} else {
|
||||
spinner.fail(
|
||||
`Creation error for company ${companyReport.company.source.id} (${companyReport.company.source.displayName}): ${companyReport?.error?.message}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (report.type === "user:created") {
|
||||
const userReport = report.data as UserReport;
|
||||
userReports.push(userReport);
|
||||
|
||||
if (userReport.status === "success") {
|
||||
spinner.succeed(
|
||||
`Company ${userReport.user.source.company.id}: User created ${userReport.user.destination.id}`,
|
||||
);
|
||||
} else {
|
||||
spinner.fail(
|
||||
`Company ${userReport.user.source.company.id}: User creation error ${userReport.user.destination.id}: ${userReport?.error?.message}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (report.type === "user:updated") {
|
||||
const userReport = report.data as UserReport;
|
||||
ownerReports.push(userReport);
|
||||
if (userReport.status === "success") {
|
||||
spinner.succeed(
|
||||
`Company ${userReport.destinationCompanyCode} owner updated to user ${userReport.destinationId}`,
|
||||
);
|
||||
} else {
|
||||
spinner.fail(
|
||||
`Company ${userReport.destinationCompanyCode}: Owner update error for user ${userReport.destinationId}: ${userReport?.error?.message}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (report.type === "processing:owner") {
|
||||
spinner.start("Computing company owners, please wait...");
|
||||
}
|
||||
|
||||
if (report.type === "user:updating") {
|
||||
//spinner.succeed(`Updating owner for company ${report?.company?.sourceId}`);
|
||||
}
|
||||
|
||||
if (report.type === "log") {
|
||||
report.message && (spinner.text = report.message);
|
||||
}
|
||||
|
||||
if (report.type === "company:withoutadmin") {
|
||||
report.message && (spinner.text = report.message);
|
||||
const companies = (report.data || []) as Company[];
|
||||
|
||||
if (companies.length) {
|
||||
companiesWithoutAdmin = companies;
|
||||
}
|
||||
}
|
||||
},
|
||||
error: () => {
|
||||
spinner.fail("Fatal error");
|
||||
},
|
||||
complete: async () => {
|
||||
stop = Date.now();
|
||||
spinner.succeed("Merge is complete");
|
||||
displayStats();
|
||||
await tearDown();
|
||||
},
|
||||
});
|
||||
|
||||
async function tearDown() {
|
||||
await platform.stop();
|
||||
process.unsubscribe();
|
||||
}
|
||||
|
||||
function reportAsCSV() {
|
||||
const users = userReports.map(
|
||||
user =>
|
||||
`${user.sourceId},${user.destinationId},${user.destinationCompanyCode},${user.status}`,
|
||||
);
|
||||
const userCSV = [...["sourceId,destinationId,destinationCompanyCode,status"], ...users].join(
|
||||
"\n",
|
||||
);
|
||||
|
||||
const companies = companyReports.map(
|
||||
company => `${company.sourceId},${company.destinationCode},${company.status}`,
|
||||
);
|
||||
const companyCSV = [...["sourceId,destinationCode,status"], ...companies].join("\n");
|
||||
|
||||
console.log(userCSV);
|
||||
console.log(companyCSV);
|
||||
}
|
||||
|
||||
function displayStats() {
|
||||
const userFailures = userReports.filter(user => user.error);
|
||||
const companyFailures = companyReports.filter(company => company.error);
|
||||
const ownerFailures = ownerReports.filter(report => report.error);
|
||||
|
||||
console.log("# Import report");
|
||||
console.log(`Data imported in ${(stop - start) / 1000} seconds`);
|
||||
console.log("## Company");
|
||||
console.log("- Companies success:", companyReports.filter(company => !company.error).length);
|
||||
console.log("- Companies failure:", companyFailures.length);
|
||||
if (companyFailures.length) {
|
||||
console.log("### Failures");
|
||||
companyFailures.forEach(failure =>
|
||||
console.log(
|
||||
`- Company ${failure.company.source.id} error: ${failure.company.error?.message}`,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
console.log("## User");
|
||||
console.log("- Users success:", userReports.filter(user => !user.error).length);
|
||||
console.log("- Users failure:", userFailures.length);
|
||||
if (userFailures.length) {
|
||||
console.log("### Failures");
|
||||
userFailures.forEach(failure =>
|
||||
console.log(
|
||||
`- User ${failure.user.source.user.user_id} error: ${failure.user.error?.message}`,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
console.log("## Owner");
|
||||
console.log("- Owners success:", ownerReports.filter(report => !report.error).length);
|
||||
console.log("- Owners failure:", ownerFailures.length);
|
||||
if (ownerFailures.length) {
|
||||
console.log("### Failures");
|
||||
ownerFailures.forEach(report =>
|
||||
console.log(`- User ${report.destinationId} error: ${report?.error?.message}`),
|
||||
);
|
||||
}
|
||||
|
||||
console.log("## Warnings");
|
||||
console.log("### Companies witout admins");
|
||||
companiesWithoutAdmin.forEach(company => {
|
||||
console.log(`- ${company.id} - ${company.displayName}`);
|
||||
});
|
||||
|
||||
if (argv.csv) {
|
||||
reportAsCSV();
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default command;
|
||||
@@ -60,7 +60,7 @@ export interface ConsoleServiceClient {
|
||||
|
||||
fetchCompanyInfo(consoleCompanyCode: string): Promise<ConsoleHookCompany>;
|
||||
|
||||
getUserByAccessToken(accessToken: string): Promise<ConsoleHookUser>;
|
||||
getUserByAccessToken(idToken: string): Promise<ConsoleHookUser>;
|
||||
|
||||
resendVerificationEmail(email: string): Promise<void>;
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ export class ConsoleInternalClient implements ConsoleServiceClient {
|
||||
throw new Error("Method should not be implemented.");
|
||||
}
|
||||
|
||||
getUserByAccessToken(_accessToken: string): Promise<ConsoleHookUser> {
|
||||
getUserByAccessToken(_idToken: string): Promise<ConsoleHookUser> {
|
||||
logger.info("Internal: getUserByAccessToken");
|
||||
throw new Error("Method should not be implemented.");
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import axios, { AxiosInstance } from "axios";
|
||||
import { v1 as uuidv1 } from "uuid";
|
||||
import { AxiosInstance } from "axios";
|
||||
import { Issuer } from "openid-client";
|
||||
import { ConsoleServiceClient } from "../client-interface";
|
||||
import {
|
||||
ConsoleCompany,
|
||||
@@ -14,16 +14,12 @@ import {
|
||||
UpdatedConsoleUserRole,
|
||||
} from "../types";
|
||||
|
||||
import User, { getInstance } from "../../user/entities/user";
|
||||
import Company, {
|
||||
CompanySearchKey,
|
||||
getInstance as getCompanyInstance,
|
||||
} from "../../user/entities/company";
|
||||
import OktaJwtVerifier from "@okta/jwt-verifier";
|
||||
import { CrudException } from "../../../core/platform/framework/api/crud-service";
|
||||
import coalesce from "../../../utils/coalesce";
|
||||
import { logger } from "../../../core/platform/framework/logger";
|
||||
import { CompanyFeaturesEnum, CompanyLimitsEnum } from "../../user/web/types";
|
||||
import gr from "../../global-resolver";
|
||||
import Company, { CompanySearchKey } from "../../user/entities/company";
|
||||
import User from "../../user/entities/user";
|
||||
import { ConsoleServiceImpl } from "../service";
|
||||
|
||||
export class ConsoleRemoteClient implements ConsoleServiceClient {
|
||||
@@ -31,92 +27,30 @@ export class ConsoleRemoteClient implements ConsoleServiceClient {
|
||||
client: AxiosInstance;
|
||||
|
||||
private infos: ConsoleOptions;
|
||||
private verifier: OktaJwtVerifier;
|
||||
|
||||
constructor(consoleInstance: ConsoleServiceImpl, private dryRun: boolean) {
|
||||
this.infos = consoleInstance.consoleOptions;
|
||||
this.client = axios.create({ baseURL: this.infos.url });
|
||||
this.verifier = new OktaJwtVerifier({
|
||||
issuer: this.infos.issuer,
|
||||
});
|
||||
}
|
||||
fetchCompanyInfo(consoleCompanyCode: string): Promise<ConsoleHookCompany> {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
resendVerificationEmail(email: string): Promise<void> {
|
||||
throw new Error("Method not implemented.");
|
||||
}
|
||||
|
||||
private auth() {
|
||||
return { username: this.infos.username, password: this.infos.password };
|
||||
return {};
|
||||
}
|
||||
|
||||
async addUserToCompany(
|
||||
company: ConsoleCompany,
|
||||
user: CreateConsoleUser,
|
||||
): Promise<CreatedConsoleUser> {
|
||||
logger.info("Remote: addUserToCompany");
|
||||
|
||||
const isNewConsole = this.infos.new_console;
|
||||
|
||||
if (this.dryRun) {
|
||||
return {
|
||||
_id: uuidv1(),
|
||||
};
|
||||
}
|
||||
|
||||
if (user.skipInvite && user.name && user.email && user.password) {
|
||||
return this.client
|
||||
.post(`/api/companies/${company.code}/users`, user, {
|
||||
auth: this.auth(),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
params: {
|
||||
skipInvite: user.skipInvite,
|
||||
},
|
||||
})
|
||||
.then(({ data }) => data);
|
||||
} else {
|
||||
const invitationData = {
|
||||
role: user.role,
|
||||
emails: [
|
||||
{
|
||||
email: user.email,
|
||||
role: user.role,
|
||||
},
|
||||
],
|
||||
inviter: { email: user.inviterEmail },
|
||||
...(isNewConsole
|
||||
? {
|
||||
applicationCodes: ["twake"],
|
||||
}
|
||||
: {}),
|
||||
};
|
||||
|
||||
const result = await this.client
|
||||
.post(
|
||||
`/api/companies/${company.code}/${isNewConsole ? "invitations" : "users/invitation"}`,
|
||||
invitationData,
|
||||
{
|
||||
auth: this.auth(),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
},
|
||||
)
|
||||
.then(async ({ data, status }) => {
|
||||
//Fixme: When console solve https://gitlab.com/COMPANY_LINAGORA/software/saas/twake-console-account/-/issues/36
|
||||
// we can remove this fallback
|
||||
if ([200, 201].indexOf(status) >= 0) {
|
||||
return data;
|
||||
} else {
|
||||
return this.client
|
||||
.post(`/api/companies/${company.code}/users`, user, {
|
||||
auth: this.auth(),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
params: {
|
||||
skipInvite: user.skipInvite,
|
||||
},
|
||||
})
|
||||
.then(({ data }) => data);
|
||||
}
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async updateUserRole(
|
||||
@@ -124,47 +58,12 @@ export class ConsoleRemoteClient implements ConsoleServiceClient {
|
||||
user: UpdateConsoleUserRole,
|
||||
): Promise<UpdatedConsoleUserRole> {
|
||||
logger.info("Remote: updateUserRole");
|
||||
|
||||
if (this.dryRun) {
|
||||
return {
|
||||
id: user.id,
|
||||
role: user.role,
|
||||
};
|
||||
}
|
||||
|
||||
const result = await this.client
|
||||
.put(
|
||||
`/api/companies/${company.code}/users/${user.id}`,
|
||||
{ role: user.role },
|
||||
{
|
||||
auth: this.auth(),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
},
|
||||
)
|
||||
.then(({ data }) => data);
|
||||
|
||||
return result;
|
||||
return null;
|
||||
}
|
||||
|
||||
async createCompany(company: CreateConsoleCompany): Promise<CreatedConsoleCompany> {
|
||||
logger.info("Remote: createCompany");
|
||||
|
||||
if (this.dryRun) {
|
||||
return company;
|
||||
}
|
||||
|
||||
const result = await this.client
|
||||
.post("/api/companies", company, {
|
||||
auth: this.auth(),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
})
|
||||
.then(({ data }) => data);
|
||||
|
||||
return result;
|
||||
return null;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
@@ -175,216 +74,11 @@ export class ConsoleRemoteClient implements ConsoleServiceClient {
|
||||
}
|
||||
|
||||
async updateLocalCompanyFromConsole(partialCompanyDTO: ConsoleHookCompany): Promise<Company> {
|
||||
logger.info("Remote: updateLocalCompanyFromConsole");
|
||||
|
||||
const companyDTO = await this.fetchCompanyInfo(partialCompanyDTO.details.code);
|
||||
|
||||
let company = await gr.services.companies.getCompany({
|
||||
identity_provider_id: companyDTO.details.code,
|
||||
});
|
||||
|
||||
if (!company) {
|
||||
const newCompany = getCompanyInstance({
|
||||
id: uuidv1(),
|
||||
identity_provider: "console",
|
||||
identity_provider_id: companyDTO.details.code,
|
||||
});
|
||||
company = await gr.services.companies.createCompany(newCompany);
|
||||
}
|
||||
|
||||
const details = companyDTO.details;
|
||||
|
||||
if (details) {
|
||||
company.name = coalesce(details.name, company.name);
|
||||
company.displayName = coalesce(details.name, company.displayName);
|
||||
|
||||
const avatar = details.avatar;
|
||||
|
||||
company.logo =
|
||||
details.logo ||
|
||||
(avatar && avatar.type && avatar.type !== "url"
|
||||
? this.infos.url.replace(/\/$/, "") + "/api/avatars/" + avatar.value
|
||||
: companyDTO.value || "");
|
||||
}
|
||||
|
||||
if (!company.plan) {
|
||||
company.plan = { name: "", limits: undefined, features: undefined };
|
||||
}
|
||||
|
||||
const limits = companyDTO.limits.twake || companyDTO.limits;
|
||||
|
||||
//FIXME this is a hack right now!
|
||||
let planFeatures: any = {
|
||||
[CompanyFeaturesEnum.CHAT_GUESTS]: true,
|
||||
[CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]: true,
|
||||
[CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]: true,
|
||||
[CompanyFeaturesEnum.CHAT_EDIT_FILES]: true,
|
||||
[CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]: true,
|
||||
[CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]: true,
|
||||
};
|
||||
|
||||
if (limits.members < 0 && this.infos.type === "remote") {
|
||||
//Hack to say this is free version
|
||||
planFeatures = {
|
||||
[CompanyFeaturesEnum.CHAT_GUESTS]: false,
|
||||
[CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]: false,
|
||||
[CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]: false,
|
||||
[CompanyFeaturesEnum.CHAT_EDIT_FILES]: false,
|
||||
[CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]: false, // Currently inactive
|
||||
};
|
||||
company.plan.name = "free";
|
||||
} else {
|
||||
company.plan.name = "standard";
|
||||
}
|
||||
company.plan.features = { ...planFeatures };
|
||||
company.plan.limits = {
|
||||
[CompanyLimitsEnum.CHAT_MESSAGE_HISTORY_LIMIT]: 10000, // To remove duplicata since we define this in formatCompany function
|
||||
[CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT]: limits["members"],
|
||||
[CompanyLimitsEnum.COMPANY_GUESTS_LIMIT]: limits["guests"],
|
||||
};
|
||||
|
||||
company.stats = coalesce(companyDTO.stats, company.stats);
|
||||
|
||||
await gr.services.companies.updateCompany(company);
|
||||
|
||||
return company;
|
||||
return null;
|
||||
}
|
||||
|
||||
async updateLocalUserFromConsole(code: string): Promise<User> {
|
||||
logger.info("Remote: updateLocalUserFromConsole");
|
||||
|
||||
const userDTO = await this.fetchUserInfo(code);
|
||||
|
||||
if (!userDTO) {
|
||||
throw CrudException.badRequest("User not found on Console");
|
||||
}
|
||||
|
||||
const roles = userDTO.roles.filter(
|
||||
role => role.applications === undefined || role.applications.find(a => a.code === "twake"),
|
||||
);
|
||||
|
||||
let user = await gr.services.users.getByConsoleId(userDTO._id);
|
||||
|
||||
if (!user) {
|
||||
if (!userDTO.email) {
|
||||
throw CrudException.badRequest("Email is required");
|
||||
}
|
||||
|
||||
let username = userDTO.email
|
||||
.split("@")[0]
|
||||
.toLocaleLowerCase()
|
||||
.replace(/[^a-zA-Z0-9]/g, "")
|
||||
.replace(/ +/g, "_");
|
||||
|
||||
if (await gr.services.users.isEmailAlreadyInUse(userDTO.email)) {
|
||||
const user = await gr.services.users.getByEmail(userDTO.email);
|
||||
|
||||
if (user.identity_provider === "console") {
|
||||
let emailUserOnConsole = null;
|
||||
try {
|
||||
emailUserOnConsole = await this.fetchUserInfo(user.identity_provider_id);
|
||||
} catch (err) {}
|
||||
if (emailUserOnConsole?._id) {
|
||||
throw CrudException.badRequest(
|
||||
`Console user not created because email already exists on console with different id: ${emailUserOnConsole._id} while requested to provision user with id: ${userDTO._id}`,
|
||||
);
|
||||
}
|
||||
|
||||
//If not present on console, then anonymise this one and create a new one
|
||||
await gr.services.users.anonymizeAndDelete(
|
||||
{ id: user.id },
|
||||
{
|
||||
user: { id: user.id, server_request: true },
|
||||
},
|
||||
);
|
||||
|
||||
//Now we can create the new user
|
||||
}
|
||||
}
|
||||
|
||||
username = await gr.services.users.getAvailableUsername(username);
|
||||
if (!username) {
|
||||
throw CrudException.badRequest("Console user not created because username already exists");
|
||||
}
|
||||
|
||||
user = getInstance({});
|
||||
user.username_canonical = (username || "").toLocaleLowerCase();
|
||||
user.email_canonical = userDTO.email;
|
||||
user.deleted = false;
|
||||
}
|
||||
|
||||
user.email_canonical = coalesce(userDTO.email, user.email_canonical);
|
||||
user.phone = "";
|
||||
user.first_name = coalesce(userDTO.name, user.first_name);
|
||||
user.last_name = coalesce(userDTO.surname, user.last_name);
|
||||
user.identity_provider = "console";
|
||||
user.identity_provider_id = userDTO._id;
|
||||
user.mail_verified = coalesce(userDTO.isVerified, user.mail_verified);
|
||||
if (userDTO.preference) {
|
||||
user.preferences = user.preferences || {};
|
||||
user.preferences.allow_tracking = coalesce(
|
||||
userDTO.preference.allowTrackingPersonalInfo,
|
||||
user.preferences?.allow_tracking,
|
||||
);
|
||||
user.preferences.language = coalesce(userDTO.preference.locale, user.preferences?.language);
|
||||
user.preferences.timezone = coalesce(userDTO.preference.timeZone, user.preferences?.timezone);
|
||||
}
|
||||
|
||||
const avatar = userDTO.avatar;
|
||||
|
||||
user.picture =
|
||||
avatar && avatar.type && avatar.type !== "url"
|
||||
? this.infos.url.replace(/\/$/, "") + "/api/avatars/" + avatar.value
|
||||
: "";
|
||||
|
||||
await gr.services.users.save(user);
|
||||
|
||||
const getCompanyByCode = async (companyCode: string) => {
|
||||
let company = await gr.services.companies.getCompany({
|
||||
identity_provider_id: companyCode,
|
||||
});
|
||||
if (!company) {
|
||||
const companyDTO = await this.fetchCompanyInfo(companyCode);
|
||||
await this.updateLocalCompanyFromConsole(companyDTO);
|
||||
company = await gr.services.companies.getCompany({
|
||||
identity_provider_id: companyCode,
|
||||
});
|
||||
}
|
||||
return company;
|
||||
};
|
||||
|
||||
const updatedListOfCompanies = [];
|
||||
if (roles) {
|
||||
for (const role of roles) {
|
||||
const companyConsoleCode = role.targetCode;
|
||||
const roleName = role.roleCode;
|
||||
const company = await getCompanyByCode(companyConsoleCode);
|
||||
if (!company) {
|
||||
throw CrudException.notFound(`Company ${companyConsoleCode} not found`);
|
||||
}
|
||||
//Make sure user is active, if not we remove it
|
||||
if (role.status !== "deactivated") {
|
||||
updatedListOfCompanies.push(company);
|
||||
const applications = (role.applications || []).map(a => a.code);
|
||||
await gr.services.companies.setUserRole(company.id, user.id, roleName, applications);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove user from companies not in the console
|
||||
const currentCompanies = await gr.services.companies.getAllForUser(user.id);
|
||||
for (const company of currentCompanies) {
|
||||
if (!updatedListOfCompanies.map(c => c.id).includes(company.group_id)) {
|
||||
await gr.services.companies.removeUserFromCompany(
|
||||
{ id: company.group_id },
|
||||
{ id: user.id },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
await gr.services.users.save(user, { user: { id: user.id, server_request: true } });
|
||||
|
||||
return user;
|
||||
return null;
|
||||
}
|
||||
|
||||
async removeCompanyUser(consoleUserId: string, company: Company): Promise<void> {
|
||||
@@ -419,81 +113,25 @@ export class ConsoleRemoteClient implements ConsoleServiceClient {
|
||||
await gr.services.companies.removeCompany(companySearchKey);
|
||||
}
|
||||
|
||||
fetchCompanyInfo(consoleCompanyCode: string): Promise<ConsoleHookCompany> {
|
||||
logger.info(`Remote: fetchCompanyInfo ${consoleCompanyCode}`);
|
||||
return this.client
|
||||
.get(`/api/companies/${consoleCompanyCode}`, {
|
||||
auth: this.auth(),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
async getUserByAccessToken(idToken: string): Promise<ConsoleHookUser> {
|
||||
const user = (await this.verifier.verifyIdToken(idToken, this.infos.audience)).claims as any;
|
||||
console.log("user", user);
|
||||
return {
|
||||
_id: user.sub,
|
||||
roles: [] as any,
|
||||
email: user.email,
|
||||
name: user.given_name,
|
||||
surname: user.family_name,
|
||||
isVerified: true,
|
||||
preference: {
|
||||
locale: user.locale,
|
||||
timeZone: 0,
|
||||
allowTrackingPersonalInfo: true,
|
||||
},
|
||||
})
|
||||
.then(({ data }) => data.company)
|
||||
.catch(e => {
|
||||
if (e.response.status === 401) {
|
||||
throw CrudException.forbidden("Bad console credentials");
|
||||
}
|
||||
throw e;
|
||||
});
|
||||
}
|
||||
|
||||
fetchUserInfo(consoleUserId: string): Promise<ConsoleHookUser> {
|
||||
logger.info(`Remote: fetchUserInfo ${consoleUserId}`);
|
||||
return this.client
|
||||
.get(`/api/users/${consoleUserId}`, {
|
||||
auth: this.auth(),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
avatar: {
|
||||
type: "url",
|
||||
value: user.picture,
|
||||
},
|
||||
})
|
||||
.then(({ data }) => data)
|
||||
.catch(e => {
|
||||
if (e.response.status === 401) {
|
||||
throw CrudException.forbidden("Bad console credentials");
|
||||
}
|
||||
throw e;
|
||||
});
|
||||
}
|
||||
|
||||
getUserByAccessToken(accessToken: string): Promise<ConsoleHookUser> {
|
||||
logger.info("Remote: getUserByAccessToken");
|
||||
return this.client
|
||||
.get("/api/users/profile", {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${accessToken}`,
|
||||
},
|
||||
})
|
||||
.then(({ data }) => data)
|
||||
.catch(e => {
|
||||
if (e.response?.status === 401) {
|
||||
throw CrudException.forbidden("Bad access token credentials");
|
||||
}
|
||||
throw e;
|
||||
});
|
||||
}
|
||||
|
||||
async resendVerificationEmail(email: string) {
|
||||
logger.info("Remote: resendVerificationEmail");
|
||||
return this.client
|
||||
.post(
|
||||
"/api/users/resend-verification-email",
|
||||
{
|
||||
email,
|
||||
},
|
||||
{
|
||||
auth: this.auth(),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
},
|
||||
)
|
||||
.then(({ data }) => data)
|
||||
.catch(e => {
|
||||
if (e.response.status === 401) {
|
||||
throw CrudException.forbidden("Bad credentials");
|
||||
}
|
||||
throw e;
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,426 +0,0 @@
|
||||
import passwordGenerator from "generate-password";
|
||||
import { concat, EMPTY, forkJoin, from, Observable, ReplaySubject } from "rxjs";
|
||||
import {
|
||||
count,
|
||||
distinct,
|
||||
filter,
|
||||
groupBy,
|
||||
map,
|
||||
mergeMap,
|
||||
min,
|
||||
share,
|
||||
tap,
|
||||
toArray,
|
||||
} from "rxjs/operators";
|
||||
import { getLogger } from "../../../core/platform/framework";
|
||||
import {
|
||||
ExecutionContext,
|
||||
Paginable,
|
||||
Pagination,
|
||||
} from "../../../core/platform/framework/api/crud-service";
|
||||
import Company from "../../user/entities/company";
|
||||
import User from "../../user/entities/user";
|
||||
import {
|
||||
CompanyCreatedStreamObject,
|
||||
CompanyReport,
|
||||
ConsoleOptions,
|
||||
CreatedConsoleCompany,
|
||||
CreatedConsoleUser,
|
||||
MergeProgress,
|
||||
ProcessReport,
|
||||
UpdateConsoleUserRole,
|
||||
UserCreatedStreamObject,
|
||||
UserReport,
|
||||
} from "../types";
|
||||
import { getInstance as getExternalUserInstance } from "../../user/entities/external_user";
|
||||
import { getInstance as getExternalGroupInstance } from "../../user/entities/external_company";
|
||||
import CompanyUser from "../../user/entities/company_user";
|
||||
import { ConsoleRemoteClient } from "../clients/remote";
|
||||
import { ConsoleServiceClient } from "../client-interface";
|
||||
import { DatabaseServiceAPI } from "../../../core/platform/services/database/api";
|
||||
import { CompanyUserRole } from "../../user/web/types";
|
||||
import gr from "../../global-resolver";
|
||||
import { ConsoleServiceImpl } from "../service";
|
||||
|
||||
const logger = getLogger("console.process.merge");
|
||||
|
||||
export class MergeProcess {
|
||||
private client: ConsoleServiceClient;
|
||||
|
||||
constructor(
|
||||
private database: DatabaseServiceAPI,
|
||||
private dryRun: boolean,
|
||||
private consoleId: string = "console",
|
||||
private linkExternal: boolean = true,
|
||||
consoleClientOptions: ConsoleOptions,
|
||||
) {
|
||||
const consoleService = new ConsoleServiceImpl(consoleClientOptions);
|
||||
this.client = new ConsoleRemoteClient(consoleService, dryRun);
|
||||
}
|
||||
|
||||
merge(concurrent: number = 1): MergeProgress {
|
||||
const progress$ = new ReplaySubject<ProcessReport>();
|
||||
const { users$, companies$ } = this.getStreams(concurrent);
|
||||
|
||||
const owners$ = users$.pipe(
|
||||
// get only the admins
|
||||
filter(userInCompany => userInCompany.source.user.level.valueOf() === 3),
|
||||
// group by company id
|
||||
groupBy(userInCompany => userInCompany.source.company.id),
|
||||
mergeMap(group =>
|
||||
group.pipe(
|
||||
// get the admin with the smaller creation date, let's say that this is the first one in the company so it is the owner
|
||||
min((a, b) => {
|
||||
return (a.source?.user?.dateAdded || 0) <= (b.source?.user?.dateAdded || 0) ? -1 : 1;
|
||||
}),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
const numberOfAdmins$ = users$.pipe(count(user => user.source.user.level.valueOf() === 3));
|
||||
const companyWithoutAdmin$ = users$.pipe(
|
||||
// group by company
|
||||
groupBy(user => user.source.company.id),
|
||||
mergeMap(group =>
|
||||
group.pipe(
|
||||
// get users as array
|
||||
// TODO: we may be able to do this without doing a toArray but just by playing with the group
|
||||
toArray(),
|
||||
// filter groups where there is no user with level === 3
|
||||
filter(users => !users.some(user => user.source.user.level.valueOf() === 3)),
|
||||
// take first element to get the company
|
||||
map(users => users[0].source.company),
|
||||
),
|
||||
),
|
||||
toArray(),
|
||||
);
|
||||
|
||||
const companiesSubscription = companies$.subscribe({
|
||||
next(company) {
|
||||
progress$.next({
|
||||
type: "company:created",
|
||||
data: {
|
||||
sourceId: company.source.id,
|
||||
destinationCode: company.destination.code,
|
||||
status: company.error ? "failure" : "success",
|
||||
company,
|
||||
error: company.error,
|
||||
} as CompanyReport,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
const usersSubscription = users$.subscribe({
|
||||
next(user) {
|
||||
progress$.next({
|
||||
type: "user:created",
|
||||
data: {
|
||||
sourceId: user.source.user.id,
|
||||
destinationId: user.destination.id,
|
||||
destinationCompanyCode: user.destination.companyCode,
|
||||
status: user.error ? "failure" : "success",
|
||||
user,
|
||||
error: user.error,
|
||||
} as UserReport,
|
||||
});
|
||||
},
|
||||
error(err: Error) {
|
||||
console.error(err);
|
||||
},
|
||||
});
|
||||
|
||||
const updateOwners$ = owners$.pipe(
|
||||
mergeMap(owner => this.updateUserRole(owner, "owner"), concurrent),
|
||||
tap(user =>
|
||||
progress$.next({
|
||||
type: "user:updated",
|
||||
data: {
|
||||
sourceId: user.source.source.user.id,
|
||||
destinationId: user.source.destination.id,
|
||||
destinationCompanyCode: user.source.destination.companyCode,
|
||||
status: user.result.error ? "failure" : "success",
|
||||
user: user.source,
|
||||
error: user.result.error,
|
||||
} as UserReport,
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
||||
const process$ = forkJoin([users$, companies$, numberOfAdmins$, companyWithoutAdmin$]).pipe(
|
||||
tap(result => {
|
||||
progress$.next({ type: "log", message: `There are ${result[2]} admins` });
|
||||
progress$.next({
|
||||
type: "company:withoutadmin",
|
||||
message: `Companies without admins ${result[3].length}`,
|
||||
data: result[3],
|
||||
});
|
||||
progress$.next({ type: "processing:owner" });
|
||||
}),
|
||||
mergeMap(() => from(updateOwners$), concurrent),
|
||||
);
|
||||
|
||||
const process = process$.subscribe({
|
||||
complete() {
|
||||
usersSubscription.unsubscribe();
|
||||
companiesSubscription.unsubscribe();
|
||||
process.unsubscribe();
|
||||
progress$.complete();
|
||||
},
|
||||
});
|
||||
|
||||
return progress$;
|
||||
}
|
||||
|
||||
private getStreams(
|
||||
concurrent: number = 1,
|
||||
context?: ExecutionContext,
|
||||
): {
|
||||
// hot companies observable
|
||||
companies$: Observable<CompanyCreatedStreamObject>;
|
||||
// hot users observable
|
||||
users$: Observable<UserCreatedStreamObject>;
|
||||
} {
|
||||
const companies$ = this.getCompanies().pipe(
|
||||
mergeMap(company => this.createCompany(company), concurrent),
|
||||
// make it hot
|
||||
share(),
|
||||
);
|
||||
|
||||
const users$ = companies$.pipe(
|
||||
filter(company => !company.error),
|
||||
mergeMap(company =>
|
||||
this.getUserIds(company.source).pipe(
|
||||
map(user => ({
|
||||
user,
|
||||
company,
|
||||
})),
|
||||
),
|
||||
),
|
||||
mergeMap(
|
||||
userInCompany => this.createUser(userInCompany.company.source, userInCompany.user, context),
|
||||
concurrent,
|
||||
),
|
||||
// make it hot
|
||||
share(),
|
||||
);
|
||||
|
||||
return {
|
||||
companies$,
|
||||
users$,
|
||||
};
|
||||
}
|
||||
|
||||
private getUserIds(company: Company, paginable?: Paginable): Observable<CompanyUser> {
|
||||
const pagination = new Pagination(
|
||||
paginable?.page_token,
|
||||
paginable?.limitStr,
|
||||
paginable?.reversed,
|
||||
);
|
||||
|
||||
return from(gr.services.companies.getUsers({ group_id: company.id }, pagination)).pipe(
|
||||
mergeMap(companyUsers => {
|
||||
const items$ = from(companyUsers.getEntities());
|
||||
const next$ = companyUsers?.nextPage?.page_token
|
||||
? this.getUserIds(company, companyUsers.nextPage)
|
||||
: EMPTY;
|
||||
return concat(items$, next$);
|
||||
}),
|
||||
distinct(user => user.user_id),
|
||||
);
|
||||
}
|
||||
|
||||
private getCompanies(paginable?: Paginable): Observable<Company> {
|
||||
return from(gr.services.companies.getCompanies(paginable)).pipe(
|
||||
mergeMap(companiesResult => {
|
||||
const items$ = from(companiesResult.getEntities());
|
||||
const next$ = companiesResult?.nextPage?.page_token
|
||||
? this.getCompanies(companiesResult.nextPage)
|
||||
: EMPTY;
|
||||
|
||||
return concat(items$, next$);
|
||||
}),
|
||||
distinct((company: Company) => company.id),
|
||||
);
|
||||
}
|
||||
|
||||
private async createCompany(company: Company): Promise<CompanyCreatedStreamObject> {
|
||||
logger.debug("Creating company in the Console %s", company.displayName);
|
||||
let createdCompany: CreatedConsoleCompany;
|
||||
let error;
|
||||
|
||||
try {
|
||||
createdCompany = await this.client.createCompany({
|
||||
code: company.id,
|
||||
displayName: company.displayName,
|
||||
avatar: {
|
||||
type: "url",
|
||||
value: company.logo,
|
||||
},
|
||||
status: "active",
|
||||
});
|
||||
|
||||
if (this.linkExternal) {
|
||||
await this.createCompanyLink(company, createdCompany, this.consoleId);
|
||||
}
|
||||
} catch (err) {
|
||||
logger.warn("Error while creating company %s", company.displayName);
|
||||
error = err;
|
||||
}
|
||||
|
||||
return {
|
||||
source: company,
|
||||
destination: {
|
||||
code: createdCompany?.code,
|
||||
},
|
||||
error,
|
||||
};
|
||||
}
|
||||
|
||||
private async createUser(
|
||||
company: Company,
|
||||
companyUser: CompanyUser,
|
||||
context: ExecutionContext,
|
||||
): Promise<UserCreatedStreamObject> {
|
||||
logger.debug("Creating user in console %o", companyUser.user_id);
|
||||
let error: Error;
|
||||
let result: CreatedConsoleUser;
|
||||
|
||||
try {
|
||||
const user = await gr.services.users.get({ id: companyUser.user_id });
|
||||
|
||||
if (!user) {
|
||||
throw new Error(`User ${companyUser.user_id} not found`);
|
||||
}
|
||||
|
||||
const firstName =
|
||||
user.first_name && user.first_name.trim().length ? user.first_name : user.email_canonical;
|
||||
const lastName =
|
||||
user.last_name && user.last_name.trim().length ? user.last_name : user.email_canonical;
|
||||
const name = (firstName + " " + lastName).trim();
|
||||
|
||||
let role: "admin" | "guest" | "member" =
|
||||
companyUser.level.valueOf() === 3 ? "admin" : "member";
|
||||
if (role != "admin") {
|
||||
if (companyUser.isExterne) {
|
||||
role = "guest";
|
||||
}
|
||||
const workspacesUsers = await gr.services.workspaces.getAllForUser(
|
||||
{ userId: companyUser.user_id },
|
||||
{ id: company.id },
|
||||
);
|
||||
workspacesUsers.forEach(e => {
|
||||
if (e.isExternal) {
|
||||
role = "guest";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
result = await this.client.addUserToCompany(
|
||||
{ code: company.id },
|
||||
{
|
||||
email: user.email_canonical,
|
||||
// console requires that firstname/lastname are defined and at least 1 chat long
|
||||
firstName,
|
||||
lastName,
|
||||
name,
|
||||
avatar: {
|
||||
type: "url",
|
||||
value: user.picture,
|
||||
},
|
||||
password: passwordGenerator.generate({
|
||||
length: 10,
|
||||
numbers: true,
|
||||
}),
|
||||
skipInvite: true,
|
||||
role,
|
||||
inviterEmail: "",
|
||||
},
|
||||
);
|
||||
|
||||
const companyUserRepository = await this.database.getRepository<CompanyUser>(
|
||||
"group_user",
|
||||
CompanyUser,
|
||||
);
|
||||
companyUser.role = role;
|
||||
await companyUserRepository.save(companyUser, context);
|
||||
|
||||
if (this.linkExternal) {
|
||||
await this.createUserLink(user, result, this.consoleId);
|
||||
}
|
||||
} catch (err) {
|
||||
logger.warn("Error while creating the user %o", companyUser.user_id);
|
||||
error = err;
|
||||
}
|
||||
|
||||
return {
|
||||
source: { user: companyUser, company },
|
||||
destination: {
|
||||
id: result?._id,
|
||||
companyCode: company.id,
|
||||
},
|
||||
error,
|
||||
};
|
||||
}
|
||||
|
||||
private async createUserLink(
|
||||
localUser: User,
|
||||
remoteUser: CreatedConsoleUser,
|
||||
serviceId: string,
|
||||
): Promise<void> {
|
||||
logger.debug("Creating user link for user %s", localUser.id);
|
||||
if (this.dryRun) {
|
||||
return;
|
||||
}
|
||||
|
||||
await gr.services.externalUser.createExternalUser(
|
||||
getExternalUserInstance({
|
||||
service_id: serviceId,
|
||||
external_id: remoteUser._id,
|
||||
user_id: localUser.id,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
private async createCompanyLink(
|
||||
localCompany: Company,
|
||||
remoteCompany: CreatedConsoleCompany,
|
||||
serviceId: string,
|
||||
): Promise<void> {
|
||||
if (this.dryRun) {
|
||||
return;
|
||||
}
|
||||
|
||||
await gr.services.externalUser.createExternalGroup(
|
||||
getExternalGroupInstance({
|
||||
service_id: serviceId,
|
||||
company_id: localCompany.id,
|
||||
external_id: remoteCompany.code,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
private updateUserRole(
|
||||
user: UserCreatedStreamObject,
|
||||
role: CompanyUserRole,
|
||||
): Promise<{
|
||||
source: UserCreatedStreamObject;
|
||||
result: UpdateConsoleUserRole & { error?: Error };
|
||||
}> {
|
||||
logger.debug(
|
||||
`Updating user role for user ${user.source.user.id} in company ${user.source.company.id}`,
|
||||
);
|
||||
return this.client
|
||||
.updateUserRole({ code: user.destination.companyCode }, { id: user.destination.id, role })
|
||||
.then(result => ({ source: user, result }))
|
||||
.catch((err: Error) => {
|
||||
return {
|
||||
source: user,
|
||||
result: {
|
||||
id: user.destination.id,
|
||||
role,
|
||||
error: err,
|
||||
},
|
||||
};
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
import { DatabaseServiceAPI } from "../../core/platform/services/database/api";
|
||||
import { MergeProcess } from "./processing/merge";
|
||||
import { ConsoleOptions, ConsoleType, MergeProgress } from "./types";
|
||||
import { ConsoleServiceClient } from "./client-interface";
|
||||
import { ConsoleClientFactory } from "./client-factory";
|
||||
@@ -24,7 +23,7 @@ export class ConsoleServiceImpl implements TwakeServiceProvider {
|
||||
}
|
||||
|
||||
async init(): Promise<this> {
|
||||
this.configuration = new Configuration("console");
|
||||
this.configuration = new Configuration("general.accounts");
|
||||
assert(this.configuration, "console configuration is missing");
|
||||
const type = this.configuration.get("type") as ConsoleType;
|
||||
assert(type, "console configuration type is not defined");
|
||||
@@ -33,14 +32,12 @@ export class ConsoleServiceImpl implements TwakeServiceProvider {
|
||||
|
||||
this.consoleOptions = {
|
||||
type: type,
|
||||
new_console: s.new_console,
|
||||
username: s.username,
|
||||
password: s.password,
|
||||
url: s.url,
|
||||
hook: {
|
||||
token: s.hook?.token,
|
||||
public_key: s.hook?.public_key,
|
||||
},
|
||||
authority: s.authority,
|
||||
client_id: s.client_id,
|
||||
client_secret: s.client_secret,
|
||||
audience: s.audience,
|
||||
issuer: s.issuer,
|
||||
redirect_uris: s.redirect_uris,
|
||||
disable_account_creation: s.disable_account_creation,
|
||||
};
|
||||
|
||||
@@ -50,24 +47,6 @@ export class ConsoleServiceImpl implements TwakeServiceProvider {
|
||||
return this;
|
||||
}
|
||||
|
||||
merge(
|
||||
baseUrl: string,
|
||||
concurrent: number = 1,
|
||||
dryRun: boolean = false,
|
||||
console: string = "console",
|
||||
link: boolean = true,
|
||||
client: string,
|
||||
secret: string,
|
||||
_context?: ExecutionContext,
|
||||
): MergeProgress {
|
||||
return new MergeProcess(this.services.database, dryRun, console, link, {
|
||||
type: "remote",
|
||||
username: client,
|
||||
password: secret,
|
||||
url: baseUrl,
|
||||
} as ConsoleOptions).merge(concurrent);
|
||||
}
|
||||
|
||||
getClient(): ConsoleServiceClient {
|
||||
return ConsoleClientFactory.create(this);
|
||||
}
|
||||
|
||||
@@ -126,14 +126,12 @@ export type ConsoleType = "remote" | "internal";
|
||||
|
||||
export type ConsoleOptions = {
|
||||
type: ConsoleType;
|
||||
new_console: boolean;
|
||||
username: string;
|
||||
password: string;
|
||||
url: string;
|
||||
hook: {
|
||||
token: string;
|
||||
public_key?: string;
|
||||
};
|
||||
authority: string;
|
||||
client_id: string;
|
||||
client_secret: string;
|
||||
issuer: string;
|
||||
audience: string;
|
||||
redirect_uris: string[];
|
||||
disable_account_creation: boolean;
|
||||
};
|
||||
|
||||
@@ -231,7 +229,7 @@ export interface ConsoleExecutionContext extends ExecutionContext {
|
||||
export interface AuthRequest {
|
||||
email?: string;
|
||||
password?: string;
|
||||
remote_access_token?: string;
|
||||
oidc_id_token?: string;
|
||||
}
|
||||
|
||||
export interface AuthResponse {
|
||||
|
||||
@@ -31,8 +31,8 @@ export class ConsoleController {
|
||||
}
|
||||
|
||||
async auth(request: FastifyRequest<{ Body: AuthRequest }>): Promise<AuthResponse> {
|
||||
if (request.body.remote_access_token) {
|
||||
return { access_token: await this.authByToken(request.body.remote_access_token) };
|
||||
if (request.body.oidc_id_token) {
|
||||
return { access_token: await this.authByToken(request.body.oidc_id_token) };
|
||||
} else if (request.body.email && request.body.password) {
|
||||
return { access_token: await this.authByPassword(request.body.email, request.body.password) };
|
||||
} else {
|
||||
@@ -283,12 +283,12 @@ export class ConsoleController {
|
||||
});
|
||||
}
|
||||
|
||||
private async authByToken(accessToken: string): Promise<AccessToken> {
|
||||
private async authByToken(idToken: string): Promise<AccessToken> {
|
||||
const client = gr.services.console.getClient();
|
||||
const userDTO = await client.getUserByAccessToken(accessToken);
|
||||
const userDTO = await client.getUserByAccessToken(idToken);
|
||||
const user = await client.updateLocalUserFromConsole(userDTO._id);
|
||||
if (!user) {
|
||||
throw CrudException.notFound(`User details not found for access token ${accessToken}`);
|
||||
throw CrudException.notFound(`User details not found for access token ${idToken}`);
|
||||
}
|
||||
return gr.platformServices.auth.generateJWT(user.id, user.email_canonical, {
|
||||
track: user?.preferences?.allow_tracking || false,
|
||||
|
||||
@@ -14,27 +14,7 @@ const routes: FastifyPluginCallback = (fastify: FastifyInstance, options, next)
|
||||
const accessControl = async (
|
||||
request: FastifyRequest<{ Body: ConsoleHookBody; Querystring: ConsoleHookQueryString }>,
|
||||
) => {
|
||||
if (gr.services.console.consoleType != "remote") {
|
||||
throw fastify.httpErrors.notImplemented("Hook service is only for the remote console");
|
||||
}
|
||||
|
||||
if (
|
||||
(request.body.secret_key || request.query.secret_key) !==
|
||||
gr.services.console.consoleOptions.hook.token
|
||||
) {
|
||||
throw fastify.httpErrors.forbidden("Wrong secret");
|
||||
}
|
||||
|
||||
const publicKey = gr.services.console.consoleOptions.hook.public_key;
|
||||
|
||||
if (publicKey) {
|
||||
const input = JSON.stringify({ content: request.body.content, type: request.body.type });
|
||||
const signatureBase64 = request.body.signature;
|
||||
const verifier = crypto.createVerify("RSA-SHA512").update(input);
|
||||
if (!verifier.verify(publicKey, signatureBase64, "base64")) {
|
||||
throw fastify.httpErrors.forbidden("Signature verification failed");
|
||||
}
|
||||
}
|
||||
throw fastify.httpErrors.notImplemented("Hook service doesn't exist anymore");
|
||||
};
|
||||
|
||||
fastify.route({
|
||||
|
||||
@@ -32,7 +32,7 @@ export const authenticationSchema = {
|
||||
properties: {
|
||||
email: { type: "string" },
|
||||
password: { type: "string" },
|
||||
remote_access_token: { type: "string" },
|
||||
oidc_id_token: { type: "string" },
|
||||
},
|
||||
},
|
||||
response: {
|
||||
|
||||
@@ -16,14 +16,15 @@ export type ServerConfiguration = {
|
||||
help_url: string | null;
|
||||
pricing_plan_url: string | null;
|
||||
app_download_url: string | null;
|
||||
app_grid: { logo: string; name: string; url: string }[];
|
||||
mobile: {
|
||||
mobile_redirect: string;
|
||||
mobile_appstore: string;
|
||||
mobile_googleplay: string;
|
||||
};
|
||||
accounts: {
|
||||
type: "console" | "internal";
|
||||
console: null | {
|
||||
type: "remote" | "internal";
|
||||
remote: null | {
|
||||
authority: string;
|
||||
client_id: string;
|
||||
account_management_url: string;
|
||||
|
||||
@@ -24,11 +24,12 @@ const routes: FastifyPluginCallback<{ configuration: ServerConfiguration["config
|
||||
"pricing_plan_url",
|
||||
"mobile",
|
||||
"app_download_url",
|
||||
"app_grid",
|
||||
),
|
||||
accounts: {
|
||||
type: accounts.type,
|
||||
console: _.pick(
|
||||
accounts.console,
|
||||
remote: _.pick(
|
||||
accounts.remote,
|
||||
"authority",
|
||||
"client_id",
|
||||
"account_management_url",
|
||||
|
||||
@@ -1456,6 +1456,14 @@
|
||||
"@nodelib/fs.scandir" "2.1.5"
|
||||
fastq "^1.6.0"
|
||||
|
||||
"@okta/jwt-verifier@^3.0.1":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@okta/jwt-verifier/-/jwt-verifier-3.0.1.tgz#10facad0424052e0cfd6477304cdc51d84ac60be"
|
||||
integrity sha512-8rNvCxAcgGlSJH9NilhYTrbZjyTPPF0ThJUDF/NI8XV/4NcqOFdO946meFsXpV1oFdZP6ASH/j2GjVhU4cHpPQ==
|
||||
dependencies:
|
||||
jwks-rsa "^3.0.0"
|
||||
njwt "^2.0.0"
|
||||
|
||||
"@redis/bloom@1.0.2":
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-1.0.2.tgz#42b82ec399a92db05e29fffcdfd9235a5fc15cdf"
|
||||
@@ -1703,6 +1711,14 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.36.tgz#00d9301d4dc35c2f6465a8aec634bb533674c652"
|
||||
integrity sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==
|
||||
|
||||
"@types/body-parser@*":
|
||||
version "1.19.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
|
||||
integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
|
||||
dependencies:
|
||||
"@types/connect" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/busboy@^0.2.3":
|
||||
version "0.2.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/busboy/-/busboy-0.2.4.tgz#19922f8c7076ad6d47b2565da8c0a94c88776315"
|
||||
@@ -1740,6 +1756,13 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/config/-/config-0.0.36.tgz#bf53ca640f3a1a6a2072a9f33e02a44def07a40b"
|
||||
integrity sha512-EoAeT1MyFWh2BJvBDEFInY714bQBbHOAucqxqqhprhbBFqr+B7fuN5T9CJqUIGDzvwubnKKRqmSo6yPo0aSpNw==
|
||||
|
||||
"@types/connect@*":
|
||||
version "3.4.35"
|
||||
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
|
||||
integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/cookie@^0.4.1":
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d"
|
||||
@@ -1768,6 +1791,25 @@
|
||||
resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz"
|
||||
integrity sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==
|
||||
|
||||
"@types/express-serve-static-core@^4.17.33":
|
||||
version "4.17.33"
|
||||
resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543"
|
||||
integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
"@types/qs" "*"
|
||||
"@types/range-parser" "*"
|
||||
|
||||
"@types/express@^4.17.14":
|
||||
version "4.17.17"
|
||||
resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4"
|
||||
integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==
|
||||
dependencies:
|
||||
"@types/body-parser" "*"
|
||||
"@types/express-serve-static-core" "^4.17.33"
|
||||
"@types/qs" "*"
|
||||
"@types/serve-static" "*"
|
||||
|
||||
"@types/fastify-multipart@^0.7.0":
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/fastify-multipart/-/fastify-multipart-0.7.0.tgz#fcbabfb35e69af0290a1c6c83199fc7e03855a51"
|
||||
@@ -1853,6 +1895,13 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/jsonwebtoken@^9.0.0":
|
||||
version "9.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#29b1369c4774200d6d6f63135bf3d1ba3ef997a4"
|
||||
integrity sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/keyv@^3.1.4":
|
||||
version "3.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
|
||||
@@ -1870,6 +1919,11 @@
|
||||
resolved "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz"
|
||||
integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==
|
||||
|
||||
"@types/mime@*":
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
|
||||
integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
|
||||
|
||||
"@types/minimatch@*":
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
|
||||
@@ -1926,6 +1980,11 @@
|
||||
resolved "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz"
|
||||
integrity sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==
|
||||
|
||||
"@types/node@^15.0.1":
|
||||
version "15.14.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa"
|
||||
integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==
|
||||
|
||||
"@types/normalize-package-data@^2.4.0":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
|
||||
@@ -1986,11 +2045,21 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/qs@*":
|
||||
version "6.9.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
|
||||
integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
|
||||
|
||||
"@types/random-useragent@^0.3.1":
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/random-useragent/-/random-useragent-0.3.1.tgz#1f0e1e08151f04d2c023ab77c8173dfa5b5049d2"
|
||||
integrity sha512-yVz7897JjjwS6V+lmxlu8pktzNnNWgtF9MGxfaRfI8o+hQageO9K+0hfwr8PspdFJIIRE9KkLqp4o5tlQqv/0w==
|
||||
|
||||
"@types/range-parser@*":
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
|
||||
integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
|
||||
|
||||
"@types/redis@^4.0.11":
|
||||
version "4.0.11"
|
||||
resolved "https://registry.yarnpkg.com/@types/redis/-/redis-4.0.11.tgz#0bb4c11ac9900a21ad40d2a6768ec6aaf651c0e1"
|
||||
@@ -2010,6 +2079,14 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91"
|
||||
integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==
|
||||
|
||||
"@types/serve-static@*":
|
||||
version "1.15.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d"
|
||||
integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==
|
||||
dependencies:
|
||||
"@types/mime" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/sharp@^0.29.5":
|
||||
version "0.29.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.29.5.tgz#9c7032d30d138ad16dde6326beaff2af757b91b3"
|
||||
@@ -2732,7 +2809,7 @@ base64-arraybuffer@0.1.4:
|
||||
resolved "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz"
|
||||
integrity sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==
|
||||
|
||||
base64-js@^1.3.1:
|
||||
base64-js@^1.3.1, base64-js@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
||||
@@ -3647,6 +3724,11 @@ crypto-browserify@^3.12.0:
|
||||
randombytes "^2.0.0"
|
||||
randomfill "^1.0.3"
|
||||
|
||||
crypto-js@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
|
||||
integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
|
||||
|
||||
crypto-random-string@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5"
|
||||
@@ -4031,7 +4113,7 @@ dynamic-dedupe@^0.3.0:
|
||||
dependencies:
|
||||
xtend "^4.0.0"
|
||||
|
||||
ecdsa-sig-formatter@1.0.11:
|
||||
ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.5:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
|
||||
integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
|
||||
@@ -4213,6 +4295,11 @@ es6-error@^4.1.1:
|
||||
resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
|
||||
integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
|
||||
|
||||
es6-promise@^4.2.8:
|
||||
version "4.2.8"
|
||||
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
|
||||
integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
|
||||
|
||||
escalade@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
|
||||
@@ -5572,6 +5659,18 @@ iconv-lite@0.4.24, iconv-lite@^0.4.4:
|
||||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3"
|
||||
|
||||
idtoken-verifier@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/idtoken-verifier/-/idtoken-verifier-2.2.3.tgz#1758e9b0596f7036134938d63e107a72045622b8"
|
||||
integrity sha512-hhpzB+MRgEvbwqzRLFdVbG55lKdXQVfeYEjAA2qu0UC72MSLeR0nX7P7rY5Dycz1aISHPOwq80hIPFoJ/+SItA==
|
||||
dependencies:
|
||||
base64-js "^1.5.1"
|
||||
crypto-js "^4.1.1"
|
||||
es6-promise "^4.2.8"
|
||||
jsbn "^1.1.0"
|
||||
unfetch "^4.2.0"
|
||||
url-join "^4.0.1"
|
||||
|
||||
ieee754@^1.1.13, ieee754@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
@@ -6475,6 +6574,11 @@ join-component@^1.1.0:
|
||||
resolved "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz"
|
||||
integrity sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==
|
||||
|
||||
jose@^4.10.0, jose@^4.10.4:
|
||||
version "4.13.1"
|
||||
resolved "https://registry.yarnpkg.com/jose/-/jose-4.13.1.tgz#449111bb5ab171db85c03f1bd2cb1647ca06db1c"
|
||||
integrity sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==
|
||||
|
||||
joycon@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03"
|
||||
@@ -6500,6 +6604,11 @@ js-yaml@^4.0.0:
|
||||
dependencies:
|
||||
argparse "^2.0.1"
|
||||
|
||||
jsbn@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
|
||||
integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
|
||||
|
||||
jsdom@^16.4.0:
|
||||
version "16.7.0"
|
||||
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
|
||||
@@ -6651,6 +6760,18 @@ jwa@^1.4.1:
|
||||
ecdsa-sig-formatter "1.0.11"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
jwks-rsa@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/jwks-rsa/-/jwks-rsa-3.0.1.tgz#ba79ddca7ee7520f7bb26b942ef1aee91df8d7e4"
|
||||
integrity sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==
|
||||
dependencies:
|
||||
"@types/express" "^4.17.14"
|
||||
"@types/jsonwebtoken" "^9.0.0"
|
||||
debug "^4.3.4"
|
||||
jose "^4.10.4"
|
||||
limiter "^1.1.5"
|
||||
lru-memoizer "^2.1.4"
|
||||
|
||||
jws@^3.2.2:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
|
||||
@@ -6747,6 +6868,11 @@ light-my-request@^4.2.0:
|
||||
process-warning "^1.0.0"
|
||||
set-cookie-parser "^2.4.1"
|
||||
|
||||
limiter@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.5.tgz#8f92a25b3b16c6131293a0cc834b4a838a2aa7c2"
|
||||
integrity sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==
|
||||
|
||||
lines-and-columns@^1.1.6:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
|
||||
@@ -6776,6 +6902,11 @@ locate-path@^6.0.0:
|
||||
dependencies:
|
||||
p-locate "^5.0.0"
|
||||
|
||||
lodash.clonedeep@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
||||
integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==
|
||||
|
||||
lodash.debounce@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz"
|
||||
@@ -6896,6 +7027,22 @@ lru-cache@^6.0.0:
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
lru-cache@~4.0.0:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
|
||||
integrity sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==
|
||||
dependencies:
|
||||
pseudomap "^1.0.1"
|
||||
yallist "^2.0.0"
|
||||
|
||||
lru-memoizer@^2.1.4:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-memoizer/-/lru-memoizer-2.2.0.tgz#b9d90c91637b4b1a423ef76f3156566691293df8"
|
||||
integrity sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==
|
||||
dependencies:
|
||||
lodash.clonedeep "^4.5.0"
|
||||
lru-cache "~4.0.0"
|
||||
|
||||
lru_map@^0.3.3:
|
||||
version "0.3.3"
|
||||
resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz"
|
||||
@@ -7329,6 +7476,15 @@ nice-try@^1.0.4:
|
||||
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
|
||||
|
||||
njwt@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/njwt/-/njwt-2.0.0.tgz#da8b7ad995980de67b8069dad63949d2bd5df27d"
|
||||
integrity sha512-1RcqirhCqThBEe4KO83pFg0wPBa1c9NiXNCrocD2EbZqb6ksWWDVnp/w/p0gsyUcVa05PhhaaPjs9rc/GLmdxQ==
|
||||
dependencies:
|
||||
"@types/node" "^15.0.1"
|
||||
ecdsa-sig-formatter "^1.0.5"
|
||||
uuid "^8.3.2"
|
||||
|
||||
node-abi@^3.3.0:
|
||||
version "3.22.0"
|
||||
resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz"
|
||||
@@ -7545,6 +7701,11 @@ object-copy@^0.1.0:
|
||||
define-property "^0.2.5"
|
||||
kind-of "^3.0.3"
|
||||
|
||||
object-hash@^2.0.1:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
|
||||
integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
|
||||
|
||||
object-inspect@^1.12.0, object-inspect@^1.9.0:
|
||||
version "1.12.2"
|
||||
resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz"
|
||||
@@ -7579,6 +7740,11 @@ object.pick@^1.3.0:
|
||||
dependencies:
|
||||
isobject "^3.0.1"
|
||||
|
||||
oidc-token-hash@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz#ae6beec3ec20f0fd885e5400d175191d6e2f10c6"
|
||||
integrity sha512-EvoOtz6FIEBzE+9q253HsLCVRiK/0doEJ2HCvvqMQb3dHZrP3WlJKYtJ55CRTw4jmYomzH4wkPuCj/I3ZvpKxQ==
|
||||
|
||||
on-exit-leak-free@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4"
|
||||
@@ -7610,6 +7776,16 @@ openapi-types@^10.0.0:
|
||||
resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-10.0.0.tgz"
|
||||
integrity sha512-Y8xOCT2eiKGYDzMW9R4x5cmfc3vGaaI4EL2pwhDmodWw1HlK18YcZ4uJxc7Rdp7/gGzAygzH9SXr6GKYIXbRcQ==
|
||||
|
||||
openid-client@^5.4.0:
|
||||
version "5.4.0"
|
||||
resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-5.4.0.tgz#77f1cda14e2911446f16ea3f455fc7c405103eac"
|
||||
integrity sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==
|
||||
dependencies:
|
||||
jose "^4.10.0"
|
||||
lru-cache "^6.0.0"
|
||||
object-hash "^2.0.1"
|
||||
oidc-token-hash "^5.0.1"
|
||||
|
||||
optionator@^0.8.1:
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
|
||||
@@ -8077,7 +8253,7 @@ ps-tree@^1.2.0:
|
||||
dependencies:
|
||||
event-stream "=3.3.4"
|
||||
|
||||
pseudomap@^1.0.2:
|
||||
pseudomap@^1.0.1, pseudomap@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz"
|
||||
integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
|
||||
@@ -9695,6 +9871,11 @@ undici@^3.3.6:
|
||||
resolved "https://registry.yarnpkg.com/undici/-/undici-3.3.6.tgz#06d3b97b7eeff46bce6f8a71079c09f64dd59dc1"
|
||||
integrity sha512-/j3YTZ5AobMB4ZrTY72mzM54uFUX32v0R/JRW9G2vOyF1uSKYAx+WT8dMsAcRS13TOFISv094TxIyWYk+WEPsA==
|
||||
|
||||
unfetch@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be"
|
||||
integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==
|
||||
|
||||
unicode-canonical-property-names-ecmascript@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz"
|
||||
@@ -9801,6 +9982,11 @@ urix@^0.1.0:
|
||||
resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz"
|
||||
integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==
|
||||
|
||||
url-join@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
|
||||
integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
|
||||
|
||||
url-parse-lax@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz"
|
||||
@@ -10148,7 +10334,7 @@ yallist@4.0.0, yallist@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||
|
||||
yallist@^2.1.2:
|
||||
yallist@^2.0.0, yallist@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
|
||||
integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
|
||||
|
||||
|
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 105 KiB |
@@ -2,9 +2,9 @@
|
||||
<html lang="en" translate="no">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Twake</title>
|
||||
<title>Tdrive</title>
|
||||
<meta name="google" content="notranslate">
|
||||
<meta name="description" content="Go to Twake application" />
|
||||
<meta name="description" content="Go to Tdrive application" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
|
||||
@@ -20,7 +20,7 @@
|
||||
width: 100vw;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
background: #0d0f38;
|
||||
background: #FFFFFF;
|
||||
}
|
||||
|
||||
#root {
|
||||
@@ -58,7 +58,7 @@
|
||||
color 6s ease-in-out infinite
|
||||
;
|
||||
stroke-linecap: round;
|
||||
stroke: #FFFFFF;
|
||||
stroke: #007AFF;
|
||||
}
|
||||
|
||||
@keyframes rotate{
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "Das alte Passwort ist falsch.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Ihre Passwörter stimmen nicht überein oder sind zu kurz; bitte geben Sie ein Passwort mit mindestens 8 Zeichen ein.",
|
||||
"scenes.apps.account.account.logout": "Abmelden",
|
||||
"scenes.apps.account.languages.text": "Sprache von Twake ändern.",
|
||||
"scenes.apps.account.languages.text": "Sprache von Tdrive ändern.",
|
||||
"scenes.apps.account.notifications.title": "Benachrichtigungen",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Schlüsselwörter",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "Dev, WLAN, Code, ...",
|
||||
@@ -146,7 +146,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "Sie müssen eine korrekte Adresse im E-Mail-Feld eingeben",
|
||||
"scenes.login.create_account.too_short_password": "Ihr Passwort muss mindestens 8 Zeichen umfassen.",
|
||||
"scenes.login.create_account.firstname": "Vorname",
|
||||
"scenes.login.create_account.newsletter": "Erhalten Sie Informationen über Twake",
|
||||
"scenes.login.create_account.newsletter": "Erhalten Sie Informationen über Tdrive",
|
||||
"scenes.login.create_account.lastname": "Nachname",
|
||||
"scenes.login.forgot_password.title": "Passwort vergessen?",
|
||||
"scenes.login.forgot_password.text": "Sie erhalten 9 Ziffern per E-Mail, um Ihre Identität zu bestätigen.",
|
||||
@@ -158,7 +158,7 @@
|
||||
"scenes.login.forgot_password.password": "Passwort",
|
||||
"scenes.login.forgot_password.password2": "Bestätigen Sie das Passwort",
|
||||
"scenes.login.forgot_password.password_dont_match": "Ihre Passwörter stimmen nicht überein oder sind zu kurz; bitte geben Sie ein Passwort mit mindestens 8 Zeichen ein.",
|
||||
"scenes.login.home.title": "Auf Twake anmelden",
|
||||
"scenes.login.home.title": "Auf Tdrive anmelden",
|
||||
"scenes.login.home.email": "E-Mail-Adresse",
|
||||
"scenes.login.home.unable_to_connect": "ID-Angaben ungültig",
|
||||
"scenes.login.home.password": "Passwort",
|
||||
@@ -168,7 +168,7 @@
|
||||
"general.help": "Hilfe",
|
||||
"general.help.support": "Unterstützung",
|
||||
"general.help.documentation": "Dokumentation",
|
||||
"scenes.login.footer.branding": "Sie befinden sich auf einem privaten {{$1}} ({{$2}}) Twake-Server. ",
|
||||
"scenes.login.footer.branding": "Sie befinden sich auf einem privaten {{$1}} ({{$2}}) Tdrive-Server. ",
|
||||
"scenes.login.home.subtitle": "Schön dich zu sehen",
|
||||
"scenes.login.create_account.password": "Passwort",
|
||||
"scenes.login.create_account.step_1_subtitle": "Nichts einfacher als das, wir brauchen nur ein paar Informationen.",
|
||||
@@ -194,8 +194,8 @@
|
||||
"scenes.app.workspaces.welcome_page.ready_to_work": "Sie können jetzt arbeiten.",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "Wir sehen uns!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Versuchen Sie es nochmal",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Willkommen bei Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Willkommen bei Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Sie können mehrere E-Mail-Adressen mit Ihrem Konto verknüpfen, es wird nur eine Adresse verwendet, um Ihnen Benachrichtigungen zu senden.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Hauptadresse",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Sekundäradressen",
|
||||
@@ -205,12 +205,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Wir haben Ihnen einen Verifizierungscode über {{$1}} geschickt",
|
||||
"scenes.app.workspaces.welcome_page.done": "Ich bin fertig",
|
||||
"scenes.login.forgot_password.finished": "Ihr Passwort wurde erfolgreich aktualisiert.",
|
||||
"scenes.apps.account.account.description_main": "Ihre Hauptadresse ist diejenige, an die Twake Ihre Benachrichtigungen sendet. Ihre sekundären Adressen ermöglichen es Ihnen, automatisch zu den Arbeitsbereichen eingeladen zu werden, die sie verwenden.",
|
||||
"scenes.apps.account.account.description_main": "Ihre Hauptadresse ist diejenige, an die Tdrive Ihre Benachrichtigungen sendet. Ihre sekundären Adressen ermöglichen es Ihnen, automatisch zu den Arbeitsbereichen eingeladen zu werden, die sie verwenden.",
|
||||
"scenes.apps.account.account.emails.description": "Verwalten Sie Ihre verschiedenen E-Mail-Adressen.",
|
||||
"scenes.apps.account.account.make_main": "Hauptleitung einstellen",
|
||||
"scenes.apps.account.account.password.description": "Ändern Sie Ihr Passwort.",
|
||||
"scenes.apps.account.identity": "Identität",
|
||||
"scenes.apps.account.identity.description": "Ändere deinen Vornamen, Nachnamen und dein Profilbild für andere Twake-Benutzer sichtbar.",
|
||||
"scenes.apps.account.identity.description": "Ändere deinen Vornamen, Nachnamen und dein Profilbild für andere Tdrive-Benutzer sichtbar.",
|
||||
"scenes.apps.account.preference": "Präferenzen",
|
||||
"general.open": "Offen",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Maximales Gewicht 5 mo",
|
||||
@@ -273,19 +273,19 @@
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Senden Sie eine erste Nachricht in einer Diskussion",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Diesen Rahmen nie wieder anzeigen?",
|
||||
"scenes.app.channelsbar.unread_sign": "als ungelesen markieren",
|
||||
"scenes.app.channelsbar.welcome": "Willkommen bei Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Werden Sie mit nur wenigen Klicks ein Twake-Profi !",
|
||||
"scenes.app.channelsbar.welcome": "Willkommen bei Tdrive",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Werden Sie mit nur wenigen Klicks ein Tdrive-Profi !",
|
||||
"scenes.app.mainview.instruction_current_tab": "Beginnen Sie mit der Auswahl eines Kanals auf der linken Seite.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Sie haben keinen Anschluss, der eine Verbindung zu einem Kanal herstellen kann.",
|
||||
"scenes.app.mainview.tabs.rename": "Umbenennen",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Konnektoren suchen ...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Bitte trennen Sie die Adressen mit einem Komma. Denken Sie daran, dass Twake die Anzahl der Einladungen basierend auf Ihrem Abonnement begrenzen kann.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Bitte trennen Sie die Adressen mit einem Komma. Denken Sie daran, dass Tdrive die Anzahl der Einladungen basierend auf Ihrem Abonnement begrenzen kann.",
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "Identität der Anwendung",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Testen Sie das Erscheinungsbild Ihrer Twacode-Nachrichten",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Ihre Bewerbung ist veröffentlicht, Sie können sie nicht bearbeiten.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Verwenden Sie * in der Entwicklung, um alle IP-Adressen zuzulassen.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Meine tolle Anwendung",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Nützliche Daten für die Twake-API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Nützliche Daten für die Tdrive-API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "API-Einstellungen",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Alle Manager dieses Unternehmens können diese Anwendung bearbeiten.",
|
||||
"scenes.app.popup.appsparameters.pages.app_privileges_information": "Definieren Sie, was Ihre Anwendung bearbeiten und lesen kann.",
|
||||
@@ -296,7 +296,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "Automatisch",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "Wenn Sie \"Automatisch\" aktivieren, wird diese Anwendung automatisch zu den nächsten Arbeitsbereichen dieser Firma hinzugefügt.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Zulässige IP-Adressen",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Die Veröffentlichung Ihrer Bewerbung wartet derzeit auf die Validierung durch die Twake-Teams.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Die Veröffentlichung Ihrer Bewerbung wartet derzeit auf die Validierung durch die Tdrive-Teams.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Kraft im gesamten Unternehmen",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Firmeninhaber",
|
||||
"scenes.app.popup.appsparameters.pages.configuration_label": "Aufbau",
|
||||
@@ -329,7 +329,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.modify_public_data": "Bearbeiten Sie die öffentlichen Daten Ihrer Anwendung.",
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Neue Bewerbung",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Optimales Format: 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Die unveröffentlichte Anwendung funktioniert nur in Ihrem Unternehmen. Wenn Sie sie allen Twake-Benutzern zur Verfügung stellen möchten, aktivieren Sie diese Option.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Die unveröffentlichte Anwendung funktioniert nur in Ihrem Unternehmen. Wenn Sie sie allen Tdrive-Benutzern zur Verfügung stellen möchten, aktivieren Sie diese Option.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Öffentliche Bewerbung",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Öffentliche Kennung",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "Bestimmen Sie die Sichtbarkeit Ihrer Anwendung.",
|
||||
@@ -343,7 +343,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "Anzeigen",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Zustand",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Diese Zeichenfolge identifiziert Ihre Anwendung und wird in Nachrichtenbefehlen verwendet.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode-Tester",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode-Tester",
|
||||
"scenes.app.popup.appsparameters.pages.update_button": "Aktualisieren",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "URL des Veranstaltungsempfangs",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "Warten auf …",
|
||||
@@ -502,7 +502,7 @@
|
||||
"scenes.login.verifymail.signin_button": "Einloggen",
|
||||
"scenes.login.verifymail.success": "Ihre E-Mail wurde erfolgreich verifiziert !",
|
||||
"scenes.login.verifymail.verification_waiting": "Warten auf Überprüfung...",
|
||||
"scenes.no_panic": "Keine Panik, lade diese Seite einfach neu, um Twake zu finden.",
|
||||
"scenes.no_panic": "Keine Panik, lade diese Seite einfach neu, um Tdrive zu finden.",
|
||||
"services.apps.calendar.deadline_icon": "Frist",
|
||||
"services.apps.calendar.event_icon": "Veranstaltung",
|
||||
"services.apps.calendar.move_icon": "Bewegung",
|
||||
@@ -580,7 +580,7 @@
|
||||
"components.on_boarding.popups.blocked_company.or": "Oder",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Hier klicken",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Möchten Sie mehr über den Abonnements für Organisationen erfahren?",
|
||||
"components.on_boarding.popups.blocked_company.description": "Ihr Abonnement für Twake ist abgelaufen. Bitte kontaktieren Sie den Administrator Ihrer Organisation, um es zu erneuern und wieder mit Ihrem Team kommunizieren zu können !",
|
||||
"components.on_boarding.popups.blocked_company.description": "Ihr Abonnement für Tdrive ist abgelaufen. Bitte kontaktieren Sie den Administrator Ihrer Organisation, um es zu erneuern und wieder mit Ihrem Team kommunizieren zu können !",
|
||||
"components.on_boarding.popups.blocked_company.title": "Ihre Organisation ist wegen eines Problems bei der Zahlungsabwicklung gesperrt",
|
||||
"components.on_boarding.company_billing_banner.link": "Abonnement für Organisationen",
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "Es gibt ein Problem mit Ihrem Organisationsabonnement. Bitte kontaktieren Sie den Organisatinsadministrator!",
|
||||
@@ -589,7 +589,7 @@
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Überspringen",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Mehr erfahren",
|
||||
"components.locked_features.locked_guests_popup.description": "Ups!!! Es scheint, dass Sie externe Benutzer zu Ihrem Arbeitsbereich einladen möchten. Sie sollten ein Upgrade Ihres Tarifs in Betracht ziehen, wenn Sie mit Gästen und externen Partnern zusammenarbeiten möchten. Prüfen Sie unsere Preisoptionen und wählen Sie die beste Option für Ihre Anforderungen an die Zusammenarbeit im Team.",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Diese Funktion ist in der kostenlosen Version von Twake nicht verfügbar",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Diese Funktion ist in der kostenlosen Version von Tdrive nicht verfügbar",
|
||||
"components.locked_features.locked_guests_popup.title": "Gästefunktion ist gesperrt",
|
||||
"components.locked_features.locked_history_banner.button": "Mehr erfahren",
|
||||
"components.locked_features.locked_history_banner.description": "Ihre Organisation hat eine Menge Nachrichten! Aktualisieren Sie jetzt, um auf den gesamten Nachrichtenverlauf zuzugreifen.",
|
||||
@@ -616,15 +616,15 @@
|
||||
"services.console_services.toaster.success_verify_email": "Ein Bestätigungslink wurde an Ihre E-Mail-Adresse verschickt",
|
||||
"services.console_services.toaster.add_email_error_message": "Fehler beim Hinzufügen von {{$1}}",
|
||||
"services.console_services.toaster.add_emails_error": "Beim Hinzufügen der E-Mail-Adresse(n) ist ein Fehler aufgetreten",
|
||||
"components.verify_mail.paragraph": "Sie können dies später tun, unbestätigte Konten haben aber nur einen begrenzten Zugriff auf die Funktionen von Twake",
|
||||
"components.verify_mail.paragraph": "Sie können dies später tun, unbestätigte Konten haben aber nur einen begrenzten Zugriff auf die Funktionen von Tdrive",
|
||||
"components.verify_mail.text": "Im ersten Schritt müssen Sie ihre E-Mail-Adresse bestätigen. Wir haben einen Bestätigungslink an folgende Adresse geschickt",
|
||||
"components.verify_mail.button": "Benutzer hinzufügen",
|
||||
"components.verify_mail.title_2": "Sie sind jetzt ein Twake-Benutzer!",
|
||||
"components.verify_mail.title_2": "Sie sind jetzt ein Tdrive-Benutzer!",
|
||||
"components.verify_mail.title_1": "Herzlichen Glückwunsch",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Geben Sie die E-Mails ihrer Benutzer ein*",
|
||||
"components.add_mails_workspace.title_2": "Twake ist ein Tool zur Zusammenarbeit in Teams, also laden Sie ein paar Anwender ein, um den Arbeitsbereich zu testen, den wir für Sie erstellt haben.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive ist ein Tool zur Zusammenarbeit in Teams, also laden Sie ein paar Anwender ein, um den Arbeitsbereich zu testen, den wir für Sie erstellt haben.",
|
||||
"components.add_mails_workspace.title_1": "Fügen Sie Benutzer hinzu",
|
||||
"components.add_mails_workspace.button": "Anfangen Twake zu benutzen",
|
||||
"components.add_mails_workspace.button": "Anfangen Tdrive zu benutzen",
|
||||
"components.blocked_account.trial_period_over": "Ihr Testzeitraum ist abgelaufen. Um ihr Benuzterkonto zu entsperren und Zugriff auf alle Funktionen zu erhalten, bestätigen Sie Ihr Benutzerkonto per E-Mail",
|
||||
"components.unverified_account.re_send_email": "Sie haben keine Mail bekommen?",
|
||||
"components.account_verication_status_blocked": "Gesperrt",
|
||||
@@ -655,7 +655,7 @@
|
||||
"components.newversion.new_version_modal.title": "Neues Update verfügbar !",
|
||||
"components.newversion.new_version_component.link": "Hier klicken um neu zu laden",
|
||||
"components.newversion.new_version_component.row.part_2": "Wir schlagen vor, die App neu zu laden und die neuen Features zu nutzen!",
|
||||
"components.newversion.new_version_component.row.part_1": "Sie benutzen eine veraltete Version von Twake",
|
||||
"components.newversion.new_version_component.row.part_1": "Sie benutzen eine veraltete Version von Tdrive",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} E-Mail(s) werden hinzugefügt",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "Diskussion verbergen",
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "Es gibt keine Benutzer in diesem Kanal, Sie können durch Klick auf \"Benutzer hinzufügen\" welche hinzufügen.",
|
||||
@@ -692,7 +692,7 @@
|
||||
"scenes.apps.drive.remove_attachs": "Anhänge entfernen",
|
||||
"components.attachmentpicker.remove_attach": "Anhang entfernen",
|
||||
"components.attachmentpicker.file": "Datei",
|
||||
"components.attachmentpicker.from_twake": "Aus Twake Dokumenten",
|
||||
"components.attachmentpicker.from_twake": "Aus Tdrive Dokumenten",
|
||||
"components.attachmentpicker.from_computer": "Vom Gerät",
|
||||
"scenes.apps.drive.move_text2": "Verschieben",
|
||||
"components.calendar.calendarselector.from": "Von",
|
||||
@@ -733,7 +733,7 @@
|
||||
"components.searchpopup.tags": "Tags",
|
||||
"components.searchpopup.filter_ws": "Workspaces filtern",
|
||||
"components.searchpopup.loading": "Weitere Ergebnisse werden geladen",
|
||||
"components.searchpopup.enter_text": "Geben Sie einen Text ein, um Twake zu durchsuchen.",
|
||||
"components.searchpopup.enter_text": "Geben Sie einen Text ein, um Tdrive zu durchsuchen.",
|
||||
"components.workspace.calendar.invalid": "Ungültig",
|
||||
"components.workspace.list_manager.all": "Alle",
|
||||
"components.workspace.list_manager.current_company": "Aktuelle Organisation",
|
||||
@@ -758,7 +758,7 @@
|
||||
"scenes.app.mainview.create_account": "Erstellen Sie ihren Workspace kostenlos unter ",
|
||||
"scenes.app.mainview.link_expired": "Dieser öffentliche Link ist ungültig oder abgelaufen.",
|
||||
"scenes.apps.account.message_user_signin": "Der Benutzer kann sich jederzeit mit der gleichen E-Mail anmelden und sein temporäres Konto in ein normales Konto umwandeln.",
|
||||
"scenes.apps.account.message_temporary": "Ein temporärer Account funktioniert wie ein normaler Twake Account, aber Sie erzeugen sein Passwort und können es bei Bedarf zurücksetzen.",
|
||||
"scenes.apps.account.message_temporary": "Ein temporärer Account funktioniert wie ein normaler Tdrive Account, aber Sie erzeugen sein Passwort und können es bei Bedarf zurücksetzen.",
|
||||
"scenes.apps.account.account.save": "Account speichern",
|
||||
"scenes.apps.account.account.send_info": "Schicken Sie diese Anmeldedaten an den Benutzer.",
|
||||
"scenes.apps.account.account.password_for_user": "Ihr Passwort",
|
||||
@@ -778,7 +778,7 @@
|
||||
"scenes.apps.tasks.board.tasks.subtask": "Unteraufgabe",
|
||||
"scenes.apps.tasks.board.place_holder": "Name des Boards",
|
||||
"scenes.apps.tasks.my_tasks": "Meine Aufgaben",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Laden Sie Twake Desktop herunter, um die Vorschau in der App anzuzeigen",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Laden Sie Tdrive Desktop herunter, um die Vorschau in der App anzuzeigen",
|
||||
"scenes.apps.messages.input.show_formatting": "Formatierungen anzeigen",
|
||||
"scenes.apps.messages.input.send_message": "Nachricht senden",
|
||||
"scenes.apps.messages.new_thread": "Neue Diskussion beginnen",
|
||||
@@ -829,7 +829,7 @@
|
||||
"app.state.recoil.hooks.use_current_company_applications.toaster_add": "{{$1}} erfolgreich zu Ihrem Unternehmen hinzugefügt",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Weitere Pläne anzeigen",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Anzahl Nachrichten",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "In der kostenfreien Version von Twake können Sie nur die {{$1}} neusten Nachrichten ansehen.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "In der kostenfreien Version von Tdrive können Sie nur die {{$1}} neusten Nachrichten ansehen.",
|
||||
"scenes.apps.messages.input.replied_to": "antwortete auf ",
|
||||
"scenes.app.popup.adduser.magiclinks.new_link_generated": "Neuer Link generiert",
|
||||
"scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Erfolgreich in die Zwischenablage kopiert",
|
||||
@@ -840,7 +840,7 @@
|
||||
"scenes.join.wrong_link_title": "Dieser Link ist nicht mehr verfügbar",
|
||||
"scenes.join.wrong_link_description": "Bitten Sie die Person, die Sie eingeladen hat, diesem Unternehmen beizutreten, um einen neuen Link oder gründen Sie Ihr eigenes Unternehmen",
|
||||
"scenes.join.join_workspace_from_company": "Treten Sie {{$1}} von {{$2}} bei!",
|
||||
"scenes.join.twake_description": "Twake ist ein digitaler quelloffener Arbeitsbereich, der die Produktivität Ihres Teams verbessert",
|
||||
"scenes.join.twake_description": "Tdrive ist ein digitaler quelloffener Arbeitsbereich, der die Produktivität Ihres Teams verbessert",
|
||||
"scenes.join.login_first_button": "Melden Sie sich an oder erstellen Sie zunächst ein Konto",
|
||||
"scenes.join.join_the_team_button": "Treten Sie dem Team bei",
|
||||
"scenes.join.create_the_company_button": "Das Unternehmen erstellen",
|
||||
@@ -877,7 +877,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Mir ist bekannt, dass der Inhaber und die Verwalter dieses Unternehmens diesen Antrag ändern und veröffentlichen können.",
|
||||
"twake.application.access.title": "Wählen Sie die richtigen Bereiche für Ihre Anwendung.",
|
||||
"twake.application.access.no_default_scopes_available'": "Diese Integration hat keinen Zugang zu {{$1}}",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "die Twake-API-Dokumentation",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "die Tdrive-API-Dokumentation",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Wenn Sie nicht wissen, wie Sie diese ausfüllen sollen, gehen Sie zu ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Privat Schlüssel",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "Anwendung {{$1}} erfolgreich entfernt!",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.integrations_parameters.add_application": "Neue Einbindung",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Entwicklereinstellungen",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Auf der Suche nach mehr",
|
||||
"components.open_desktop_popup.subtitle": "in der Twake-App geöffnet",
|
||||
"components.open_desktop_popup.subtitle": "in der Tdrive-App geöffnet",
|
||||
"components.open_desktop_popup.open_here_link": "Öffnen Sie stattdessen hier",
|
||||
"molecules.download_banner.title": "Holen Sie das Beste aus Twake heraus, laden Sie jetzt die Desktop-App herunter",
|
||||
"molecules.download_banner.title": "Holen Sie das Beste aus Tdrive heraus, laden Sie jetzt die Desktop-App herunter",
|
||||
"molecules.download_banner.download_button": "Laden Sie die Desktop-App herunter",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Kanallink kopieren",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Erfolgreich aktualisiert",
|
||||
@@ -932,7 +932,7 @@
|
||||
"scenes.apps.messages.jump": "Zur Nachricht springen",
|
||||
"components.channel_attachement_list.open": "Galerie öffnen",
|
||||
"scenes.apps.account.on_console": "Um Ihre globalen Kontoeinstellungen zu bearbeiten, klicken Sie auf Go to Console.",
|
||||
"scenes.apps.account.assistant.description": "Der Twake-Assistent ist in der Lage, Ihre tägliche Arbeit mit Twake zu verstehen und intelligente Verknüpfungen und Aktionen während Ihres Tages bereitzustellen. Der Assistent ist Teil der Work@Home-Initiative https://workathome.linagora.com/ und wird derzeit nur im Unternehmen Linagora getestet und befindet sich in der Lernphase. Das bedeutet, dass wir Twake-Nutzungsdaten senden, um unsere zukünftige Assistentenfunktion zu trainieren.",
|
||||
"scenes.apps.account.assistant.description": "Der Tdrive-Assistent ist in der Lage, Ihre tägliche Arbeit mit Tdrive zu verstehen und intelligente Verknüpfungen und Aktionen während Ihres Tages bereitzustellen. Der Assistent ist Teil der Work@Home-Initiative https://workathome.linagora.com/ und wird derzeit nur im Unternehmen Linagora getestet und befindet sich in der Lernphase. Das bedeutet, dass wir Tdrive-Nutzungsdaten senden, um unsere zukünftige Assistentenfunktion zu trainieren.",
|
||||
"scenes.apps.account.assistant.share.all": "Teilen Sie alles, einschließlich Nachrichten und Dateiinhalte",
|
||||
"scenes.apps.account.assistant.share.metadata": "Teilen Sie Metadaten, aber keine Inhalte",
|
||||
"scenes.apps.account.assistant.success": "Ihre Einstellungen wurden erfolgreich aktualisiert.",
|
||||
|
||||
@@ -125,9 +125,9 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "Old password is not correct.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Your passwords do not match or they are too short. Please type a password with at least 8 characters.",
|
||||
"scenes.apps.account.account.logout": "Logout",
|
||||
"scenes.apps.account.languages.text": "Change Twake language.",
|
||||
"scenes.apps.account.languages.text": "Change Tdrive language.",
|
||||
"scenes.apps.account.assistant.title": "Assistant",
|
||||
"scenes.apps.account.assistant.description": "Twake assistant is able to make sense of your everyday work on Twake and provide smart shortcuts and actions during your day. The assistant is part of the Work@Home initiative https://workathome.linagora.com/ and is currently being tested only in the Linagora company and is in the learning phase. It means we will send Twake usage data in order to train our future assistant feature.",
|
||||
"scenes.apps.account.assistant.description": "Tdrive assistant is able to make sense of your everyday work on Tdrive and provide smart shortcuts and actions during your day. The assistant is part of the Work@Home initiative https://workathome.linagora.com/ and is currently being tested only in the Linagora company and is in the learning phase. It means we will send Tdrive usage data in order to train our future assistant feature.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Do not share anything with the assistant (disable assistant)",
|
||||
"scenes.apps.account.assistant.share.all": "Share everything including messages and files contents",
|
||||
"scenes.apps.account.assistant.share.metadata": "Share metadata but not contents",
|
||||
@@ -173,7 +173,7 @@
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "Archive all tasks",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Remove archived tasks ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "Go to twakeapp.com",
|
||||
"scenes.login.footer.branding": "You are on a {{$1}} ({{$2}}) private Twake server. ",
|
||||
"scenes.login.footer.branding": "You are on a {{$1}} ({{$2}}) private Tdrive server. ",
|
||||
"scenes.login.create_account.title": "Create a new account",
|
||||
"scenes.login.create_account.email": "E-mail",
|
||||
"scenes.login.create_account.email_used": "This e-mail is already in use.",
|
||||
@@ -183,7 +183,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "You must fill in your email with a correct email",
|
||||
"scenes.login.create_account.too_short_password": "Your password must contain at least 8 characters.",
|
||||
"scenes.login.create_account.firstname": "First name",
|
||||
"scenes.login.create_account.newsletter": "Receive information about Twake",
|
||||
"scenes.login.create_account.newsletter": "Receive information about Tdrive",
|
||||
"scenes.login.create_account.lastname": "Last name",
|
||||
"scenes.login.forgot_password.title": "Forgot password?",
|
||||
"scenes.login.forgot_password.text": "You will receive a 9-digit code by e-mail to verify your identity.",
|
||||
@@ -195,7 +195,7 @@
|
||||
"scenes.login.forgot_password.password": "Password",
|
||||
"scenes.login.forgot_password.password2": "Confirm password",
|
||||
"scenes.login.forgot_password.password_dont_match": "Your passwords don't match or they are too short. Please type a password with at least 8 characters.",
|
||||
"scenes.login.home.title": "Sign in to Twake",
|
||||
"scenes.login.home.title": "Sign in to Tdrive",
|
||||
"scenes.login.home.subtitle": "Happy to see you",
|
||||
"scenes.login.home.email": "E-mail",
|
||||
"scenes.login.home.unable_to_connect": "Invalid credentials",
|
||||
@@ -228,8 +228,8 @@
|
||||
"scenes.app.workspaces.welcome_page.ready_to_work": "You're ready to work now.",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "See you soon!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Try again",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Welcome to Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Welcome to Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "You can link multiple e-mail addresses to your account; only one address will be used to send you notifications.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Main address",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Secondary addresses",
|
||||
@@ -239,12 +239,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "We sent you a verification code via {{$1}}",
|
||||
"scenes.app.workspaces.welcome_page.done": "I'm done",
|
||||
"scenes.login.forgot_password.finished": "Your password was successfully updated.",
|
||||
"scenes.apps.account.account.description_main": "Your main address is where Twake sends your notifications. Your secondary addresses allow you to be automatically invited to the workspaces that use them.",
|
||||
"scenes.apps.account.account.description_main": "Your main address is where Tdrive sends your notifications. Your secondary addresses allow you to be automatically invited to the workspaces that use them.",
|
||||
"scenes.apps.account.account.emails.description": "Manage your different e-mail addresses.",
|
||||
"scenes.apps.account.account.make_main": "Set main",
|
||||
"scenes.apps.account.account.password.description": "Change your password.",
|
||||
"scenes.apps.account.identity": "Identity",
|
||||
"scenes.apps.account.identity.description": "Change your first name, last name and profile image visible to other Twake users.",
|
||||
"scenes.apps.account.identity.description": "Change your first name, last name and profile image visible to other Tdrive users.",
|
||||
"scenes.apps.account.preference": "Preferences",
|
||||
"general.open": "Open",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Maximum size 5 MB",
|
||||
@@ -288,7 +288,7 @@
|
||||
"scenes.app.channelsbar.currentuser.reactivate_notifications": "Reactivate",
|
||||
"scenes.app.channelsbar.currentuser.user_parameter": "Notification settings",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Messages number",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "On the free version of Twake, you cannot access more than {{$1}} recent messages.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "On the free version of Tdrive, you cannot access more than {{$1}} recent messages.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Show more plans",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "New private discussion",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "No private messages. Invite users!",
|
||||
@@ -334,13 +334,13 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Private",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Send your first message in a discussion",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Never show this frame again?",
|
||||
"scenes.app.channelsbar.welcome": "Welcome to Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Become a Twake pro in just a few clicks!",
|
||||
"scenes.app.channelsbar.welcome": "Welcome to Tdrive",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Become a Tdrive pro in just a few clicks!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Start by selecting a channel on your left.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "You have no connector that can connect to a channel.",
|
||||
"scenes.app.mainview.tabs.rename": "Rename",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Search connectors...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Please separate the addresses with a comma or space. Remember that Twake can limit the number of invitations based on your subscription.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Please separate the addresses with a comma or space. Remember that Tdrive can limit the number of invitations based on your subscription.",
|
||||
"scenes.app.popup.adduser.magiclinks.genrator_info": "Invitation link to the workspace",
|
||||
"scenes.app.popup.adduser.magiclinks.new_link_generated": "New link generated",
|
||||
"scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Successfully copied to clipboard",
|
||||
@@ -351,7 +351,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Your application is published, you can not edit it.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Use * in development to allow all IP addresses.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "My amazing app",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Useful data for the Twake API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Useful data for the Tdrive API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "API settings",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Application name",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "All managers of this company will be able to edit this application.",
|
||||
@@ -363,7 +363,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "Automatic",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "If you activate 'Automatic', this application will automatically be added to the next workspaces of this company.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Allowed IP addresses",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "The publication of your application is currently awaiting validation by the Twake team.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "The publication of your application is currently awaiting validation by the Tdrive team.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Force throughout the company",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Event of type '{{$1}}' and id '{{$2}}' with passives '{{$3}}'",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Company owner",
|
||||
@@ -395,7 +395,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "New application",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "ok",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Optimal format : 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "The unpublished application will only work in your company. If you want to make it available to all Twake users, activate this option.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "The unpublished application will only work in your company. If you want to make it available to all Tdrive users, activate this option.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Public application",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Public identifier",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "Determine the visibility of your application.",
|
||||
@@ -408,7 +408,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "Show",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "State",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "This string identifies your application and will be used in message commands.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode tester",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode tester",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "Url of events reception",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "Awaiting...",
|
||||
"scenes.app.popup.appsparameters.pages.website_label": "Website",
|
||||
@@ -597,7 +597,7 @@
|
||||
"scenes.login.verifymail.signin_button": "Log in",
|
||||
"scenes.login.verifymail.success": "Your e-mail was successfully verified!",
|
||||
"scenes.login.verifymail.verification_waiting": "Waiting for verification...",
|
||||
"scenes.no_panic": "Don't panic! Just reload this page to fix Twake.",
|
||||
"scenes.no_panic": "Don't panic! Just reload this page to fix Tdrive.",
|
||||
"services.apps.calendar.deadline_icon": "Deadline",
|
||||
"services.apps.calendar.event_icon": "Event",
|
||||
"services.apps.calendar.move_icon": "Move",
|
||||
@@ -621,7 +621,7 @@
|
||||
"scenes.apps.messages.input.hide_formatting": "Hide formatting",
|
||||
"scenes.apps.messages.input.show_formatting": "Show formatting",
|
||||
"scenes.tell_us": "Please tell us what you were doing at:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Download Twake Desktop to preview in app",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Download Tdrive Desktop to preview in app",
|
||||
"scenes.apps.tasks.my_tasks": "My tasks",
|
||||
"scenes.apps.tasks.board.place_holder": "Board name",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "Subtask",
|
||||
@@ -641,7 +641,7 @@
|
||||
"scenes.apps.account.account.password_for_user": "Password for your user",
|
||||
"scenes.apps.account.account.send_info": "Send this credential information to your user.",
|
||||
"scenes.apps.account.account.save": "Save account",
|
||||
"scenes.apps.account.message_temporary": "A temporary account works like a normal Twake account, but you create the password and you will be able to reset it if necessary.",
|
||||
"scenes.apps.account.message_temporary": "A temporary account works like a normal Tdrive account, but you create the password and you will be able to reset it if necessary.",
|
||||
"scenes.apps.account.message_user_signin": "Your user can sign in at anytime using this same e-mail and change the temporary account to a normal account.",
|
||||
"scenes.app.mainview.link_expired": "This public link is invalid or has expired.",
|
||||
"scenes.app.mainview.create_account": "Create your workspace for free on ",
|
||||
@@ -667,7 +667,7 @@
|
||||
"components.workspace.list_manager.all": "All",
|
||||
"components.workspace.calendar.invalid": "Invalid",
|
||||
"components.searchpopup.header_title": "Search",
|
||||
"components.searchpopup.enter_text": "Enter some text to search Twake.",
|
||||
"components.searchpopup.enter_text": "Enter some text to search Tdrive.",
|
||||
"components.searchpopup.loading": "Loading more results",
|
||||
"components.searchpopup.filter_ws": "Filter workspaces",
|
||||
"components.searchpopup.tags": "Tags",
|
||||
@@ -728,7 +728,7 @@
|
||||
"components.calendar.calendarselector.from": "From",
|
||||
"scenes.apps.drive.move_text2": "Move",
|
||||
"components.attachmentpicker.from_computer": "From your device",
|
||||
"components.attachmentpicker.from_twake": "From Twake Documents",
|
||||
"components.attachmentpicker.from_twake": "From Tdrive Documents",
|
||||
"components.attachmentpicker.file": "File",
|
||||
"components.attachmentpicker.remove_attach": "Remove attachment",
|
||||
"scenes.apps.drive.remove_attachs": "Remove attachments",
|
||||
@@ -777,7 +777,7 @@
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "There is no user in this channel, you can invite them by clicking on Add users.",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "Hide discussion",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} email(s) will be added",
|
||||
"components.newversion.new_version_component.row.part_1": "You are running an outdated Twake version",
|
||||
"components.newversion.new_version_component.row.part_1": "You are running an outdated Tdrive version",
|
||||
"components.newversion.new_version_component.row.part_2": "we suggest you to reload the app and enjoy our new features!",
|
||||
"components.newversion.new_version_component.link": "Click here to reload",
|
||||
"components.newversion.new_version_modal.title": "New update available !",
|
||||
@@ -814,15 +814,15 @@
|
||||
"components.account_verication_status_blocked": "Locked",
|
||||
"components.unverified_account.re_send_email": "Didn’t receive the email?",
|
||||
"components.blocked_account.trial_period_over": "Your trial period is over. To unlock your account and get access to all functionalities, please verify your account via email confirmation",
|
||||
"components.add_mails_workspace.button": "Start using Twake",
|
||||
"components.add_mails_workspace.button": "Start using Tdrive",
|
||||
"components.add_mails_workspace.title_1": "Add some users",
|
||||
"components.add_mails_workspace.title_2": "Twake is a team collaboration tool, so invite some users to test a workspace we created for you.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive is a team collaboration tool, so invite some users to test a workspace we created for you.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Enter emails of your users*",
|
||||
"components.verify_mail.title_1": "Congratulations",
|
||||
"components.verify_mail.title_2": "You are an official Twake user now!",
|
||||
"components.verify_mail.title_2": "You are an official Tdrive user now!",
|
||||
"components.verify_mail.button": "Add user",
|
||||
"components.verify_mail.text": "First of all, you have to verify your email address. We’ve sent a verification link to",
|
||||
"components.verify_mail.paragraph": "You can do it later if you want but unverified accounts have access to only a limited version of Twake",
|
||||
"components.verify_mail.paragraph": "You can do it later if you want but unverified accounts have access to only a limited version of Tdrive",
|
||||
"services.console_services.toaster.add_emails_error": "Error while adding email(s)",
|
||||
"services.console_services.toaster.add_email_error_message": "Error while adding {{$1}}",
|
||||
"services.console_services.toaster.success_verify_email": "A verification link has been sent to your email account",
|
||||
@@ -851,7 +851,7 @@
|
||||
"components.locked_features.locked_history_banner.description": "Your company has a lot of messages! Upgrade now to access all your message history.",
|
||||
"components.locked_features.locked_history_banner.button": "Learn more",
|
||||
"components.locked_features.locked_guests_popup.title": "Guests feature is locked",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "This feature is not available in the Twake free version",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "This feature is not available in the Tdrive free version",
|
||||
"components.locked_features.locked_guests_popup.description": "Whoops!! Seems like you want to invite external users to your workspace. You might want to consider upgrading your plan if you want to collaborate with guests and external partners. Explore our pricing options and select the best option for your team collaboration needs.",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Learn more",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Skip for Now",
|
||||
@@ -860,7 +860,7 @@
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "There is an issue with your company subscription. Please contact the owner or administrator of the company!",
|
||||
"components.on_boarding.company_billing_banner.link": "company subscription plan",
|
||||
"components.on_boarding.popups.blocked_company.title": "Your company is locked because of a payment issue",
|
||||
"components.on_boarding.popups.blocked_company.description": "Your subscription to Twake has expired. Please contact the owner or administrator of your company to renew it and be able to communicate with your team again !",
|
||||
"components.on_boarding.popups.blocked_company.description": "Your subscription to Tdrive has expired. Please contact the owner or administrator of your company to renew it and be able to communicate with your team again !",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Want to learn more about companies subscription plan ?",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Click here",
|
||||
"components.on_boarding.popups.blocked_company.or": "Or",
|
||||
@@ -869,7 +869,7 @@
|
||||
"scenes.apps.tasks.select_user": "Search user",
|
||||
"scenes.apps.messages.input.attach_file.from_computer": "From computer",
|
||||
"scenes.app.popup.workspaceparameter.pages.table_title": "Name",
|
||||
"scenes.client.main_view.main_header.search_input": "Search",
|
||||
"scenes.client.main_view.main_header.search_input": "Search documents",
|
||||
"scenes.apps.drive.new_link_title": "New link",
|
||||
"scenes.apps.drive.default_link_name": "Untitled",
|
||||
"components.emoji_picker.input_search_placeholder": "Search",
|
||||
@@ -900,7 +900,7 @@
|
||||
"components.locked_features.locked_workspace_popup.text": "Whoops!! Do you want to create a new workspace in your company? You might want to consider upgrading your plan. Explore our pricing options and select the best choice for your team collaboration needs.",
|
||||
"components.locked_features.locked_only_office_popup.title": "You can not edit this file",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "In the free version, you can not use onlyoffice.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Whoops!! Seems like you want to edit the file from Twake. You might want to consider upgrading your plan if you want to collaborate around office files. Explore our pricing options and select the best option for your team collaboration needs.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Whoops!! Seems like you want to edit the file from Tdrive. You might want to consider upgrading your plan if you want to collaborate around office files. Explore our pricing options and select the best option for your team collaboration needs.",
|
||||
"components.locked_features.locked_drive_popup.title": "You have just reached the drive limit",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "In the free version, you can store only 6GB.",
|
||||
"general.resume": "Resume",
|
||||
@@ -938,7 +938,7 @@
|
||||
"scenes.join.wrong_link_description": "Ask the person who invited you to join this company for a new link or create your own company",
|
||||
"scenes.join.create_the_company_button": "Create the company",
|
||||
"scenes.join.join_workspace_from_company": "Join {{$1}} from {{$2}}!",
|
||||
"scenes.join.twake_description": "Twake is an open-source digital workspace built to improve your team productivity",
|
||||
"scenes.join.twake_description": "Tdrive is an open-source digital workspace built to improve your team productivity",
|
||||
"scenes.join.login_first_button": "Log in or create an account first",
|
||||
"scenes.join.join_the_team_button": "Join the team",
|
||||
"scenes.app.channelsbar.currentuser.reset": "Reset",
|
||||
@@ -960,7 +960,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "I understand that the owner and administrators of this company will be able to modify and publish this application.",
|
||||
"twake.application.access.title": "Select the right scopes for your application.",
|
||||
"twake.application.access.no_default_scopes_available'": "This integration doesn't have any {{$1}} access",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "the Twake API documentation",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "the Tdrive API documentation",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "If you do not know how to fill these, go to ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Private key",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "Successfully removed application {{$1}} !",
|
||||
@@ -968,10 +968,10 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_published": "Successfully {{$1}} application!",
|
||||
"scenes.app.integrations_parameters.add_application": "New integration",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Developer settings",
|
||||
"components.open_desktop_popup.subtitle": "Opened in Twake app",
|
||||
"components.open_desktop_popup.subtitle": "Opened in Tdrive app",
|
||||
"components.open_desktop_popup.open_here_link": "Open in web instead",
|
||||
"components.open_desktop_popup.open_here_link_forever": "Never try to open app again",
|
||||
"molecules.download_banner.title": "Get the most out of Twake, download the desktop app now",
|
||||
"molecules.download_banner.title": "Get the most out of Tdrive, download the desktop app now",
|
||||
"molecules.download_banner.download_button": "Download desktop app",
|
||||
"components.channel_attachement_list.medias": "Medias",
|
||||
"components.channel_attachement_list.files": "Files",
|
||||
|
||||
@@ -36,15 +36,15 @@
|
||||
"scenes.login.forgot_password.password": "Pasvorto",
|
||||
"scenes.login.forgot_password.password2": "Konfirmu pasvorton",
|
||||
"scenes.login.forgot_password.password_dont_match": "Viaj pasvortoj ne kongruas aŭ ili estas tro mallongaj. Bonvolu tajpi pasvorton kun almenaŭ 8 signoj.",
|
||||
"scenes.login.home.title": "Ensalutu al Twake",
|
||||
"scenes.login.home.title": "Ensalutu al Tdrive",
|
||||
"scenes.login.home.subtitle": "Feliĉa vidi vin",
|
||||
"scenes.login.home.email": "Retpoŝto",
|
||||
"scenes.login.create_account.step_2_subtitle_b": "Via telefonnumero restas privata.",
|
||||
"scenes.login.create_account.step_3_mail_sent": "Ni sendis al vi aktivigan ligilon retpoŝte.",
|
||||
"scenes.login.create_account.step_3_subtitle": "Lasta paŝo — ni devas kontroli, ke vi ne estas roboto!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Provu denove",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Bonvenon al Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Bonvenon al Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Malĉefaj adresoj",
|
||||
"components.calendar.repetition.everyday": "Ĉiutage",
|
||||
"components.calendar.repetition.does_not_repeat": "Ne ripetas",
|
||||
@@ -72,7 +72,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_title": "Programo",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "Se vi aktivigas 'Aŭtomata', ĉi tiu aplikaĵo aŭtomate estos aldonita al la sekvaj laborspacoj de ĉi tiu kompanio.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Permesitaj IP-adresoj",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "La publikigo de via aplikaĵo nuntempe atendas validigon de la teamo de Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "La publikigo de via aplikaĵo nuntempe atendas validigon de la teamo de Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.go_back": "Reen",
|
||||
"scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "Komencu skribante vian mesaĝon en formato JSON.",
|
||||
"scenes.app.popup.appsparameters.pages.interne_availability_application": "Interna aplikaĵo",
|
||||
@@ -103,7 +103,7 @@
|
||||
"components.upload.drop_files": "Forigu viajn dosierojn ĉi tie",
|
||||
"components.channelworkspacelist.title": "Kanaloj",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} retpoŝto(j) estos aldonitaj",
|
||||
"components.newversion.new_version_component.row.part_1": "Vi funkcias malmodernan Twake-version",
|
||||
"components.newversion.new_version_component.row.part_1": "Vi funkcias malmodernan Tdrive-version",
|
||||
"components.newversion.new_version_component.row.part_2": "ni sugestas vin reŝargi la apon kaj ĝui niajn novajn funkciojn!",
|
||||
"components.newversion.new_version_component.link": "Klaku ĉi tie por reŝargi",
|
||||
"components.newversion.new_version_modal.title": "Nova ĝisdatigo disponebla!",
|
||||
@@ -231,7 +231,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "Malnova pasvorto ne estas ĝusta.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Viaj pasvortoj ne kongruas aŭ ili estas tro mallongaj. Bonvolu tajpi pasvorton kun almenaŭ 8 signoj.",
|
||||
"scenes.apps.account.account.logout": "Adiaŭi",
|
||||
"scenes.apps.account.languages.text": "Ŝanĝu Twake-lingvon.",
|
||||
"scenes.apps.account.languages.text": "Ŝanĝu Tdrive-lingvon.",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Ŝlosilvortoj",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "dev, wifi, kodo, ...",
|
||||
"scenes.apps.account.notifications.disturb_option_a": "Ne sendu al mi puŝajn sciigojn inter ",
|
||||
@@ -268,11 +268,11 @@
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "Arkivu ĉiujn taskojn",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Forigi arkivitajn taskojn ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "Iru al twakeapp.com",
|
||||
"scenes.login.footer.branding": "Vi estas sur {{$1}} ({{$2}}) privata Twake-servilo. ",
|
||||
"scenes.login.footer.branding": "Vi estas sur {{$1}} ({{$2}}) privata Tdrive-servilo. ",
|
||||
"scenes.login.create_account.title": "Kreu novan konton",
|
||||
"scenes.login.create_account.email": "Retpoŝto",
|
||||
"scenes.login.create_account.email_used": "Ĉi tiu retpoŝto jam estas uzata.",
|
||||
"scenes.login.create_account.newsletter": "Ricevu informojn pri Twake",
|
||||
"scenes.login.create_account.newsletter": "Ricevu informojn pri Tdrive",
|
||||
"scenes.login.create_account.lastname": "Familia nomo",
|
||||
"scenes.login.forgot_password.title": "Ĉu vi forgesis la pasvorton?",
|
||||
"scenes.login.forgot_password.text": "Vi ricevos 9-ciferan kodon retpoŝte por kontroli vian identecon.",
|
||||
@@ -314,12 +314,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Ni sendis al vi konfirmkodon per {{$1}}",
|
||||
"scenes.app.workspaces.welcome_page.done": "Mi finis",
|
||||
"scenes.login.forgot_password.finished": "Via pasvorto estis sukcese ĝisdatigita.",
|
||||
"scenes.apps.account.account.description_main": "Via ĉefa adreso estas kie Twake sendas viajn sciigojn. Viaj malĉefaj adresoj permesas vin aŭtomate inviti al la laborspacoj, kiuj uzas ilin.",
|
||||
"scenes.apps.account.account.description_main": "Via ĉefa adreso estas kie Tdrive sendas viajn sciigojn. Viaj malĉefaj adresoj permesas vin aŭtomate inviti al la laborspacoj, kiuj uzas ilin.",
|
||||
"scenes.apps.account.account.emails.description": "Administru viajn malsamajn retadresojn.",
|
||||
"scenes.apps.account.account.make_main": "Agordu ĉefa",
|
||||
"scenes.apps.account.account.password.description": "Ŝanĝu vian pasvorton.",
|
||||
"scenes.apps.account.identity": "Identeco",
|
||||
"scenes.apps.account.identity.description": "Ŝanĝu vian antaŭnomon, familian nomon kaj profilbildon videblan por aliaj uzantoj de Twake.",
|
||||
"scenes.apps.account.identity.description": "Ŝanĝu vian antaŭnomon, familian nomon kaj profilbildon videblan por aliaj uzantoj de Tdrive.",
|
||||
"scenes.apps.account.preference": "Agordoj",
|
||||
"general.open": "Malfermi",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Maksimuma grandeco 5 MB",
|
||||
@@ -349,7 +349,7 @@
|
||||
"scenes.app.channelsbar.currentuser.reactivate_notifications": "Reaktivigi",
|
||||
"scenes.app.channelsbar.currentuser.user_parameter": "Sciigaj agordoj",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Numero de mesaĝoj",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "En la senpaga versio de Twake, vi ne povas aliri pli ol {{$1}} lastatempajn mesaĝojn.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "En la senpaga versio de Tdrive, vi ne povas aliri pli ol {{$1}} lastatempajn mesaĝojn.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Montru pliajn planojn",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "Nova privata diskuto",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Neniuj privataj mesaĝoj. Invitu uzantojn!",
|
||||
@@ -367,13 +367,13 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Privata",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Sendu vian unuan mesaĝon en diskuto",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Ĉu vi neniam plu montri ĉi tiun kadron?",
|
||||
"scenes.app.channelsbar.welcome": "Bonvenon al Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Fariĝu Twake-profesiulo per nur kelkaj klakoj!",
|
||||
"scenes.app.channelsbar.welcome": "Bonvenon al Tdrive",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Fariĝu Tdrive-profesiulo per nur kelkaj klakoj!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Komencu elektante kanalon maldekstre.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Vi ne havas konektilon, kiu povas konektiĝi al kanalo.",
|
||||
"scenes.app.mainview.tabs.rename": "Ŝanĝi nomon",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Serĉu konektilojn...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Bonvolu apartigi la adresojn per komo aŭ spaco. Memoru, ke Twake povas limigi la nombron da invitoj laŭ via abono.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Bonvolu apartigi la adresojn per komo aŭ spaco. Memoru, ke Tdrive povas limigi la nombron da invitoj laŭ via abono.",
|
||||
"scenes.app.popup.adduser.magiclinks.genrator_info": "Invita ligo al la laborspaco",
|
||||
"scenes.app.popup.adduser.magiclinks.new_link_generated": "Nova ligilo generita",
|
||||
"scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Sukcese kopiita al tondujo",
|
||||
@@ -384,7 +384,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Via kandidatiĝo estas publikigita, vi ne povas redakti ĝin.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Uzu * en evoluo por permesi ĉiujn IP-adresojn.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Mia mirinda apo",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Utilaj datumoj por la Twake API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Utilaj datumoj por la Tdrive API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "API-agordoj",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Nomo de la aplikaĵo",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Ĉiuj administrantoj de ĉi tiu kompanio povos redakti ĉi tiun aplikaĵon.",
|
||||
@@ -416,7 +416,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Nova aplikaĵo",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "bone",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Optimuma formato: 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "La neeldonita aplikaĵo funkcios nur en via kompanio. Se vi volas disponigi ĝin al ĉiuj uzantoj de Twake, aktivigu ĉi tiun opcion.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "La neeldonita aplikaĵo funkcios nur en via kompanio. Se vi volas disponigi ĝin al ĉiuj uzantoj de Tdrive, aktivigu ĉi tiun opcion.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Publika aplikado",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Publika identigilo",
|
||||
"scenes.app.popup.appsparameters.pages.publication_label": "Publikigo",
|
||||
@@ -428,7 +428,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "Montri",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Stato",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Ĉi tiu ĉeno identigas vian aplikaĵon kaj estos uzata en mesaĝaj komandoj.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode-testilo",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode-testilo",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "Url de evento-ricevo",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "Atendante…",
|
||||
"scenes.app.popup.appsparameters.pages.website_label": "Retejo",
|
||||
@@ -591,7 +591,7 @@
|
||||
"scenes.help_us": "Tamen, se vi ŝatus helpi nin ripari ĉi tiun eraron, sendu al ni mesaĝon sube: ",
|
||||
"scenes.login.verifymail.alert": "Ni kontrolas vian retpoŝton!",
|
||||
"scenes.login.verifymail.verification_waiting": "Atendante konfirmon...",
|
||||
"scenes.no_panic": "Ne paniku! Nur reŝargi ĉi tiun paĝon por ripari Twake.",
|
||||
"scenes.no_panic": "Ne paniku! Nur reŝargi ĉi tiun paĝon por ripari Tdrive.",
|
||||
"services.apps.calendar.deadline_icon": "Limdato",
|
||||
"services.apps.calendar.event_icon": "Evento",
|
||||
"services.apps.calendar.move_icon": "Movi",
|
||||
@@ -615,7 +615,7 @@
|
||||
"scenes.apps.messages.input.hide_formatting": "Kaŝi formatadon",
|
||||
"scenes.apps.messages.input.show_formatting": "Montru formatadon",
|
||||
"scenes.tell_us": "Bonvolu diri al ni, kion vi faris ĉe:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Elŝutu Twake Desktop por antaŭrigardi en la programo",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Elŝutu Tdrive Desktop por antaŭrigardi en la programo",
|
||||
"scenes.apps.tasks.my_tasks": "Miaj taskoj",
|
||||
"scenes.apps.tasks.board.tasks.use_starttime": "Uzu komencan tempon",
|
||||
"scenes.apps.tasks.board.tasks.in_list": "En listo",
|
||||
@@ -626,7 +626,7 @@
|
||||
"scenes.apps.parameters.workspace_sections.workspace.logo_company": "Logo de la firmao",
|
||||
"scenes.app.popup.workspaceparameter.pages.logo_company_modify_description": "Redakti firmaobildon ",
|
||||
"scenes.apps.account.account.save": "Konservu konton",
|
||||
"scenes.apps.account.message_temporary": "Provizora konto funkcias kiel normala Twake-konto, sed vi kreas la pasvorton kaj vi povos rekomencigi ĝin se necese.",
|
||||
"scenes.apps.account.message_temporary": "Provizora konto funkcias kiel normala Tdrive-konto, sed vi kreas la pasvorton kaj vi povos rekomencigi ĝin se necese.",
|
||||
"scenes.apps.account.message_user_signin": "Via uzanto povas ensaluti iam ajn uzante ĉi tiun saman retpoŝton kaj ŝanĝi la provizoran konton al normala konto.",
|
||||
"scenes.app.mainview.link_expired": "Ĉi tiu publika ligo estas nevalida aŭ eksvalidiĝis.",
|
||||
"scenes.app.mainview.create_account": "Kreu vian laborspacon senpage ",
|
||||
@@ -652,7 +652,7 @@
|
||||
"components.workspace.list_manager.current_company": "Nuna firmao",
|
||||
"components.workspace.list_manager.all": "Ĉiuj",
|
||||
"components.workspace.calendar.invalid": "Nevalida",
|
||||
"components.searchpopup.enter_text": "Enigu iun tekston por serĉi Twake.",
|
||||
"components.searchpopup.enter_text": "Enigu iun tekston por serĉi Tdrive.",
|
||||
"components.searchpopup.loading": "Ŝargante pliajn rezultojn",
|
||||
"components.searchpopup.filter_ws": "Filtri la laborspacojn",
|
||||
"components.searchpopup.tags": "Etikedoj",
|
||||
@@ -693,7 +693,7 @@
|
||||
"components.calendar.calendarselector.from": "De",
|
||||
"scenes.apps.drive.move_text2": "Movi",
|
||||
"components.attachmentpicker.from_computer": "De via aparato",
|
||||
"components.attachmentpicker.from_twake": "De Twake Dokumentoj",
|
||||
"components.attachmentpicker.from_twake": "De Tdrive Dokumentoj",
|
||||
"components.attachmentpicker.file": "Dosiero",
|
||||
"components.attachmentpicker.remove_attach": "Forigi aldonaĵon",
|
||||
"scenes.apps.drive.remove_attachs": "Forigi aldonaĵojn",
|
||||
@@ -752,15 +752,15 @@
|
||||
"components.account_verication_status_blocked": "Ŝlosita",
|
||||
"components.unverified_account.re_send_email": "Ĉu ne ricevis la retmesaĝon?",
|
||||
"components.blocked_account.trial_period_over": "Via provperiodo finiĝis. Por malŝlosi vian konton kaj akiri aliron al ĉiuj funkcioj, bonvolu kontroli vian konton per retpoŝta konfirmo",
|
||||
"components.add_mails_workspace.button": "Komencu uzi Twake",
|
||||
"components.add_mails_workspace.button": "Komencu uzi Tdrive",
|
||||
"components.add_mails_workspace.title_1": "Aldonu kelkajn uzantojn",
|
||||
"components.add_mails_workspace.title_2": "Twake estas teama kunlabora ilo, do invitu kelkajn uzantojn testi laborspacon, kiun ni kreis por vi.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive estas teama kunlabora ilo, do invitu kelkajn uzantojn testi laborspacon, kiun ni kreis por vi.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Enigu retpoŝtojn de viaj uzantoj*",
|
||||
"components.verify_mail.title_1": "Gratulon",
|
||||
"components.verify_mail.title_2": "Vi estas oficiala Twake-uzanto nun!",
|
||||
"components.verify_mail.title_2": "Vi estas oficiala Tdrive-uzanto nun!",
|
||||
"components.verify_mail.button": "Aldonu uzanton",
|
||||
"components.verify_mail.text": "Antaŭ ĉio, vi devas kontroli vian retadreson. Ni sendis konfirman ligon al",
|
||||
"components.verify_mail.paragraph": "Vi povas fari ĝin poste, se vi volas, sed nekontrolitaj kontoj havas aliron al nur limigita versio de Twake",
|
||||
"components.verify_mail.paragraph": "Vi povas fari ĝin poste, se vi volas, sed nekontrolitaj kontoj havas aliron al nur limigita versio de Tdrive",
|
||||
"services.console_services.toaster.add_emails_error": "Eraro dum aldono de retpoŝto(j)",
|
||||
"services.console_services.toaster.add_email_error_message": "Eraro dum aldono de {{$1}}",
|
||||
"services.console_services.toaster.success_verify_email": "Konfirma ligilo estis sendita al via retpoŝta konto",
|
||||
@@ -782,7 +782,7 @@
|
||||
"components.locked_features.locked_history_banner.description": "Via kompanio havas multajn mesaĝojn! Ĝisdatigu nun por aliri vian tutan mesaĝhistorion.",
|
||||
"components.locked_features.locked_history_banner.button": "Lernu pli",
|
||||
"components.locked_features.locked_guests_popup.title": "Gastoj funkcio estas ŝlosita",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Ĉi tiu funkcio ne disponeblas en la senpaga versio de Twake",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Ĉi tiu funkcio ne disponeblas en la senpaga versio de Tdrive",
|
||||
"components.locked_features.locked_guests_popup.description": "Hus!! Ŝajnas, ke vi volas inviti eksterajn uzantojn al via laborejo. Vi eble volas konsideri ĝisdatigi vian planon se vi volas kunlabori kun gastoj kaj eksteraj partneroj. Esploru niajn prezajn elektojn kaj elektu la plej bonan eblon por viaj teamaj kunlaboraj bezonoj.",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Lernu pli",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Saltu por Nun",
|
||||
@@ -790,7 +790,7 @@
|
||||
"components.on_boarding.company_billing_banner.admin_or_owner_text": "Estas problemo kun via firmaa abono. Bonvolu rigardi vian",
|
||||
"components.on_boarding.company_billing_banner.link": "abonplano de kompanio",
|
||||
"components.on_boarding.popups.blocked_company.title": "Via firmao estas ŝlosita pro pagoproblemo",
|
||||
"components.on_boarding.popups.blocked_company.description": "Via abono al Twake eksvalidiĝis. Bonvolu kontakti la posedanton aŭ administranton de via firmao por renovigi ĝin kaj povi komuniki kun via teamo denove!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Via abono al Tdrive eksvalidiĝis. Bonvolu kontakti la posedanton aŭ administranton de via firmao por renovigi ĝin kaj povi komuniki kun via teamo denove!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Ĉu vi volas lerni pli pri firmaa abonplano?",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Klaku ĉi tie",
|
||||
"components.on_boarding.popups.blocked_company.or": "Aŭ",
|
||||
@@ -827,7 +827,7 @@
|
||||
"components.locked_features.locked_workspace_popup.subtitle": "En la senpaga versio, vi povas havi nur unu laborspacon en via kompanio.",
|
||||
"components.locked_features.locked_workspace_popup.text": "Hus!! Ĉu vi volas krei novan laborspacon en via kompanio? Vi eble volas konsideri ĝisdatigi vian planon. Esploru niajn prezajn elektojn kaj elektu la plej bonan elekton por viaj teamaj kunlaboraj bezonoj.",
|
||||
"components.locked_features.locked_only_office_popup.title": "Vi ne povas redakti ĉi tiun dosieron",
|
||||
"components.locked_features.locked_only_office_popup.text": "Hus!! Ŝajnas, ke vi volas redakti la dosieron de Twake. Vi eble volas konsideri ĝisdatigi vian planon se vi volas kunlabori ĉirkaŭ oficejaj dosieroj. Esploru niajn prezajn elektojn kaj elektu la plej bonan eblon por viaj teamaj kunlaboraj bezonoj.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Hus!! Ŝajnas, ke vi volas redakti la dosieron de Tdrive. Vi eble volas konsideri ĝisdatigi vian planon se vi volas kunlabori ĉirkaŭ oficejaj dosieroj. Esploru niajn prezajn elektojn kaj elektu la plej bonan eblon por viaj teamaj kunlaboraj bezonoj.",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "En la senpaga versio, vi povas stoki nur 6GB.",
|
||||
"general.pause": "Paŭzo",
|
||||
"scenes.app.integrations_parameters.title": "Integriĝoj",
|
||||
@@ -856,7 +856,7 @@
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.prefix": "Eraro",
|
||||
"scenes.join.create_the_company_button": "Kreu la kompanion",
|
||||
"scenes.join.join_workspace_from_company": "Aliĝu al {{$1}} de {{$2}}!",
|
||||
"scenes.join.twake_description": "Twake estas malfermfonta cifereca laborejo konstruita por plibonigi vian teaman produktivecon",
|
||||
"scenes.join.twake_description": "Tdrive estas malfermfonta cifereca laborejo konstruita por plibonigi vian teaman produktivecon",
|
||||
"scenes.join.login_first_button": "Ensalutu aŭ kreu konton unue",
|
||||
"scenes.join.join_the_team_button": "Aliĝu al la teamo",
|
||||
"scenes.app.channelsbar.currentuser.reset": "Restarigi",
|
||||
@@ -877,7 +877,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Mi komprenas, ke la posedanto kaj administrantoj de ĉi tiu kompanio povos modifi kaj publikigi ĉi tiun aplikaĵon.",
|
||||
"twake.application.access.title": "Elektu la ĝustajn mediojn por via aplikaĵo.",
|
||||
"twake.application.access.no_default_scopes_available'": "Ĉi tiu integriĝo ne havas aliron {{$1}}.",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "la Twake API-dokumentado",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "la Tdrive API-dokumentado",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Se vi ne scias kiel plenigi ĉi tiujn, iru al ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Privata ŝlosilo",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "Sukcese forigita aplikaĵo {{$1}} !",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.integrations_parameters.add_application": "Nova integriĝo",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Agordoj por programistoj",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Serĉante pli",
|
||||
"components.open_desktop_popup.subtitle": "malfermita en Twake-aplikaĵo",
|
||||
"components.open_desktop_popup.subtitle": "malfermita en Tdrive-aplikaĵo",
|
||||
"components.open_desktop_popup.open_here_link": "Malfermu ĉi tie anstataŭe",
|
||||
"molecules.download_banner.title": "Profitu la plej grandan parton de Twake, elŝutu la labortablon nun",
|
||||
"molecules.download_banner.title": "Profitu la plej grandan parton de Tdrive, elŝutu la labortablon nun",
|
||||
"molecules.download_banner.download_button": "Elŝutu labortablan apon",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Kopiu kanala ligilo",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Sukcese ĝisdatigita",
|
||||
@@ -932,7 +932,7 @@
|
||||
"scenes.apps.messages.jump": "Saltu al mesaĝo",
|
||||
"components.channel_attachement_list.open": "Malfermu galerion",
|
||||
"scenes.apps.account.on_console": "Por redakti viajn tutmondajn kontajn preferojn, alklaku Iru al Konzolo.",
|
||||
"scenes.apps.account.assistant.description": "Twake-asistanto kapablas kompreni vian ĉiutagan laboron ĉe Twake kaj provizi inteligentajn ŝparvojojn kaj agojn dum via tago. La asistanto estas parto de la iniciato Work@Home https://workathome.linagora.com/ kaj nuntempe estas testata nur en la kompanio Linagora kaj estas en la lernado. Ĝi signifas, ke ni sendos datumojn pri uzado de Twake por trejni nian estontan asistantan funkcion.",
|
||||
"scenes.apps.account.assistant.description": "Tdrive-asistanto kapablas kompreni vian ĉiutagan laboron ĉe Tdrive kaj provizi inteligentajn ŝparvojojn kaj agojn dum via tago. La asistanto estas parto de la iniciato Work@Home https://workathome.linagora.com/ kaj nuntempe estas testata nur en la kompanio Linagora kaj estas en la lernado. Ĝi signifas, ke ni sendos datumojn pri uzado de Tdrive por trejni nian estontan asistantan funkcion.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Ne dividu ion kun la asistanto (malŝaltu asistanton)",
|
||||
"scenes.apps.account.assistant.share.all": "Kunhavigu ĉion inkluzive de mesaĝoj kaj dosieroj enhavoj",
|
||||
"scenes.apps.account.assistant.share.metadata": "Kunhavigu metadatumojn sed ne enhavojn",
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "La contraseña anterior no es correcta.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Sus contraseñas no coinciden o son demasiado pequeñas, por favor escriba una contraseña con al menos 8 caracteres.",
|
||||
"scenes.apps.account.account.logout": "Cerrar sesión",
|
||||
"scenes.apps.account.languages.text": "Cambiar el idioma de Twake.",
|
||||
"scenes.apps.account.languages.text": "Cambiar el idioma de Tdrive.",
|
||||
"scenes.apps.account.notifications.title": "Notificaciones",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Palabras clave",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "dev, wifi, código, ...",
|
||||
@@ -89,7 +89,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "Debe completar su correo electrónico con un correo electrónico correcto",
|
||||
"scenes.login.create_account.too_short_password": "Su contraseña debe tener al menos 8 caracteres.",
|
||||
"scenes.login.create_account.firstname": "Nombre de pila",
|
||||
"scenes.login.create_account.newsletter": "Reciba información sobre Twake",
|
||||
"scenes.login.create_account.newsletter": "Reciba información sobre Tdrive",
|
||||
"scenes.login.create_account.lastname": "Apellido",
|
||||
"scenes.login.forgot_password.title": "Se te olvidó tu contraseña ?",
|
||||
"scenes.login.forgot_password.text": "Recibirá 9 dígitos por correo electrónico para verificar su identidad.",
|
||||
@@ -101,7 +101,7 @@
|
||||
"scenes.login.forgot_password.password": "Contraseña",
|
||||
"scenes.login.forgot_password.password2": "Confirmar contraseña",
|
||||
"scenes.login.forgot_password.password_dont_match": "Sus contraseñas no coinciden o son demasiado pequeñas, por favor escriba una contraseña con al menos 8 caracteres.",
|
||||
"scenes.login.home.title": "Iniciar sesión en Twake",
|
||||
"scenes.login.home.title": "Iniciar sesión en Tdrive",
|
||||
"scenes.login.home.email": "Correo electrónico",
|
||||
"scenes.login.home.unable_to_connect": "Credenciales no válidas",
|
||||
"scenes.login.home.password": "Contraseña",
|
||||
@@ -182,12 +182,12 @@
|
||||
"scenes.apps.account.thumbnail.max_weight": "Tamaño máximo 5 MB",
|
||||
"general.open": "Abrir",
|
||||
"scenes.apps.account.preference": "Preferencias",
|
||||
"scenes.apps.account.identity.description": "Cambia tu nombre, apellido e imagen de perfil visible para otros usuarios de Twake.",
|
||||
"scenes.apps.account.identity.description": "Cambia tu nombre, apellido e imagen de perfil visible para otros usuarios de Tdrive.",
|
||||
"scenes.apps.account.identity": "Identidad",
|
||||
"scenes.apps.account.account.password.description": "Cambia tu contraseña.",
|
||||
"scenes.apps.account.account.make_main": "Establecer principal",
|
||||
"scenes.apps.account.account.emails.description": "Gestione sus diferentes direcciones de correo electrónico.",
|
||||
"scenes.apps.account.account.description_main": "Tu dirección principal es donde Twake envía tus notificaciones. Tus direcciones secundarias te permiten ser invitado automáticamente a los espacios de trabajo que las utilizan.",
|
||||
"scenes.apps.account.account.description_main": "Tu dirección principal es donde Tdrive envía tus notificaciones. Tus direcciones secundarias te permiten ser invitado automáticamente a los espacios de trabajo que las utilizan.",
|
||||
"scenes.login.forgot_password.finished": "Su contraseña ha sido actualizada con éxito.",
|
||||
"scenes.app.workspaces.welcome_page.done": "He terminado",
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Te hemos enviado un código de verificación a través de {{$1}}",
|
||||
@@ -197,8 +197,8 @@
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Direcciones secundarias",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Dirección principal",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Puede vincular varias direcciones de correo electrónico a su cuenta; sólo se utilizará una dirección para enviarle notificaciones.",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "¡Bienvenido a Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "¡Bienvenido a Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Inténtalo de nuevo",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "¡Hasta pronto!",
|
||||
"scenes.app.workspaces.welcome_page.ready_to_work": "Ya estás listo para trabajar.",
|
||||
@@ -224,7 +224,7 @@
|
||||
"scenes.login.create_account.step_1_subtitle": "No podría ser más sencillo: sólo necesitamos algo de información.",
|
||||
"scenes.login.create_account.password": "Contraseña",
|
||||
"scenes.login.home.subtitle": "Me alegro de verte",
|
||||
"scenes.login.footer.branding": "Estás en un servidor Twake privado de {{$1}} ({{$2}}). ",
|
||||
"scenes.login.footer.branding": "Estás en un servidor Tdrive privado de {{$1}} ({{$2}}). ",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Eliminar tareas archivadas ({{$1}})",
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "Archivar todas las tareas",
|
||||
"scenes.apps.tasks.list_modal.predefined_participants": "Participantes predefinidos",
|
||||
@@ -261,7 +261,7 @@
|
||||
"components.locked_features.locked_workspace_popup.text": "¡Ups! Parece que desea crear un nuevo espacio de trabajo en su empresa. Es posible que desee considerar actualizar su plan si desea colaborar en varios espacios de trabajo. Explore nuestras opciones de precios y seleccione la mejor opción para las necesidades de colaboración de su equipo.",
|
||||
"components.locked_features.locked_only_office_popup.title": "No puedes editar este archivo",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "En la versión gratuita, no puede usar onlyoffice.",
|
||||
"components.locked_features.locked_only_office_popup.text": "¡Ups! Parece que desea editar el archivo de Twake. Es posible que desee considerar la posibilidad de actualizar su plan si desea colaborar en torno a los archivos de Office. Explore nuestras opciones de precios y seleccione la mejor opción para las necesidades de colaboración de su equipo.",
|
||||
"components.locked_features.locked_only_office_popup.text": "¡Ups! Parece que desea editar el archivo de Tdrive. Es posible que desee considerar la posibilidad de actualizar su plan si desea colaborar en torno a los archivos de Office. Explore nuestras opciones de precios y seleccione la mejor opción para las necesidades de colaboración de su equipo.",
|
||||
"components.locked_features.locked_drive_popup.title": "No puedes subir mas archivos",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "En la versión gratuita, puede almacenar solo 6 GB.",
|
||||
"components.calendar.repetition.repeat_on": "Repetir en",
|
||||
@@ -282,19 +282,19 @@
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Todos los directivos de esta empresa podrán editar esta aplicación.",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Nombre de la aplicación",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "Opciones de la API",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Datos útiles para la API de Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Datos útiles para la API de Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Mi increíble aplicación",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Utilice * en el desarrollo para permitir todas las direcciones IP.",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Su solicitud está publicada, no puede editarla.",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Prueba la apariencia de tus mensajes Twacode",
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "Identidad de la aplicación",
|
||||
"scenes.app.popup.adduser.adresses_message": "Por favor, separe las direcciones con una coma o un espacio. Recuerda que Twake puede limitar el número de invitaciones en función de tu suscripción.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Por favor, separe las direcciones con una coma o un espacio. Recuerda que Tdrive puede limitar el número de invitaciones en función de tu suscripción.",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Buscar conectores...",
|
||||
"scenes.app.mainview.tabs.rename": "Renombrar",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "No tiene ningún conector que pueda conectarse a un canal.",
|
||||
"scenes.app.mainview.instruction_current_tab": "Comienza seleccionando un canal a tu izquierda.",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "¡Conviértete en un profesional de Twake en unos pocos clics!",
|
||||
"scenes.app.channelsbar.welcome": "Bienvenido a Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "¡Conviértete en un profesional de Tdrive en unos pocos clics!",
|
||||
"scenes.app.channelsbar.welcome": "Bienvenido a Tdrive",
|
||||
"scenes.app.channelsbar.tutorial_alert": "¿No volver a mostrar este marco?",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Envíe su primer mensaje en un debate",
|
||||
"scenes.app.channelsbar.private_channel_label": "Privado",
|
||||
@@ -331,7 +331,7 @@
|
||||
"scenes.app.channelsbar.currentuser.change_my_status": "Cambiar mi estado",
|
||||
"scenes.app.channelsbar.currentuser.workspace_parameters": "Configuración del espacio de trabajo",
|
||||
"scenes.app.channelsbar.currentuser.invited_status": "Usted es un invitado.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "La aplicación no publicada sólo funcionará en su empresa. Si desea que esté disponible para todos los usuarios de Twake, active esta opción.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "La aplicación no publicada sólo funcionará en su empresa. Si desea que esté disponible para todos los usuarios de Tdrive, active esta opción.",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Formato óptimo : 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "ok",
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Nueva aplicación",
|
||||
@@ -363,7 +363,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Propietario de la empresa",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Evento de tipo '{{$1}}' e id '{{$2}}' con pasivos '{{$3}}'",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Forzar en toda la empresa",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "La publicación de su solicitud está actualmente a la espera de ser validada por el equipo de Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "La publicación de su solicitud está actualmente a la espera de ser validada por el equipo de Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Direcciones IP permitidas",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "Si activa «Automático», esta aplicación se añadirá automáticamente a los siguientes espacios de trabajo de esta empresa.",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "Automático",
|
||||
@@ -480,7 +480,7 @@
|
||||
"scenes.apps.drive.throw_menu": "Enviar a la papelera",
|
||||
"scenes.apps.drive.trash_empty_menu": "Vaciar la papelera",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Estado",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Realizador de pruebas de código Twake",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Realizador de pruebas de código Tdrive",
|
||||
"scenes.app.popup.appsparameters.pages.remove_app_button": "Eliminar aplicación",
|
||||
"scenes.app.popup.createworkspacepage.placeholder_name": "Nombre del espacio de trabajo",
|
||||
"scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "Establece la frecuencia de las notificaciones del móvil.",
|
||||
@@ -538,15 +538,15 @@
|
||||
"scenes.app.popup.appsparameters.pages.title_informations": "Información básica",
|
||||
"scenes.apps.messages.input.emoji": "Emoji",
|
||||
"components.account_verification_status_sentence": "El estado de su cuenta es: {{$1}}",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Descargar Twake Desktop para obtener una vista previa en la aplicación",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Descargar Tdrive Desktop para obtener una vista previa en la aplicación",
|
||||
"components.workspace.calendar.invalid": "Inválido",
|
||||
"scenes.apps.calendar.reminders": "recordatorio (s)",
|
||||
"components.drive.elements.see": "Ver",
|
||||
"scenes.apps.messages.message.show_responses_button": "Ver todas las respuestas",
|
||||
"components.verify_mail.title_2": "¡Ahora eres un usuario oficial de Twake!",
|
||||
"components.verify_mail.title_2": "¡Ahora eres un usuario oficial de Tdrive!",
|
||||
"components.searchpopup.update_search": "Actualizar la búsqueda",
|
||||
"components.newversion.new_version_modal.title": "¡Nueva actualización disponible!",
|
||||
"components.searchpopup.enter_text": "Ingresa algún texto para buscar en Twake.",
|
||||
"components.searchpopup.enter_text": "Ingresa algún texto para buscar en Tdrive.",
|
||||
"scenes.apps.messages.messageslist.go_last_message_button": "Ir al último mensaje",
|
||||
"scenes.apps.messages.messageslist.go_last_message_button.new_messages": "Mensajes nuevos",
|
||||
"scenes.apps.calendar.unconfigured_tab": "Esta pestaña aún no está configurada.",
|
||||
@@ -647,7 +647,7 @@
|
||||
"scenes.apps.tasks.modals.attachments": "Archivos adjuntos",
|
||||
"components.calendar.calendarselector.from": "De",
|
||||
"components.attachmentpicker.from_computer": "Desde su dispositivo",
|
||||
"components.attachmentpicker.from_twake": "De los documentos de Twake",
|
||||
"components.attachmentpicker.from_twake": "De los documentos de Tdrive",
|
||||
"components.attachmentpicker.file": "Archivo",
|
||||
"components.attachmentpicker.remove_attach": "Eliminar archivo adjunto",
|
||||
"scenes.apps.drive.remove_attachs": "Eliminar archivos adjuntos",
|
||||
@@ -657,7 +657,7 @@
|
||||
"scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "Aplicación",
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "No hay ningún usuario en este canal, puede invitarlos haciendo clic en Agregar usuarios.",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "Se agregarán correos electrónicos {{$1}}",
|
||||
"components.newversion.new_version_component.row.part_1": "Está ejecutando una versión obsoleta de Twake",
|
||||
"components.newversion.new_version_component.row.part_1": "Está ejecutando una versión obsoleta de Tdrive",
|
||||
"components.newversion.new_version_component.row.part_2": "¡Te sugerimos que vuelvas a cargar la aplicación y disfrutes de nuestras nuevas funciones!",
|
||||
"components.newversion.new_version_component.link": "Haga clic aquí para recargar",
|
||||
"scenes.apps.drive.download_all_button": "Descargar todo",
|
||||
@@ -680,7 +680,7 @@
|
||||
"scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.loader": "Cargar más",
|
||||
"components.verify_mail.title_1": "Felicidades",
|
||||
"components.verify_mail.button": "Agregar usuario",
|
||||
"components.verify_mail.paragraph": "Puedes hacerlo después si quieres, pero las cuentas no verificadas sólo tienen acceso a una versión limitada de Twake",
|
||||
"components.verify_mail.paragraph": "Puedes hacerlo después si quieres, pero las cuentas no verificadas sólo tienen acceso a una versión limitada de Tdrive",
|
||||
"services.console_services.toaster.add_emails_error": "Error al agregar correos electrónicos",
|
||||
"services.console_services.toaster.success_verify_email": "Se ha enviado un enlace de verificación a su cuenta de correo electrónico.",
|
||||
"scenes.app.popup.workspaceparameter.edit_from_console": "Ver en la consola",
|
||||
@@ -690,7 +690,7 @@
|
||||
"scenes.error_on_twake": "\"Houston, tenemos un problema\"",
|
||||
"scenes.help_us": "Sin embargo, si quieres ayudarnos a solucionar este error, envíanos un mensaje a continuación: ",
|
||||
"scenes.login.verifymail.verification_waiting": "Esperando verificación ...",
|
||||
"scenes.no_panic": "¡Que no cunda el pánico! Simplemente vuelva a cargar esta página para arreglar Twake.",
|
||||
"scenes.no_panic": "¡Que no cunda el pánico! Simplemente vuelva a cargar esta página para arreglar Tdrive.",
|
||||
"services.apps.calendar.move_icon": "Mover",
|
||||
"scenes.app.workspaces.components.skip": "Saltar",
|
||||
"services.apps.messages.no_command_possible": "No podemos ejecutar el comando '{{$1}}' porque '{{$2}}' no existe o no permite crear comandos.",
|
||||
@@ -698,7 +698,7 @@
|
||||
"services.apps.calendar.reminder_icon": "Recordatorio",
|
||||
"services.apps.messages.no_app": "Esta aplicación no existe.",
|
||||
"services.user.notification_parameters_update_alert": "Se ha actualizado la configuración de las notificaciones.",
|
||||
"scenes.apps.account.message_temporary": "Una cuenta temporal funciona como una cuenta normal de Twake, pero puedes crear la contraseña y restablecerla si es necesario.",
|
||||
"scenes.apps.account.message_temporary": "Una cuenta temporal funciona como una cuenta normal de Tdrive, pero puedes crear la contraseña y restablecerla si es necesario.",
|
||||
"components.drive.modify_uslist": "Modificar la lista de usuarios",
|
||||
"components.upload.drop_files": "Suelta tus archivos aquí",
|
||||
"components.workspace.list_manager.add": "Agregar espacios de trabajo",
|
||||
@@ -742,9 +742,9 @@
|
||||
"components.unverified_account.re_send_email": "¿No recibió el correo electrónico?",
|
||||
"components.account_verication_status_unverified": "Sin verificar",
|
||||
"components.blocked_account.trial_period_over": "Su período de prueba ha terminado. Para desbloquear su cuenta y tener acceso a todas las funcionalidades, por favor verifique su cuenta a través del correo electrónico de confirmación",
|
||||
"components.add_mails_workspace.button": "Empiece a usar Twake",
|
||||
"components.add_mails_workspace.button": "Empiece a usar Tdrive",
|
||||
"components.add_mails_workspace.title_1": "Añade algunos usuarios",
|
||||
"components.add_mails_workspace.title_2": "Twake es una herramienta de colaboración en equipo, así que invita a algunos usuarios a probar el espacio de trabajo que hemos creado para ti.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive es una herramienta de colaboración en equipo, así que invita a algunos usuarios a probar el espacio de trabajo que hemos creado para ti.",
|
||||
"general.uploading": "Subiendo",
|
||||
"components.on_boarding.popups.blocked_company.or": "O",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Haga clic aquí",
|
||||
@@ -752,14 +752,14 @@
|
||||
"components.emoji_picker.categories.search_result": "Resultados de la búsqueda",
|
||||
"components.emoji_picker.categories.not_found": "No se ha encontrado ningún emoji",
|
||||
"components.richtexteditor.toolbar.bold": "Negrita",
|
||||
"components.on_boarding.popups.blocked_company.description": "Su suscripción a Twake ha expirado. ¡Por favor, póngase en contacto con el propietario o administrador de su empresa para renovarla y poder volver a comunicarse con su equipo!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Su suscripción a Tdrive ha expirado. ¡Por favor, póngase en contacto con el propietario o administrador de su empresa para renovarla y poder volver a comunicarse con su equipo!",
|
||||
"components.emoji_picker.categories.symbols": "Símbolos",
|
||||
"general.user.role.company.guest": "Invitado",
|
||||
"components.locked_features.locked_history_banner.button": "Más información",
|
||||
"scenes.apps.drive.new_link_title": "Nuevo enlace",
|
||||
"components.locked_features.locked_history_banner.title": "Acabas de alcanzar el límite de mensajes",
|
||||
"components.locked_features.locked_guests_popup.or": "O",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Esta característica no está disponible en la versión gratuita de Twake",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Esta característica no está disponible en la versión gratuita de Tdrive",
|
||||
"scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "Correo enviado",
|
||||
"components.richtexteditor.toolbar.underline": "Subrayado",
|
||||
"components.richtexteditor.toolbar.italic": "Cursiva",
|
||||
@@ -844,9 +844,9 @@
|
||||
"scenes.join.wrong_link_description": "Pídale a la persona que lo invitó a unirse a esta empresa un nuevo enlace o cree su propia empresa",
|
||||
"scenes.join.create_the_company_button": "Crea la empresa",
|
||||
"scenes.join.join_workspace_from_company": "¡Únase a {{$1}} desde {{$2}}!",
|
||||
"scenes.join.twake_description": "Twake es un espacio de trabajo digital de código abierto creado para mejorar la productividad de su equipo",
|
||||
"scenes.join.twake_description": "Tdrive es un espacio de trabajo digital de código abierto creado para mejorar la productividad de su equipo",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Número de mensajes",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "En la versión gratuita de Twake, no puede acceder a más mensajes que {{$1}} más recientes.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "En la versión gratuita de Tdrive, no puede acceder a más mensajes que {{$1}} más recientes.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Mostrar más planes",
|
||||
"scenes.app.messages.input.parts.is_writing.message.user_is_writing": "{{$1}} está escribiendo...",
|
||||
"scenes.app.messages.input.parts.is_writing.message.users_are_writing": "{{$1}} y {{$2}} están escribiendo...",
|
||||
@@ -877,7 +877,7 @@
|
||||
"twake.application.access.title": "Seleccione los alcances adecuados para su aplicación.",
|
||||
"twake.application.access.no_default_scopes_available'": "Esta integración no tiene ningún acceso {{$1}}",
|
||||
"\"": "\"",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "la documentación de la API de Twake",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "la documentación de la API de Tdrive",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Si no sabe cómo llenarlos, vaya a ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Llave privada",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "¡Aplicación eliminada con éxito {{$1}}!",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "¡Error al eliminar la aplicación {{$1}}!",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_published": "¡Aplicación exitosa {{$1}}!",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Buscando por mas",
|
||||
"components.open_desktop_popup.subtitle": "abierto en la aplicación Twake",
|
||||
"components.open_desktop_popup.subtitle": "abierto en la aplicación Tdrive",
|
||||
"components.open_desktop_popup.open_here_link": "Abrir aquí en su lugar",
|
||||
"molecules.download_banner.title": "Aproveche al máximo Twake, descargue la aplicación de escritorio ahora",
|
||||
"molecules.download_banner.title": "Aproveche al máximo Tdrive, descargue la aplicación de escritorio ahora",
|
||||
"molecules.download_banner.download_button": "Descargar aplicación de escritorio",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Copiar enlace del canal",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Actualizado exitosamente",
|
||||
@@ -931,7 +931,7 @@
|
||||
"molecules.message_quote.deleted": "Este mensaje fue eliminado",
|
||||
"scenes.apps.messages.jump": "Saltar al mensaje",
|
||||
"components.channel_attachement_list.open": "Abrir galería",
|
||||
"scenes.apps.account.assistant.description": "El asistente de Twake puede dar sentido a su trabajo diario en Twake y proporcionar atajos y acciones inteligentes durante el día. El asistente forma parte de la iniciativa Work@Home https://workathome.linagora.com/ y actualmente está siendo probado solo en la empresa Linagora y está en fase de aprendizaje. Significa que enviaremos datos de uso de Twake para entrenar nuestra futura función de asistente.",
|
||||
"scenes.apps.account.assistant.description": "El asistente de Tdrive puede dar sentido a su trabajo diario en Tdrive y proporcionar atajos y acciones inteligentes durante el día. El asistente forma parte de la iniciativa Work@Home https://workathome.linagora.com/ y actualmente está siendo probado solo en la empresa Linagora y está en fase de aprendizaje. Significa que enviaremos datos de uso de Tdrive para entrenar nuestra futura función de asistente.",
|
||||
"scenes.apps.account.assistant.share.metadata": "Comparte metadatos pero no contenidos",
|
||||
"scenes.apps.account.assistant.success": "Sus preferencias se han actualizado con éxito.",
|
||||
"scenes.apps.account.on_console": "Para editar las preferencias de su cuenta global, haga clic en Ir a la consola.",
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
"components.reminder.notification": "Jakinarazpena",
|
||||
"components.reminder.hours_bef": "orduak lehenago",
|
||||
"scenes.app.mainview.discussion": "Eztabaida",
|
||||
"components.attachmentpicker.from_twake": "Twake Documents-etik",
|
||||
"components.attachmentpicker.from_twake": "Tdrive Documents-etik",
|
||||
"components.attachmentpicker.remove_attach": "Kendu eranskina",
|
||||
"scenes.apps.drive.remove_attachs": "Kendu eranskinak",
|
||||
"components.drive.elements.see": "Ikusi",
|
||||
@@ -84,7 +84,7 @@
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "Kanal honetan ez dago erabiltzailerik, Gehitu erabiltzaileak sakatuta gonbida ditzakezu.",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "Ezkutatu eztabaida",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} mezu elektronikoak gehituko dira",
|
||||
"components.newversion.new_version_component.row.part_1": "Twake bertsio zaharkitua exekutatzen ari zara",
|
||||
"components.newversion.new_version_component.row.part_1": "Tdrive bertsio zaharkitua exekutatzen ari zara",
|
||||
"components.newversion.new_version_component.row.part_2": "aplikazioa berriro kargatzea eta gure funtzio berriez gozatzea gomendatzen dizugu!",
|
||||
"components.newversion.new_version_component.link": "Egin klik hemen berriro kargatzeko",
|
||||
"components.newversion.new_version_modal.title": "Eguneratze berria eskuragarri!",
|
||||
@@ -104,12 +104,12 @@
|
||||
"components.account_verication_status_blocked": "Blokeatua",
|
||||
"components.unverified_account.re_send_email": "Ez al duzu mezu elektronikoa jaso?",
|
||||
"components.blocked_account.trial_period_over": "Zure proba-aldia amaitu da. Zure kontua desblokeatzeko eta funtzio guztietarako sarbidea lortzeko, egiaztatu zure kontua posta elektronikoaren berrespenaren bidez",
|
||||
"components.add_mails_workspace.button": "Hasi Twake erabiltzen",
|
||||
"components.add_mails_workspace.button": "Hasi Tdrive erabiltzen",
|
||||
"components.add_mails_workspace.title_1": "Gehitu erabiltzaile batzuk",
|
||||
"components.add_mails_workspace.title_2": "Twake talde lankidetzarako tresna bat da, beraz, gonbidatu erabiltzaile batzuk zuretzat sortu dugun lan-eremu bat probatzera.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive talde lankidetzarako tresna bat da, beraz, gonbidatu erabiltzaile batzuk zuretzat sortu dugun lan-eremu bat probatzera.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Sartu zure erabiltzaileen helbide elektronikoak*",
|
||||
"components.verify_mail.title_1": "Zorionak",
|
||||
"components.verify_mail.title_2": "Twake-ren erabiltzaile ofiziala zara orain!",
|
||||
"components.verify_mail.title_2": "Tdrive-ren erabiltzaile ofiziala zara orain!",
|
||||
"components.verify_mail.button": "Gehitu erabiltzailea",
|
||||
"services.console_services.toaster.success_verify_email": "Egiaztapen-esteka bat bidali da zure posta-kontura",
|
||||
"scenes.app.popup.workspaceparameter.pages.table_title": "Izena",
|
||||
@@ -241,7 +241,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "Pasahitz zaharra ez da zuzena.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Zure pasahitzak ez datoz bat edo laburregiak dira. Mesedez, idatzi gutxienez 8 karaktere dituen pasahitza.",
|
||||
"scenes.apps.account.account.logout": "Saioa amaitu",
|
||||
"scenes.apps.account.languages.text": "Aldatu Twake hizkuntza.",
|
||||
"scenes.apps.account.languages.text": "Aldatu Tdrive hizkuntza.",
|
||||
"scenes.apps.account.notifications.title": "Jakinarazpenak",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Gako-hitzak",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "garatzailea, wifia, kodea, ...",
|
||||
@@ -279,14 +279,14 @@
|
||||
"scenes.apps.tasks.list_modal.predefined_participants": "Aurrez zehaztutako parte-hartzaileak",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Kendu artxibatutako zereginak ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "Joan twakeapp.com helbidera",
|
||||
"scenes.login.footer.branding": "{{$1}} ({{$2}}) Twake zerbitzari pribatu batean zaude. ",
|
||||
"scenes.login.footer.branding": "{{$1}} ({{$2}}) Tdrive zerbitzari pribatu batean zaude. ",
|
||||
"scenes.login.create_account.title": "Sortu kontu berri bat",
|
||||
"scenes.login.create_account.email": "Posta elektronikoa",
|
||||
"scenes.login.create_account.email_used": "Posta elektroniko hau dagoeneko erabiltzen ari da.",
|
||||
"scenes.login.create_account.username_already_exist": "Erabiltzaile-izen hau dagoeneko erabiltzen ari da",
|
||||
"scenes.login.create_account.fill_in_username": "Zure erabiltzaile-izena bete behar duzu",
|
||||
"scenes.login.create_account.too_short_password": "Zure pasahitzak 8 karaktere izan behar ditu gutxienez.",
|
||||
"scenes.login.create_account.newsletter": "Jaso Twake-ri buruzko informazioa",
|
||||
"scenes.login.create_account.newsletter": "Jaso Tdrive-ri buruzko informazioa",
|
||||
"scenes.login.create_account.lastname": "Abizena",
|
||||
"scenes.login.forgot_password.title": "Pasahitza ahaztua?",
|
||||
"scenes.login.forgot_password.text": "9 digituko kode bat jasoko duzu posta elektronikoz zure nortasuna egiaztatzeko.",
|
||||
@@ -331,12 +331,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Egiaztapen-kode bat bidali dizugu {{$1}} bidez",
|
||||
"scenes.app.workspaces.welcome_page.done": "bukatu dut",
|
||||
"scenes.login.forgot_password.finished": "Zure pasahitza behar bezala eguneratu da.",
|
||||
"scenes.apps.account.account.description_main": "Zure helbide nagusia da Twake-k zure jakinarazpenak bidaltzen dituena. Zure bigarren mailako helbideak haiek erabiltzen dituzten lan-eremuetara automatikoki gonbidatzeko aukera ematen dute.",
|
||||
"scenes.apps.account.account.description_main": "Zure helbide nagusia da Tdrive-k zure jakinarazpenak bidaltzen dituena. Zure bigarren mailako helbideak haiek erabiltzen dituzten lan-eremuetara automatikoki gonbidatzeko aukera ematen dute.",
|
||||
"scenes.apps.account.account.emails.description": "Kudeatu zure helbide elektroniko desberdinak.",
|
||||
"scenes.apps.account.account.make_main": "Ezarri nagusia",
|
||||
"scenes.apps.account.account.password.description": "Aldatu pasahitza.",
|
||||
"scenes.apps.account.identity": "Identitatea",
|
||||
"scenes.apps.account.identity.description": "Aldatu zure izena, abizena eta profilaren irudia Twake-ko beste erabiltzaileek ikusgai.",
|
||||
"scenes.apps.account.identity.description": "Aldatu zure izena, abizena eta profilaren irudia Tdrive-ko beste erabiltzaileek ikusgai.",
|
||||
"scenes.apps.account.preference": "Hobespenak",
|
||||
"general.open": "Ireki",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Gehienezko tamaina 5 MB",
|
||||
@@ -373,19 +373,19 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Pribatua",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Bidali zure lehen mezua eztabaida batean",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Ez duzu inoiz marko hau berriro erakutsi?",
|
||||
"scenes.app.channelsbar.welcome": "Ongi etorri Twake-ra",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Egin zaitez Twake-ko profesional bat klik gutxitan!",
|
||||
"scenes.app.channelsbar.welcome": "Ongi etorri Tdrive-ra",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Egin zaitez Tdrive-ko profesional bat klik gutxitan!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Hasi zure ezkerreko kanal bat hautatuz.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Ez duzu kanal batera konektatzeko moduko konektorerik.",
|
||||
"scenes.app.mainview.tabs.rename": "Aldatu izena",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Bilatu konektoreak...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Mesedez, bereizi helbideak koma edo zuriune batekin. Gogoratu Twake-k zure harpidetzaren arabera gonbidapen kopurua muga dezakeela.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Mesedez, bereizi helbideak koma edo zuriune batekin. Gogoratu Tdrive-k zure harpidetzaren arabera gonbidapen kopurua muga dezakeela.",
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "Aplikazioaren identitatea",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Probatu zure Twacode mezuen itxura",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Zure aplikazioa argitaratu da, ezin duzu editatu.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Erabili * garapenean IP helbide guztiak baimentzeko.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Nire aplikazio harrigarria",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Twake APIrako datu erabilgarriak.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Tdrive APIrako datu erabilgarriak.",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "Doako bertsioan, ezin duzu bulegoa bakarrik erabili.",
|
||||
"scenes.app.popup.adduser.magiclinks.genrator_info": "Lanerako gonbidapenaren esteka",
|
||||
"scenes.app.popup.adduser.magiclinks.new_link_generated": "Esteka berria sortu da",
|
||||
@@ -454,7 +454,7 @@
|
||||
"scenes.apps.messages.message.modify_button": "Editatu",
|
||||
"scenes.apps.messages.input.show_formatting": "Erakutsi formatua",
|
||||
"scenes.tell_us": "Mesedez, esaiguzu zertan ari zinen:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Deskargatu Twake Desktop aplikazioan aurreikusteko",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Deskargatu Tdrive Desktop aplikazioan aurreikusteko",
|
||||
"scenes.apps.tasks.my_tasks": "Nire zereginak",
|
||||
"scenes.apps.tasks.board.place_holder": "Kontseiluaren izena",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "Azpizeregin",
|
||||
@@ -467,7 +467,7 @@
|
||||
"components.workspace.list_manager.current_space": "Egungo lan-espazioa",
|
||||
"components.workspace.list_manager.all": "Denak",
|
||||
"components.workspace.calendar.invalid": "Baliogabea",
|
||||
"components.searchpopup.enter_text": "Sartu testu bat Twake bilatzeko.",
|
||||
"components.searchpopup.enter_text": "Sartu testu bat Tdrive bilatzeko.",
|
||||
"components.searchpopup.size": "Tamaina",
|
||||
"components.searchpopup.creation": "Sorkuntza",
|
||||
"components.searchpopup.update_search": "Eguneratu bilaketa",
|
||||
@@ -510,7 +510,7 @@
|
||||
"scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}} kanalari izena aldatu dio {{$2}}",
|
||||
"scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} konektore berri bat gehitu du {{$2}}",
|
||||
"components.verify_mail.text": "Lehenik eta behin, zure helbide elektronikoa egiaztatu behar duzu. Hona egiaztapen-esteka bat bidali dugu",
|
||||
"components.verify_mail.paragraph": "Geroago egin dezakezu nahi baduzu, baina egiaztatu gabeko kontuek Twake-ren bertsio mugatu baterako sarbidea dute",
|
||||
"components.verify_mail.paragraph": "Geroago egin dezakezu nahi baduzu, baina egiaztatu gabeko kontuek Tdrive-ren bertsio mugatu baterako sarbidea dute",
|
||||
"services.console_services.toaster.add_emails_error": "Errore bat gertatu da mezu elektronikoak gehitzean",
|
||||
"services.console_services.toaster.add_email_error_message": "Errore bat gertatu da {{$1}} gehitzean",
|
||||
"scenes.apps.drive.default_link_name": "Izenbururik gabe",
|
||||
@@ -539,15 +539,15 @@
|
||||
"general.verify": "Egiaztatu",
|
||||
"scenes.app.popup.workspaceparameter.edit_from_console": "Ikusi Kontsolan",
|
||||
"scenes.apps.calendar.modals.title_placeholder": "Izenburua",
|
||||
"scenes.apps.account.message_temporary": "Aldi baterako kontu batek Twake-ko kontu arrunt baten moduan funtzionatzen du, baina pasahitza sortzen duzu eta behar izanez gero berrezarri ahal izango duzu.",
|
||||
"scenes.apps.account.message_temporary": "Aldi baterako kontu batek Tdrive-ko kontu arrunt baten moduan funtzionatzen du, baina pasahitza sortzen duzu eta behar izanez gero berrezarri ahal izango duzu.",
|
||||
"scenes.app.popup.appsparameters.pages.danger_zone_small_text": "Ezin duzu aplikazio hau ezabatu argitaratzen bada.",
|
||||
"scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Zure aplikazioaren izen sinplifikatua beste aplikazio batek erabiltzen du dagoeneko. Mesedez, aldatu.",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "Laster arte!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Saiatu berriro",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Esnatu",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Ongi etorri Twake-ra!",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Ongi etorri Tdrive-ra!",
|
||||
"scenes.app.popup.userparameter.pages.private_message_content.hide": "Ezkutatu mezu pribatuen edukia",
|
||||
"scenes.no_panic": "Ez zaitez izutu! Besterik gabe, kargatu orri hau Twake konpontzeko.",
|
||||
"scenes.no_panic": "Ez zaitez izutu! Besterik gabe, kargatu orri hau Tdrive konpontzeko.",
|
||||
"scenes.app.workspaces.components.skip": "Saltatu",
|
||||
"components.on_boarding.company_billing_banner.link": "enpresaren harpidetza plana",
|
||||
"components.on_boarding.popups.blocked_company.title": "Zure enpresa blokeatuta dago ordainketa-arazo bat dela eta",
|
||||
@@ -561,7 +561,7 @@
|
||||
"scenes.join.wrong_link_description": "Eskatu enpresa honetan sartzera gonbidatu zaituenari esteka berri bat edo sortu zure enpresa",
|
||||
"scenes.join.create_the_company_button": "Sortu enpresa",
|
||||
"scenes.join.join_workspace_from_company": "Sartu {{$1}} {{$2}}-tik!",
|
||||
"scenes.join.twake_description": "Twake zure taldearen produktibitatea hobetzeko kode irekiko lan-espazio digitala da",
|
||||
"scenes.join.twake_description": "Tdrive zure taldearen produktibitatea hobetzeko kode irekiko lan-espazio digitala da",
|
||||
"scenes.join.login_first_button": "Hasi saioa edo sortu kontu bat lehenik",
|
||||
"scenes.join.join_the_team_button": "Sartu taldean",
|
||||
"scenes.apps.tasks.connectors_menu": "Konektoreak...",
|
||||
@@ -606,7 +606,7 @@
|
||||
"scenes.app.channelsbar.currentuser.workspace_info": "{{$2}} taldeko {{$1}} lan eremuan zaude",
|
||||
"scenes.login.home.email": "Posta elektronikoa",
|
||||
"general.connexion_status.disconnected": "Lineaz kanpo zaude",
|
||||
"scenes.login.home.title": "Hasi saioa Twake-n",
|
||||
"scenes.login.home.title": "Hasi saioa Tdrive-n",
|
||||
"scenes.app.integrations_parameters.title": "Integrazioak",
|
||||
"scenes.app.integrations_parameters.applications_table.name": "Izena",
|
||||
"scenes.app.integrations_parameters.applications_table.title": "Beste integrazio batzuk",
|
||||
@@ -631,7 +631,7 @@
|
||||
"components.calendar.repetition.occurrence": "Gertaera(k)",
|
||||
"scenes.app.workspaces.create_company.group_data.title": "Azkar ibiliko gara; informazio estatistiko bat besterik ez dugu behar.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Mezuen zenbakia",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Twake-ren doako bertsioan, ezin duzu {{$1}} mezu berriagoak baino gehiago sartu.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Tdrive-ren doako bertsioan, ezin duzu {{$1}} mezu berriagoak baino gehiago sartu.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Erakutsi plan gehiago",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "Eztabaida pribatu berria",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Ez dago mezu pribaturik. Gonbidatu erabiltzaileak!",
|
||||
@@ -655,7 +655,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "Automatikoa",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "'Automatiko' aktibatzen baduzu, aplikazio hau automatikoki gehituko da enpresa honen hurrengo lan-eremuetan.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Baimendutako IP helbideak",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Zure aplikazioaren argitalpena Twake taldeak baliozkotzeko zain dago.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Zure aplikazioaren argitalpena Tdrive taldeak baliozkotzeko zain dago.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Indarra enpresa osoan",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "'{{$1}}' eta '{{$2}}' id motako gertaera '{{$3}}' pasiboekin",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Enpresaren jabea",
|
||||
@@ -669,7 +669,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.error_user_code": "akatsa",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "Ados",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Formatu optimoa: 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Argitaratu gabeko aplikazioak zure enpresan bakarrik funtzionatuko du. Twake-ren erabiltzaile guztientzat erabilgarri jarri nahi baduzu, aktibatu aukera hau.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Argitaratu gabeko aplikazioak zure enpresan bakarrik funtzionatuko du. Tdrive-ren erabiltzaile guztientzat erabilgarri jarri nahi baduzu, aktibatu aukera hau.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Eskaera publikoa",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Identifikatzaile publikoa",
|
||||
"scenes.app.popup.appsparameters.pages.publication_label": "Argitalpena",
|
||||
@@ -677,7 +677,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.read_privileges_label": "Irakurri pribilegioak",
|
||||
"scenes.app.popup.appsparameters.pages.remove_app_from_company": "Kendu enpresa osotik",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Estatu",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode probatzailea",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode probatzailea",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "Gertaeren harreraren URLa",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "Zain...",
|
||||
"scenes.app.popup.appsparameters.pages.website_label": "Webgunea",
|
||||
@@ -802,14 +802,14 @@
|
||||
"components.locked_features.locked_history_banner.title": "Mezuen mugara iritsi berri zara",
|
||||
"components.locked_features.locked_history_banner.description": "Zure enpresak mezu asko ditu! Berritu orain zure mezuen historia guztia atzitzeko.",
|
||||
"components.locked_features.locked_history_banner.button": "Gehiago ikasi",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Ezaugarri hau ez dago eskuragarri Twake doako bertsioan",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Ezaugarri hau ez dago eskuragarri Tdrive doako bertsioan",
|
||||
"components.locked_features.locked_guests_popup.description": "Aupa!! Kanpoko erabiltzaileak zure laneko gunera gonbidatu nahi dituzula dirudi. Baliteke zure plana berritzea kontuan hartu nahi izatea gonbidatuekin eta kanpoko bazkideekin elkarlanean aritu nahi baduzu. Arakatu gure prezio-aukerak eta hautatu aukerarik onena zure taldeko lankidetza-beharretarako.",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Gehiago ikasi",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Saltatu orain",
|
||||
"components.locked_features.locked_guests_popup.or": "Edo",
|
||||
"components.on_boarding.company_billing_banner.admin_or_owner_text": "Arazo bat dago zure enpresaren harpidetzarekin. Mesedez, begiratu zureari",
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "Arazo bat dago zure enpresaren harpidetzarekin. Mesedez, jarri harremanetan enpresaren jabearekin edo administratzailearekin!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Twake-rako harpidetza iraungi da. Mesedez, jarri harremanetan zure enpresaren jabearekin edo administratzailearekin hura berritzeko eta zure taldearekin berriro komunikatu ahal izateko!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Tdrive-rako harpidetza iraungi da. Mesedez, jarri harremanetan zure enpresaren jabearekin edo administratzailearekin hura berritzeko eta zure taldearekin berriro komunikatu ahal izateko!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Enpresen harpidetza-planari buruz gehiago jakin nahi duzu?",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Klikatu hemen",
|
||||
"components.on_boarding.popups.blocked_company.or": "Edo",
|
||||
@@ -839,7 +839,7 @@
|
||||
"general.email": "Posta elektronikoa",
|
||||
"components.locked_features.locked_workspace_popup.title": "Ezin duzu lan-eremu gehiago sortu",
|
||||
"components.locked_features.locked_workspace_popup.text": "Aupa!! Zure enpresan lan-eremu berri bat sortu nahi duzu? Baliteke plana berritzea kontuan hartu nahi izatea. Arakatu gure prezio-aukerak eta hautatu aukerarik onena zure taldeko lankidetza-beharretarako.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Aupa!! Twake-tik fitxategia editatu nahi duzula dirudi. Baliteke zure plana berritzea kontuan hartu nahi izatea bulegoko fitxategien inguruan elkarlanean aritu nahi baduzu. Arakatu gure prezio-aukerak eta hautatu aukerarik onena zure taldeko lankidetza-beharretarako.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Aupa!! Tdrive-tik fitxategia editatu nahi duzula dirudi. Baliteke zure plana berritzea kontuan hartu nahi izatea bulegoko fitxategien inguruan elkarlanean aritu nahi baduzu. Arakatu gure prezio-aukerak eta hautatu aukerarik onena zure taldeko lankidetza-beharretarako.",
|
||||
"components.locked_features.locked_drive_popup.title": "Gidatzeko mugara iritsi berri zara",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "Doako bertsioan, 6GB bakarrik gorde ditzakezu.",
|
||||
"general.resume": "Jarraitu",
|
||||
@@ -877,7 +877,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Ulertzen dut enpresa honen jabeak eta administratzaileak aplikazio hau aldatu eta argitaratu ahal izango dutela.",
|
||||
"twake.application.access.title": "Hautatu zure aplikaziorako esparru egokiak.",
|
||||
"twake.application.access.no_default_scopes_available'": "Integrazio honek ez du {{$1}} sarbiderik",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Twake APIaren dokumentazioa",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Tdrive APIaren dokumentazioa",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Hauek nola bete ez badakizu, joan hona ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Gako pribatua",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "Behar bezala kendu da aplikazioa {{$1}}!",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.integrations_parameters.add_application": "Integrazio berria",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Garatzaileen ezarpenak",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Gehiagoren bila",
|
||||
"components.open_desktop_popup.subtitle": "Twake aplikazioan ireki da",
|
||||
"components.open_desktop_popup.subtitle": "Tdrive aplikazioan ireki da",
|
||||
"components.open_desktop_popup.open_here_link": "Ireki hemen ordez",
|
||||
"molecules.download_banner.title": "Atera etekinik handiena Twake-ri, deskargatu mahaigaineko aplikazioa orain",
|
||||
"molecules.download_banner.title": "Atera etekinik handiena Tdrive-ri, deskargatu mahaigaineko aplikazioa orain",
|
||||
"molecules.download_banner.download_button": "Deskargatu mahaigaineko aplikazioa",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Kopiatu kanalaren esteka",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Behar bezala eguneratu da",
|
||||
@@ -932,7 +932,7 @@
|
||||
"scenes.apps.messages.jump": "Salto mezura",
|
||||
"components.channel_attachement_list.open": "Galeria irekia",
|
||||
"scenes.apps.account.assistant.title": "Laguntzailea",
|
||||
"scenes.apps.account.assistant.description": "Twake laguntzaileak Twake-n egiten duzun eguneroko lanari zentzua emateko gai da eta zure egunean zehar lasterbide eta ekintza adimendunak eskaintzen ditu. Laguntzaile https://workathome.linagora.com/ Work@Home ekimenaren parte da eta oraingoz Linagora enpresan bakarrik probatzen ari da eta ikasketa fasean dago. Horrek esan nahi du Twake-ren erabilera datuak bidaliko ditugula gure etorkizuneko laguntzailearen funtzioa trebatzeko.",
|
||||
"scenes.apps.account.assistant.description": "Tdrive laguntzaileak Tdrive-n egiten duzun eguneroko lanari zentzua emateko gai da eta zure egunean zehar lasterbide eta ekintza adimendunak eskaintzen ditu. Laguntzaile https://workathome.linagora.com/ Work@Home ekimenaren parte da eta oraingoz Linagora enpresan bakarrik probatzen ari da eta ikasketa fasean dago. Horrek esan nahi du Tdrive-ren erabilera datuak bidaliko ditugula gure etorkizuneko laguntzailearen funtzioa trebatzeko.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Ez partekatu ezer laguntzailearekin (desgaitu laguntzailea)",
|
||||
"scenes.apps.account.assistant.share.all": "Partekatu dena, mezuak eta fitxategien edukia barne",
|
||||
"scenes.apps.account.assistant.share.metadata": "Partekatu metadatuak baina ez edukiak",
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
"scenes.login.create_account.fill_in_username": "Täytä käyttäjänimi",
|
||||
"scenes.login.create_account.firstname": "Etunimi",
|
||||
"scenes.login.create_account.lastname": "Sukunimi",
|
||||
"scenes.login.create_account.newsletter": "Vastaanota tietoja Twakesta",
|
||||
"scenes.login.create_account.newsletter": "Vastaanota tietoja Tdrivesta",
|
||||
"scenes.login.create_account.too_short_password": "Salasanan tulee sisältää vähintään kahdeksan merkkiä.",
|
||||
"scenes.login.forgot_password.title": "Unohditko salasanasi?",
|
||||
"scenes.login.forgot_password.text": "Vastaanotat 9-numeroisen koodin sähköpostitse, jotta voit vahvistaa identiteettisi.",
|
||||
@@ -81,8 +81,8 @@
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails": "Lisää toissijainen sähköpostiosoite",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "Nähdään pian!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Yritä uudelleen",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Tervetuloa, tämä on Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Tervetuloa, tämä on Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Voit linkittää useita sähköpostiosoitteita tiliisi; vain yhtä osoitetta käytetään ilmoitusten välittämiseen.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Ensisijainen osoite",
|
||||
"scenes.app.workspaces.welcome_page.add_new_email": "Lisää sähköpostiosoite",
|
||||
@@ -121,7 +121,7 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Yksityinen",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Lähetä ensimmäinen viestisi keskusteluun",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Älä näytä uudelleen?",
|
||||
"scenes.app.channelsbar.welcome": "Tervetuloa, tämä on Twake",
|
||||
"scenes.app.channelsbar.welcome": "Tervetuloa, tämä on Tdrive",
|
||||
"scenes.app.mainview.instruction_current_tab": "Aloita valitsemalla kanava vasemmalta.",
|
||||
"scenes.app.mainview.tabs.rename": "Nimeä uudelleen",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Etsi yhdistäjää...",
|
||||
@@ -228,7 +228,7 @@
|
||||
"components.workspace.list_manager.no_workspace": "Ei työtilaa",
|
||||
"components.workspace.list_manager.add": "Lisää työtiloja",
|
||||
"components.searchpopup.loading": "Ladaan lisää tuloksia",
|
||||
"components.searchpopup.enter_text": "Kirjoita tekstiä etsiäksesi Twakesta.",
|
||||
"components.searchpopup.enter_text": "Kirjoita tekstiä etsiäksesi Tdrivesta.",
|
||||
"components.searchpopup.size": "Koko",
|
||||
"components.searchpopup.creation": "Luonti",
|
||||
"components.searchpopup.last_modif": "Viimeisin muokkaus",
|
||||
@@ -298,7 +298,7 @@
|
||||
"scenes.apps.messages.left_bar.stream.notifications.never": "Ei mitään",
|
||||
"scenes.apps.parameters.workspace_sections.members": "Osallistujat",
|
||||
"scenes.login.home.password": "Salasana",
|
||||
"scenes.apps.account.languages.text": "Vaihda Twaken kieli.",
|
||||
"scenes.apps.account.languages.text": "Vaihda Tdriven kieli.",
|
||||
"scenes.apps.account.notifications.mail_subtitle": "Sähköposti-ilmoitukset",
|
||||
"scenes.apps.account.account.password_modal.old_password": "Nykyinen salasana",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Avainsanat",
|
||||
@@ -313,7 +313,7 @@
|
||||
"scenes.app.channelsbar.channel_leaving": "Poistu kanavalta",
|
||||
"scenes.apps.parameters.workspace_sections.members.invite": "Kutsu uusi käyttäjä",
|
||||
"scenes.login.forgot_password.text3": "Anna uusi salasana tilillesi.",
|
||||
"scenes.login.home.title": "Kirjaudu Twakeen",
|
||||
"scenes.login.home.title": "Kirjaudu Tdriveen",
|
||||
"scenes.login.home.login_btn": "Kirjaudu sisään",
|
||||
"scenes.login.home.create_account": "Luo tili",
|
||||
"scenes.login.create_account.title": "Luo uusi tili",
|
||||
@@ -372,7 +372,7 @@
|
||||
"services.user.update_password_alert": "Salasanasi on päivitetty.",
|
||||
"components.channelworkspacelist.title": "Kanavat",
|
||||
"scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "Sovellus",
|
||||
"components.newversion.new_version_component.row.part_1": "Käytössäsi on vanhentunut Twaken versio",
|
||||
"components.newversion.new_version_component.row.part_1": "Käytössäsi on vanhentunut Tdriven versio",
|
||||
"general.user.role.company.member": "Jäsen",
|
||||
"scenes.apps.drive.throw_menu": "Lähetä roskakoriin",
|
||||
"scenes.apps.messages.message.new_messages_bar": "Uudet viestit",
|
||||
@@ -430,7 +430,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "Näytä",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Osavaltio",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Tämä merkkijono identifioi sovelluksesi ja sitä käytetään viestikomennoissa.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode-testeri",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode-testeri",
|
||||
"scenes.app.integrations_parameters.applications_table.name": "Nimi",
|
||||
"scenes.app.integrations_parameters.applications_table.title": "Muut integraatiot",
|
||||
"scenes.app.integrations_parameters.applications_table.search_placeholder": "Hakusovellus",
|
||||
@@ -502,7 +502,7 @@
|
||||
"scenes.join.wrong_link_description": "Pyydä henkilöltä, joka kutsui sinut tähän yritykseen, uusi linkki tai luo oma yritys",
|
||||
"scenes.join.create_the_company_button": "Luo yritys",
|
||||
"scenes.join.join_workspace_from_company": "Liity {{$1}}:ään {{$2}}:stä!",
|
||||
"scenes.join.twake_description": "Twake on avoimen lähdekoodin digitaalinen työtila, joka on suunniteltu parantamaan tiimisi tuottavuutta",
|
||||
"scenes.join.twake_description": "Tdrive on avoimen lähdekoodin digitaalinen työtila, joka on suunniteltu parantamaan tiimisi tuottavuutta",
|
||||
"scenes.join.login_first_button": "Kirjaudu sisään tai luo ensin tili",
|
||||
"scenes.join.join_the_team_button": "Liity joukkueeseen",
|
||||
"general.archive": "Arkisto",
|
||||
@@ -547,7 +547,7 @@
|
||||
"scenes.apps.tasks.task.assignees": "Valtuutetut",
|
||||
"scenes.apps.tasks.task.edit.dates": "Päivämäärät",
|
||||
"scenes.login.footer.go_to_twake": "Siirry osoitteeseen twakeapp.com",
|
||||
"scenes.login.footer.branding": "Olet {{$1}} ({{$2}}) yksityisellä Twake-palvelimella. ",
|
||||
"scenes.login.footer.branding": "Olet {{$1}} ({{$2}}) yksityisellä Tdrive-palvelimella. ",
|
||||
"scenes.login.create_account.fill_in_email": "Sinun tulee täyttää sähköpostisi oikealla sähköpostiosoitteella",
|
||||
"scenes.login.forgot_password.text2": "Saat 9-numeroisen koodin. Kirjoita se alla olevaan kenttään jatkaaksesi.",
|
||||
"scenes.login.forgot_password.password_dont_match": "Salasanasi eivät täsmää tai ne ovat liian lyhyitä. Kirjoita salasana, jossa on vähintään 8 merkkiä.",
|
||||
@@ -559,8 +559,8 @@
|
||||
"scenes.app.workspaces.welcome_page.added_to_company": "Sinut on kutsuttu ",
|
||||
"scenes.app.workspaces.create_company.group_data.title": "Toimimme nopeasti – tarvitsemme vain tilastotietoja.",
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Lähetimme sinulle vahvistuskoodin {{$1}}:n kautta",
|
||||
"scenes.apps.account.account.description_main": "Pääosoitteesi on paikka, johon Twake lähettää ilmoituksesi. Toissijaisten osoitteiden avulla sinut kutsutaan automaattisesti niitä käyttäviin työtiloihin.",
|
||||
"scenes.apps.account.identity.description": "Muuta etunimesi, sukunimesi ja profiilikuvasi, joka näkyy muille Twaken käyttäjille.",
|
||||
"scenes.apps.account.account.description_main": "Pääosoitteesi on paikka, johon Tdrive lähettää ilmoituksesi. Toissijaisten osoitteiden avulla sinut kutsutaan automaattisesti niitä käyttäviin työtiloihin.",
|
||||
"scenes.apps.account.identity.description": "Muuta etunimesi, sukunimesi ja profiilikuvasi, joka näkyy muille Tdriven käyttäjille.",
|
||||
"components.calendar.repetition.weekly_on": "Viikoittain {{$1}}",
|
||||
"components.calendar.repetition.monthly_on": "Kuukausittain {{$1}} {{$2}}",
|
||||
"components.calendar.repetition.monthly_on_day": "Kuukausittain päivänä {{$1}}",
|
||||
@@ -580,16 +580,16 @@
|
||||
"scenes.app.channelsbar.channelsuser.private_messages": "Suorat viestit",
|
||||
"scenes.app.channelsbar.company_invitation_alert_subtitle": "Voit tuoda nämä kanavat yritykseesi pysyäksesi järjestyksessä napsauttamalla tätä kehystä.",
|
||||
"scenes.app.channelsbar.initial_instructions_tutorial": "Valitse etunimi, nimi ja profiilikuva.",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Ryhdy Twake-ammattilaiseksi muutamalla napsautuksella!",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Ryhdy Tdrive-ammattilaiseksi muutamalla napsautuksella!",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Sinulla ei ole liitintä, joka voi muodostaa yhteyden kanavaan.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Erota osoitteet pilkulla tai välilyönnillä. Muista, että Twake voi rajoittaa kutsujen määrää tilauksesi perusteella.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Erota osoitteet pilkulla tai välilyönnillä. Muista, että Tdrive voi rajoittaa kutsujen määrää tilauksesi perusteella.",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Testaa Twacode-viestiesi ulkoasua",
|
||||
"scenes.app.channelsbar.company_invitation_alert_title": "Sinut on kutsuttu yritykseen ",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Kaikki tämän yrityksen johtajat voivat muokata tätä sovellusta.",
|
||||
"scenes.app.popup.appsparameters.pages.app_privileges_information": "Määritä, mitä sovelluksesi voi muokata ja lukea.",
|
||||
"scenes.app.popup.appsparameters.pages.app_update": "Päivitä sovellus {{$1}} (sovellusta käytetään {{$2}} kertaa.)",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "Jos aktivoit \"Automaattinen\", tämä sovellus lisätään automaattisesti tämän yrityksen seuraaviin työtiloihin.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Hakemuksesi julkaisu odottaa tällä hetkellä Twake-tiimin vahvistusta.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Hakemuksesi julkaisu odottaa tällä hetkellä Tdrive-tiimin vahvistusta.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Voimia koko yrityksessä",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Tapahtuman tyyppi {{$1}} ja tunnus {{$2}} passiivisilla merkinnöillä {{$3}}",
|
||||
"scenes.app.popup.appsparameters.pages.installation": "Asentaa.",
|
||||
@@ -635,13 +635,13 @@
|
||||
"scenes.error_on_twake": "\"Houston, meillä on ongelma\"",
|
||||
"scenes.help_us": "Jos kuitenkin haluat auttaa meitä korjaamaan tämän virheen, lähetä meille viesti alla: ",
|
||||
"scenes.login.verifymail.alert": "Tarkistamme sähköpostisi!",
|
||||
"scenes.no_panic": "Älä panikoi! Korjaa Twake lataamalla tämä sivu uudelleen.",
|
||||
"scenes.no_panic": "Älä panikoi! Korjaa Tdrive lataamalla tämä sivu uudelleen.",
|
||||
"services.apps.calendar.reminder_icon": "Muistutus",
|
||||
"services.apps.messages.no_app": "Tätä sovellusta ei ole olemassa.",
|
||||
"services.apps.messages.no_command_possible": "Emme voi suorittaa komentoa \"{{$1}}\", koska \"{{$2}}\" ei ole olemassa tai se ei salli komentojen luomista.",
|
||||
"scenes.apps.calendar.unconfigured_tab": "Tätä välilehteä ei ole vielä määritetty.",
|
||||
"scenes.tell_us": "Kerro meille mitä olit tekemässä:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Lataa Twake Desktop esikatsellaksesi sovelluksessa",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Lataa Tdrive Desktop esikatsellaksesi sovelluksessa",
|
||||
"scenes.apps.tasks.my_tasks": "Minun tehtäväni",
|
||||
"scenes.apps.tasks.board.place_holder": "Hallituksen nimi",
|
||||
"scenes.apps.tasks.board.tasks.use_deadline": "Käytä määräaikaa",
|
||||
@@ -671,9 +671,9 @@
|
||||
"components.inputs.input_with_select.select.placeholder": "Osion nimi",
|
||||
"components.inputs.input_with_select.select.no_sections": "Aloita ensimmäisen kanavaosiosi nimen kirjoittaminen.",
|
||||
"components.inputs.input_with_select.button.tooltip": "Aseta kanavaosio",
|
||||
"components.add_mails_workspace.button": "Aloita Twaken käyttö",
|
||||
"components.add_mails_workspace.button": "Aloita Tdriven käyttö",
|
||||
"components.add_mails_workspace.title_1": "Lisää käyttäjiä",
|
||||
"components.add_mails_workspace.title_2": "Twake on tiimin yhteistyötyökalu, joten kutsu joitain käyttäjiä testaamaan sinulle luomaamme työtilaa.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive on tiimin yhteistyötyökalu, joten kutsu joitain käyttäjiä testaamaan sinulle luomaamme työtilaa.",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Ohita nyt",
|
||||
"components.locked_features.locked_guests_popup.or": "Tai",
|
||||
"components.on_boarding.company_billing_banner.admin_or_owner_text": "Yrityksesi tilauksessa on ongelma. Ole hyvä ja katso omaasi",
|
||||
@@ -683,12 +683,12 @@
|
||||
"components.locked_features.locked_only_office_popup.title": "Et voi muokata tätä tiedostoa",
|
||||
"scenes.app.workspaces.create_company.group_data.group_main_activity.materials": "Materiaalit",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Viestien numero",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Twaken ilmaisessa versiossa et voi käyttää enempää kuin {{$1}} uudempia viestejä.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Tdriven ilmaisessa versiossa et voi käyttää enempää kuin {{$1}} uudempia viestejä.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Näytä lisää suunnitelmia",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Hakemuksesi on julkaistu, et voi muokata sitä.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Käytä * kehitysvaiheessa salliaksesi kaikki IP-osoitteet.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Minun hämmästyttävä sovellus",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Hyödyllistä tietoa Twake API:lle.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Hyödyllistä tietoa Tdrive API:lle.",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Yrityksen omistaja",
|
||||
"scenes.app.popup.appsparameters.pages.configuration_label": "Kokoonpano",
|
||||
"scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "Yrityksen kehittämät sovellukset",
|
||||
@@ -702,7 +702,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.grp_section_name-error": "Tämä nimi on jo toisen sovelluksen käytössä. Valitse toinen.",
|
||||
"scenes.app.popup.appsparameters.pages.grp_section_surname_label": "Yksinkertaistettu nimi",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Optimaalinen muoto: 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Julkaisematon sovellus toimii vain yrityksessäsi. Jos haluat asettaa sen kaikkien Twaken käyttäjien saataville, aktivoi tämä vaihtoehto.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Julkaisematon sovellus toimii vain yrityksessäsi. Jos haluat asettaa sen kaikkien Tdriven käyttäjien saataville, aktivoi tämä vaihtoehto.",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "Tapahtuman vastaanoton URL-osoite",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "Odotetaan...",
|
||||
"scenes.app.popup.appsparameters.pages.write_privileges_label": "Kirjoitusoikeudet",
|
||||
@@ -743,7 +743,7 @@
|
||||
"services.apps.calendar.event_icon": "Tapahtuma",
|
||||
"services.apps.calendar.move_icon": "Liikkua",
|
||||
"scenes.apps.account.account.send_info": "Lähetä nämä tunnistetiedot käyttäjällesi.",
|
||||
"scenes.apps.account.message_temporary": "Väliaikainen tili toimii kuten tavallinen Twake-tili, mutta sinä luot salasanan ja voit nollata sen tarvittaessa.",
|
||||
"scenes.apps.account.message_temporary": "Väliaikainen tili toimii kuten tavallinen Tdrive-tili, mutta sinä luot salasanan ja voit nollata sen tarvittaessa.",
|
||||
"scenes.apps.account.message_user_signin": "Käyttäjäsi voi kirjautua sisään milloin tahansa tällä samalla sähköpostilla ja vaihtaa väliaikaisen tilin tavalliseksi tiliksi.",
|
||||
"scenes.app.mainview.create_account": "Luo työtilasi ilmaiseksi osoitteessa ",
|
||||
"scenes.apps.calendar.modals.reminder_add": "Lisää muistutus",
|
||||
@@ -761,7 +761,7 @@
|
||||
"components.calendar.calendarselector.from": "From",
|
||||
"scenes.apps.drive.move_text2": "Liikkua",
|
||||
"components.attachmentpicker.from_computer": "laitteestasi",
|
||||
"components.attachmentpicker.from_twake": "Twake Documentsista",
|
||||
"components.attachmentpicker.from_twake": "Tdrive Documentsista",
|
||||
"components.attachmentpicker.file": "Tiedosto",
|
||||
"components.attachmentpicker.remove_attach": "Poista liite",
|
||||
"scenes.app.popup.appsparameters.pages.smalltext_user_id": "Nykyinen käyttäjätunnus",
|
||||
@@ -783,10 +783,10 @@
|
||||
"components.blocked_account.trial_period_over": "Kokeilujaksosi on ohi. Avaa tilisi lukitus ja pääset käyttämään kaikkia toimintoja vahvistamalla tilisi sähköpostivahvistuksella",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Anna käyttäjiesi sähköpostiosoitteet*",
|
||||
"components.verify_mail.title_1": "Onnittelut",
|
||||
"components.verify_mail.title_2": "Olet nyt virallinen Twaken käyttäjä!",
|
||||
"components.verify_mail.title_2": "Olet nyt virallinen Tdriven käyttäjä!",
|
||||
"components.verify_mail.button": "Lisää käyttäjä",
|
||||
"components.verify_mail.text": "Ensinnäkin sinun on vahvistettava sähköpostiosoitteesi. Olemme lähettäneet vahvistuslinkin osoitteeseen",
|
||||
"components.verify_mail.paragraph": "Voit tehdä sen myöhemmin, jos haluat, mutta vahvistamattomilla tileillä on pääsy vain rajoitettuun Twaken versioon",
|
||||
"components.verify_mail.paragraph": "Voit tehdä sen myöhemmin, jos haluat, mutta vahvistamattomilla tileillä on pääsy vain rajoitettuun Tdriven versioon",
|
||||
"services.console_services.toaster.add_emails_error": "Virhe lisättäessä sähköposteja",
|
||||
"services.console_services.toaster.add_email_error_message": "Virhe lisättäessä {{$1}}",
|
||||
"services.console_services.toaster.success_verify_email": "Vahvistuslinkki on lähetetty sähköpostitilillesi",
|
||||
@@ -808,11 +808,11 @@
|
||||
"components.locked_features.locked_history_banner.description": "Yritykselläsi on paljon viestejä! Päivitä nyt, niin pääset käyttämään kaikkea viestihistoriaasi.",
|
||||
"components.locked_features.locked_history_banner.button": "Lue lisää",
|
||||
"components.locked_features.locked_guests_popup.title": "Vieraat-ominaisuus on lukittu",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Tämä ominaisuus ei ole käytettävissä Twaken ilmaisessa versiossa",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Tämä ominaisuus ei ole käytettävissä Tdriven ilmaisessa versiossa",
|
||||
"components.locked_features.locked_guests_popup.description": "Oho!! Vaikuttaa siltä, että haluat kutsua ulkoisia käyttäjiä työtilaan. Sinun kannattaa harkita suunnitelmasi päivittämistä, jos haluat tehdä yhteistyötä vieraiden ja ulkoisten kumppaneiden kanssa. Tutustu hinnoitteluvaihtoehtoihimme ja valitse tiimisi yhteistyötarpeisiisi paras vaihtoehto.",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Lue lisää",
|
||||
"components.on_boarding.popups.blocked_company.title": "Yrityksesi on lukittu maksuongelman vuoksi",
|
||||
"components.on_boarding.popups.blocked_company.description": "Twake-tilauksesi on vanhentunut. Ota yhteyttä yrityksesi omistajaan tai järjestelmänvalvojaan uusitaksesi sen ja pystyt kommunikoimaan tiimisi kanssa uudelleen!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Tdrive-tilauksesi on vanhentunut. Ota yhteyttä yrityksesi omistajaan tai järjestelmänvalvojaan uusitaksesi sen ja pystyt kommunikoimaan tiimisi kanssa uudelleen!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Haluatko tietää lisää yritysten tilaussuunnitelmasta?",
|
||||
"components.on_boarding.popups.blocked_company.or": "Tai",
|
||||
"components.on_boarding.popups.blocked_company.company_selector": "Vaihda toiseen yritykseen",
|
||||
@@ -839,7 +839,7 @@
|
||||
"components.locked_features.locked_workspace_popup.subtitle": "Ilmaisessa versiossa sinulla voi olla vain yksi työtila yrityksessäsi.",
|
||||
"components.locked_features.locked_workspace_popup.text": "Oho!! Haluatko luoda uuden työtilan yritykseesi? Sinun kannattaa harkita suunnitelmasi päivittämistä. Tutustu hinnoitteluvaihtoehtoihimme ja valitse paras vaihtoehto tiimin yhteistyötarpeisiisi.",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "Ilmaisessa versiossa et voi käyttää onlyofficea.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Oho!! Vaikuttaa siltä, että haluat muokata Twaken tiedostoa. Sinun kannattaa harkita suunnitelmasi päivittämistä, jos haluat tehdä yhteistyötä Office-tiedostojen parissa. Tutustu hinnoitteluvaihtoehtoihimme ja valitse tiimisi yhteistyötarpeisiisi paras vaihtoehto.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Oho!! Vaikuttaa siltä, että haluat muokata Tdriven tiedostoa. Sinun kannattaa harkita suunnitelmasi päivittämistä, jos haluat tehdä yhteistyötä Office-tiedostojen parissa. Tutustu hinnoitteluvaihtoehtoihimme ja valitse tiimisi yhteistyötarpeisiisi paras vaihtoehto.",
|
||||
"components.locked_features.locked_drive_popup.title": "Olet juuri saavuttanut ajorajan",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "Ilmaisessa versiossa voit tallentaa vain 6 Gt.",
|
||||
"general.resume": "Jatkaa",
|
||||
@@ -881,14 +881,14 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Ymmärrän, että tämän yrityksen omistaja ja järjestelmänvalvojat voivat muokata ja julkaista tätä sovellusta.",
|
||||
"twake.application.access.title": "Valitse sovelluksellesi oikeat laajuudet.",
|
||||
"twake.application.access.no_default_scopes_available'": "Tällä integraatiolla ei ole {{$1}}-käyttöoikeutta",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Twake API -dokumentaatio",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Tdrive API -dokumentaatio",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_published": "{{$1}} -sovellus onnistui!",
|
||||
"scenes.app.integrations_parameters.add_application": "Uusi integraatio",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Kehittäjäasetukset",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Etsitkö lisää",
|
||||
"components.open_desktop_popup.subtitle": "avattu Twake-sovelluksessa",
|
||||
"components.open_desktop_popup.subtitle": "avattu Tdrive-sovelluksessa",
|
||||
"components.open_desktop_popup.open_here_link": "Avaa sen sijaan tästä",
|
||||
"molecules.download_banner.title": "Ota kaikki irti Twakesta ja lataa työpöytäsovellus nyt",
|
||||
"molecules.download_banner.title": "Ota kaikki irti Tdrivesta ja lataa työpöytäsovellus nyt",
|
||||
"molecules.download_banner.download_button": "Lataa työpöytäsovellus",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Kopioi kanavan linkki",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Päivitetty onnistuneesti",
|
||||
@@ -932,7 +932,7 @@
|
||||
"components.channel_attachement_list.open": "Avaa galleria",
|
||||
"scenes.apps.messages.jump": "Siirry viestiin",
|
||||
"scenes.apps.account.on_console": "Voit muokata yleisiä tiliasetuksiasi napsauttamalla Siirry konsoliin.",
|
||||
"scenes.apps.account.assistant.description": "Twake-assistentti pystyy ymmärtämään jokapäiväistä työtäsi Twakella ja tarjoamaan älykkäitä pikakuvakkeita ja toimintoja päivän aikana. Assistentti on osa Work@Home-hanketta https://workathome.linagora.com/ ja sitä testataan tällä hetkellä vain Linagora-yrityksessä ja se on oppimisvaiheessa. Se tarkoittaa, että lähetämme Twaken käyttötietoja tulevan avustajaominaisuuden kouluttamiseksi.",
|
||||
"scenes.apps.account.assistant.description": "Tdrive-assistentti pystyy ymmärtämään jokapäiväistä työtäsi Tdrivella ja tarjoamaan älykkäitä pikakuvakkeita ja toimintoja päivän aikana. Assistentti on osa Work@Home-hanketta https://workathome.linagora.com/ ja sitä testataan tällä hetkellä vain Linagora-yrityksessä ja se on oppimisvaiheessa. Se tarkoittaa, että lähetämme Tdriven käyttötietoja tulevan avustajaominaisuuden kouluttamiseksi.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Älä jaa mitään avustajan kanssa (poista avustaja käytöstä)",
|
||||
"scenes.apps.account.assistant.share.all": "Jaa kaikki, mukaan lukien viestit ja tiedostojen sisältö",
|
||||
"scenes.apps.account.assistant.share.metadata": "Jaa metatietoja, mutta älä sisältöä",
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "L'ancien mot de passe n'est pas correct.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Vos mots de passe ne correspondent pas ou sont trop petits, veuillez saisir un mot de passe d'au moins 8 caractères.",
|
||||
"scenes.apps.account.account.logout": "Déconnecter",
|
||||
"scenes.apps.account.languages.text": "Changer la langue de Twake.",
|
||||
"scenes.apps.account.languages.text": "Changer la langue de Tdrive.",
|
||||
"scenes.apps.account.notifications.title": "Notifications",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Mots clés",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "important, wifi, code, ...",
|
||||
@@ -167,7 +167,7 @@
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "Archiver toutes les tâches",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Supprimer les archivées ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "Aller à twakeapp.com",
|
||||
"scenes.login.footer.branding": "Vous êtes sur un serveur privé Twake appartenant à {{$1}} ({{$2}}). ",
|
||||
"scenes.login.footer.branding": "Vous êtes sur un serveur privé Tdrive appartenant à {{$1}} ({{$2}}). ",
|
||||
"scenes.login.create_account.title": "Créer un nouveau compte",
|
||||
"scenes.login.create_account.email": "E-mail",
|
||||
"scenes.login.create_account.email_used": "Cette adresse mail est déjà utilisée.",
|
||||
@@ -177,7 +177,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "Vous devez compléter le champs e-mail avec une adresse correcte",
|
||||
"scenes.login.create_account.too_short_password": "Votre mot de passe doit contenir au minimum 8 caractères.",
|
||||
"scenes.login.create_account.firstname": "Prénom",
|
||||
"scenes.login.create_account.newsletter": "Recevoir des informations à propos de Twake",
|
||||
"scenes.login.create_account.newsletter": "Recevoir des informations à propos de Tdrive",
|
||||
"scenes.login.create_account.lastname": "Nom",
|
||||
"scenes.login.forgot_password.title": "Mot de passe oublié ?",
|
||||
"scenes.login.forgot_password.text": "Vous recevrez 9 chiffres par e-mail afin de vérifier votre identité.",
|
||||
@@ -189,7 +189,7 @@
|
||||
"scenes.login.forgot_password.password": "Mot de passe",
|
||||
"scenes.login.forgot_password.password2": "Confirmez le mot de passe",
|
||||
"scenes.login.forgot_password.password_dont_match": "Vos mots de passe ne correspondent pas ou sont trop petits, veuillez saisir un mot de passe d'au moins 8 caractères.",
|
||||
"scenes.login.home.title": "Connectez-vous à Twake",
|
||||
"scenes.login.home.title": "Connectez-vous à Tdrive",
|
||||
"scenes.login.home.subtitle": "Heureux de vous revoir",
|
||||
"scenes.login.home.email": "Email",
|
||||
"scenes.login.home.unable_to_connect": "Informations d'identification invalides",
|
||||
@@ -222,8 +222,8 @@
|
||||
"scenes.app.workspaces.welcome_page.ready_to_work": "Vous êtes prêt à travailler maintenant.",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "À très bientôt !",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Réessayer",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "L'équipe Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Bienvenue sur Twake !",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "L'équipe Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Bienvenue sur Tdrive !",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Vous pouvez lier plusieurs adresse e-mail à votre compte, seule une adresse sera utilisée pour vous envoyer des notifications.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Adresse principale",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Adresses secondaires",
|
||||
@@ -233,12 +233,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Nous vous avons envoyé un code de vérification via l’adresse {{$1}}",
|
||||
"scenes.app.workspaces.welcome_page.done": "J'ai fini",
|
||||
"scenes.login.forgot_password.finished": "Votre mot de passe a bien été mis à jour.",
|
||||
"scenes.apps.account.account.description_main": "Votre adresse principale est celle à qui Twake envoie vos notifications. Vos adresses secondaires vous permettent d'être invité automatiquement dans les espaces de travail qui les utilisent.",
|
||||
"scenes.apps.account.account.description_main": "Votre adresse principale est celle à qui Tdrive envoie vos notifications. Vos adresses secondaires vous permettent d'être invité automatiquement dans les espaces de travail qui les utilisent.",
|
||||
"scenes.apps.account.account.emails.description": "Gérez vos différentes adresses email.",
|
||||
"scenes.apps.account.account.make_main": "Définir principale",
|
||||
"scenes.apps.account.account.password.description": "Modifiez votre mot de passe.",
|
||||
"scenes.apps.account.identity": "Identité",
|
||||
"scenes.apps.account.identity.description": "Modifiez votre prénom, nom et votre image de profil visible par les autres utilisateurs de Twake.",
|
||||
"scenes.apps.account.identity.description": "Modifiez votre prénom, nom et votre image de profil visible par les autres utilisateurs de Tdrive.",
|
||||
"scenes.apps.account.preference": "Préférences",
|
||||
"general.open": "Ouvrir",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Poids maximum 5 mo",
|
||||
@@ -304,19 +304,19 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Chaîne privée",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Envoyer un premier message dans une discussion",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Ne plus jamais afficher ce cadre ?",
|
||||
"scenes.app.channelsbar.welcome": "Bienvenue sur Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Devenez un pro de Twake en seulement quelques clics !",
|
||||
"scenes.app.channelsbar.welcome": "Bienvenue sur Tdrive",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Devenez un pro de Tdrive en seulement quelques clics !",
|
||||
"scenes.app.mainview.instruction_current_tab": "Commencez par sélectionner une chaîne sur votre gauche.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Vous n'avez aucun connecteur capable de se connecter à une chaîne.",
|
||||
"scenes.app.mainview.tabs.rename": "Renommer",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Chercher des connecteurs...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Veuillez séparer les adresses par une virgule ou un espace. N'oubliez pas que Twake peut limiter le nombre d'invitation en fonction de votre abonnement.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Veuillez séparer les adresses par une virgule ou un espace. N'oubliez pas que Tdrive peut limiter le nombre d'invitation en fonction de votre abonnement.",
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "Identité de l'application",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Testez l'apparence de vos messages Twacode",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Votre application est publiée, vous ne pouvez pas la modifier.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Utilisez * en développement pour autoriser toutes les adresses IP.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Ma super application",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Données utiles pour l'API Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Données utiles pour l'API Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "Paramètres de l'API",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Nom de l'application",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Tous les gérants de cette entreprise pourront modifier cette application.",
|
||||
@@ -328,7 +328,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "Automatique",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "Si vous activez 'Automatique', cette application sera automatiquement ajoutée dans les prochains espaces de travail de cette entreprise.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Adresses IP autorisées",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "La publication de votre application est actuellement en attente de validation par les équipes de Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "La publication de votre application est actuellement en attente de validation par les équipes de Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Forcer dans toute l'entreprise",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Évènement de type {{$1}} et d'identifiant {{$2}}, avec les passifs {{$3}}",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Propriétaire de l'entreprise",
|
||||
@@ -360,7 +360,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Nouvelle application",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "ok",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Format optimal : 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "L'application non publiée ne fonctionnera que dans votre entreprise, si vous souhaitez la rendre disponible à tous les utilisateurs de Twake, activez cette option.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "L'application non publiée ne fonctionnera que dans votre entreprise, si vous souhaitez la rendre disponible à tous les utilisateurs de Tdrive, activez cette option.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Application publique",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Identifiant public",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "Déterminez la visibilité de votre application.",
|
||||
@@ -557,7 +557,7 @@
|
||||
"scenes.login.verifymail.signin_button": "Se connecter",
|
||||
"scenes.login.verifymail.success": "Votre e-mail a été vérifié avec succès !",
|
||||
"scenes.login.verifymail.verification_waiting": "En attente de vérification...",
|
||||
"scenes.no_panic": "Ne paniquez pas, recharger simplement cette page pour retrouver Twake.",
|
||||
"scenes.no_panic": "Ne paniquez pas, recharger simplement cette page pour retrouver Tdrive.",
|
||||
"services.apps.calendar.deadline_icon": "Deadline",
|
||||
"services.apps.calendar.event_icon": "Événement",
|
||||
"services.apps.calendar.move_icon": "Déplacement",
|
||||
@@ -577,7 +577,7 @@
|
||||
"scenes.apps.messages.input.hide_formatting": "Masquer le formatage",
|
||||
"scenes.apps.messages.input.show_formatting": "Montrer le formatage",
|
||||
"scenes.tell_us": "Dites-nous ce que vous faisiez à :",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Téléchargez Twake pour bureau pour visualiser dans l'application",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Téléchargez Tdrive pour bureau pour visualiser dans l'application",
|
||||
"scenes.apps.tasks.my_tasks": "Mes Tâches",
|
||||
"scenes.apps.tasks.board.place_holder": "Nom du tableau",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "Sous-tâche",
|
||||
@@ -597,7 +597,7 @@
|
||||
"scenes.apps.account.account.password_for_user": "Mot de passe pour l'utilisateur",
|
||||
"scenes.apps.account.account.send_info": "Envoyez cette information à votre utilisateur pour lui communiquer dès maintenant ses nouveaux identifiants.",
|
||||
"scenes.apps.account.account.save": "Sauvegarder le compte",
|
||||
"scenes.apps.account.message_temporary": "Un compte temporaire fonctionne comme un compte Twake habituel, mais vous générez son mot de passe et vous aurez la possibilité de le réinitialiser si besoin.",
|
||||
"scenes.apps.account.message_temporary": "Un compte temporaire fonctionne comme un compte Tdrive habituel, mais vous générez son mot de passe et vous aurez la possibilité de le réinitialiser si besoin.",
|
||||
"scenes.apps.account.message_user_signin": "Votre utilisateur peut se connecter à tout moment en utilisant ce même courriel et changer son compte temporaire en un compte normal.",
|
||||
"scenes.app.mainview.link_expired": "Ce lien public est invalide ou a expiré.",
|
||||
"scenes.app.mainview.create_account": "Créez votre espace de travail gratuitement sur ",
|
||||
@@ -622,7 +622,7 @@
|
||||
"components.workspace.list_manager.current_company": "Entreprise courante",
|
||||
"components.workspace.list_manager.all": "Tous",
|
||||
"components.workspace.calendar.invalid": "Invalide",
|
||||
"components.searchpopup.enter_text": "Entrez du texte à chercher dans Twake.",
|
||||
"components.searchpopup.enter_text": "Entrez du texte à chercher dans Tdrive.",
|
||||
"components.searchpopup.loading": "Chargement de plus de résultats",
|
||||
"components.searchpopup.filter_ws": "Filtrer les espaces de travail",
|
||||
"components.searchpopup.tags": "Tags",
|
||||
@@ -663,7 +663,7 @@
|
||||
"components.calendar.calendarselector.from": "Depuis",
|
||||
"scenes.apps.drive.move_text2": "Déplacer",
|
||||
"components.attachmentpicker.from_computer": "Depuis l'ordinateur",
|
||||
"components.attachmentpicker.from_twake": "Depuis les Documents Twake",
|
||||
"components.attachmentpicker.from_twake": "Depuis les Documents Tdrive",
|
||||
"components.attachmentpicker.file": "Fichier",
|
||||
"components.attachmentpicker.remove_attach": "Enlever la pièce-jointe",
|
||||
"scenes.apps.drive.remove_attachs": "Enlever les pièces-jointes",
|
||||
@@ -703,7 +703,7 @@
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "Il n'y a aucun utilisateur dans cette chaîne, vous pouvez les inviter en cliquant sur Ajouter des utilisateurs.",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "Masquer la discussion",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} email(s) seront ajoutés",
|
||||
"components.newversion.new_version_component.row.part_1": "Vous utilisez une version obsolète de Twake",
|
||||
"components.newversion.new_version_component.row.part_1": "Vous utilisez une version obsolète de Tdrive",
|
||||
"components.newversion.new_version_component.row.part_2": "nous vous suggérons de recharger l'application et de profiter de nos nouvelles fonctionnalités !",
|
||||
"components.newversion.new_version_component.link": "Cliquez ici pour recharger",
|
||||
"components.newversion.new_version_modal.title": "Nouvelle mise à jour disponible !",
|
||||
@@ -732,15 +732,15 @@
|
||||
"components.account_verication_status_blocked": "Verrouillé",
|
||||
"components.unverified_account.re_send_email": "Vous n'avez pas reçu l'e-mail ?",
|
||||
"components.blocked_account.trial_period_over": "Votre période d'essai est terminée. Pour déverrouiller votre compte et accéder à toutes les fonctionnalités, veuillez vérifier votre compte par e-mail de confirmation",
|
||||
"components.add_mails_workspace.button": "Commencez à utiliser Twake",
|
||||
"components.add_mails_workspace.button": "Commencez à utiliser Tdrive",
|
||||
"components.add_mails_workspace.title_1": "Ajouter des utilisateurs",
|
||||
"components.add_mails_workspace.title_2": "Twake est un outil de collaboration d'équipe, alors invitez des utilisateurs à tester un espace de travail que nous avons créé pour vous.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive est un outil de collaboration d'équipe, alors invitez des utilisateurs à tester un espace de travail que nous avons créé pour vous.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Saisissez les e-mails des utilisateurs*",
|
||||
"components.verify_mail.title_1": "Félicitations",
|
||||
"components.verify_mail.title_2": "Vous êtes un utilisateur officiel de Twake !",
|
||||
"components.verify_mail.title_2": "Vous êtes un utilisateur officiel de Tdrive !",
|
||||
"components.verify_mail.button": "Ajouter des utilisateurs",
|
||||
"components.verify_mail.text": "Tout d'abord, vous devez vérifier votre adresse e-mail. Nous avons envoyé un lien de vérification à",
|
||||
"components.verify_mail.paragraph": "Vous pouvez le faire plus tard si vous le souhaitez, mais les comptes non vérifiés n'ont accès qu'à une version limitée de Twake",
|
||||
"components.verify_mail.paragraph": "Vous pouvez le faire plus tard si vous le souhaitez, mais les comptes non vérifiés n'ont accès qu'à une version limitée de Tdrive",
|
||||
"services.console_services.toaster.add_emails_error": "Une erreur s'est produite pendant l'ajout de(s) email(s)",
|
||||
"services.console_services.toaster.add_email_error_message": "Une erreur s'est produite lors de l'ajout de {{$1}}",
|
||||
"services.console_services.toaster.success_verify_email": "Un lien de vérification a été envoyé à votre compte de messagerie",
|
||||
@@ -778,7 +778,7 @@
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "Il y a un problème avec l'abonnement de votre entreprise. Veuillez contacter le propriétaire ou l'administrateur de l'entreprise !",
|
||||
"components.on_boarding.company_billing_banner.link": "plan d'abonnement d'entreprise",
|
||||
"components.on_boarding.popups.blocked_company.title": "Votre entreprise est bloquée à cause d'un problème de paiement",
|
||||
"components.on_boarding.popups.blocked_company.description": "Votre abonnement à Twake a expiré. Veuillez contacter le propriétaire ou l'administrateur de votre entreprise pour le renouveler et pouvoir à nouveau communiquer avec votre équipe !",
|
||||
"components.on_boarding.popups.blocked_company.description": "Votre abonnement à Tdrive a expiré. Veuillez contacter le propriétaire ou l'administrateur de votre entreprise pour le renouveler et pouvoir à nouveau communiquer avec votre équipe !",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Envie d'en savoir plus sur l'abonnement entreprise ?",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Cliquez ici",
|
||||
"components.on_boarding.popups.blocked_company.or": "Ou",
|
||||
@@ -820,7 +820,7 @@
|
||||
"components.locked_features.locked_workspace_popup.text": "Oups !! Vous souhaitez créer un nouvel espace de travail dans votre entreprise. Vous pouvez envisager de mettre à niveau votre plan si vous souhaitez collaborer dans plusieurs espaces de travail. Explorez nos options de tarification et sélectionnez la meilleure option pour les besoins de collaboration de votre équipe.",
|
||||
"components.locked_features.locked_only_office_popup.title": "Vous ne pouvez pas éditer ce fichier",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "Dans la version gratuite, vous ne pouvez pas utiliser Onlyoffice.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Oups !! Vous souhaitez modifier le fichier à partir de Twake. Vous voudrez peut-être envisager de mettre à niveau votre plan si vous souhaitez collaborer autour de fichiers bureautiques. Explorez nos options de tarification et sélectionnez la meilleure option pour les besoins de collaboration de votre équipe.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Oups !! Vous souhaitez modifier le fichier à partir de Tdrive. Vous voudrez peut-être envisager de mettre à niveau votre plan si vous souhaitez collaborer autour de fichiers bureautiques. Explorez nos options de tarification et sélectionnez la meilleure option pour les besoins de collaboration de votre équipe.",
|
||||
"components.locked_features.locked_drive_popup.title": "Vous venez d'atteindre la limite d'importation",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "Dans la version gratuite, vous ne pouvez stocker que 6 Go.",
|
||||
"general.resume": "Reprendre",
|
||||
@@ -849,7 +849,7 @@
|
||||
"scenes.app.popup.adduser.magiclinks.action_generate": "Générer",
|
||||
"scenes.app.popup.adduser.magiclinks.action_copy": "Copier",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Nombre de messages",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Dans la version gratuite de Twake, vous pouvez seulement accéder aux {{$1}} messages les plus récents.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Dans la version gratuite de Tdrive, vous pouvez seulement accéder aux {{$1}} messages les plus récents.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Afficher d'autres offres",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.default_workspace.label": "Espace par défaut",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.default_workspace.description": "Invite automatiquement tous les utilisateurs de l'entreprise dans cet espace de travail",
|
||||
@@ -869,7 +869,7 @@
|
||||
"components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Aucune commande trouvé",
|
||||
"scenes.join.loading": "Chargement…",
|
||||
"scenes.join.wrong_link_title": "Ce lien n'est plus disponible",
|
||||
"scenes.join.twake_description": "Twake est un espace de travail numérique à code ouvert conçu pour améliorer la productivité de votre équipe",
|
||||
"scenes.join.twake_description": "Tdrive est un espace de travail numérique à code ouvert conçu pour améliorer la productivité de votre équipe",
|
||||
"scenes.join.login_first_button": "Connectez-vous ou créez d'abord un compte",
|
||||
"scenes.join.wrong_link_description": "Demandez à la personne qui vous a invité(e) de rejoindre cette entreprise par un nouveau lien ou créez votre propre entreprise",
|
||||
"scenes.join.join_the_team_button": "Rejoindre l'équipe",
|
||||
@@ -892,7 +892,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Je comprends que le propriétaire et les administrateurs de cette entreprise pourront modifier et publier cette application.",
|
||||
"twake.application.access.title": "Sélectionnez les portées adaptées à votre application.",
|
||||
"twake.application.access.no_default_scopes_available'": "Cette intégration n'a pas d'accès {{$1}}.",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "la documentation de l'API Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "la documentation de l'API Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Si vous ne savez pas comment les remplir, consultez ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Clé privée",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "L'application {{$1}} a été supprimée avec succès !",
|
||||
@@ -900,9 +900,9 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_published": "Application {{$1}} réussie !",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Paramètres du développeur",
|
||||
"scenes.app.integrations_parameters.add_application": "Nouvelle intégration",
|
||||
"components.open_desktop_popup.subtitle": "Ouvert dans l'application Twake",
|
||||
"components.open_desktop_popup.subtitle": "Ouvert dans l'application Tdrive",
|
||||
"components.open_desktop_popup.open_here_link": "Ouvrir dans la version web",
|
||||
"molecules.download_banner.title": "Tirez le meilleur parti de Twake, téléchargez l'application de bureau maintenant",
|
||||
"molecules.download_banner.title": "Tirez le meilleur parti de Tdrive, téléchargez l'application de bureau maintenant",
|
||||
"molecules.download_banner.download_button": "Télécharger l'application de bureau",
|
||||
"components.searchpopup.no_results_for": "Il n'y a pas eu de résultats pour",
|
||||
"components.searchpopup.try_new_search": "Essayez une nouvelle recherche",
|
||||
@@ -942,7 +942,7 @@
|
||||
"components.channel_attachement_list.open": "Ouvrir la galerie",
|
||||
"scenes.apps.messages.jump": "Aller au message",
|
||||
"scenes.apps.account.on_console": "Pour modifier les préférences globales de votre compte, cliquez sur Aller à la console.",
|
||||
"scenes.apps.account.assistant.description": "L'assistant Twake est capable de donner un sens à votre travail quotidien sur Twake et de fournir des raccourcis et des actions intelligents au cours de votre journée. L'assistant fait partie de l'initiative Work@Home https://workathome.linagora.com/ et est actuellement testé uniquement dans l'entreprise Linagora et est en phase d'apprentissage. Cela signifie que nous enverrons des données d'utilisation de Twake afin de former notre future fonction d'assistant.",
|
||||
"scenes.apps.account.assistant.description": "L'assistant Tdrive est capable de donner un sens à votre travail quotidien sur Tdrive et de fournir des raccourcis et des actions intelligents au cours de votre journée. L'assistant fait partie de l'initiative Work@Home https://workathome.linagora.com/ et est actuellement testé uniquement dans l'entreprise Linagora et est en phase d'apprentissage. Cela signifie que nous enverrons des données d'utilisation de Tdrive afin de former notre future fonction d'assistant.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Ne rien partager avec l'assistant (désactiver l'assistant)",
|
||||
"scenes.apps.account.assistant.share.all": "Partagez tout, y compris les messages et le contenu des fichiers",
|
||||
"scenes.apps.account.assistant.share.metadata": "Partager les métadonnées mais pas le contenu",
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
"scenes.login.forgot_password.password": "Password",
|
||||
"scenes.login.forgot_password.password2": "Conferma password",
|
||||
"scenes.login.forgot_password.password_dont_match": "Le tue password non corrispondono o sono troppo corte. Si prega di digitare una password con almeno 8 caratteri.",
|
||||
"scenes.login.home.title": "Accedi a Twake",
|
||||
"scenes.login.home.title": "Accedi a Tdrive",
|
||||
"scenes.login.create_account.step_1_subtitle": "Non potrebbe essere più semplice: abbiamo solo bisogno di alcune informazioni.",
|
||||
"scenes.login.create_account.step_2_subtitle_a": "Aggiungi il tuo nome completo per consentire agli altri utenti di riconoscerti.",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Benvenuto a Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Benvenuto a Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Puoi collegare più indirizzi e-mail al tuo account; verrà utilizzato un solo indirizzo per inviarti le notifiche.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Indirizzo principale",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Indirizzi secondari",
|
||||
@@ -23,7 +23,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "La tua domanda è pubblicata, non puoi modificarla.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Utilizzare * in fase di sviluppo per consentire tutti gli indirizzi IP.",
|
||||
"scenes.app.popup.appsparameters.pages.app_privileges_label": "Privilegi dell'applicazione",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "La pubblicazione della tua domanda è attualmente in attesa di convalida da parte del team Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "La pubblicazione della tua domanda è attualmente in attesa di convalida da parte del team Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Forza in tutta l'azienda",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Evento di tipo '{{$1}}' e id '{{$2}}' con passivi '{{$3}}'",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Proprietario della compagnia",
|
||||
@@ -110,7 +110,7 @@
|
||||
"components.on_boarding.popups.blocked_company.or": "o",
|
||||
"components.on_boarding.popups.blocked_company.company_selector": "Passa a un'altra azienda",
|
||||
"scenes.apps.tasks.select_user": "Cerca utente",
|
||||
"components.locked_features.locked_only_office_popup.text": "Ops!! Sembra che tu voglia modificare il file da Twake. Potresti prendere in considerazione l'aggiornamento del tuo piano se desideri collaborare sui file dell'ufficio. Esplora le nostre opzioni di prezzo e seleziona l'opzione migliore per le esigenze di collaborazione del tuo team.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Ops!! Sembra che tu voglia modificare il file da Tdrive. Potresti prendere in considerazione l'aggiornamento del tuo piano se desideri collaborare sui file dell'ufficio. Esplora le nostre opzioni di prezzo e seleziona l'opzione migliore per le esigenze di collaborazione del tuo team.",
|
||||
"components.locked_features.locked_drive_popup.title": "Hai appena raggiunto il limite di unità",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "Nella versione gratuita, puoi archiviare solo 6 GB.",
|
||||
"general.resume": "Riprendere",
|
||||
@@ -123,7 +123,7 @@
|
||||
"scenes.join.wrong_link_description": "Chiedi alla persona che ti ha invitato a entrare a far parte di questa azienda un nuovo collegamento o crea la tua azienda",
|
||||
"scenes.join.create_the_company_button": "Crea l'azienda",
|
||||
"scenes.join.join_workspace_from_company": "Unisciti a {{$1}} da {{$2}}!",
|
||||
"scenes.join.twake_description": "Twake è uno spazio di lavoro digitale open source creato per migliorare la produttività del tuo team",
|
||||
"scenes.join.twake_description": "Tdrive è uno spazio di lavoro digitale open source creato per migliorare la produttività del tuo team",
|
||||
"scenes.join.login_first_button": "Accedi o crea un account prima",
|
||||
"scenes.join.join_the_team_button": "Unisciti alla squadra",
|
||||
"general.close": "Vicino",
|
||||
@@ -249,7 +249,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "La vecchia password non è corretta.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Le tue password non corrispondono o sono troppo corte. Si prega di digitare una password con almeno 8 caratteri.",
|
||||
"scenes.apps.account.account.logout": "Disconnettersi",
|
||||
"scenes.apps.account.languages.text": "Cambia la lingua di Twake.",
|
||||
"scenes.apps.account.languages.text": "Cambia la lingua di Tdrive.",
|
||||
"scenes.apps.account.notifications.title": "Notifiche",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Parole chiave",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "dev, wifi, codice, ...",
|
||||
@@ -291,13 +291,13 @@
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "Archivia tutti i compiti",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Rimuovi i compiti archiviati ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "Vai su twakeapp.com",
|
||||
"scenes.login.footer.branding": "Sei su un server Twake privato {{$1}} ({{$2}}). ",
|
||||
"scenes.login.footer.branding": "Sei su un server Tdrive privato {{$1}} ({{$2}}). ",
|
||||
"scenes.login.create_account.title": "Crea un nuovo account",
|
||||
"scenes.login.create_account.email": "Posta elettronica",
|
||||
"scenes.login.create_account.fill_in_email": "Devi compilare la tua email con una email corretta",
|
||||
"scenes.login.create_account.too_short_password": "La tua password deve contenere almeno 8 caratteri.",
|
||||
"scenes.login.create_account.firstname": "Nome",
|
||||
"scenes.login.create_account.newsletter": "Ricevere informazioni su Twake",
|
||||
"scenes.login.create_account.newsletter": "Ricevere informazioni su Tdrive",
|
||||
"scenes.login.create_account.lastname": "Cognome",
|
||||
"scenes.login.forgot_password.title": "Hai dimenticato la password?",
|
||||
"scenes.login.forgot_password.text": "Riceverai un codice di 9 cifre via e-mail per verificare la tua identità.",
|
||||
@@ -339,12 +339,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Ti abbiamo inviato un codice di verifica tramite {{$1}}",
|
||||
"scenes.app.workspaces.welcome_page.done": "Ho finito",
|
||||
"scenes.login.forgot_password.finished": "La tua password è stata aggiornata con successo.",
|
||||
"scenes.apps.account.account.description_main": "Il tuo indirizzo principale è dove Twake invia le tue notifiche. I tuoi indirizzi secondari ti consentono di essere invitato automaticamente agli spazi di lavoro che li utilizzano.",
|
||||
"scenes.apps.account.account.description_main": "Il tuo indirizzo principale è dove Tdrive invia le tue notifiche. I tuoi indirizzi secondari ti consentono di essere invitato automaticamente agli spazi di lavoro che li utilizzano.",
|
||||
"scenes.apps.account.account.emails.description": "Gestisci i tuoi diversi indirizzi e-mail.",
|
||||
"scenes.apps.account.account.make_main": "Imposta la e-mail principale",
|
||||
"scenes.apps.account.account.password.description": "Cambia la tua password.",
|
||||
"scenes.apps.account.identity": "Identità",
|
||||
"scenes.apps.account.identity.description": "Modifica il tuo nome, cognome e immagine del profilo visibile agli altri utenti di Twake.",
|
||||
"scenes.apps.account.identity.description": "Modifica il tuo nome, cognome e immagine del profilo visibile agli altri utenti di Tdrive.",
|
||||
"scenes.apps.account.preference": "Preferenze",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Dimensione massima 5 MB",
|
||||
"scenes.apps.account.account.email_add_modal.confirm": "Conferma questa e-mail",
|
||||
@@ -387,7 +387,7 @@
|
||||
"scenes.app.channelsbar.currentuser.reactivate_notifications": "Riattivare",
|
||||
"scenes.app.channelsbar.currentuser.user_parameter": "Impostazioni di notifica",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Numero di messaggi",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Nella versione gratuita di Twake, non è possibile accedere a più di {{$1}} messaggi più recenti.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Nella versione gratuita di Tdrive, non è possibile accedere a più di {{$1}} messaggi più recenti.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Mostra più piani",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "Nuova discussione privata",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Nessun messaggio privato. Invita gli utenti!",
|
||||
@@ -410,13 +410,13 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Privato",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Invia il tuo primo messaggio in una discussione",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Non mostrare più questa cornice mai?",
|
||||
"scenes.app.channelsbar.welcome": "Benvenuto a Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Diventa un professionista di Twake in pochi clic!",
|
||||
"scenes.app.channelsbar.welcome": "Benvenuto a Tdrive",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Diventa un professionista di Tdrive in pochi clic!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Inizia selezionando un canale alla tua sinistra.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Non hai un connettore in grado di connettersi a un canale.",
|
||||
"scenes.app.mainview.tabs.rename": "Rinominare",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Cerchiamo di connettori...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Si prega di separare gli indirizzi con una virgola o uno spazio. Ricorda che Twake può limitare il numero di inviti in base al tuo abbonamento.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Si prega di separare gli indirizzi con una virgola o uno spazio. Ricorda che Tdrive può limitare il numero di inviti in base al tuo abbonamento.",
|
||||
"scenes.app.popup.adduser.magiclinks.genrator_info": "Link di invito allo spazio di lavoro",
|
||||
"scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Copiato negli appunti con successo",
|
||||
"scenes.app.popup.adduser.magiclinks.action_copy": "Copiare",
|
||||
@@ -424,7 +424,7 @@
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "Identità dell'applicazione",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Prova l'aspetto dei tuoi messaggi Twacode",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "La mia fantastica app",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Dati utili per l'API Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Dati utili per l'API Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "Impostazioni API",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Nome dell'applicazione",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Tutti i manager di questa azienda potranno modificare questa applicazione.",
|
||||
@@ -451,7 +451,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.filter_information": "Questo filtro limita l'uso della tua chiave API ai soli server nel tuo connettore.",
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Nuova applicazione",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "ok",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "L'applicazione non pubblicata funzionerà solo nella tua azienda. Se vuoi renderlo disponibile a tutti gli utenti Twake, attiva questa opzione.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "L'applicazione non pubblicata funzionerà solo nella tua azienda. Se vuoi renderlo disponibile a tutti gli utenti Tdrive, attiva questa opzione.",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Identificatore pubblico",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "Determina la visibilità della tua applicazione.",
|
||||
"scenes.app.popup.appsparameters.pages.publication_label": "Pubblicazione",
|
||||
@@ -463,7 +463,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "Mostra",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Stato",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Questa stringa identifica la tua applicazione e verrà utilizzata nei comandi dei messaggi.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tester di Twakecode",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tester di Tdrivecode",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "URL della ricezione degli eventi",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "In attesa...",
|
||||
"scenes.app.popup.appsparameters.pages.website_label": "Sito web",
|
||||
@@ -621,7 +621,7 @@
|
||||
"scenes.login.verifymail.signin_button": "Accesso",
|
||||
"scenes.login.verifymail.success": "La tua e-mail è stata verificata con successo!",
|
||||
"scenes.login.verifymail.verification_waiting": "In attesa di verifica...",
|
||||
"scenes.no_panic": "Niente panico! Basta ricaricare questa pagina per correggere Twake.",
|
||||
"scenes.no_panic": "Niente panico! Basta ricaricare questa pagina per correggere Tdrive.",
|
||||
"services.apps.calendar.deadline_icon": "Scadenza",
|
||||
"services.apps.calendar.event_icon": "Evento",
|
||||
"services.apps.calendar.move_icon": "Mossa",
|
||||
@@ -661,7 +661,7 @@
|
||||
"scenes.apps.account.account.password_for_user": "Password per il tuo utente",
|
||||
"scenes.apps.account.account.send_info": "Invia queste informazioni sulle credenziali al tuo utente.",
|
||||
"scenes.apps.account.account.save": "Salva account",
|
||||
"scenes.apps.account.message_temporary": "Un account temporaneo funziona come un normale account Twake, ma crei la password e potrai reimpostarla se necessario.",
|
||||
"scenes.apps.account.message_temporary": "Un account temporaneo funziona come un normale account Tdrive, ma crei la password e potrai reimpostarla se necessario.",
|
||||
"scenes.apps.account.message_user_signin": "Il tuo utente può accedere in qualsiasi momento utilizzando la stessa e-mail e modificare l'account temporaneo in un account normale.",
|
||||
"scenes.app.mainview.link_expired": "Questo collegamento pubblico non è valido o è scaduto.",
|
||||
"scenes.app.mainview.create_account": "Crea il tuo spazio di lavoro gratuitamente su ",
|
||||
@@ -741,7 +741,7 @@
|
||||
"components.leftbar.channel.workspaceschannels.menu.option_2": "Unisciti a un canale",
|
||||
"components.channelworkspacelist.title": "Canali",
|
||||
"components.notifications.hidden_notifications_button.children": "Nuovo messaggio",
|
||||
"components.newversion.new_version_component.row.part_1": "Stai utilizzando una versione Twake obsoleta",
|
||||
"components.newversion.new_version_component.row.part_1": "Stai utilizzando una versione Tdrive obsoleta",
|
||||
"scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} ha aggiunto un nuovo connettore {{$2}}",
|
||||
"scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}} ha rimosso un connettore {{$2}}",
|
||||
"components.alert.leave_private_channel.title": "Sei sicuro di voler lasciare il canale?",
|
||||
@@ -751,14 +751,14 @@
|
||||
"general.verify": "Verificare",
|
||||
"components.unverified_account.typography_text_danger": "Si prega di verificare il tuo account entro {{$1}} giorni. In caso contrario, il tuo account verrà bloccato dopo 7 giorni e cancellato definitivamente dopo 30 giorni. Puoi verificare il tuo account attraverso l'email di verifica.",
|
||||
"components.blocked_account.trial_period_over": "Il tuo periodo di prova è terminato. Per sbloccare il tuo account e ottenere l'accesso a tutte le funzionalità, verifica il tuo account tramite e-mail di conferma",
|
||||
"components.add_mails_workspace.button": "Inizia a usare Twake",
|
||||
"components.add_mails_workspace.button": "Inizia a usare Tdrive",
|
||||
"components.add_mails_workspace.title_1": "Aggiungi alcuni utenti",
|
||||
"components.add_mails_workspace.title_2": "Twake è uno strumento di collaborazione in team, quindi invita alcuni utenti a testare uno spazio di lavoro che abbiamo creato per te.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive è uno strumento di collaborazione in team, quindi invita alcuni utenti a testare uno spazio di lavoro che abbiamo creato per te.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Inserisci le email dei tuoi utenti*",
|
||||
"components.verify_mail.title_2": "Ora sei un utente ufficiale di Twake!",
|
||||
"components.verify_mail.title_2": "Ora sei un utente ufficiale di Tdrive!",
|
||||
"components.verify_mail.button": "Aggiungi utente",
|
||||
"components.verify_mail.text": "Prima di tutto, devi verificare il tuo indirizzo email. Abbiamo inviato un link di verifica a",
|
||||
"components.verify_mail.paragraph": "Puoi farlo in seguito, se lo desideri, ma gli account non verificati hanno accesso solo a una versione limitata di Twake",
|
||||
"components.verify_mail.paragraph": "Puoi farlo in seguito, se lo desideri, ma gli account non verificati hanno accesso solo a una versione limitata di Tdrive",
|
||||
"services.console_services.toaster.add_emails_error": "Errore durante l'aggiunta di email",
|
||||
"services.console_services.toaster.add_email_error_message": "Errore durante l'aggiunta di {{$1}}",
|
||||
"services.console_services.toaster.success_verify_email": "È stato inviato un collegamento di verifica al tuo account di posta elettronica",
|
||||
@@ -784,7 +784,7 @@
|
||||
"components.locked_features.locked_history_banner.description": "La tua azienda ha molti messaggi! Esegui l'upgrade ora per accedere a tutta la cronologia dei tuoi messaggi.",
|
||||
"components.locked_features.locked_history_banner.button": "Scopri di più",
|
||||
"components.locked_features.locked_guests_popup.title": "La funzione Ospiti è bloccata",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Questa funzione non è disponibile nella versione gratuita di Twake",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Questa funzione non è disponibile nella versione gratuita di Tdrive",
|
||||
"components.locked_features.locked_guests_popup.description": "Ops!! Sembra che tu voglia invitare utenti esterni nel tuo spazio di lavoro. Potresti prendere in considerazione l'upgrade del tuo piano se desideri collaborare con ospiti e partner esterni. Esplora le nostre opzioni di prezzo e seleziona l'opzione migliore per le esigenze di collaborazione del tuo team.",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Scopri di più",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Salta per ora",
|
||||
@@ -793,7 +793,7 @@
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "Si è verificato un problema con l'abbonamento aziendale. Si prega di contattare il proprietario o l'amministratore dell'azienda!",
|
||||
"components.on_boarding.company_billing_banner.link": "piano di abbonamento aziendale",
|
||||
"components.on_boarding.popups.blocked_company.title": "La tua azienda è bloccata a causa di un problema di pagamento",
|
||||
"components.on_boarding.popups.blocked_company.description": "Il tuo abbonamento a Twake è scaduto. Contatta il proprietario o l'amministratore della tua azienda per rinnovarla ed essere in grado di comunicare nuovamente con il tuo team!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Il tuo abbonamento a Tdrive è scaduto. Contatta il proprietario o l'amministratore della tua azienda per rinnovarla ed essere in grado di comunicare nuovamente con il tuo team!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Vuoi saperne di più sul piano di abbonamento delle aziende?",
|
||||
"scenes.apps.tasks.select_user_button": "Visualizza le attività di un altro utente",
|
||||
"scenes.apps.messages.input.attach_file.from_computer": "Dal computer",
|
||||
@@ -878,7 +878,7 @@
|
||||
"twake.application.access.title": "Seleziona gli ambiti giusti per la tua applicazione.",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Impostazioni dello sviluppatore",
|
||||
"twake.application.access.no_default_scopes_available'": "Questa integrazione non ha alcun accesso {{$1}}",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "la documentazione dell'API Twake",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "la documentazione dell'API Tdrive",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Se non sai come riempirli, vai a ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Chiave privata",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "Applicazione rimossa con successo {{$1}} !",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_published": "Applicazione {{$1}} riuscita!",
|
||||
"scenes.app.integrations_parameters.add_application": "Nuova integrazione",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Alla ricerca di più",
|
||||
"components.open_desktop_popup.subtitle": "aperto nell'app Twake",
|
||||
"components.open_desktop_popup.subtitle": "aperto nell'app Tdrive",
|
||||
"components.open_desktop_popup.open_here_link": "Apri qui invece",
|
||||
"molecules.download_banner.title": "Ottieni il massimo da Twake, scarica subito l'app desktop",
|
||||
"molecules.download_banner.title": "Ottieni il massimo da Tdrive, scarica subito l'app desktop",
|
||||
"molecules.download_banner.download_button": "Scarica l'app desktop",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Copia il link del canale",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Aggiornato con successo",
|
||||
@@ -932,7 +932,7 @@
|
||||
"scenes.apps.messages.jump": "Vai al messaggio",
|
||||
"components.channel_attachement_list.open": "Apri galleria",
|
||||
"scenes.apps.account.on_console": "Per modificare le preferenze del tuo account globale, fai clic su Vai alla console.",
|
||||
"scenes.apps.account.assistant.description": "L'assistente Twake è in grado di dare un senso al tuo lavoro quotidiano su Twake e fornire scorciatoie e azioni intelligenti durante la tua giornata. L'assistente fa parte dell'iniziativa Work@Home https://workathome.linagora.com/ ed è attualmente in fase di sperimentazione solo in azienda Linagora ed è in fase di apprendimento. Significa che invieremo i dati sull'utilizzo di Twake per addestrare la nostra futura funzione di assistente.",
|
||||
"scenes.apps.account.assistant.description": "L'assistente Tdrive è in grado di dare un senso al tuo lavoro quotidiano su Tdrive e fornire scorciatoie e azioni intelligenti durante la tua giornata. L'assistente fa parte dell'iniziativa Work@Home https://workathome.linagora.com/ ed è attualmente in fase di sperimentazione solo in azienda Linagora ed è in fase di apprendimento. Significa che invieremo i dati sull'utilizzo di Tdrive per addestrare la nostra futura funzione di assistente.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Non condividere nulla con l'assistente (disabilita assistente)",
|
||||
"scenes.apps.account.assistant.share.all": "Condividi tutto, inclusi messaggi e contenuti di file",
|
||||
"scenes.apps.account.assistant.share.metadata": "Condividi i metadati ma non i contenuti",
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "古いパスワードが正しくありません。",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "パスワードが一致しないか小さすぎます。少なくとも8文字以上のパスワードを入力してください。",
|
||||
"scenes.apps.account.account.logout": "ログアウト",
|
||||
"scenes.apps.account.languages.text": "Twake言語を変更します。",
|
||||
"scenes.apps.account.languages.text": "Tdrive言語を変更します。",
|
||||
"scenes.apps.account.notifications.title": "通知",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "キーワード",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "dev、wifi、code、...",
|
||||
@@ -97,7 +97,7 @@
|
||||
"scenes.login.forgot_password.password": "パスワード",
|
||||
"scenes.login.forgot_password.password2": "パスワードを認証する",
|
||||
"scenes.login.forgot_password.password_dont_match": "パスワードが一致しないか小さすぎます。少なくとも8文字以上のパスワードを入力してください。",
|
||||
"scenes.login.home.title": "Twakeにサインインする",
|
||||
"scenes.login.home.title": "Tdriveにサインインする",
|
||||
"scenes.login.home.email": "電子メイル",
|
||||
"scenes.login.home.unable_to_connect": "無効な資格情報",
|
||||
"scenes.login.home.password": "パスワード",
|
||||
@@ -108,7 +108,7 @@
|
||||
"scenes.apps.account.notifications.mail_subtitle": "電子メール通知",
|
||||
"scenes.app.popup.appsparameters.pages.app_privileges_information": "アプリケーションが編集および読み取りできるものを定義します。",
|
||||
"scenes.app.popup.appsparameters.pages.message_data_next_event": "次のイベントで送信されるパッシブデータ",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "未公開のアプリケーションは、あなたの会社でのみ機能します。すべてのTwakeユーザーが利用できるようにする場合は、このオプションを有効にします。",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "未公開のアプリケーションは、あなたの会社でのみ機能します。すべてのTdriveユーザーが利用できるようにする場合は、このオプションを有効にします。",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "公開識別子",
|
||||
"scenes.app.popup.appsparameters.pages.danger_zone_small_text": "公開されている場合、このアプリを削除することはできません。",
|
||||
"scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "アプリケーションの簡略名は、すでに別のアプリケーションで使用されています。変更してください。",
|
||||
@@ -153,7 +153,7 @@
|
||||
"scenes.apps.drive.unconfigured_tab": "このタブはまだ構成されていません。",
|
||||
"scenes.apps.messages.message.unpin_button": "メッセージの固定を解除する",
|
||||
"scenes.apps.messages.message.copy_link": "メッセージへのリンクをコピー",
|
||||
"scenes.no_panic": "慌てる必要はありません!このページをリロードするだけでTwakeを修正できます。",
|
||||
"scenes.no_panic": "慌てる必要はありません!このページをリロードするだけでTdriveを修正できます。",
|
||||
"services.apps.calendar.event_icon": "イベント",
|
||||
"services.apps.calendar.move_icon": "動く",
|
||||
"services.apps.calendar.reminder_icon": "リマインダー",
|
||||
@@ -165,17 +165,17 @@
|
||||
"scenes.apps.calendar.unconfigured_tab": "このタブはまだ構成されていません。",
|
||||
"scenes.apps.drive.trash": "ごみ",
|
||||
"components.add_mails_workspace.title_1": "一部のユーザーを追加",
|
||||
"components.add_mails_workspace.title_2": "Twakeはチームコラボレーションツールなので、私たちが作成したワークスペースをテストするために何人かのユーザーを招待します。",
|
||||
"components.add_mails_workspace.title_2": "Tdriveはチームコラボレーションツールなので、私たちが作成したワークスペースをテストするために何人かのユーザーを招待します。",
|
||||
"components.add_mails_workspace.text_area_placeholder": "ユーザーのメールアドレスを入力してください*",
|
||||
"components.verify_mail.title_1": "おめでとう",
|
||||
"components.verify_mail.title_2": "あなたは今、Twakeの公式ユーザーです!",
|
||||
"components.verify_mail.title_2": "あなたは今、Tdriveの公式ユーザーです!",
|
||||
"services.console_services.toaster.add_emails_error": "メールの追加中にエラーが発生しました",
|
||||
"services.console_services.toaster.add_email_error_message": "{{$1}}の追加中にエラーが発生しました",
|
||||
"components.richtexteditor.toolbar.code-block": "コードブロック",
|
||||
"components.locked_features.locked_history_banner.title": "メッセージ制限に達しました",
|
||||
"components.locked_features.locked_history_banner.button": "もっと詳しく知る",
|
||||
"components.locked_features.locked_guests_popup.title": "ゲスト機能はロックされています",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "この機能は、Twake無料バージョンでは使用できません",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "この機能は、Tdrive無料バージョンでは使用できません",
|
||||
"components.locked_features.locked_guests_popup.description": "おっと!外部ユーザーをワークスペースに招待したいようです。ゲストや外部パートナーとコラボレーションしたい場合は、プランのアップグレードを検討することをお勧めします。価格設定オプションを調べて、チームコラボレーションのニーズに最適なオプションを選択してください。",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "もっと詳しく知る",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "今すぐスキップ",
|
||||
@@ -201,7 +201,7 @@
|
||||
"components.emoji_picker.categories.animals_and_nature": "動物と自然",
|
||||
"components.emoji_picker.categories.food_and_drink": "食べ物飲み物",
|
||||
"components.locked_features.locked_workspace_popup.text": "おっと!会社に新しいワークスペースを作成しますか?計画のアップグレードを検討することをお勧めします。価格設定オプションを調べて、チームコラボレーションのニーズに最適な選択肢を選択してください。",
|
||||
"components.locked_features.locked_only_office_popup.text": "おっと! Twakeからファイルを編集したいようです。 Officeファイルを中心に共同作業を行う場合は、プランのアップグレードを検討することをお勧めします。価格設定オプションを調べて、チームコラボレーションのニーズに最適なオプションを選択してください。",
|
||||
"components.locked_features.locked_only_office_popup.text": "おっと! Tdriveからファイルを編集したいようです。 Officeファイルを中心に共同作業を行う場合は、プランのアップグレードを検討することをお勧めします。価格設定オプションを調べて、チームコラボレーションのニーズに最適なオプションを選択してください。",
|
||||
"components.locked_features.locked_drive_popup.title": "ドライブ制限に達しました",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "無料版では、6GBしか保存できません。",
|
||||
"scenes.app.integrations_parameters.title": "統合",
|
||||
@@ -299,8 +299,8 @@
|
||||
"scenes.apps.tasks.list_modal.predefined_participants": "事前定義された参加者",
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "すべてのタスクをアーカイブする",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "アーカイブされたタスクを削除する({{$1}})",
|
||||
"scenes.login.footer.branding": "{{$1}}({{$2}})プライベートTwakeサーバーを使用しています。 ",
|
||||
"scenes.login.create_account.newsletter": "Twakeに関する情報を受け取る",
|
||||
"scenes.login.footer.branding": "{{$1}}({{$2}})プライベートTdriveサーバーを使用しています。 ",
|
||||
"scenes.login.create_account.newsletter": "Tdriveに関する情報を受け取る",
|
||||
"scenes.login.home.subtitle": "お会いできて嬉しいです",
|
||||
"scenes.login.create_account.password": "パスワード",
|
||||
"scenes.login.create_account.step_1_subtitle": "これ以上簡単なことはありません—必要なのはいくつかの情報だけです。",
|
||||
@@ -320,7 +320,7 @@
|
||||
"scenes.app.workspaces.welcome_page.ready_to_work": "これで作業する準備が整いました。",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "再試行",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "トウェイク",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Twakeへようこそ!",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Tdriveへようこそ!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "複数の電子メールアドレスをアカウントにリンクできます。通知の送信に使用されるアドレスは1つだけです。",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "メインアドレス",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "セカンダリアドレス",
|
||||
@@ -328,10 +328,10 @@
|
||||
"scenes.app.workspaces.welcome_page.code_verification": "検証コード",
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "{{$1}}経由で確認コードをお送りしました",
|
||||
"scenes.login.forgot_password.finished": "パスワードは正常に更新されました。",
|
||||
"scenes.apps.account.account.description_main": "メインアドレスは、Twakeが通知を送信する場所です。セカンダリアドレスを使用すると、それらを使用するワークスペースに自動的に招待されます。",
|
||||
"scenes.apps.account.account.description_main": "メインアドレスは、Tdriveが通知を送信する場所です。セカンダリアドレスを使用すると、それらを使用するワークスペースに自動的に招待されます。",
|
||||
"scenes.apps.account.account.emails.description": "さまざまな電子メールアドレスを管理します。",
|
||||
"scenes.apps.account.account.password.description": "パスワードを変更してください。",
|
||||
"scenes.apps.account.identity.description": "他のTwakeユーザーに表示される名前、名前、プロフィール画像を変更します。",
|
||||
"scenes.apps.account.identity.description": "他のTdriveユーザーに表示される名前、名前、プロフィール画像を変更します。",
|
||||
"scenes.apps.account.preference": "環境設定",
|
||||
"general.open": "開ける",
|
||||
"scenes.apps.account.thumbnail.max_weight": "最大サイズ5MB",
|
||||
@@ -375,19 +375,19 @@
|
||||
"scenes.app.channelsbar.public_channel_label": "公衆",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "ディスカッションで最初のメッセージを送信する",
|
||||
"scenes.app.channelsbar.tutorial_alert": "このフレームを二度と表示しませんか?",
|
||||
"scenes.app.channelsbar.welcome": "Twakeへようこそ",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "数回クリックするだけでTwakeプロになりましょう!",
|
||||
"scenes.app.channelsbar.welcome": "Tdriveへようこそ",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "数回クリックするだけでTdriveプロになりましょう!",
|
||||
"scenes.app.mainview.instruction_current_tab": "左側のチャンネルを選択することから始めます。",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "チャネルに接続できるコネクタがありません。",
|
||||
"scenes.app.mainview.tabs.rename": "名前を変更",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "コネクタを検索...",
|
||||
"scenes.app.popup.adduser.adresses_message": "アドレスはカンマまたはスペースで区切ります。 Twakeは、サブスクリプションに基づいて招待の数を制限できることに注意してください。",
|
||||
"scenes.app.popup.adduser.adresses_message": "アドレスはカンマまたはスペースで区切ります。 Tdriveは、サブスクリプションに基づいて招待の数を制限できることに注意してください。",
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "アプリケーションのID",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Twacodeメッセージの外観をテストします",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "アプリケーションは公開されています。編集することはできません。",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "開発時に*を使用して、すべてのIPアドレスを許可します。",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "私の素晴らしいアプリ",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "TwakeAPIに役立つデータ。",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "TdriveAPIに役立つデータ。",
|
||||
"scenes.apps.calendar.no_calendar_text": "このワークスペースにカレンダーを設定していません。",
|
||||
"scenes.apps.calendar.remove_calendar_confirmation": "カレンダーとそのイベントを完全に削除しますか?",
|
||||
"scenes.app.mainview.advanced_search_placeholder": "高度な検索",
|
||||
@@ -426,12 +426,12 @@
|
||||
"scenes.apps.messages.message.modify_button": "編集",
|
||||
"scenes.apps.messages.message.pin_button": "ピンメッセージ",
|
||||
"components.verify_mail.text": "まず、メールアドレスを確認する必要があります。に確認リンクを送信しました",
|
||||
"components.verify_mail.paragraph": "必要に応じて後で行うことができますが、未確認のアカウントは限定バージョンのTwakeにしかアクセスできません",
|
||||
"components.verify_mail.paragraph": "必要に応じて後で行うことができますが、未確認のアカウントは限定バージョンのTdriveにしかアクセスできません",
|
||||
"components.richtexteditor.toolbar.blockquote": "ブロッククォート",
|
||||
"components.on_boarding.company_billing_banner.admin_or_owner_text": "会社のサブスクリプションに問題があります。どうぞ、あなたの",
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "会社のサブスクリプションに問題があります。会社の所有者または管理者に連絡してください!",
|
||||
"components.on_boarding.company_billing_banner.link": "会社のサブスクリプションプラン",
|
||||
"components.on_boarding.popups.blocked_company.description": "Twakeのサブスクリプションの有効期限が切れています。会社の所有者または管理者に連絡して更新し、チームと再度連絡できるようにしてください。",
|
||||
"components.on_boarding.popups.blocked_company.description": "Tdriveのサブスクリプションの有効期限が切れています。会社の所有者または管理者に連絡して更新し、チームと再度連絡できるようにしてください。",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "企業のサブスクリプションプランについてもっと知りたいですか?",
|
||||
"components.on_boarding.popups.blocked_company.or": "または",
|
||||
"scenes.apps.tasks.select_user": "ユーザーを検索",
|
||||
@@ -478,7 +478,7 @@
|
||||
"scenes.join.wrong_link_description": "あなたをこの会社に招待した人に新しいリンクを求めるか、あなた自身の会社を作りましょう",
|
||||
"scenes.join.create_the_company_button": "会社を作る",
|
||||
"scenes.join.join_workspace_from_company": "{{$2}}から{{$1}}に参加しましょう!",
|
||||
"scenes.join.twake_description": "Twakeは、チームの生産性を向上させるために構築されたオープンソースのデジタルワークスペースです。",
|
||||
"scenes.join.twake_description": "Tdriveは、チームの生産性を向上させるために構築されたオープンソースのデジタルワークスペースです。",
|
||||
"scenes.app.workspaces.create_company.company_name.title_1": "始める、",
|
||||
"scenes.apps.account.account.make_main": "メインを設定",
|
||||
"components.verify_mail.button": "ユーザーを追加する",
|
||||
@@ -527,7 +527,7 @@
|
||||
"scenes.apps.tasks.task": "タスク",
|
||||
"scenes.app.workspaces.create_company.group_data.title": "迅速に対応します—必要なのは統計情報だけです。",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "メッセージ番号",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "無料版のTwakeでは、{{$1}}より新しいメッセージにアクセスすることはできません。",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "無料版のTdriveでは、{{$1}}より新しいメッセージにアクセスすることはできません。",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "より多くの計画を表示する",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "新しいプライベートディスカッション",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "プライベートメッセージはありません。ユーザーを招待しましょう!",
|
||||
@@ -547,7 +547,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.apps_title": "アプリケーションとコネクタ",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "自動",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "「自動」を有効にすると、このアプリケーションはこの会社の次のワークスペースに自動的に追加されます。",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "アプリケーションの公開は現在、Twakeチームによる検証を待っています。",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "アプリケーションの公開は現在、Tdriveチームによる検証を待っています。",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "会社全体の力",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "タイプ '{{$1}}'およびID '{{$2}}'のイベントとパッシブ '{{$3}}'",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "会社のオーナー",
|
||||
@@ -575,7 +575,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "ワークスペースから削除",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "州",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "この文字列はアプリケーションを識別し、メッセージコマンドで使用されます。",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecodeテスター",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecodeテスター",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "イベントレセプションのURL",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "待っています...",
|
||||
"scenes.app.popup.appsparameters.pages.website_label": "Webサイト",
|
||||
@@ -681,7 +681,7 @@
|
||||
"scenes.apps.messages.input.hide_formatting": "フォーマットを非表示",
|
||||
"scenes.apps.messages.input.show_formatting": "フォーマットを表示",
|
||||
"scenes.tell_us": "あなたが何をしていたか教えてください:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "アプリでプレビューするには、Twakeデスクトップをダウンロードしてください",
|
||||
"scenes.apps.drive.viewer.download_desktop": "アプリでプレビューするには、Tdriveデスクトップをダウンロードしてください",
|
||||
"scenes.apps.tasks.my_tasks": "私のタスク",
|
||||
"scenes.apps.tasks.board.place_holder": "ボード名",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "サブタスク",
|
||||
@@ -697,7 +697,7 @@
|
||||
"scenes.apps.account.account.fullname": "フルネーム",
|
||||
"scenes.apps.account.account.password_for_user": "ユーザーのパスワード",
|
||||
"scenes.apps.account.account.send_info": "この資格情報をユーザーに送信します。",
|
||||
"scenes.apps.account.message_temporary": "一時アカウントは通常のTwakeアカウントと同じように機能しますが、パスワードを作成すると、必要に応じてパスワードをリセットできます。",
|
||||
"scenes.apps.account.message_temporary": "一時アカウントは通常のTdriveアカウントと同じように機能しますが、パスワードを作成すると、必要に応じてパスワードをリセットできます。",
|
||||
"scenes.apps.account.message_user_signin": "ユーザーは、この同じ電子メールを使用していつでもサインインし、一時アカウントを通常のアカウントに変更できます。",
|
||||
"scenes.app.mainview.link_expired": "このパブリックリンクは無効であるか、有効期限が切れています。",
|
||||
"scenes.app.mainview.create_account": "で無料でワークスペースを作成する ",
|
||||
@@ -721,7 +721,7 @@
|
||||
"components.workspace.list_manager.current_space": "現在のワークスペース",
|
||||
"components.workspace.list_manager.current_company": "現在の会社",
|
||||
"components.workspace.calendar.invalid": "無効",
|
||||
"components.searchpopup.enter_text": "Twakeを検索するためのテキストを入力します。",
|
||||
"components.searchpopup.enter_text": "Tdriveを検索するためのテキストを入力します。",
|
||||
"components.searchpopup.loading": "より多くの結果をロードする",
|
||||
"components.searchpopup.filter_ws": "ワークスペースをフィルタリングする",
|
||||
"components.searchpopup.creation": "創造",
|
||||
@@ -754,7 +754,7 @@
|
||||
"components.calendar.calendarselector.from": "から",
|
||||
"scenes.apps.drive.move_text2": "動く",
|
||||
"components.attachmentpicker.from_computer": "お使いのデバイスから",
|
||||
"components.attachmentpicker.from_twake": "Twakeドキュメントから",
|
||||
"components.attachmentpicker.from_twake": "Tdriveドキュメントから",
|
||||
"components.attachmentpicker.file": "ファイル",
|
||||
"components.attachmentpicker.remove_attach": "添付ファイルを削除します",
|
||||
"scenes.apps.drive.remove_attachs": "添付ファイルを削除します",
|
||||
@@ -790,7 +790,7 @@
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "このチャネルにはユーザーがいません。[ユーザーの追加]をクリックして招待できます。",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "ディスカッションを非表示",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}}メールが追加されます",
|
||||
"components.newversion.new_version_component.row.part_1": "古いバージョンのTwakeを実行しています",
|
||||
"components.newversion.new_version_component.row.part_1": "古いバージョンのTdriveを実行しています",
|
||||
"components.newversion.new_version_component.row.part_2": "アプリをリロードして、新機能をお楽しみください。",
|
||||
"components.newversion.new_version_component.link": "リロードするには、ここをクリックしてください",
|
||||
"components.newversion.new_version_modal.title": "新しいアップデートが利用可能です!",
|
||||
@@ -819,7 +819,7 @@
|
||||
"components.account_verication_status_blocked": "ロック済み",
|
||||
"components.unverified_account.re_send_email": "メールが届きませんでしたか?",
|
||||
"components.blocked_account.trial_period_over": "試用期間が終了しました。アカウントのロックを解除してすべての機能にアクセスするには、確認メールでアカウントを確認してください",
|
||||
"components.add_mails_workspace.button": "Twakeの使用を開始します",
|
||||
"components.add_mails_workspace.button": "Tdriveの使用を開始します",
|
||||
"services.console_services.toaster.success_verify_email": "確認リンクがメールアカウントに送信されました",
|
||||
"scenes.app.popup.workspaceparameter.edit_from_console": "コンソールで見る",
|
||||
"services.console_services.toaster.success_invite_emails": "{{$1}}ユーザーが正常に追加されました",
|
||||
@@ -877,7 +877,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.title": "新しい統合",
|
||||
"twake.application.access.title": "アプリケーションに適したスコープを選択してください。",
|
||||
"twake.application.access.no_default_scopes_available'": "この統合には{{$1}}アクセスはありません",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "TwakeAPIドキュメント",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "TdriveAPIドキュメント",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "これらを埋める方法がわからない場合は、 ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "秘密鍵",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "アプリケーション{{$1}}が正常に削除されました!",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.integrations_parameters.add_application": "新しい統合",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "開発者設定",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "もっとお探しですか",
|
||||
"components.open_desktop_popup.subtitle": "Twakeアプリで開きました",
|
||||
"components.open_desktop_popup.subtitle": "Tdriveアプリで開きました",
|
||||
"components.open_desktop_popup.open_here_link": "代わりにここを開く",
|
||||
"molecules.download_banner.title": "Twakeを最大限に活用し、今すぐデスクトップアプリをダウンロードしてください",
|
||||
"molecules.download_banner.title": "Tdriveを最大限に活用し、今すぐデスクトップアプリをダウンロードしてください",
|
||||
"molecules.download_banner.download_button": "デスクトップアプリをダウンロード",
|
||||
"scenes.app.channelsbar.channel_copy_link": "チャネルリンクをコピーする",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "正常に更新されました",
|
||||
@@ -933,7 +933,7 @@
|
||||
"scenes.apps.messages.jump": "メッセージへジャンプ",
|
||||
"scenes.apps.account.on_console": "グローバル アカウント設定を編集するには、[コンソールに移動] をクリックします。",
|
||||
"scenes.apps.account.assistant.title": "アシスタント",
|
||||
"scenes.apps.account.assistant.description": "Twake アシスタントは、Twake での毎日の作業を理解し、1 日の間にスマートなショートカットとアクションを提供します。このアシスタントは Work@Home イニシアチブ https://workathome.linagora.com/ の一部であり、現在は Linagora 社でのみテストされており、学習段階にあります。これは、将来のアシスタント機能をトレーニングするために、Twake の使用状況データを送信することを意味します。",
|
||||
"scenes.apps.account.assistant.description": "Tdrive アシスタントは、Tdrive での毎日の作業を理解し、1 日の間にスマートなショートカットとアクションを提供します。このアシスタントは Work@Home イニシアチブ https://workathome.linagora.com/ の一部であり、現在は Linagora 社でのみテストされており、学習段階にあります。これは、将来のアシスタント機能をトレーニングするために、Tdrive の使用状況データを送信することを意味します。",
|
||||
"scenes.apps.account.assistant.share.nothing": "アシスタントとは何も共有しない (アシスタントを無効にする)",
|
||||
"scenes.apps.account.assistant.share.all": "メッセージやファイルの内容を含むすべてを共有する",
|
||||
"scenes.apps.account.assistant.share.metadata": "コンテンツではなくメタデータを共有する",
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
"scenes.apps.board.new_task": "+ Ny oppgave",
|
||||
"scenes.app.popup.workspace.edit_temp": "Rediger midlertidig konto",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} e-post(er) vil bli lagt til",
|
||||
"components.newversion.new_version_component.row.part_1": "Du kjører en utdatert Twake-versjon",
|
||||
"components.newversion.new_version_component.row.part_1": "Du kjører en utdatert Tdrive-versjon",
|
||||
"scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}} ga nytt navn til kanalen til {{$2}}",
|
||||
"scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} la til en ny {{$2}}-fane {{$3}}",
|
||||
"scenes.client.channelbar.channelmemberslist.tag": "Du",
|
||||
@@ -143,7 +143,7 @@
|
||||
"scenes.apps.messages.input.hide_formatting": "Skjul formatering",
|
||||
"scenes.apps.messages.input.show_formatting": "Vis formatering",
|
||||
"scenes.tell_us": "Fortell oss hva du gjorde på:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Last ned Twake Desktop for å forhåndsvise i appen",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Last ned Tdrive Desktop for å forhåndsvise i appen",
|
||||
"scenes.apps.tasks.my_tasks": "Mine oppgaver",
|
||||
"scenes.apps.tasks.board.place_holder": "Styrenavn",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "Deloppgave",
|
||||
@@ -200,7 +200,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "Gammelt passord er ikke riktig.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Passordene dine stemmer ikke overens, eller de er for korte. Vennligst skriv inn et passord med minst 8 tegn.",
|
||||
"scenes.apps.account.account.logout": "Logg ut",
|
||||
"scenes.apps.account.languages.text": "Endre Twake-språket.",
|
||||
"scenes.apps.account.languages.text": "Endre Tdrive-språket.",
|
||||
"scenes.apps.account.notifications.title": "Varsler",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Nøkkelord",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "dev, wifi, kode, ...",
|
||||
@@ -241,7 +241,7 @@
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "Arkiver alle oppgaver",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Fjern arkiverte oppgaver ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "Gå til twakeapp.com",
|
||||
"scenes.login.footer.branding": "Du er på en {{$1}} ({{$2}}) privat Twake-server. ",
|
||||
"scenes.login.footer.branding": "Du er på en {{$1}} ({{$2}}) privat Tdrive-server. ",
|
||||
"scenes.login.create_account.title": "Lag en ny bruker",
|
||||
"scenes.login.create_account.email": "E-post",
|
||||
"scenes.login.create_account.email_used": "Denne e-posten er allerede i bruk.",
|
||||
@@ -251,7 +251,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "Du må fylle ut e-posten din med riktig e-post",
|
||||
"scenes.login.create_account.too_short_password": "Passordet ditt må inneholde minst 8 tegn.",
|
||||
"scenes.login.create_account.firstname": "Fornavn",
|
||||
"scenes.login.create_account.newsletter": "Motta informasjon om Twake",
|
||||
"scenes.login.create_account.newsletter": "Motta informasjon om Tdrive",
|
||||
"scenes.login.create_account.lastname": "Etternavn",
|
||||
"scenes.login.forgot_password.title": "Glemt passord?",
|
||||
"scenes.login.forgot_password.text": "Du vil motta en 9-sifret kode på e-post for å bekrefte identiteten din.",
|
||||
@@ -263,7 +263,7 @@
|
||||
"scenes.login.forgot_password.password": "Passord",
|
||||
"scenes.login.forgot_password.password2": "Bekreft passord",
|
||||
"scenes.login.forgot_password.password_dont_match": "Passordene dine stemmer ikke overens, eller de er for korte. Vennligst skriv inn et passord med minst 8 tegn.",
|
||||
"scenes.login.home.title": "Logg på Twake",
|
||||
"scenes.login.home.title": "Logg på Tdrive",
|
||||
"scenes.login.home.subtitle": "Glad for å se deg",
|
||||
"scenes.login.home.email": "E-post",
|
||||
"scenes.login.home.unable_to_connect": "Ugyldige legitimasjon",
|
||||
@@ -294,8 +294,8 @@
|
||||
"scenes.app.workspaces.welcome_page.ready_to_work": "Du er klar til å jobbe nå.",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "Ser deg snart!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Prøv igjen",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Velkommen til Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Velkommen til Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Du kan koble flere e-postadresser til kontoen din; kun én adresse vil bli brukt til å sende deg varsler.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Hovedadresse",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Sekundære adresser",
|
||||
@@ -305,12 +305,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Vi sendte deg en bekreftelseskode via {{$1}}",
|
||||
"scenes.app.workspaces.welcome_page.done": "jeg er ferdig",
|
||||
"scenes.login.forgot_password.finished": "Passordet ditt ble oppdatert.",
|
||||
"scenes.apps.account.account.description_main": "Hovedadressen din er der Twake sender varslene dine. Dine sekundære adresser lar deg automatisk inviteres til arbeidsområdene som bruker dem.",
|
||||
"scenes.apps.account.account.description_main": "Hovedadressen din er der Tdrive sender varslene dine. Dine sekundære adresser lar deg automatisk inviteres til arbeidsområdene som bruker dem.",
|
||||
"scenes.apps.account.account.emails.description": "Administrer de forskjellige e-postadressene dine.",
|
||||
"scenes.apps.account.account.make_main": "Sett hoved",
|
||||
"scenes.apps.account.account.password.description": "Bytt passord.",
|
||||
"scenes.apps.account.identity": "Identitet",
|
||||
"scenes.apps.account.identity.description": "Endre fornavn, etternavn og profilbilde synlig for andre Twake-brukere.",
|
||||
"scenes.apps.account.identity.description": "Endre fornavn, etternavn og profilbilde synlig for andre Tdrive-brukere.",
|
||||
"scenes.apps.account.preference": "Preferanser",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Maksimal størrelse 5 MB",
|
||||
"scenes.apps.account.account.email_add_modal.confirm": "Bekreft denne e-posten",
|
||||
@@ -382,7 +382,7 @@
|
||||
"scenes.apps.board.kanban": "Kanban",
|
||||
"scenes.apps.board.display_as": "Vis som",
|
||||
"scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}} fjernet {{$2}}-fanen {{$3}}",
|
||||
"components.locked_features.locked_only_office_popup.text": "Huff!! Det virker som du vil redigere filen fra Twake. Det kan være lurt å vurdere å oppgradere planen din hvis du vil samarbeide rundt kontorfiler. Utforsk prisalternativene våre og velg det beste alternativet for teamsamarbeidsbehovene dine.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Huff!! Det virker som du vil redigere filen fra Tdrive. Det kan være lurt å vurdere å oppgradere planen din hvis du vil samarbeide rundt kontorfiler. Utforsk prisalternativene våre og velg det beste alternativet for teamsamarbeidsbehovene dine.",
|
||||
"general.resume": "Gjenoppta",
|
||||
"scenes.app.popup.workspaceparameter.pages.logo_modify_description": "Rediger bildet av dette arbeidsområdet",
|
||||
"scenes.app.popup.workspaceparameter.pages.research_by": "Søk etter applikasjoner etter navn og kategorier",
|
||||
@@ -414,7 +414,7 @@
|
||||
"scenes.join.wrong_link_description": "Be personen som inviterte deg til å bli med i dette selskapet om en ny lenke eller opprette ditt eget selskap",
|
||||
"scenes.join.create_the_company_button": "Opprett selskapet",
|
||||
"scenes.join.join_workspace_from_company": "Bli med {{$1}} fra {{$2}}!",
|
||||
"scenes.join.twake_description": "Twake er et digitalt arbeidsområde med åpen kildekode bygget for å forbedre teamets produktivitet",
|
||||
"scenes.join.twake_description": "Tdrive er et digitalt arbeidsområde med åpen kildekode bygget for å forbedre teamets produktivitet",
|
||||
"general.unarchive": "Avarkiver",
|
||||
"scenes.apps.calendar.event_view.article_until": "til",
|
||||
"scenes.apps.messages.left_bar.stream_modal.placeholder_name": "Navn",
|
||||
@@ -459,7 +459,7 @@
|
||||
"scenes.login.verifymail.signin_button": "Logg Inn",
|
||||
"scenes.login.verifymail.success": "E-posten din ble bekreftet!",
|
||||
"scenes.login.verifymail.verification_waiting": "Venter på bekreftelse...",
|
||||
"scenes.no_panic": "Ikke få panikk! Bare last inn denne siden på nytt for å fikse Twake.",
|
||||
"scenes.no_panic": "Ikke få panikk! Bare last inn denne siden på nytt for å fikse Tdrive.",
|
||||
"services.apps.calendar.deadline_icon": "Frist",
|
||||
"services.apps.calendar.event_icon": "Begivenhet",
|
||||
"services.apps.calendar.move_icon": "Bevege seg",
|
||||
@@ -482,7 +482,7 @@
|
||||
"scenes.apps.account.account.password_for_user": "Passord for brukeren din",
|
||||
"scenes.apps.account.account.send_info": "Send denne legitimasjonsinformasjonen til brukeren din.",
|
||||
"scenes.apps.account.account.save": "Lagre konto",
|
||||
"scenes.apps.account.message_temporary": "En midlertidig konto fungerer som en vanlig Twake-konto, men du oppretter passordet og du vil kunne tilbakestille det om nødvendig.",
|
||||
"scenes.apps.account.message_temporary": "En midlertidig konto fungerer som en vanlig Tdrive-konto, men du oppretter passordet og du vil kunne tilbakestille det om nødvendig.",
|
||||
"scenes.apps.account.message_user_signin": "Brukeren din kan når som helst logge på med den samme e-posten og endre den midlertidige kontoen til en vanlig konto.",
|
||||
"scenes.app.mainview.link_expired": "Denne offentlige lenken er ugyldig eller har utløpt.",
|
||||
"scenes.app.mainview.create_account": "Lag arbeidsområdet ditt gratis på ",
|
||||
@@ -502,7 +502,7 @@
|
||||
"components.workspace.list_manager.current_space": "Nåværende arbeidsområde",
|
||||
"components.workspace.list_manager.current_company": "Nåværende selskap",
|
||||
"components.workspace.calendar.invalid": "Ugyldig",
|
||||
"components.searchpopup.enter_text": "Skriv inn litt tekst for å søke etter Twake.",
|
||||
"components.searchpopup.enter_text": "Skriv inn litt tekst for å søke etter Tdrive.",
|
||||
"components.searchpopup.loading": "Laster inn flere resultater",
|
||||
"components.searchpopup.filter_ws": "Filtrer arbeidsområder",
|
||||
"components.searchpopup.tags": "Tagger",
|
||||
@@ -530,7 +530,7 @@
|
||||
"components.calendar.calendarselector.from": "Fra",
|
||||
"scenes.apps.drive.move_text2": "Bevege seg",
|
||||
"components.attachmentpicker.from_computer": "Fra enheten din",
|
||||
"components.attachmentpicker.from_twake": "Fra Twake Documents",
|
||||
"components.attachmentpicker.from_twake": "Fra Tdrive Documents",
|
||||
"components.attachmentpicker.file": "Fil",
|
||||
"components.attachmentpicker.remove_attach": "Fjern vedlegg",
|
||||
"scenes.apps.drive.remove_attachs": "Fjern vedlegg",
|
||||
@@ -581,15 +581,15 @@
|
||||
"components.account_verication_status_blocked": "Låst",
|
||||
"components.unverified_account.re_send_email": "Har du ikke mottatt e-posten?",
|
||||
"components.blocked_account.trial_period_over": "Prøveperioden din er over. For å låse opp kontoen din og få tilgang til alle funksjoner, vennligst bekreft kontoen din via e-postbekreftelse",
|
||||
"components.add_mails_workspace.button": "Begynn å bruke Twake",
|
||||
"components.add_mails_workspace.button": "Begynn å bruke Tdrive",
|
||||
"components.add_mails_workspace.title_1": "Legg til noen brukere",
|
||||
"components.add_mails_workspace.title_2": "Twake er et teamsamarbeidsverktøy, så inviter noen brukere til å teste et arbeidsområde vi har laget for deg.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive er et teamsamarbeidsverktøy, så inviter noen brukere til å teste et arbeidsområde vi har laget for deg.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Skriv inn e-poster til brukerne dine*",
|
||||
"components.verify_mail.title_1": "Gratulerer",
|
||||
"components.verify_mail.title_2": "Du er en offisiell Twake-bruker nå!",
|
||||
"components.verify_mail.title_2": "Du er en offisiell Tdrive-bruker nå!",
|
||||
"components.verify_mail.button": "Legg til bruker",
|
||||
"components.verify_mail.text": "Først av alt må du bekrefte e-postadressen din. Vi har sendt en bekreftelseslenke til",
|
||||
"components.verify_mail.paragraph": "Du kan gjøre det senere hvis du vil, men ubekreftede kontoer har bare tilgang til en begrenset versjon av Twake",
|
||||
"components.verify_mail.paragraph": "Du kan gjøre det senere hvis du vil, men ubekreftede kontoer har bare tilgang til en begrenset versjon av Tdrive",
|
||||
"services.console_services.toaster.add_emails_error": "Feil ved å legge til e-post(er)",
|
||||
"services.console_services.toaster.add_email_error_message": "Feil under tillegging av {{$1}}",
|
||||
"services.console_services.toaster.success_verify_email": "En bekreftelseslenke er sendt til e-postkontoen din",
|
||||
@@ -616,7 +616,7 @@
|
||||
"components.locked_features.locked_history_banner.description": "Din bedrift har mange meldinger! Oppgrader nå for å få tilgang til hele meldingsloggen din.",
|
||||
"components.locked_features.locked_history_banner.button": "Lære mer",
|
||||
"components.locked_features.locked_guests_popup.title": "Gjestefunksjonen er låst",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Denne funksjonen er ikke tilgjengelig i Twake gratisversjonen",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Denne funksjonen er ikke tilgjengelig i Tdrive gratisversjonen",
|
||||
"components.locked_features.locked_guests_popup.description": "Huff!! Det virker som du ønsker å invitere eksterne brukere til arbeidsområdet ditt. Det kan være lurt å vurdere å oppgradere planen din hvis du ønsker å samarbeide med gjester og eksterne partnere. Utforsk prisalternativene våre og velg det beste alternativet for teamsamarbeidsbehovene dine.",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Lære mer",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Hopp over for nå",
|
||||
@@ -625,7 +625,7 @@
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "Det er et problem med firmaabonnementet ditt. Ta kontakt med eieren eller administratoren av selskapet!",
|
||||
"components.on_boarding.company_billing_banner.link": "selskapets abonnementsplan",
|
||||
"components.on_boarding.popups.blocked_company.title": "Firmaet ditt er låst på grunn av et betalingsproblem",
|
||||
"components.on_boarding.popups.blocked_company.description": "Ditt abonnement på Twake har utløpt. Ta kontakt med eieren eller administratoren av firmaet ditt for å fornye det og være i stand til å kommunisere med teamet ditt igjen!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Ditt abonnement på Tdrive har utløpt. Ta kontakt med eieren eller administratoren av firmaet ditt for å fornye det og være i stand til å kommunisere med teamet ditt igjen!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Vil du lære mer om bedriftens abonnementsplan?",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Klikk her",
|
||||
"components.on_boarding.popups.blocked_company.or": "Eller",
|
||||
@@ -657,7 +657,7 @@
|
||||
"components.locked_features.locked_drive_popup.title": "Du har akkurat nådd kjøregrensen",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "I gratisversjonen kan du kun lagre 6 GB.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Meldingsnummer",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "På gratisversjonen av Twake kan du ikke få tilgang til mer enn de {{$1}} nyere meldingene.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "På gratisversjonen av Tdrive kan du ikke få tilgang til mer enn de {{$1}} nyere meldingene.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Vis flere planer",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "Ny privat diskusjon",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Ingen private meldinger. Inviter brukere!",
|
||||
@@ -680,19 +680,19 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Privat",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Send din første melding i en diskusjon",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Vil du aldri vise denne rammen igjen?",
|
||||
"scenes.app.channelsbar.welcome": "Velkommen til Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Bli en Twake-proff med bare noen få klikk!",
|
||||
"scenes.app.channelsbar.welcome": "Velkommen til Tdrive",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Bli en Tdrive-proff med bare noen få klikk!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Start med å velge en kanal til venstre.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Du har ingen kobling som kan koble til en kanal.",
|
||||
"scenes.app.mainview.tabs.rename": "Gi nytt navn",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Søk etter koblinger...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Vennligst skill adressene med komma eller mellomrom. Husk at Twake kan begrense antall invitasjoner basert på abonnementet ditt.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Vennligst skill adressene med komma eller mellomrom. Husk at Tdrive kan begrense antall invitasjoner basert på abonnementet ditt.",
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "Søknadens identitet",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Test utseendet til Twacode-meldingene dine",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Søknaden din er publisert, du kan ikke redigere den.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Bruk * i utviklingen for å tillate alle IP-adresser.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Min fantastiske app",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Nyttige data for Twake API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Nyttige data for Tdrive API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "API-innstillinger",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Programnavn",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Alle ledere av dette selskapet vil kunne redigere denne applikasjonen.",
|
||||
@@ -704,7 +704,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "Automatisk",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "Hvis du aktiverer 'Automatisk', vil denne applikasjonen automatisk bli lagt til de neste arbeidsområdene til dette selskapet.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Tillatte IP-adresser",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Publiseringen av søknaden din venter for øyeblikket på validering av Twake-teamet.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Publiseringen av søknaden din venter for øyeblikket på validering av Tdrive-teamet.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Kraft i hele selskapet",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Hendelse av typen «{{$1}}» og id «{{$2}}» med passive «{{$3}}»",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Bedriftseier",
|
||||
@@ -733,7 +733,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Ny søknad",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "ok",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Optimalt format: 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Den upubliserte applikasjonen vil kun fungere i din bedrift. Hvis du ønsker å gjøre det tilgjengelig for alle Twake-brukere, aktiver dette alternativet.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Den upubliserte applikasjonen vil kun fungere i din bedrift. Hvis du ønsker å gjøre det tilgjengelig for alle Tdrive-brukere, aktiver dette alternativet.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Offentlig søknad",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Offentlig identifikator",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "Bestem synligheten til søknaden din.",
|
||||
@@ -746,7 +746,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "Forestilling",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Stat",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Denne strengen identifiserer applikasjonen din og vil bli brukt i meldingskommandoer.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode tester",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode tester",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "URL til arrangementsmottak",
|
||||
"scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Det forenklede navnet på applikasjonen din brukes allerede av en annen applikasjon. Vennligst endre den.",
|
||||
"scenes.app.popup.appsparameters.pages.update_button": "Oppdater",
|
||||
@@ -877,7 +877,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_published": "Vellykket {{$1}}-applikasjon!",
|
||||
"scenes.app.integrations_parameters.add_application": "Ny integrasjon",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Utviklerinnstillinger",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Twake API-dokumentasjonen",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Tdrive API-dokumentasjonen",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Privat nøkkel",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_description": "Beskriv søknaden din med noen få ord",
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.title": "Ny integrasjon",
|
||||
@@ -886,9 +886,9 @@
|
||||
"twake.application.access.no_default_scopes_available'": "Denne integrasjonen har ingen {{$1}}-tilgang",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Hvis du ikke vet hvordan du fyller disse, gå til ",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Ser etter mer",
|
||||
"components.open_desktop_popup.subtitle": "åpnet i Twake-appen",
|
||||
"components.open_desktop_popup.subtitle": "åpnet i Tdrive-appen",
|
||||
"components.open_desktop_popup.open_here_link": "Åpne her i stedet",
|
||||
"molecules.download_banner.title": "Få mest mulig ut av Twake, last ned skrivebordsappen nå",
|
||||
"molecules.download_banner.title": "Få mest mulig ut av Tdrive, last ned skrivebordsappen nå",
|
||||
"molecules.download_banner.download_button": "Last ned desktop app",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Kopier kanallinken",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Vellykket oppdatert",
|
||||
@@ -932,7 +932,7 @@
|
||||
"scenes.apps.messages.jump": "Gå til melding",
|
||||
"components.channel_attachement_list.open": "Åpent galleri",
|
||||
"scenes.apps.account.on_console": "For å redigere dine globale kontopreferanser, klikk på Gå til konsoll.",
|
||||
"scenes.apps.account.assistant.description": "Twake-assistenten er i stand til å gi mening om det daglige arbeidet ditt på Twake og gi smarte snarveier og handlinger i løpet av dagen. Assistenten er en del av Work@Home-initiativet https://workathome.linagora.com/ og testes foreløpig kun i Linagora-selskapet og er i læringsfasen. Det betyr at vi vil sende Twake-bruksdata for å trene vår fremtidige assistentfunksjon.",
|
||||
"scenes.apps.account.assistant.description": "Tdrive-assistenten er i stand til å gi mening om det daglige arbeidet ditt på Tdrive og gi smarte snarveier og handlinger i løpet av dagen. Assistenten er en del av Work@Home-initiativet https://workathome.linagora.com/ og testes foreløpig kun i Linagora-selskapet og er i læringsfasen. Det betyr at vi vil sende Tdrive-bruksdata for å trene vår fremtidige assistentfunksjon.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Ikke del noe med assistenten (deaktiver assistent)",
|
||||
"scenes.apps.account.assistant.share.all": "Del alt inkludert meldinger og filinnhold",
|
||||
"scenes.apps.account.assistant.share.metadata": "Del metadata, men ikke innhold",
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"scenes.apps.messages.input.replied_to": "respondeu a ",
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.title": "Nova integração",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Chave privada",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Na versão gratuita do Twake, você não pode acessar mais de {{$1}} mensagens recentes.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Na versão gratuita do Tdrive, você não pode acessar mais de {{$1}} mensagens recentes.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Mostrar mais planos",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "Nova discussão privada",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Sem mensagens privadas. Convide usuários!",
|
||||
@@ -43,11 +43,11 @@
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Envie sua primeira mensagem em uma discussão",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Nunca mostrar este quadro novamente?",
|
||||
"scenes.app.channelsbar.welcome": "Bem-vindo ao Twike",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Torne-se um profissional Twake em apenas alguns cliques!",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Torne-se um profissional Tdrive em apenas alguns cliques!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Comece selecionando um canal à sua esquerda.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Você não tem nenhum conector que possa se conectar a um canal.",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Pesquisar conectores...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Por favor, separe os endereços com uma vírgula ou espaço. Lembre-se de que o Twake pode limitar o número de convites com base em sua assinatura.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Por favor, separe os endereços com uma vírgula ou espaço. Lembre-se de que o Tdrive pode limitar o número de convites com base em sua assinatura.",
|
||||
"scenes.app.popup.adduser.magiclinks.genrator_info": "Link de convite para o espaço de trabalho",
|
||||
"scenes.app.popup.adduser.magiclinks.new_link_generated": "Novo link gerado",
|
||||
"scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Copiado com sucesso para a área de transferência",
|
||||
@@ -56,7 +56,7 @@
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Teste a aparência de suas mensagens Twacode",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Use * em desenvolvimento para permitir todos os endereços IP.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Meu aplicativo incrível",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Dados úteis para a API Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Dados úteis para a API Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "Configurações da API",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Nome da Aplicação",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Todos os gerentes desta empresa poderão editar este aplicativo.",
|
||||
@@ -67,7 +67,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.apps_title": "Seus aplicativos e conectores",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "Se você ativar 'Automático', este aplicativo será adicionado automaticamente aos próximos workspaces desta empresa.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Endereços IP permitidos",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "A publicação do seu pedido está atualmente aguardando validação pela equipe Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "A publicação do seu pedido está atualmente aguardando validação pela equipe Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Força em toda a empresa",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Evento do tipo '{{$1}}' e id '{{$2}}' com passivas '{{$3}}'",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Proprietário da empresa",
|
||||
@@ -99,7 +99,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Nova aplicação",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "OK",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Formato ideal: 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "O aplicativo não publicado funcionará apenas na sua empresa. Se você deseja disponibilizá-lo para todos os usuários do Twake, ative esta opção.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "O aplicativo não publicado funcionará apenas na sua empresa. Se você deseja disponibilizá-lo para todos os usuários do Tdrive, ative esta opção.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Aplicativo público",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Identificador público",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "Determine a visibilidade do seu aplicativo.",
|
||||
@@ -112,7 +112,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "mostrar",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Estado",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Essa cadeia identifica o sua aplicação e será usada em comandos de mensagem.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Testador de Twakecode",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Testador de Tdrivecode",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "URL de recepção de eventos",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "Aguardando...",
|
||||
"scenes.app.popup.appsparameters.pages.website_label": "Local na rede Internet",
|
||||
@@ -289,7 +289,7 @@
|
||||
"scenes.login.verifymail.signin_button": "Conecte-se",
|
||||
"scenes.login.verifymail.success": "Seu e-mail foi verificado com sucesso!",
|
||||
"scenes.login.verifymail.verification_waiting": "Aguardando verificação...",
|
||||
"scenes.no_panic": "Não entrar em pânico! Basta recarregar esta página para corrigir o Twake.",
|
||||
"scenes.no_panic": "Não entrar em pânico! Basta recarregar esta página para corrigir o Tdrive.",
|
||||
"services.apps.calendar.event_icon": "Evento",
|
||||
"services.apps.calendar.move_icon": "Jogada",
|
||||
"services.apps.calendar.reminder_icon": "Lembrete",
|
||||
@@ -312,7 +312,7 @@
|
||||
"scenes.apps.messages.input.hide_formatting": "Ocultar formatação",
|
||||
"scenes.apps.messages.input.show_formatting": "Mostrar formatação",
|
||||
"scenes.tell_us": "Por favor, diga-nos o que você estava fazendo em:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Baixe o Twake Desktop para visualizar no aplicativo",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Baixe o Tdrive Desktop para visualizar no aplicativo",
|
||||
"scenes.apps.tasks.my_tasks": "Minhas tarefas",
|
||||
"scenes.apps.tasks.board.place_holder": "Nome do conselho",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "Subtarefa",
|
||||
@@ -332,7 +332,7 @@
|
||||
"scenes.apps.account.account.password_for_user": "Senha do seu usuário",
|
||||
"scenes.apps.account.account.send_info": "Envie essas informações de credencial para seu usuário.",
|
||||
"scenes.apps.account.account.save": "Salvar conta",
|
||||
"scenes.apps.account.message_temporary": "Uma conta temporária funciona como uma conta Twake normal, mas você cria a senha e poderá redefini-la, se necessário.",
|
||||
"scenes.apps.account.message_temporary": "Uma conta temporária funciona como uma conta Tdrive normal, mas você cria a senha e poderá redefini-la, se necessário.",
|
||||
"scenes.apps.account.message_user_signin": "Seu usuário pode fazer login a qualquer momento usando este mesmo e-mail e alterar a conta temporária para uma conta normal.",
|
||||
"scenes.app.mainview.link_expired": "Este link público é inválido ou expirou.",
|
||||
"scenes.app.mainview.create_account": "Crie seu espaço de trabalho gratuitamente em ",
|
||||
@@ -357,7 +357,7 @@
|
||||
"components.workspace.list_manager.all": "Tudo",
|
||||
"components.workspace.calendar.invalid": "Inválido",
|
||||
"components.searchpopup.header_title": "Procurar",
|
||||
"components.searchpopup.enter_text": "Digite algum texto para pesquisar Twake.",
|
||||
"components.searchpopup.enter_text": "Digite algum texto para pesquisar Tdrive.",
|
||||
"components.searchpopup.loading": "Carregando mais resultados",
|
||||
"components.searchpopup.filter_ws": "Filtrar espaços de trabalho",
|
||||
"components.searchpopup.tags": "Tag",
|
||||
@@ -414,7 +414,7 @@
|
||||
"components.calendar.calendarselector.from": "A partir de",
|
||||
"scenes.apps.drive.move_text2": "Jogada",
|
||||
"components.attachmentpicker.from_computer": "Do seu dispositivo",
|
||||
"components.attachmentpicker.from_twake": "De documentos Twake",
|
||||
"components.attachmentpicker.from_twake": "De documentos Tdrive",
|
||||
"components.attachmentpicker.file": "Arquivo",
|
||||
"components.attachmentpicker.remove_attach": "Remover anexo",
|
||||
"scenes.apps.drive.remove_attachs": "Remover anexos",
|
||||
@@ -459,7 +459,7 @@
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "Não há usuários neste canal, você pode convidá-los clicando em Adicionar usuários.",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "Ocultar discussão",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} e-mail(s) serão adicionados",
|
||||
"components.newversion.new_version_component.row.part_1": "Você está executando uma versão desatualizada do Twake",
|
||||
"components.newversion.new_version_component.row.part_1": "Você está executando uma versão desatualizada do Tdrive",
|
||||
"components.newversion.new_version_component.row.part_2": "sugerimos que você recarregue o aplicativo e aproveite nossos novos recursos!",
|
||||
"components.newversion.new_version_component.link": "Clique aqui para recarregar",
|
||||
"components.newversion.new_version_modal.title": "Nova atualização disponível !",
|
||||
@@ -493,14 +493,14 @@
|
||||
"components.account_verication_status_blocked": "Bloqueado",
|
||||
"components.unverified_account.re_send_email": "Não recebeu o e-mail?",
|
||||
"components.blocked_account.trial_period_over": "Seu período de teste acabou. Para desbloquear sua conta e ter acesso a todas as funcionalidades, verifique sua conta por e-mail de confirmação",
|
||||
"components.add_mails_workspace.button": "Comece a usar o Twake",
|
||||
"components.add_mails_workspace.title_2": "Twake é uma ferramenta de colaboração em equipe, então convide alguns usuários para testar um espaço de trabalho que criamos para você.",
|
||||
"components.add_mails_workspace.button": "Comece a usar o Tdrive",
|
||||
"components.add_mails_workspace.title_2": "Tdrive é uma ferramenta de colaboração em equipe, então convide alguns usuários para testar um espaço de trabalho que criamos para você.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Insira os e-mails de seus usuários*",
|
||||
"components.verify_mail.title_1": "Parabéns",
|
||||
"components.verify_mail.title_2": "Você é um usuário oficial do Twake agora!",
|
||||
"components.verify_mail.title_2": "Você é um usuário oficial do Tdrive agora!",
|
||||
"components.verify_mail.button": "Adicionar usuário",
|
||||
"components.verify_mail.text": "Antes de tudo, você precisa verificar seu endereço de e-mail. Enviamos um link de verificação para",
|
||||
"components.verify_mail.paragraph": "Você pode fazer isso mais tarde, se quiser, mas contas não verificadas têm acesso apenas a uma versão limitada do Twake",
|
||||
"components.verify_mail.paragraph": "Você pode fazer isso mais tarde, se quiser, mas contas não verificadas têm acesso apenas a uma versão limitada do Tdrive",
|
||||
"services.console_services.toaster.add_emails_error": "Erro ao adicionar e-mail(s)",
|
||||
"services.console_services.toaster.add_email_error_message": "Erro ao adicionar {{$1}}",
|
||||
"services.console_services.toaster.success_verify_email": "Um link de verificação foi enviado para sua conta de e-mail",
|
||||
@@ -526,7 +526,7 @@
|
||||
"components.locked_features.locked_history_banner.title": "Você acabou de atingir o limite de mensagens",
|
||||
"components.locked_features.locked_history_banner.description": "Sua empresa tem muitas mensagens! Atualize agora para acessar todo o seu histórico de mensagens.",
|
||||
"components.locked_features.locked_guests_popup.title": "O recurso de convidados está bloqueado",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Este recurso não está disponível na versão gratuita do Twake",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Este recurso não está disponível na versão gratuita do Tdrive",
|
||||
"components.locked_features.locked_guests_popup.description": "Opa!! Parece que você quer convidar usuários externos para seu workspace. Você pode considerar atualizar seu plano se quiser colaborar com convidados e parceiros externos. Explore nossas opções de preços e selecione a melhor opção para suas necessidades de colaboração em equipe.",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Saber mais",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Pular por enquanto",
|
||||
@@ -535,7 +535,7 @@
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "Há um problema com a assinatura da sua empresa. Entre em contato com o proprietário ou administrador da empresa!",
|
||||
"components.on_boarding.company_billing_banner.link": "plano de assinatura da empresa",
|
||||
"components.on_boarding.popups.blocked_company.title": "Sua empresa está bloqueada devido a um problema de pagamento",
|
||||
"components.on_boarding.popups.blocked_company.description": "Sua assinatura do Twake expirou. Entre em contato com o proprietário ou administrador de sua empresa para renová-lo e poder se comunicar novamente com sua equipe!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Sua assinatura do Tdrive expirou. Entre em contato com o proprietário ou administrador de sua empresa para renová-lo e poder se comunicar novamente com sua equipe!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Quer saber mais sobre o plano de assinatura das empresas?",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Clique aqui",
|
||||
"components.on_boarding.popups.blocked_company.or": "Ou",
|
||||
@@ -574,7 +574,7 @@
|
||||
"components.locked_features.locked_workspace_popup.text": "Opa!! Quer criar um novo espaço de trabalho na sua empresa? Você pode querer considerar atualizar seu plano. Explore nossas opções de preços e selecione a melhor opção para suas necessidades de colaboração em equipe.",
|
||||
"components.locked_features.locked_only_office_popup.title": "Você não pode editar este arquivo",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "Na versão gratuita, você não pode usar apenas o office.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Opa!! Parece que você deseja editar o arquivo do Twake. Você pode considerar atualizar seu plano se quiser colaborar em arquivos do Office. Explore nossas opções de preços e selecione a melhor opção para suas necessidades de colaboração em equipe.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Opa!! Parece que você deseja editar o arquivo do Tdrive. Você pode considerar atualizar seu plano se quiser colaborar em arquivos do Office. Explore nossas opções de preços e selecione a melhor opção para suas necessidades de colaboração em equipe.",
|
||||
"components.locked_features.locked_drive_popup.title": "Você acabou de atingir o limite de percurso",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "Na versão gratuita, você pode armazenar apenas 6 GB.",
|
||||
"general.resume": "Retomar",
|
||||
@@ -611,7 +611,7 @@
|
||||
"scenes.join.wrong_link_description": "Peça à pessoa que o convidou para se juntar a esta empresa para um novo link ou crie sua própria empresa",
|
||||
"scenes.join.create_the_company_button": "Crie a empresa",
|
||||
"scenes.join.join_workspace_from_company": "Junte-se a {{$1}} de {{$2}}!",
|
||||
"scenes.join.twake_description": "Twake é um espaço de trabalho digital de código aberto criado para melhorar a produtividade da sua equipe",
|
||||
"scenes.join.twake_description": "Tdrive é um espaço de trabalho digital de código aberto criado para melhorar a produtividade da sua equipe",
|
||||
"scenes.join.login_first_button": "Faça login ou crie uma conta primeiro",
|
||||
"scenes.join.join_the_team_button": "Junte-se à equipe",
|
||||
"scenes.app.channelsbar.currentuser.reset": "Redefinir",
|
||||
@@ -632,17 +632,17 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Entendo que o proprietário e os administradores desta empresa poderão modificar e publicar este aplicativo.",
|
||||
"twake.application.access.title": "Selecione os escopos certos para seu aplicativo.",
|
||||
"twake.application.access.no_default_scopes_available'": "Esta integração não tem acesso {{$1}}",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "a documentação da API Twake",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "a documentação da API Tdrive",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Se você não sabe como preenchê-los, vá para ",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "Aplicativo removido com sucesso {{$1}} !",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "Erro ao remover o aplicativo {{$1}} !",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_published": "Aplicação {{$1}} com sucesso!",
|
||||
"scenes.app.integrations_parameters.add_application": "Nova integração",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Configurações do desenvolvedor",
|
||||
"components.open_desktop_popup.subtitle": "Aberto no aplicativo Twake",
|
||||
"components.open_desktop_popup.subtitle": "Aberto no aplicativo Tdrive",
|
||||
"components.open_desktop_popup.open_here_link": "Abrir na Web em vez disso",
|
||||
"components.open_desktop_popup.open_here_link_forever": "Nunca tente abrir o aplicativo novamente",
|
||||
"molecules.download_banner.title": "Aproveite ao máximo o Twake, baixe o aplicativo para desktop agora",
|
||||
"molecules.download_banner.title": "Aproveite ao máximo o Tdrive, baixe o aplicativo para desktop agora",
|
||||
"molecules.download_banner.download_button": "Baixe o aplicativo de desktop",
|
||||
"components.channel_attachement_list.medias": "Mídias",
|
||||
"components.channel_attachement_list.files": "arquivos",
|
||||
@@ -770,7 +770,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "A senha antiga não está correta.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Suas senhas não correspondem ou são muito curtas. Digite uma senha com pelo menos 8 caracteres.",
|
||||
"scenes.apps.account.account.logout": "Sair",
|
||||
"scenes.apps.account.languages.text": "Altere o idioma do Twake.",
|
||||
"scenes.apps.account.languages.text": "Altere o idioma do Tdrive.",
|
||||
"scenes.apps.account.notifications.title": "Notificações",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Palavras-chave",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "dev, wifi, código, ...",
|
||||
@@ -811,7 +811,7 @@
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "Arquivar todas as tarefas",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Remover tarefas arquivadas ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "Acesse twakeapp.com",
|
||||
"scenes.login.footer.branding": "Você está em um servidor Twake privado {{$1}} ({{$2}}). ",
|
||||
"scenes.login.footer.branding": "Você está em um servidor Tdrive privado {{$1}} ({{$2}}). ",
|
||||
"scenes.login.create_account.title": "Criar uma nova conta",
|
||||
"scenes.login.create_account.email": "Email",
|
||||
"scenes.login.create_account.email_used": "Esse email já está em uso.",
|
||||
@@ -821,7 +821,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "Você deve preencher seu e-mail com um e-mail correto",
|
||||
"scenes.login.create_account.too_short_password": "Sua senha deve conter pelo menos 8 caracteres.",
|
||||
"scenes.login.create_account.firstname": "Primeiro nome",
|
||||
"scenes.login.create_account.newsletter": "Receba informações sobre o Twake",
|
||||
"scenes.login.create_account.newsletter": "Receba informações sobre o Tdrive",
|
||||
"scenes.login.create_account.lastname": "Sobrenome",
|
||||
"scenes.login.forgot_password.text": "Você receberá um código de 9 dígitos por e-mail para verificar sua identidade.",
|
||||
"scenes.login.forgot_password.email_to_recover": "Email para recuperar",
|
||||
@@ -831,7 +831,7 @@
|
||||
"scenes.login.forgot_password.password": "Senha",
|
||||
"scenes.login.forgot_password.password2": "Confirme a senha",
|
||||
"scenes.login.forgot_password.password_dont_match": "Suas senhas não correspondem ou são muito curtas. Digite uma senha com pelo menos 8 caracteres.",
|
||||
"scenes.login.home.title": "Faça login no Twake",
|
||||
"scenes.login.home.title": "Faça login no Tdrive",
|
||||
"scenes.login.home.subtitle": "Feliz em ver você",
|
||||
"scenes.login.home.email": "Email",
|
||||
"scenes.login.home.unable_to_connect": "Credenciais inválidas",
|
||||
@@ -862,8 +862,8 @@
|
||||
"scenes.app.workspaces.welcome_page.ready_to_work": "Você está pronto para trabalhar agora.",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "Até breve!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Tente novamente",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Bem-vindo ao Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Bem-vindo ao Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Você pode vincular vários endereços de email à sua conta; apenas um endereço será usado para enviar notificações.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Endereço principal",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Endereços secundários",
|
||||
@@ -873,12 +873,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Enviámos a você um código de verificação via {{$1}}",
|
||||
"scenes.app.workspaces.welcome_page.done": "Terminei",
|
||||
"scenes.login.forgot_password.finished": "Sua senha foi atualizada com sucesso.",
|
||||
"scenes.apps.account.account.description_main": "Seu endereço principal é para onde o Twake envia suas notificações. Seus endereços secundários permitem que você seja convidado automaticamente para os espaços de trabalho que os utilizam.",
|
||||
"scenes.apps.account.account.description_main": "Seu endereço principal é para onde o Tdrive envia suas notificações. Seus endereços secundários permitem que você seja convidado automaticamente para os espaços de trabalho que os utilizam.",
|
||||
"scenes.apps.account.account.emails.description": "Gerencie seus diferentes endereços de e-mail.",
|
||||
"scenes.apps.account.account.make_main": "Definir principal",
|
||||
"scenes.apps.account.account.password.description": "Mude sua senha.",
|
||||
"scenes.apps.account.identity": "Identidade",
|
||||
"scenes.apps.account.identity.description": "Altere seu nome, sobrenome e imagem de perfil visíveis para outros usuários do Twake.",
|
||||
"scenes.apps.account.identity.description": "Altere seu nome, sobrenome e imagem de perfil visíveis para outros usuários do Tdrive.",
|
||||
"scenes.apps.account.preference": "Preferências",
|
||||
"general.open": "Abrir",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Tamanho máximo 5 MB",
|
||||
@@ -932,7 +932,7 @@
|
||||
"scenes.app.workspaces.welcome_page.lets_go": "Vamos lá!",
|
||||
"general.create": "Criar",
|
||||
"scenes.apps.account.assistant.title": "Assistente",
|
||||
"scenes.apps.account.assistant.description": "O assistente Twake é capaz de entender seu trabalho diário no Twake e fornecer atalhos e ações inteligentes durante o dia. O assistente faz parte da iniciativa Work@Home https://workathome.linagora.com/ e atualmente está sendo testado apenas na empresa Linagora e está em fase de aprendizagem. Isso significa que enviaremos dados de uso do Twake para treinar nosso futuro recurso de assistente.",
|
||||
"scenes.apps.account.assistant.description": "O assistente Tdrive é capaz de entender seu trabalho diário no Tdrive e fornecer atalhos e ações inteligentes durante o dia. O assistente faz parte da iniciativa Work@Home https://workathome.linagora.com/ e atualmente está sendo testado apenas na empresa Linagora e está em fase de aprendizagem. Isso significa que enviaremos dados de uso do Tdrive para treinar nosso futuro recurso de assistente.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Não compartilhe nada com o assistente (desativar assistente)",
|
||||
"scenes.apps.account.assistant.share.all": "Compartilhe tudo, incluíndo mensagens e conteúdo de arquivos",
|
||||
"scenes.apps.account.assistant.share.metadata": "Compartilhe metadados, mas não conteúdo",
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "Старый пароль введен неверно.",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "Ваши пароли не совпадают или содержат недостаточно символов. Пожалуйста, введите пароль не менее чем из 8 символов.",
|
||||
"scenes.apps.account.account.logout": "Выйти",
|
||||
"scenes.apps.account.languages.text": "Сменить язык Twake.",
|
||||
"scenes.apps.account.languages.text": "Сменить язык Tdrive.",
|
||||
"scenes.apps.account.notifications.title": "Уведомления",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "Ключевые слова",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "разработка, Wi-Fi, код, ...",
|
||||
@@ -172,7 +172,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "Необходимо ввести верный адрес электронной почты",
|
||||
"scenes.login.create_account.too_short_password": "Ваш пароль должен содержать не менее 8 символов.",
|
||||
"scenes.login.create_account.firstname": "Имя",
|
||||
"scenes.login.create_account.newsletter": "Получать информацию о Twake",
|
||||
"scenes.login.create_account.newsletter": "Получать информацию о Tdrive",
|
||||
"scenes.login.create_account.lastname": "Фамилия",
|
||||
"scenes.login.forgot_password.title": "Забыли пароль?",
|
||||
"scenes.login.forgot_password.text": "Вы получите код из 9 цифр по электронной почте, необходимый, чтобы подтвердить вашу личность.",
|
||||
@@ -184,7 +184,7 @@
|
||||
"scenes.login.forgot_password.password": "Пароль",
|
||||
"scenes.login.forgot_password.password2": "Подтвердите пароль",
|
||||
"scenes.login.forgot_password.password_dont_match": "Ваши пароли не совпадают или содержат недостаточно символов, пожалуйста, введите пароль, состоящий не менее чем из 8 символов.",
|
||||
"scenes.login.home.title": "Вход в Twake",
|
||||
"scenes.login.home.title": "Вход в Tdrive",
|
||||
"scenes.login.home.subtitle": "Добро пожаловать",
|
||||
"scenes.login.home.email": "Почта",
|
||||
"scenes.login.home.unable_to_connect": "Недействительные идентификационные данные",
|
||||
@@ -216,8 +216,8 @@
|
||||
"scenes.app.workspaces.welcome_page.ready_to_work": "Все готово для работы.",
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "До скорого!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Попробуйте еще раз",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Добро пожаловать в Twake!",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Добро пожаловать в Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Вы можете связать несколько адресов электронной почты с вашим аккаунтом, только один из них будет использоваться для отправки вам уведомлений.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Основной адрес",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "Прочие адреса",
|
||||
@@ -227,12 +227,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Мы отправили вам код проверки через {{$1}}",
|
||||
"scenes.app.workspaces.welcome_page.done": "Готово",
|
||||
"scenes.login.forgot_password.finished": "Ваш пароль был успешно обновлен.",
|
||||
"scenes.apps.account.account.description_main": "Ваш основной адрес - это тот, на который Twake отправляет уведомления. Прочие адреса позволяют автоматически приглашать вас в рабочие среды, которые их используют.",
|
||||
"scenes.apps.account.account.description_main": "Ваш основной адрес - это тот, на который Tdrive отправляет уведомления. Прочие адреса позволяют автоматически приглашать вас в рабочие среды, которые их используют.",
|
||||
"scenes.apps.account.account.emails.description": "Управляйте различными адресами электронной почты.",
|
||||
"scenes.apps.account.account.make_main": "Сделать основным",
|
||||
"scenes.apps.account.account.password.description": "Изменить пароль.",
|
||||
"scenes.apps.account.identity": "Личность",
|
||||
"scenes.apps.account.identity.description": "Измените имя, фамилию и изображение профиля, видимые другими пользователям Twake.",
|
||||
"scenes.apps.account.identity.description": "Измените имя, фамилию и изображение профиля, видимые другими пользователям Tdrive.",
|
||||
"scenes.apps.account.preference": "Предпочтения",
|
||||
"general.open": "Открыть",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Максимальный размер - 5 Мб",
|
||||
@@ -296,19 +296,19 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Частный канал",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Отправить первое сообщение в обсуждение",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Никогда больше не показывать этот блок?",
|
||||
"scenes.app.channelsbar.welcome": "Добро пожаловать в Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Станьте профессионалом Twake всего за несколько кликов!",
|
||||
"scenes.app.channelsbar.welcome": "Добро пожаловать в Tdrive",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Станьте профессионалом Tdrive всего за несколько кликов!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Начните с выбора канала в левой части экрана.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "У вас нет расширения, которое может подключиться к каналу.",
|
||||
"scenes.app.mainview.tabs.rename": "Переименовать",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Поиск расширений...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Пожалуйста, разделите адреса запятой или пробелом. Помните, что Twake может ограничить количество приглашений в зависимости от вашей подписки.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Пожалуйста, разделите адреса запятой или пробелом. Помните, что Tdrive может ограничить количество приглашений в зависимости от вашей подписки.",
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "Идентификация приложения",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Проверьте внешний вид ваших сообщений Twacode",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Ваше приложение опубликовано, вы больше не можете его редактировать.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Используйте * в разработке, чтобы разрешить все IP-адреса.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Мое удивительное приложение",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Полезные данные для Twake API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Полезные данные для Tdrive API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "Настройки API",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Название приложения",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Все менеджеры этой компании смогут редактировать это приложение.",
|
||||
@@ -321,7 +321,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "Автоматически",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "Если Вы активируете 'Автоматически', то это приложение будет автоматически добавлено к следующим рабочим средам этой компании.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Разрешенные IP-адреса",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Публикация вашей заявки в настоящее время ожидает подтверждения командами Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Публикация вашей заявки в настоящее время ожидает подтверждения командами Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Применить принудительно по всей компании",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Событие типа '{{$1}}' и идентификатор '{{$2}}' с пассивами '{{$3}}'",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Владелец компании",
|
||||
@@ -353,7 +353,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Новое приложение",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "ок",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "Оптимальный формат : 48x48пкс.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Неопубликованное приложение будет работать только в вашей компании, если вы хотите сделать его доступным для всех пользователей Twake, активируйте эту опцию.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Неопубликованное приложение будет работать только в вашей компании, если вы хотите сделать его доступным для всех пользователей Tdrive, активируйте эту опцию.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Публичное приложение",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Публичный идентификатор",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "Определите видимость вашего приложения.",
|
||||
@@ -366,7 +366,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "Показать",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Статус",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Эта строка идентифицирует ваше приложение и будет использоваться в командах.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Тестер Twakecode",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Тестер Tdrivecode",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "Url получения событий",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "Ожидание...",
|
||||
"scenes.app.popup.appsparameters.pages.website_label": "Сайт",
|
||||
@@ -534,7 +534,7 @@
|
||||
"scenes.login.verifymail.signin_button": "Вход",
|
||||
"scenes.login.verifymail.success": "Ваша электронная почта была успешно подтверждена!",
|
||||
"scenes.login.verifymail.verification_waiting": "Ожидание подтверждения...",
|
||||
"scenes.no_panic": "Без паники! Просто перезагрузите данную страницу, чтобы починить Twake.",
|
||||
"scenes.no_panic": "Без паники! Просто перезагрузите данную страницу, чтобы починить Tdrive.",
|
||||
"services.apps.calendar.deadline_icon": "Крайний срок",
|
||||
"services.apps.calendar.event_icon": "Cобытие",
|
||||
"services.apps.calendar.move_icon": "Перенести",
|
||||
@@ -549,7 +549,7 @@
|
||||
"scenes.apps.drive.top_menu_more": "Больше",
|
||||
"scenes.apps.drive.top_menu_no_items": "{{$1}} элементы",
|
||||
"scenes.tell_us": "Пожалуйста, расскажите нам, что вы делали в :",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Скачать Twake Desktop для предварительного просмотра в приложении",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Скачать Tdrive Desktop для предварительного просмотра в приложении",
|
||||
"scenes.apps.tasks.my_tasks": "Мои задачи",
|
||||
"scenes.apps.tasks.board.place_holder": "Название доски",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "Подзадача",
|
||||
@@ -569,7 +569,7 @@
|
||||
"scenes.apps.account.account.password_for_user": "Пароль пользователя",
|
||||
"scenes.apps.account.account.send_info": "Отправьте данную информацию вашему сотруднику, чтобы он получил новые учетные данные.",
|
||||
"scenes.apps.account.account.save": "Сохранить аккаунт",
|
||||
"scenes.apps.account.message_temporary": "Временный аккаунт работает как обычный аккаунт Twake, но вы генерируете пароль к нему и при необходимости можете его сбросить.",
|
||||
"scenes.apps.account.message_temporary": "Временный аккаунт работает как обычный аккаунт Tdrive, но вы генерируете пароль к нему и при необходимости можете его сбросить.",
|
||||
"scenes.apps.account.message_user_signin": "Ваш пользователь может войти в систему в любое время, используя эту же почту, и сменить временный аккаунт на обычный.",
|
||||
"scenes.app.mainview.link_expired": "Эта публичная ссылка недействительна или срок ее действия истек.",
|
||||
"scenes.app.mainview.create_account": "Создайте свою рабочую среду бесплатно в ",
|
||||
@@ -594,7 +594,7 @@
|
||||
"components.workspace.list_manager.current_company": "Текущая компания",
|
||||
"components.workspace.list_manager.all": "Все",
|
||||
"components.workspace.calendar.invalid": "Недействительны",
|
||||
"components.searchpopup.enter_text": "Введите текст для поиска в Twake.",
|
||||
"components.searchpopup.enter_text": "Введите текст для поиска в Tdrive.",
|
||||
"components.searchpopup.loading": "Загрузка дополнительных результатов",
|
||||
"components.searchpopup.filter_ws": "Фильтровать рабочие среды",
|
||||
"components.searchpopup.tags": "Метки",
|
||||
@@ -635,7 +635,7 @@
|
||||
"components.calendar.calendarselector.from": "C",
|
||||
"scenes.apps.drive.move_text2": "Переместить",
|
||||
"components.attachmentpicker.from_computer": "С компьютера",
|
||||
"components.attachmentpicker.from_twake": "Из Twake Documents",
|
||||
"components.attachmentpicker.from_twake": "Из Tdrive Documents",
|
||||
"components.attachmentpicker.file": "Файл",
|
||||
"components.attachmentpicker.remove_attach": "Удалить вложение",
|
||||
"scenes.apps.drive.remove_attachs": "Удалить вложения",
|
||||
@@ -654,7 +654,7 @@
|
||||
"components.locked_features.locked_workspace_popup.text": "Ой... Похоже, вы хотите создать новую рабочую среду в своей компании. Вам необходимо обновить свой план. Изучите наше ценовое предложение и выберите лучший вариант для совместной работы вашей команды.",
|
||||
"components.locked_features.locked_only_office_popup.title": "Вы не можете редактировать этот файл",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "В бесплатной версии вы не можете использовать onlyoffice.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Ой... Похоже, вы хотите отредактировать файл из Twake. Вам необходимо обновить свой план, чтобы совместно использовать файлы. Изучите наше ценовое предложение и выберите лучший вариант для совместной работы вашей команды.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Ой... Похоже, вы хотите отредактировать файл из Tdrive. Вам необходимо обновить свой план, чтобы совместно использовать файлы. Изучите наше ценовое предложение и выберите лучший вариант для совместной работы вашей команды.",
|
||||
"components.locked_features.locked_drive_popup.title": "Вы не можете загружать больше файлов",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "В бесплатной версии можно хранить только 6 ГБ.",
|
||||
"scenes.app.integrations_parameters.title": "Интеграции",
|
||||
@@ -681,7 +681,7 @@
|
||||
"application.load.longer": "Сервер не отвечает слишком долго; подождите или обновите страницу...",
|
||||
"scenes.apps.account.notifications.sound": "Звуковые уведомления",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Количество сообщений",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "В бесплатной версии Twake вы можете получить доступ лишь к {{$1}} последним сообщениям.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "В бесплатной версии Tdrive вы можете получить доступ лишь к {{$1}} последним сообщениям.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Больше планов",
|
||||
"scenes.apps.messages.input.hide_formatting": "Скрыть форматирование",
|
||||
"scenes.apps.messages.input.show_formatting": "Отобразить форматирование",
|
||||
@@ -707,9 +707,9 @@
|
||||
"components.account_verication_status_unverified": "Проверка не пройдена",
|
||||
"components.account_verication_status_blocked": "Заблокирован",
|
||||
"components.unverified_account.re_send_email": "Не получили письмо?",
|
||||
"components.add_mails_workspace.title_2": "Twake - это инструмент для совместной работы в команде, поэтому мы советуем пригласить других пользователей, чтобы протестировать созданную для вас рабочую среду.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive - это инструмент для совместной работы в команде, поэтому мы советуем пригласить других пользователей, чтобы протестировать созданную для вас рабочую среду.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Введите адреса электронной почты пользователей*",
|
||||
"components.verify_mail.title_2": "Теперь вы являетесь официальным пользователем Twake!",
|
||||
"components.verify_mail.title_2": "Теперь вы являетесь официальным пользователем Tdrive!",
|
||||
"services.console_services.toaster.success_verify_email": "Ссылка для подтверждения была отправлена по вашему адресу электронной почты",
|
||||
"scenes.app.popup.workspaceparameter.edit_from_console": "См. в \"Консоли\"",
|
||||
"services.console_services.toaster.success_invite_emails": "Успешно добавлен(о) {{$1}} пользователь(ей)",
|
||||
@@ -725,11 +725,11 @@
|
||||
"components.locked_features.locked_history_banner.description": "У вашей компании много сообщений! Обновите сейчас, чтобы получить доступ ко всей истории сообщений.",
|
||||
"components.locked_features.locked_history_banner.button": "Узнать больше",
|
||||
"components.locked_features.locked_guests_popup.title": "Функция гостей заблокирована",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Эта функция недоступна в бесплатной версии Twake",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Эта функция недоступна в бесплатной версии Tdrive",
|
||||
"components.on_boarding.company_billing_banner.admin_or_owner_text": "Возникла проблема с подпиской вашей компании. Пожалуйста, изучите ваш",
|
||||
"components.on_boarding.company_billing_banner.link": "план подписки компании",
|
||||
"components.on_boarding.popups.blocked_company.title": "Ваша компания заблокирована из-за проблемы с оплатой",
|
||||
"components.on_boarding.popups.blocked_company.description": "Срок действия вашей подписки на Twake истек. Пожалуйста, свяжитесь с владельцем или администратором вашей компании, чтобы продлить подписку и снова иметь возможность общаться с командой!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Срок действия вашей подписки на Tdrive истек. Пожалуйста, свяжитесь с владельцем или администратором вашей компании, чтобы продлить подписку и снова иметь возможность общаться с командой!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Хотите узнать больше о плане подписки для компаний?",
|
||||
"components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Кликните сюда",
|
||||
"components.on_boarding.popups.blocked_company.or": "Или",
|
||||
@@ -752,7 +752,7 @@
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "Роль",
|
||||
"general.email": "Эл. адрес",
|
||||
"scenes.join.join_workspace_from_company": "Присоединяйтесь к {{$1}} с {{$2}}!",
|
||||
"scenes.join.twake_description": "Twake - это цифровая рабочая среда с открытым исходным кодом, созданная для повышения продуктивности вашей команды",
|
||||
"scenes.join.twake_description": "Tdrive - это цифровая рабочая среда с открытым исходным кодом, созданная для повышения продуктивности вашей команды",
|
||||
"scenes.join.login_first_button": "Войти или создать учетную запись",
|
||||
"scenes.join.join_the_team_button": "Присоединиться к команде",
|
||||
"general.verify": "Проверить",
|
||||
@@ -765,7 +765,7 @@
|
||||
"scenes.apps.messages.input.emoji": "Эмодзи",
|
||||
"components.verify_mail.title_1": "Поздравляем",
|
||||
"components.verify_mail.text": "Прежде всего, вы должны подтвердить свой адрес электронной почты. Мы отправили ссылку для подтверждения по адресу",
|
||||
"components.verify_mail.paragraph": "Вы можете сделать это позже, но непроверенные учетные записи имеют доступ только к ограниченной версии Twake",
|
||||
"components.verify_mail.paragraph": "Вы можете сделать это позже, но непроверенные учетные записи имеют доступ только к ограниченной версии Tdrive",
|
||||
"services.console_services.toaster.add_email_error_message": "Ошибка при добавлении {{$1}}",
|
||||
"scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "Письмо отправлено",
|
||||
"general.user.role.company.admin": "Администратор компании",
|
||||
@@ -808,7 +808,7 @@
|
||||
"scenes.apps.messages.input.send_message": "Отправить сообщение",
|
||||
"scenes.client.channelbar.channeltemplateeditor.checkbox": "Автоматически приглашать всех пользователей рабочей среды на этот канал",
|
||||
"components.blocked_account.trial_period_over": "Ваш пробный период закончился. Чтобы разблокировать учетную запись и получить доступ ко всем функциям, пожалуйста, подтвердите ее по электронной почте",
|
||||
"components.add_mails_workspace.button": "Начать использовать Twake",
|
||||
"components.add_mails_workspace.button": "Начать использовать Tdrive",
|
||||
"components.add_mails_workspace.title_1": "Добавить пользователей",
|
||||
"scenes.app.popup.userparameter.pages.private_message_content.show": "Скрыть содержимое сообщений в push-уведомлениях",
|
||||
"scenes.app.popup.userparameter.pages.private_message_content.hide": "Заменить содержимое push-уведомлений на '[Скрыто]'",
|
||||
@@ -835,7 +835,7 @@
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "На этом канале нет пользователей. Вы можете пригласить их, нажав \"Добавить пользователей\".",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "Скрыть обсуждение",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} адрес(а) электронной почты будет(ут) добавлен(ы)",
|
||||
"components.newversion.new_version_component.row.part_1": "Ваша версия Twake устарела",
|
||||
"components.newversion.new_version_component.row.part_1": "Ваша версия Tdrive устарела",
|
||||
"components.newversion.new_version_component.row.part_2": "предлагаем вам обновить приложение и попробовать наши новые функции!",
|
||||
"components.newversion.new_version_component.link": "Нажмите сюда, чтобы обновить",
|
||||
"general.re_send": "Отправить снова",
|
||||
@@ -878,7 +878,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Я понимаю, что владелец и администраторы этой компании смогут изменять и публиковать это приложение.",
|
||||
"twake.application.access.title": "Выберите правильные области для вашего приложения.",
|
||||
"twake.application.access.no_default_scopes_available'": "У этой интеграции нет доступа {{$1}}",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "документация по API Twake",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "документация по API Tdrive",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Если вы не знаете, как их заполнить, перейдите на ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "Закрытый ключ",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "Ошибка при удалении приложения {{$1}}!",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.integrations_parameters.add_application": "Новая интеграция",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Настройки разработчика",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Ищете больше",
|
||||
"components.open_desktop_popup.subtitle": "открыто в приложении Twake",
|
||||
"components.open_desktop_popup.subtitle": "открыто в приложении Tdrive",
|
||||
"components.open_desktop_popup.open_here_link": "Вместо этого откройте здесь",
|
||||
"molecules.download_banner.title": "Получите максимум от Twake, загрузите настольное приложение прямо сейчас",
|
||||
"molecules.download_banner.title": "Получите максимум от Tdrive, загрузите настольное приложение прямо сейчас",
|
||||
"molecules.download_banner.download_button": "Скачать настольное приложение",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Скопировать ссылку на канал",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Успешно обновлено",
|
||||
@@ -933,7 +933,7 @@
|
||||
"components.channel_attachement_list.open": "Открыть галерею",
|
||||
"scenes.apps.account.on_console": "Чтобы изменить глобальные настройки учетной записи, нажмите «Перейти к консоли».",
|
||||
"scenes.apps.account.assistant.title": "Ассистент",
|
||||
"scenes.apps.account.assistant.description": "Ассистент Twake организует вашу работу и предложит умные ярлыки и действия в течение дня. Ассистент является частью инициативы Work@Home https://workathome.linagora.com/ и на данный момент тестируется только в компании Linagora и находится на этапе обучения. Это означает, что мы отправляем данные об использовании Twake, чтобы обучить будущую функцию ассистента.",
|
||||
"scenes.apps.account.assistant.description": "Ассистент Tdrive организует вашу работу и предложит умные ярлыки и действия в течение дня. Ассистент является частью инициативы Work@Home https://workathome.linagora.com/ и на данный момент тестируется только в компании Linagora и находится на этапе обучения. Это означает, что мы отправляем данные об использовании Tdrive, чтобы обучить будущую функцию ассистента.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Не делиться информацией с ассистентом (отключить)",
|
||||
"scenes.apps.account.assistant.share.all": "Делиться всем, включая сообщения и содержимое файлов",
|
||||
"scenes.apps.account.assistant.share.metadata": "Делиться метаданными, но не содержимым",
|
||||
|
||||
@@ -761,13 +761,13 @@
|
||||
"scenes.app.channelsbar.initial_instructions_tutorial": "මුල් නමක්, නමක් සහ පැතිකඩ පින්තූරයක් තෝරන්න.",
|
||||
"scenes.app.channelsbar.installation_desktop_tutorial": "ඩෙස්ක්ටොප් යෙදුම ස්ථාපනය කරන්න",
|
||||
"scenes.app.channelsbar.tutorial_alert": "මෙම රාමුව යළි නොපෙන්වන්නද?",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "ක්ලික් කිරීම් කිහිපයකින් Twake pro කෙනෙක් වන්න!",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "ක්ලික් කිරීම් කිහිපයකින් Tdrive pro කෙනෙක් වන්න!",
|
||||
"scenes.app.mainview.instruction_current_tab": "ඔබගේ වම් පස ඇති නාලිකාවක් තේරීමෙන් ආරම්භ කරන්න.",
|
||||
"scenes.app.popup.adduser.adresses_message": "කරුණාකර ලිපින කොමාවකින් හෝ ඉඩකින් වෙන් කරන්න. Twake ඔබගේ දායකත්වය මත පදනම්ව ආරාධනා ගණන සීමා කළ හැකි බව මතක තබා ගන්න.",
|
||||
"scenes.app.popup.adduser.adresses_message": "කරුණාකර ලිපින කොමාවකින් හෝ ඉඩකින් වෙන් කරන්න. Tdrive ඔබගේ දායකත්වය මත පදනම්ව ආරාධනා ගණන සීමා කළ හැකි බව මතක තබා ගන්න.",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "ඔබගේ Twacode පණිවිඩවල පෙනුම පරීක්ෂා කරන්න",
|
||||
"scenes.app.popup.appsparameters.pages.app_privileges_information": "යෙදුමට සංස්කරණය සහ කියවීමට හැකි දේ නියම කරන්න.",
|
||||
"scenes.app.popup.appsparameters.pages.app_privileges_label": "යෙදුමේ වරප්රසාද",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "ඔබගේ අයදුම්පත්රය ප්රකාශනය දැනට Twake කණ්ඩායම විසින් වලංගු කිරීමක් බලාපොරොත්තුවෙන් සිටී.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "ඔබගේ අයදුම්පත්රය ප්රකාශනය දැනට Tdrive කණ්ඩායම විසින් වලංගු කිරීමක් බලාපොරොත්තුවෙන් සිටී.",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "උදාසීන '{{$3}}' සහිත '{{$1}}' සහ id '{{$2}}' වර්ගයේ සිදුවීම",
|
||||
"scenes.app.popup.appsparameters.pages.danger_zone_description": "යෙදුම මකන්න",
|
||||
"scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "යෙදුම පෙන්වන්නේ කොතැනදැයි නියම කිරීමට ඔබට ඉඩ සලසයි.",
|
||||
@@ -776,7 +776,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.grp_section_name-error": "මෙම නම දැනටමත් වෙනත් යෙදුමකින් භාවිතා වේ. කරුණාකර වෙනත් එකක් තෝරන්න.",
|
||||
"scenes.app.popup.appsparameters.pages.installation": "ස්ථාපනය කරන්න.",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "ප්රශස්ත ආකෘතිය: 48x48px.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "ප්රකාශනය නොකළ යෙදුම ඔබේ සමාගම තුළ පමණක් ක්රියා කරයි. ඔබට එය සියලුම Twake පරිශීලකයින්ට ලබා දීමට අවශ්ය නම්, මෙම විකල්පය සක්රිය කරන්න.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "ප්රකාශනය නොකළ යෙදුම ඔබේ සමාගම තුළ පමණක් ක්රියා කරයි. ඔබට එය සියලුම Tdrive පරිශීලකයින්ට ලබා දීමට අවශ්ය නම්, මෙම විකල්පය සක්රිය කරන්න.",
|
||||
"scenes.app.popup.appsparameters.pages.write_privileges_label": "ලිවීමේ වරප්රසාද",
|
||||
"scenes.app.popup.appsparameters.pages.danger_zone_small_text": "You can not delete this app if it is published.",
|
||||
"scenes.app.popup.appsparameters.pages.remove_app_button": "යෙදුම මකන්න",
|
||||
@@ -800,7 +800,7 @@
|
||||
"services.apps.messages.no_command_possible": "'{{$2}}' නොපවතින නිසා හෝ විධාන සෑදීමට ඉඩ නොදෙන නිසා අපට '{{$1}}' විධානය ක්රියාත්මක කළ නොහැක.",
|
||||
"scenes.apps.calendar.unconfigured_tab": "මෙම ටැබය තවම වින්යාස කර නොමැත.",
|
||||
"scenes.apps.drive.top_menu_no_items": "{{$1}} items",
|
||||
"scenes.apps.drive.viewer.download_desktop": "යෙදුමේ පෙරදසුන් කිරීමට Twake Desktop බාගන්න",
|
||||
"scenes.apps.drive.viewer.download_desktop": "යෙදුමේ පෙරදසුන් කිරීමට Tdrive Desktop බාගන්න",
|
||||
"scenes.apps.tasks.board.tasks.use_deadline": "නියමිත කාළය භාවිතය",
|
||||
"scenes.apps.tasks.board.tasks.use_starttime": "ආරම්භක වේලාව භාවිතය",
|
||||
"scenes.apps.tasks.board.tasks.in_list": "ලැයිස්තුවේ",
|
||||
@@ -820,7 +820,7 @@
|
||||
"components.unverified_account.typography_text_danger": "ඔබගේ අත්හදා බැලීමේ කාල සීමාව තුළ ඔබට {{$1}} දින(ය) ඉතිරිව ඇත. අත්හදා බැලීමේ ගිණුම දින 7කට පසු අවහිර කරනු ලබන අතර ලියාපදිංචි වී මාස 1කට පසු ස්ථිරවම මකා දමනු ලැබේ. අපි ඔබට එවූ සත්යාපන විද්යුත් තැපෑලෙහි \"මගේ ගිණුම සත්යාපනය කරන්න\" බොත්තම ක්ලික් කිරීමෙන් ඔබට ඔබගේ ගිණුම සත්යාපනය කළ හැක.",
|
||||
"components.unverified_account.verification_details": "අපි සත්යාපන විස්තර යවා ඇත",
|
||||
"components.account_verication_status_unverified": "තහවුරු නොකළ",
|
||||
"components.verify_mail.paragraph": "ඔබට අවශ්ය නම් ඔබට එය පසුව කළ හැකි නමුත් සත්යාපනය නොකළ ගිණුම්වලට ප්රවේශය ඇත්තේ Twake හි සීමිත අනුවාදයකට පමණි",
|
||||
"components.verify_mail.paragraph": "ඔබට අවශ්ය නම් ඔබට එය පසුව කළ හැකි නමුත් සත්යාපනය නොකළ ගිණුම්වලට ප්රවේශය ඇත්තේ Tdrive හි සීමිත අනුවාදයකට පමණි",
|
||||
"services.console_services.toaster.success_verify_email": "ඔබගේ විද්යුත් තැපැල් ගිණුමට සත්යාපන සබැඳියක් යවා ඇත",
|
||||
"scenes.client.channels_bar.modals.guest_management.input_placeholder": "අමුත්තන් හෝ තිබෙන වි-තැපැල් සොයන්න",
|
||||
"general.user.deleted": "මකා දැමූ ගිණුම",
|
||||
@@ -836,12 +836,12 @@
|
||||
"components.on_boarding.company_billing_banner.admin_or_owner_text": "ඔබේ සමාගම් දායකත්වයේ ගැටලුවක් තිබේ. කරුණාකර ඔබේ එක බලන්න",
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "ඔබේ සමාගම් දායකත්වයේ ගැටලුවක් තිබේ. කරුණාකර සමාගමේ හිමිකරු හෝ පරිපාලක අමතන්න!",
|
||||
"components.on_boarding.company_billing_banner.link": "සමාගම් දායක සැලැස්ම",
|
||||
"components.on_boarding.popups.blocked_company.description": "Twake වෙත ඔබගේ දායකත්වය කල් ඉකුත් වී ඇත. කරුණාකර එය අලුත් කිරීමට සහ ඔබේ කණ්ඩායම සමඟ නැවත සන්නිවේදනය කිරීමට හැකි වීම සඳහා ඔබේ සමාගමේ හිමිකරු හෝ පරිපාලක අමතන්න!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Tdrive වෙත ඔබගේ දායකත්වය කල් ඉකුත් වී ඇත. කරුණාකර එය අලුත් කිරීමට සහ ඔබේ කණ්ඩායම සමඟ නැවත සන්නිවේදනය කිරීමට හැකි වීම සඳහා ඔබේ සමාගමේ හිමිකරු හෝ පරිපාලක අමතන්න!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "සමාගම් දායක සැලැස්ම ගැන තව දැන ගැනීමට අවශ්යද?",
|
||||
"scenes.apps.messages.message.parts.deleted_content.text.current_user": "ඔබ මෙම පණිවිඩය මකා ඇත",
|
||||
"scenes.apps.messages.message.parts.deleted_content.text": "{{$1}} ඔහුගේ පණිවිඩය මකා ඇත",
|
||||
"components.locked_features.locked_workspace_popup.text": "අපොයි!! ඔබේ සමාගම තුළ නව වැඩ ඉඩක් නිර්මාණය කිරීමට ඔබට අවශ්යද? ඔබට ඔබේ සැලසුම උත්ශ්රේණි කිරීම සලකා බැලීමට අවශ්ය විය හැකිය. අපගේ මිලකරණ විකල්පයන් ගවේෂණය කර ඔබගේ කණ්ඩායම් සහයෝගීතා අවශ්යතා සඳහා හොඳම තේරීම තෝරන්න.",
|
||||
"components.locked_features.locked_only_office_popup.text": "අපොයි!! ඔබට Twake වෙතින් ගොනුව සංස්කරණය කිරීමට අවශ්ය බව පෙනේ. ඔබට කාර්යාල ලිපිගොනු වටා සහයෝගයෙන් කටයුතු කිරීමට අවශ්ය නම් ඔබේ සැලසුම උත්ශ්රේණි කිරීම සලකා බැලීමට ඔබට අවශ්ය විය හැකිය. අපගේ මිලකරණ විකල්ප ගවේෂණය කර ඔබේ කණ්ඩායම් සහයෝගීතා අවශ්යතා සඳහා හොඳම විකල්පය තෝරන්න.",
|
||||
"components.locked_features.locked_only_office_popup.text": "අපොයි!! ඔබට Tdrive වෙතින් ගොනුව සංස්කරණය කිරීමට අවශ්ය බව පෙනේ. ඔබට කාර්යාල ලිපිගොනු වටා සහයෝගයෙන් කටයුතු කිරීමට අවශ්ය නම් ඔබේ සැලසුම උත්ශ්රේණි කිරීම සලකා බැලීමට ඔබට අවශ්ය විය හැකිය. අපගේ මිලකරණ විකල්ප ගවේෂණය කර ඔබේ කණ්ඩායම් සහයෝගීතා අවශ්යතා සඳහා හොඳම විකල්පය තෝරන්න.",
|
||||
"general.resume": "අරඹන්න",
|
||||
"general.pause": "Pause",
|
||||
"login.create_account": "ගිණුම තනන්න",
|
||||
@@ -876,7 +876,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "මෙම සමාගමේ හිමිකරුට සහ පරිපාලකයින්ට මෙම යෙදුම වෙනස් කිරීමට සහ ප්රකාශ කිරීමට හැකි වනු ඇති බව මට වැටහේ.",
|
||||
"twake.application.access.title": "ඔබගේ යෙදුම සඳහා නිවැරදි විෂය පථයන් තෝරන්න.",
|
||||
"twake.application.access.no_default_scopes_available'": "මෙම අනුකලනයට කිසිදු {{$1}} ප්රවේශයක් නොමැත",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Twake API ලේඛනගත කිරීම",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Tdrive API ලේඛනගත කිරීම",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "ඔබ මේවා පුරවන්නේ කෙසේදැයි නොදන්නේ නම්, යන්න ",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "යෙදුම සාර්ථකව ඉවත් කරන ලදී {{$1}} !",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "යෙදුම ඉවත් කිරීමේදී දෝෂයක් {{$1}} !",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_description": "ඔබේ යෙදුම වචන කිහිපයකින් විස්තර කරන්න",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "පුද්ගලික යතුර",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "තව හොයනවා",
|
||||
"components.open_desktop_popup.subtitle": "Twake යෙදුම තුළ විවෘත කරන ලදී",
|
||||
"components.open_desktop_popup.subtitle": "Tdrive යෙදුම තුළ විවෘත කරන ලදී",
|
||||
"components.open_desktop_popup.open_here_link": "ඒ වෙනුවට මෙතන විවෘත කරන්න",
|
||||
"molecules.download_banner.title": "Twake වලින් උපරිම ප්රයෝජන ලබා ගන්න, දැන් ඩෙස්ක්ටොප් යෙදුම බාගන්න",
|
||||
"molecules.download_banner.title": "Tdrive වලින් උපරිම ප්රයෝජන ලබා ගන්න, දැන් ඩෙස්ක්ටොප් යෙදුම බාගන්න",
|
||||
"molecules.download_banner.download_button": "ඩෙස්ක්ටොප් යෙදුම බාගන්න",
|
||||
"scenes.app.channelsbar.channel_copy_link": "නාලිකා සබැඳිය පිටපත් කරන්න",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "සාර්ථකව යාවත්කාලීන කරන ලදී",
|
||||
@@ -932,7 +932,7 @@
|
||||
"scenes.apps.messages.jump": "පණිවිඩයට පනින්න",
|
||||
"components.channel_attachement_list.open": "ගැලරිය විවෘත කරන්න",
|
||||
"scenes.apps.account.on_console": "ඔබගේ ගෝලීය ගිණුම් මනාප සංස්කරණය කිරීමට, Console වෙත යන්න මත ක්ලික් කරන්න.",
|
||||
"scenes.apps.account.assistant.description": "Twake සහකරුට Twake හි ඔබගේ එදිනෙදා වැඩ පිළිබඳ අවබෝධයක් ලබා දීමට සහ ඔබේ දවස තුළ ස්මාර්ට් කෙටිමං සහ ක්රියා සැපයීමට හැකි වේ. සහායකයා Work@Home මුලපිරීමේ කොටසකි https://workathome.linagora.com/ සහ දැනට Linagora සමාගම තුළ පමණක් පරීක්ෂා කෙරෙන අතර ඉගෙනීමේ අදියරේ පවතී. එයින් අදහස් වන්නේ අපගේ අනාගත සහකාර විශේෂාංගය පුහුණු කිරීම සඳහා අපි Twake භාවිත දත්ත යවන බවයි.",
|
||||
"scenes.apps.account.assistant.description": "Tdrive සහකරුට Tdrive හි ඔබගේ එදිනෙදා වැඩ පිළිබඳ අවබෝධයක් ලබා දීමට සහ ඔබේ දවස තුළ ස්මාර්ට් කෙටිමං සහ ක්රියා සැපයීමට හැකි වේ. සහායකයා Work@Home මුලපිරීමේ කොටසකි https://workathome.linagora.com/ සහ දැනට Linagora සමාගම තුළ පමණක් පරීක්ෂා කෙරෙන අතර ඉගෙනීමේ අදියරේ පවතී. එයින් අදහස් වන්නේ අපගේ අනාගත සහකාර විශේෂාංගය පුහුණු කිරීම සඳහා අපි Tdrive භාවිත දත්ත යවන බවයි.",
|
||||
"scenes.apps.account.assistant.share.nothing": "සහකරු සමග කිසිවක් බෙදා නොගන්න (සහායක අබල කරන්න)",
|
||||
"scenes.apps.account.assistant.share.all": "පණිවිඩ සහ ගොනු අන්තර්ගතය ඇතුළු සියල්ල බෙදා ගන්න",
|
||||
"scenes.apps.account.assistant.share.metadata": "පාර-දත්ත බෙදා ගන්න, නමුත් අන්තර්ගතය නොවේ",
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.smalltext_group_id": "Geçerli grup kimliği",
|
||||
"scenes.app.mainview.channel_description": "Kanalı tanımlayın",
|
||||
"scenes.client.channelbar.channeltemplateeditor.checkbox": "Tüm çalışma alanı kullanıcılarını otomatik olarak bu kanala davet et",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Bu özellik Twake'in ücretsiz sürümünde mevcut değildir.",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Bu özellik Tdrive'in ücretsiz sürümünde mevcut değildir.",
|
||||
"components.on_boarding.company_billing_banner.admin_or_owner_text": "Şirket aboneliğinizle ilgili bir sorun var. Lütfen, kendinize bir göz atın",
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "Şirket aboneliğinizle ilgili bir sorun var. Lütfen şirket sahibi veya yöneticisi ile iletişime geçin!",
|
||||
"components.on_boarding.company_billing_banner.link": "şirket abonelik planı",
|
||||
@@ -179,7 +179,7 @@
|
||||
"scenes.apps.tasks.list_modal.archive_all_tasks": "Tüm görevleri arşivle",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Arşivlenmiş görevleri kaldırın ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "twakeapp.com'a gidin",
|
||||
"scenes.login.footer.branding": "Bir {{$1}} ({{$2}}) özel Twake sunucusundasınız. ",
|
||||
"scenes.login.footer.branding": "Bir {{$1}} ({{$2}}) özel Tdrive sunucusundasınız. ",
|
||||
"scenes.login.create_account.title": "Yeni bir hesap oluştur",
|
||||
"scenes.login.create_account.email": "e-posta",
|
||||
"scenes.login.create_account.email_used": "Bu e-posta zaten kullanılıyor.",
|
||||
@@ -189,7 +189,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "E-postanızı doğru bir e-posta ile doldurmalısınız",
|
||||
"scenes.login.create_account.too_short_password": "Şifreniz en az 8 karakter içermelidir.",
|
||||
"scenes.login.create_account.firstname": "İlk adı",
|
||||
"scenes.login.create_account.newsletter": "Twake hakkında bilgi alın",
|
||||
"scenes.login.create_account.newsletter": "Tdrive hakkında bilgi alın",
|
||||
"scenes.login.create_account.lastname": "Soyadı",
|
||||
"scenes.login.forgot_password.title": "Parolanızı mı unuttunuz?",
|
||||
"scenes.login.forgot_password.text": "Kimliğinizi doğrulamak için e-posta ile 9 haneli bir kod alacaksınız.",
|
||||
@@ -201,11 +201,11 @@
|
||||
"scenes.login.forgot_password.password": "Parola",
|
||||
"scenes.login.forgot_password.password2": "Şifreyi Onayla",
|
||||
"scenes.login.forgot_password.password_dont_match": "Şifreleriniz uyuşmuyor veya çok kısa. Lütfen en az 8 karakterden oluşan bir şifre giriniz.",
|
||||
"scenes.login.home.title": "Twake'te oturum açın",
|
||||
"scenes.login.home.title": "Tdrive'te oturum açın",
|
||||
"scenes.login.home.subtitle": "Seni gördüğüme sevindim",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Başvurunuz yayınlandı, düzenleyemezsiniz.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Tüm IP adreslerine izin vermek için geliştirme aşamasında * kullanın.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Twake API için faydalı veriler.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Tdrive API için faydalı veriler.",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "Bekleniyor...",
|
||||
"scenes.app.popup.appsparameters.pages.website_label": "İnternet sitesi",
|
||||
"scenes.app.popup.appsparameters.pages.write_privileges_label": "Yazma ayrıcalıkları",
|
||||
@@ -234,7 +234,7 @@
|
||||
"scenes.apps.drive.viewer.loading_preview_message": "Yükleniyor...",
|
||||
"scenes.apps.messages.input.show_formatting": "Biçimlendirmeyi göster",
|
||||
"scenes.tell_us": "Lütfen bize ne yaptığınızı söyleyin:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Uygulamada önizlemek için Twake Desktop'ı indirin",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Uygulamada önizlemek için Tdrive Desktop'ı indirin",
|
||||
"scenes.apps.tasks.my_tasks": "Görevlerim",
|
||||
"scenes.apps.tasks.board.place_holder": "Kurul adı",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "alt görev",
|
||||
@@ -282,7 +282,7 @@
|
||||
"scenes.app.workspaces.welcome_page.see_you_soon": "Yakında görüşürüz!",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Tekrar deneyin",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Uyandırmak",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Twake'e hoş geldiniz!",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Tdrive'e hoş geldiniz!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Hesabınıza birden fazla e-posta adresi bağlayabilirsiniz; size bildirim göndermek için yalnızca bir adres kullanılacaktır.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "ana adres",
|
||||
"scenes.app.workspaces.welcome_page.other_mail_title": "ikincil adresler",
|
||||
@@ -292,12 +292,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Size {{$1}} aracılığıyla bir doğrulama kodu gönderdik",
|
||||
"scenes.app.workspaces.welcome_page.done": "bitirdim",
|
||||
"scenes.login.forgot_password.finished": "Şifreniz başarıyla güncellendi.",
|
||||
"scenes.apps.account.account.description_main": "Ana adresiniz, Twake'in bildirimlerinizi gönderdiği yerdir. İkincil adresleriniz, onları kullanan çalışma alanlarına otomatik olarak davet edilmenizi sağlar.",
|
||||
"scenes.apps.account.account.description_main": "Ana adresiniz, Tdrive'in bildirimlerinizi gönderdiği yerdir. İkincil adresleriniz, onları kullanan çalışma alanlarına otomatik olarak davet edilmenizi sağlar.",
|
||||
"scenes.apps.account.account.emails.description": "Farklı e-posta adreslerinizi yönetin.",
|
||||
"scenes.apps.account.account.make_main": "Ana ayarla",
|
||||
"scenes.apps.account.account.password.description": "Şifreni değiştir.",
|
||||
"scenes.apps.account.identity": "Kimlik",
|
||||
"scenes.apps.account.identity.description": "Diğer Twake kullanıcıları tarafından görülebilen adınızı, soyadınızı ve profil resminizi değiştirin.",
|
||||
"scenes.apps.account.identity.description": "Diğer Tdrive kullanıcıları tarafından görülebilen adınızı, soyadınızı ve profil resminizi değiştirin.",
|
||||
"scenes.apps.account.preference": "tercihler",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Maksimum boyut 5 MB",
|
||||
"scenes.apps.account.account.email_add_modal.confirm": "Bu e-postayı onaylayın",
|
||||
@@ -329,7 +329,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.automatique_label": "Otomatik",
|
||||
"scenes.app.popup.appsparameters.pages.automatique_option_information": "'Otomatik' seçeneğini etkinleştirirseniz, bu uygulama bu şirketin sonraki çalışma alanlarına otomatik olarak eklenecektir.",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "İzin verilen IP adresleri",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Başvurunuzun yayınlanması şu anda Twake ekibi tarafından onaylanmayı bekliyor.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Başvurunuzun yayınlanması şu anda Tdrive ekibi tarafından onaylanmayı bekliyor.",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "Şirket genelinde kuvvet",
|
||||
"scenes.app.popup.appsparameters.pages.danger_zone_label": "tehlikeli bölge",
|
||||
"scenes.app.popup.appsparameters.pages.description_label": "Açıklama",
|
||||
@@ -442,7 +442,7 @@
|
||||
"scenes.apps.account.account.password_for_user": "Kullanıcınız için şifre",
|
||||
"scenes.apps.account.account.send_info": "Bu kimlik bilgilerini kullanıcınıza gönderin.",
|
||||
"scenes.apps.account.account.save": "Hesabı kaydet",
|
||||
"scenes.apps.account.message_temporary": "Geçici bir hesap, normal bir Twake hesabı gibi çalışır, ancak parolayı siz oluşturursunuz ve gerekirse parolayı sıfırlayabilirsiniz.",
|
||||
"scenes.apps.account.message_temporary": "Geçici bir hesap, normal bir Tdrive hesabı gibi çalışır, ancak parolayı siz oluşturursunuz ve gerekirse parolayı sıfırlayabilirsiniz.",
|
||||
"scenes.apps.account.message_user_signin": "Kullanıcınız bu aynı e-postayı kullanarak herhangi bir zamanda oturum açabilir ve geçici hesabı normal bir hesapla değiştirebilir.",
|
||||
"scenes.app.mainview.link_expired": "Bu genel bağlantı geçersiz veya süresi dolmuş.",
|
||||
"scenes.app.mainview.create_account": "üzerinde ücretsiz olarak çalışma alanınızı oluşturun ",
|
||||
@@ -459,7 +459,7 @@
|
||||
"components.workspace.list_manager.current_company": "Mevcut şirket",
|
||||
"components.workspace.list_manager.all": "Tüm",
|
||||
"components.workspace.calendar.invalid": "Geçersiz",
|
||||
"components.searchpopup.enter_text": "Twake'i aramak için bir metin girin.",
|
||||
"components.searchpopup.enter_text": "Tdrive'i aramak için bir metin girin.",
|
||||
"components.searchpopup.loading": "Daha fazla sonuç yükleniyor",
|
||||
"components.searchpopup.filter_ws": "Çalışma alanlarını filtrele",
|
||||
"components.searchpopup.tags": "Etiketler",
|
||||
@@ -491,7 +491,7 @@
|
||||
"components.calendar.calendarselector.from": "İtibaren",
|
||||
"scenes.apps.drive.move_text2": "Hareket",
|
||||
"components.attachmentpicker.from_computer": "cihazınızdan",
|
||||
"components.attachmentpicker.from_twake": "Twake Belgelerinden",
|
||||
"components.attachmentpicker.from_twake": "Tdrive Belgelerinden",
|
||||
"components.attachmentpicker.file": "Dosya",
|
||||
"components.attachmentpicker.remove_attach": "Eki kaldır",
|
||||
"scenes.apps.drive.remove_attachs": "Ekleri kaldır",
|
||||
@@ -499,7 +499,7 @@
|
||||
"components.drive.elements.current_name": "Şu anki ismi: ",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "Tartışmayı gizle",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} e-posta(lar)ı eklenecek",
|
||||
"components.newversion.new_version_component.row.part_1": "Eski bir Twake sürümü çalıştırıyorsunuz",
|
||||
"components.newversion.new_version_component.row.part_1": "Eski bir Tdrive sürümü çalıştırıyorsunuz",
|
||||
"components.newversion.new_version_component.row.part_2": "Uygulamayı yeniden yüklemenizi ve yeni özelliklerimizin keyfini çıkarmanızı öneririz!",
|
||||
"components.newversion.new_version_component.link": "Yeniden yüklemek için burayı tıklayın",
|
||||
"components.newversion.new_version_modal.title": "Yeni güncelleme mevcut !",
|
||||
@@ -518,15 +518,15 @@
|
||||
"components.account_verification_status_sentence": "Hesap durumunuz: {{$1}}",
|
||||
"components.unverified_account.re_send_email": "E-postayı almadınız mı?",
|
||||
"components.blocked_account.trial_period_over": "Deneme süreniz bitti. Hesabınızın kilidini açmak ve tüm işlevlere erişmek için lütfen hesabınızı e-posta onayı ile doğrulayın.",
|
||||
"components.add_mails_workspace.button": "Twake'i kullanmaya başlayın",
|
||||
"components.add_mails_workspace.button": "Tdrive'i kullanmaya başlayın",
|
||||
"components.add_mails_workspace.title_1": "Bazı kullanıcılar ekle",
|
||||
"components.add_mails_workspace.title_2": "Twake bir ekip işbirliği aracıdır, bu nedenle bazı kullanıcıları sizin için oluşturduğumuz bir çalışma alanını test etmeye davet edin.",
|
||||
"components.add_mails_workspace.title_2": "Tdrive bir ekip işbirliği aracıdır, bu nedenle bazı kullanıcıları sizin için oluşturduğumuz bir çalışma alanını test etmeye davet edin.",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Kullanıcılarınızın e-postalarını girin*",
|
||||
"components.verify_mail.title_1": "Tebrikler",
|
||||
"components.verify_mail.title_2": "Artık resmi bir Twake kullanıcısısınız!",
|
||||
"components.verify_mail.title_2": "Artık resmi bir Tdrive kullanıcısısınız!",
|
||||
"components.verify_mail.button": "Kullanıcı Ekle",
|
||||
"components.verify_mail.text": "Her şeyden önce, e-posta adresinizi doğrulamanız gerekir. Şu adrese bir doğrulama bağlantısı gönderdik:",
|
||||
"components.verify_mail.paragraph": "İsterseniz bunu daha sonra yapabilirsiniz ancak doğrulanmamış hesapların Twake'in yalnızca sınırlı bir sürümüne erişimi vardır.",
|
||||
"components.verify_mail.paragraph": "İsterseniz bunu daha sonra yapabilirsiniz ancak doğrulanmamış hesapların Tdrive'in yalnızca sınırlı bir sürümüne erişimi vardır.",
|
||||
"services.console_services.toaster.add_emails_error": "E-posta(lar) eklenirken hata oluştu",
|
||||
"services.console_services.toaster.add_email_error_message": "{{$1}} eklenirken hata oluştu",
|
||||
"services.console_services.toaster.success_verify_email": "E-posta hesabınıza bir doğrulama bağlantısı gönderildi",
|
||||
@@ -574,7 +574,7 @@
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "rol",
|
||||
"general.email": "E-posta",
|
||||
"components.locked_features.locked_only_office_popup.title": "Bu dosyayı düzenleyemezsiniz",
|
||||
"components.locked_features.locked_only_office_popup.text": "Hata!! Dosyayı Twake'den düzenlemek istiyor gibisiniz. Ofis dosyaları etrafında işbirliği yapmak istiyorsanız planınızı yükseltmeyi düşünebilirsiniz. Fiyatlandırma seçeneklerimizi keşfedin ve ekip işbirliği ihtiyaçlarınız için en iyi seçeneği belirleyin.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Hata!! Dosyayı Tdrive'den düzenlemek istiyor gibisiniz. Ofis dosyaları etrafında işbirliği yapmak istiyorsanız planınızı yükseltmeyi düşünebilirsiniz. Fiyatlandırma seçeneklerimizi keşfedin ve ekip işbirliği ihtiyaçlarınız için en iyi seçeneği belirleyin.",
|
||||
"scenes.app.popup.adduser.magiclinks.genrator_info": "Çalışma alanına davet bağlantısı",
|
||||
"scenes.app.popup.adduser.magiclinks.new_link_generated": "Yeni bağlantı oluşturuldu",
|
||||
"scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Panoya başarıyla kopyalandı",
|
||||
@@ -603,7 +603,7 @@
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Daha fazla bilgi edin",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "Şimdilik geç",
|
||||
"components.locked_features.locked_guests_popup.or": "Veya",
|
||||
"components.on_boarding.popups.blocked_company.description": "Twake aboneliğinizin süresi doldu. Yenilemek ve ekibinizle tekrar iletişim kurabilmek için lütfen şirketinizin sahibi veya yöneticisi ile iletişime geçin!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Tdrive aboneliğinizin süresi doldu. Yenilemek ve ekibinizle tekrar iletişim kurabilmek için lütfen şirketinizin sahibi veya yöneticisi ile iletişime geçin!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "Şirket abonelik planı hakkında daha fazla bilgi edinmek ister misiniz?",
|
||||
"components.locked_features.locked_workspace_popup.text": "Hata!! Şirketinizde yeni bir çalışma alanı mı yaratmak istiyorsunuz? Planınızı yükseltmeyi düşünebilirsiniz. Fiyatlandırma seçeneklerimizi keşfedin ve ekip işbirliği ihtiyaçlarınız için en iyi seçeneği belirleyin.",
|
||||
"scenes.app.integrations_parameters.company_application_popup.tag": "Kurulmuş",
|
||||
@@ -619,7 +619,7 @@
|
||||
"scenes.join.wrong_link_description": "Sizi bu şirkete katılmaya davet eden kişiden yeni bir bağlantı isteyin veya kendi şirketinizi oluşturun",
|
||||
"scenes.join.create_the_company_button": "şirket oluştur",
|
||||
"scenes.join.join_workspace_from_company": "{{$2}}'ten {{$1}}'e katılın!",
|
||||
"scenes.join.twake_description": "Twake, ekip üretkenliğinizi artırmak için oluşturulmuş açık kaynaklı bir dijital çalışma alanıdır.",
|
||||
"scenes.join.twake_description": "Tdrive, ekip üretkenliğinizi artırmak için oluşturulmuş açık kaynaklı bir dijital çalışma alanıdır.",
|
||||
"components.user_picker.modal_no_result": "Sonuç bulunamadı",
|
||||
"components.users_picker.add_me": "beni ekle",
|
||||
"scenes.app.workspaces.create_company.invitations.title": "Çalışma alanınızı yapılandırın.",
|
||||
@@ -662,7 +662,7 @@
|
||||
"scenes.apps.parameters.workspace_sections.members": "Katılımcılar",
|
||||
"scenes.apps.parameters.group_sections.workspaces": "çalışma alanları",
|
||||
"scenes.apps.parameters.group_sections.apps": "uygulamalar",
|
||||
"scenes.apps.account.languages.text": "Twake dilini değiştirin.",
|
||||
"scenes.apps.account.languages.text": "Tdrive dilini değiştirin.",
|
||||
"components.calendar.repetition.ends": "biter",
|
||||
"scenes.apps.tasks.boards": "Panolar",
|
||||
"scenes.apps.tasks.connectors_menu": "Konektörler...",
|
||||
@@ -697,7 +697,7 @@
|
||||
"scenes.app.channelsbar.unread_sign": "okunmamış olarak işaretle",
|
||||
"scenes.app.channelsbar.channel_leaving": "kanaldan ayrıl",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Bağlayıcı ara...",
|
||||
"scenes.app.popup.adduser.adresses_message": "Lütfen adresleri virgül veya boşlukla ayırın. Twake'in aboneliğinize bağlı olarak davet sayısını sınırlayabileceğini unutmayın.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Lütfen adresleri virgül veya boşlukla ayırın. Tdrive'in aboneliğinize bağlı olarak davet sayısını sınırlayabileceğini unutmayın.",
|
||||
"scenes.app.popup.appsparameters.pages._app_identity": "Uygulamanın kimliği",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Twacode mesajlarınızın görünümünü test edin",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "benim harika uygulamam",
|
||||
@@ -719,7 +719,7 @@
|
||||
"scenes.login.verifymail.signin_button": "Giriş yapmak",
|
||||
"scenes.login.verifymail.success": "E-postanız başarıyla doğrulandı!",
|
||||
"scenes.login.verifymail.verification_waiting": "Doğrulama bekleniyor...",
|
||||
"scenes.no_panic": "Panik yapma! Twake'i düzeltmek için bu sayfayı yeniden yükleyin.",
|
||||
"scenes.no_panic": "Panik yapma! Tdrive'i düzeltmek için bu sayfayı yeniden yükleyin.",
|
||||
"services.apps.calendar.deadline_icon": "Son teslim tarihi",
|
||||
"services.apps.calendar.event_icon": "Etkinlik",
|
||||
"services.apps.calendar.move_icon": "Hareket",
|
||||
@@ -754,7 +754,7 @@
|
||||
"components.locked_features.locked_workspace_popup.subtitle": "Ücretsiz sürümde, şirketinizde yalnızca bir çalışma alanınız olabilir.",
|
||||
"scenes.app.workspaces.create_company.group_data.title": "Hızlı olacağız - sadece bazı istatistiksel bilgilere ihtiyacımız var.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Mesaj numarası",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Twake'in ücretsiz sürümünde, daha yeni olan {{$1}} mesajlarından daha fazlasına erişemezsiniz.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Tdrive'in ücretsiz sürümünde, daha yeni olan {{$1}} mesajlarından daha fazlasına erişemezsiniz.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "Daha fazla plan göster",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "Yeni özel tartışma",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Özel mesaj yok. Kullanıcıları davet edin!",
|
||||
@@ -770,8 +770,8 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "Özel",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Bir tartışmada ilk mesajınızı gönderin",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Bu kareyi bir daha göstermeyecek misin?",
|
||||
"scenes.app.channelsbar.welcome": "Twake'e hoş geldiniz",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Sadece birkaç tıklamayla Twake profesyoneli olun!",
|
||||
"scenes.app.channelsbar.welcome": "Tdrive'e hoş geldiniz",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Sadece birkaç tıklamayla Tdrive profesyoneli olun!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Solunuzda bir kanal seçerek başlayın.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "API ayarları",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "Uygulama Adı",
|
||||
@@ -789,12 +789,12 @@
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "Yeni uygulama",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "Tamam",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "En uygun biçim : 48x48 piksel.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Yayınlanmayan uygulama yalnızca şirketinizde çalışır. Tüm Twake kullanıcılarının kullanımına sunmak istiyorsanız, bu seçeneği etkinleştirin.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Yayınlanmayan uygulama yalnızca şirketinizde çalışır. Tüm Tdrive kullanıcılarının kullanımına sunmak istiyorsanız, bu seçeneği etkinleştirin.",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "Genel uygulama",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "Genel tanımlayıcı",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "Uygulamanızın görünürlüğünü belirleyin.",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Bu dize, uygulamanızı tanımlar ve mesaj komutlarında kullanılacaktır.",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode test cihazı",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode test cihazı",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "Etkinlik alma URL'si",
|
||||
"scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Uygulamanızın basitleştirilmiş adı zaten başka bir uygulama tarafından kullanılıyor. Lütfen değiştirin.",
|
||||
"scenes.app.popup.userparameter.pages.keywords_notif_description": "Aşağıdaki anahtar kelimeleri vurgulayın:",
|
||||
@@ -878,7 +878,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Bu şirketin sahibi ve yöneticilerinin bu uygulamayı değiştirebileceğini ve yayınlayabileceğini anlıyorum.",
|
||||
"twake.application.access.title": "Uygulamanız için doğru kapsamları seçin.",
|
||||
"twake.application.access.no_default_scopes_available'": "Bu entegrasyon herhangi bir {{$1}} erişimine sahip değil",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Twake API belgeleri",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Tdrive API belgeleri",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "Bunları nasıl dolduracağınızı bilmiyorsanız, adresine gidin. ",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "{{$1}} uygulaması başarıyla kaldırıldı!",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "{{$1}} uygulaması kaldırılırken hata oluştu!",
|
||||
@@ -886,9 +886,9 @@
|
||||
"scenes.app.integrations_parameters.add_application": "Yeni entegrasyon",
|
||||
"scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Geliştirici ayarları",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "daha fazlasını arıyorum",
|
||||
"components.open_desktop_popup.subtitle": "Twake uygulamasında açıldı",
|
||||
"components.open_desktop_popup.subtitle": "Tdrive uygulamasında açıldı",
|
||||
"components.open_desktop_popup.open_here_link": "Bunun yerine burada aç",
|
||||
"molecules.download_banner.title": "Twake'den en iyi şekilde yararlanın, şimdi masaüstü uygulamasını indirin",
|
||||
"molecules.download_banner.title": "Tdrive'den en iyi şekilde yararlanın, şimdi masaüstü uygulamasını indirin",
|
||||
"molecules.download_banner.download_button": "Masaüstü uygulamasını indirin",
|
||||
"scenes.app.channelsbar.channel_copy_link": "Kanal bağlantısını kopyala",
|
||||
"scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.success.update": "Başarıyla güncellendi",
|
||||
@@ -931,7 +931,7 @@
|
||||
"molecules.message_quote.deleted": "Bu mesaj silindi",
|
||||
"scenes.apps.messages.jump": "Mesaja atla",
|
||||
"components.channel_attachement_list.open": "Galeriyi aç",
|
||||
"scenes.apps.account.assistant.description": "Twake asistanı, Twake'deki günlük çalışmalarınızı anlamlandırabilir ve gün boyunca akıllı kısayollar ve eylemler sağlayabilir. Asistan, https://workathome.linagora.com/ Work@Home girişiminin bir parçasıdır ve şu anda yalnızca Linagora şirketinde test edilmektedir ve öğrenme aşamasındadır. Bu, gelecekteki asistan özelliğimizi eğitmek için Twake kullanım verilerini göndereceğimiz anlamına geliyor.",
|
||||
"scenes.apps.account.assistant.description": "Tdrive asistanı, Tdrive'deki günlük çalışmalarınızı anlamlandırabilir ve gün boyunca akıllı kısayollar ve eylemler sağlayabilir. Asistan, https://workathome.linagora.com/ Work@Home girişiminin bir parçasıdır ve şu anda yalnızca Linagora şirketinde test edilmektedir ve öğrenme aşamasındadır. Bu, gelecekteki asistan özelliğimizi eğitmek için Tdrive kullanım verilerini göndereceğimiz anlamına geliyor.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Asistanla hiçbir şey paylaşmayın (asistanı devre dışı bırakın)",
|
||||
"scenes.apps.account.assistant.share.all": "Mesajlar ve dosya içerikleri dahil her şeyi paylaşın",
|
||||
"scenes.apps.account.assistant.share.metadata": "Meta verileri paylaşın ancak içeriği değil",
|
||||
|
||||
@@ -105,13 +105,13 @@
|
||||
"scenes.app.workspaces.welcome_page.add_new_email": "Thêm thư",
|
||||
"scenes.app.workspaces.welcome_page.done": "Tôi đã xong",
|
||||
"scenes.app.workspaces.welcome_page.try_again": "Thử lại",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Twake",
|
||||
"scenes.app.workspaces.welcome_page.twake_team": "Tdrive",
|
||||
"scenes.app.workspaces.welcome_page.code_verification": "Mã xác nhận",
|
||||
"app.name.twake_tasks": "Công việc",
|
||||
"components.calendar.repetition.everyday": "Hàng ngày",
|
||||
"scenes.apps.account.thumbnail.max_weight": "Lớn nhất là 5MB",
|
||||
"components.calendar.repetition.weeks": "tuần",
|
||||
"scenes.apps.account.identity.description": "Thay tên, họ và ảnh đại diện để người dùng Twake thấy bạn.",
|
||||
"scenes.apps.account.identity.description": "Thay tên, họ và ảnh đại diện để người dùng Tdrive thấy bạn.",
|
||||
"components.calendar.repetition.custom": "Tùy chọn...",
|
||||
"components.calendar.repetition.on": "Vào",
|
||||
"components.calendar.repetition.after": "Sau",
|
||||
@@ -188,7 +188,7 @@
|
||||
"scenes.login.forgot_password.invalid_code": "Mã số không đúng.",
|
||||
"scenes.login.forgot_password.text3": "Nhập mật khẩu mới cho tài khoản của bạn.",
|
||||
"scenes.login.forgot_password.password_dont_match": "Mật khẩu không khớp hoặc quá ngắn. Hãy ghõ lại mật khẩu ít nhất 8 ký tự.",
|
||||
"scenes.login.home.title": "Đăng nhập vào Twake",
|
||||
"scenes.login.home.title": "Đăng nhập vào Tdrive",
|
||||
"scenes.login.home.subtitle": "Chào mừng trở lại",
|
||||
"scenes.login.home.email": "Thư",
|
||||
"scenes.login.home.unable_to_connect": "Thông tin đăng nhập sai",
|
||||
@@ -196,13 +196,13 @@
|
||||
"scenes.login.home.lost_password": "Quên mật khẩu?",
|
||||
"scenes.login.create_account.step_1_subtitle": "Nó là đơn giản — chúng tôi chỉ cần một số thông tin.",
|
||||
"scenes.login.create_account.step_2_subtitle_a": "Và tên đầy đủ để mọi người biết gọi bạn thế nào.",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Chào mừng đến với Twake!",
|
||||
"scenes.app.workspaces.welcome_page.welcome_header": "Chào mừng đến với Tdrive!",
|
||||
"scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Bạn có thể liên kết nhiều thư vào tài khoản; chỉ một thư được dùng để gửi thông báo.",
|
||||
"scenes.app.workspaces.welcome_page.main_mail_title": "Thư chính",
|
||||
"scenes.app.workspaces.welcome_page.new_email": "Thêm thư phụ",
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "Chúng tôi gửi mã xác nhận qua {{$1}}",
|
||||
"scenes.login.forgot_password.finished": "Mật khẩu của bạn đã thay đổi thành công.",
|
||||
"scenes.apps.account.account.description_main": "Thư chính sẽ được gửi thông báo từ Twake. Thư phụ được tự động mời vào không gian làm việc khi bạn dùng.",
|
||||
"scenes.apps.account.account.description_main": "Thư chính sẽ được gửi thông báo từ Tdrive. Thư phụ được tự động mời vào không gian làm việc khi bạn dùng.",
|
||||
"scenes.apps.account.identity": "Danh tính",
|
||||
"general.open": "Mở",
|
||||
"app.name.twake_calendar": "Lịch",
|
||||
@@ -226,7 +226,7 @@
|
||||
"scenes.app.channelsbar.company_invitation_alert_title": "Bạn được mời vào công ty ",
|
||||
"scenes.app.channelsbar.initial_instructions_tutorial": "Chọn tên, họ và một ảnh đại diện.",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "Gửi tin nhắn đầu tiên vào thảo luận",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Trở thành Twake chuyên nghiệp chỉ cần một vài nhấn!",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "Trở thành Tdrive chuyên nghiệp chỉ cần một vài nhấn!",
|
||||
"scenes.app.mainview.instruction_current_tab": "Bắt đầu bằng việc chọn kên bên phía trái.",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Bạn không có kết nối nào đến kênh.",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "Tìm kiếm kết nối...",
|
||||
@@ -248,7 +248,7 @@
|
||||
"scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "Mời người dùng",
|
||||
"scenes.apps.drive.create_folder_button": "Tạo",
|
||||
"scenes.apps.messages.message.remove_button": "Xóa bỏ",
|
||||
"components.add_mails_workspace.button": "Bắt đầu sử dụng Twake",
|
||||
"components.add_mails_workspace.button": "Bắt đầu sử dụng Tdrive",
|
||||
"general.user.role.company.member": "Thành viên",
|
||||
"components.locked_features.locked_history_banner.button": "Tìm hiểu thêm",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "Tìm hiểu thêm",
|
||||
@@ -271,7 +271,7 @@
|
||||
"scenes.apps.account.notifications.mail_subtitle": "Thông báo qua thư điện tử",
|
||||
"scenes.apps.tasks.list_modal.remove": "Xóa danh sách và công việc",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "Xóa toàn bộ công việc đã xong ({{$1}})",
|
||||
"scenes.login.footer.branding": "Bạn đang dùng Twake {{$1}} ({{$2}}) ở máy chủ riêng ",
|
||||
"scenes.login.footer.branding": "Bạn đang dùng Tdrive {{$1}} ({{$2}}) ở máy chủ riêng ",
|
||||
"scenes.login.create_account.email_used": "Thư này đã được sử dụng.",
|
||||
"scenes.login.create_account.username": "Tên người dùng",
|
||||
"scenes.login.create_account.fill_in_username": "Bạn cần phải điền tên người dùng",
|
||||
@@ -283,7 +283,7 @@
|
||||
"scenes.login.footer.go_to_twake": "Đi tới twakeapp.com",
|
||||
"scenes.login.create_account.title": "Tạo tài khoản mới",
|
||||
"scenes.login.create_account.username_already_exist": "Tên ngời dùng đã tồn tại",
|
||||
"scenes.login.create_account.newsletter": "Nhận thông tin về Twake",
|
||||
"scenes.login.create_account.newsletter": "Nhận thông tin về Tdrive",
|
||||
"scenes.login.forgot_password.title": "Quên mật khẩu?",
|
||||
"scenes.login.create_account.email": "Thư",
|
||||
"scenes.login.forgot_password.text": "Bạn sẽ nhận được mã số xác nhận dài 9 chữ số qua thư điện tử.",
|
||||
@@ -299,7 +299,7 @@
|
||||
"scenes.app.channelsbar.currentuser.title": "Thiết đặt tài khoản",
|
||||
"scenes.app.channelsbar.currentuser.workspace_info": "Bạn ở không gian làm việc {{$1}} cùng với nhóm {{$2}}",
|
||||
"scenes.apps.messages.message.save_button": "Lưu",
|
||||
"scenes.app.channelsbar.welcome": "Chào mừng đến với Twake",
|
||||
"scenes.app.channelsbar.welcome": "Chào mừng đến với Tdrive",
|
||||
"scenes.app.channelsbar.private_channel_label": "Riêng tư",
|
||||
"scenes.app.mainview.tabs.rename": "Đổi tên",
|
||||
"scenes.apps.calendar.modals.description_placeholder": "Mô tả",
|
||||
@@ -321,7 +321,7 @@
|
||||
"scenes.app.channelsbar.currentuser.reactivate_notifications": "Kích hoạt lại",
|
||||
"scenes.app.channelsbar.currentuser.disabling_notifications_until": "Vô hiệu đến 9 giờ sáng hôm sau",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "Số lượng tin nhắn",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Ở phiên bản miễn phí của Twake, bạn không thể truy cập vào nhiều hơn {{$1}} tin nhắn gần đây.",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "Ở phiên bản miễn phí của Tdrive, bạn không thể truy cập vào nhiều hơn {{$1}} tin nhắn gần đây.",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Không có tin nhắn riêng. Hãy mời thêm người dùng!",
|
||||
"scenes.app.channelsbar.invitation_collaboraors_tutorial": "Mời người dùng vào không gian làm việc của bạn.",
|
||||
"scenes.app.channelsbar.modify_channel_menu": "Sửa kênh",
|
||||
@@ -329,7 +329,7 @@
|
||||
"scenes.app.channelsbar.installation_desktop_tutorial": "Cài đặt ứng dụng trên máy tính",
|
||||
"scenes.app.channelsbar.public_channel_label": "Công khai",
|
||||
"scenes.app.channelsbar.tutorial_alert": "Không muốn thấy lại khung này nữa?",
|
||||
"scenes.app.popup.adduser.adresses_message": "Nhập thư cách nhau bằng dấu phẩy hoặc dấu trắng. Lưu ý Twake sẽ giới hạn việc mời người dùng dựa vào gói đăng ký của bạn.",
|
||||
"scenes.app.popup.adduser.adresses_message": "Nhập thư cách nhau bằng dấu phẩy hoặc dấu trắng. Lưu ý Tdrive sẽ giới hạn việc mời người dùng dựa vào gói đăng ký của bạn.",
|
||||
"scenes.app.channelsbar.unread_sign": "Đánh dấu chưa đọc",
|
||||
"scenes.app.channelsbar.channel_removing": "Xóa kênh",
|
||||
"scenes.app.workspaces.create_company.group_data.group_main_activity.pharmaceutical_industry": "Ngành dược",
|
||||
@@ -344,16 +344,16 @@
|
||||
"scenes.app.popup.appsparameters.pages.apps_title": "Ứng dụng và kết nối của bạn",
|
||||
"scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Cho phép địa chỉ IP",
|
||||
"scenes.app.popup.appsparameters.pages.danger_zone_description": "Xóa ứng dụng",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Kiểm tra việc xuất hiện với tin nhắn mã Twake",
|
||||
"scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Kiểm tra việc xuất hiện với tin nhắn mã Tdrive",
|
||||
"scenes.app.popup.appsparameters.pages.alert_published_app": "Ứng dụng của bạn đã phát hành, bạn không thể sửa được.",
|
||||
"scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Dùng * trong quá trình phát triển để cho phép địa chỉ IP.",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "Ứng dụng tuyệt vời của tôi",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Dữ liệu có ích cho Twake API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Dữ liệu có ích cho Tdrive API.",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "Cài đặt API",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "Tất cả những người quản lý công ty có quyền chỉnh sửa ứng dụng.",
|
||||
"scenes.app.popup.appsparameters.pages.app_privileges_information": "Định nghĩa ứng dụng của bạn được đọc và chỉnh sửa.",
|
||||
"scenes.app.popup.appsparameters.pages.app_privileges_label": "Phân quyền ứng dụng",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Việc phát hành ứng dụng của bạn đang đợi phần xét duyệt của đội Twake.",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "Việc phát hành ứng dụng của bạn đang đợi phần xét duyệt của đội Tdrive.",
|
||||
"scenes.app.popup.appsparameters.pages.call_event_handlers": "Sự kiện của '{{$1}}' và id '{{$2}}' được thông qua '{{$3}}'",
|
||||
"scenes.app.popup.appsparameters.pages.company_label": "Chủ sở hữu công ty",
|
||||
"scenes.app.popup.appsparameters.pages.create_app_button": "Tạo ứng dụng",
|
||||
@@ -390,11 +390,11 @@
|
||||
"scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "Xóa ra khỏi không gian làm việc",
|
||||
"scenes.app.popup.appsparameters.pages.show_button": "Hiện",
|
||||
"scenes.app.popup.appsparameters.pages.status_tilte": "Trạng thái",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode kiểm thử",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode kiểm thử",
|
||||
"scenes.app.popup.appsparameters.pages.publish_app_label": "Phát hành ứng dụng",
|
||||
"scenes.app.popup.appsparameters.pages.filter_information": "Lọc này giới hạn việc sử dụng khóa API kết nối trong máy chủ của bạn.",
|
||||
"scenes.app.popup.appsparameters.pages.grp_section_surname_label": "Đặt tên",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Ứng dụng chưa phát hành chỉ chạy với công ty của bạn. Nếu bạ muốn ứng dụng này được dùng bởi tất cả người dùng Twake, kích hoạt lựa chọn này.",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Ứng dụng chưa phát hành chỉ chạy với công ty của bạn. Nếu bạ muốn ứng dụng này được dùng bởi tất cả người dùng Tdrive, kích hoạt lựa chọn này.",
|
||||
"scenes.app.popup.appsparameters.pages.event_subtitle": "Sự kiện",
|
||||
"scenes.app.popup.appsparameters.pages.grp_section_name-error": "Tên này đã dùng cho ứng dụng khác. Hãy chọn tên khác.",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "Chuỗi này định danh ứng dụng của bạn và sẽ được sử dụng trong tin nhắn dòng lệnh.",
|
||||
@@ -488,7 +488,7 @@
|
||||
"components.drive.right_preview.suppress_link": "Chặn liên kết",
|
||||
"scenes.login.verifymail.success": "Email của bạn đã được verify thành công!",
|
||||
"scenes.login.verifymail.verification_waiting": "Đang chờ xác nhận...",
|
||||
"components.newversion.new_version_component.row.part_1": "Bạn đang sử dụng một phiên bản cũ của Twake",
|
||||
"components.newversion.new_version_component.row.part_1": "Bạn đang sử dụng một phiên bản cũ của Tdrive",
|
||||
"components.newversion.new_version_component.row.part_2": "chúng tôi gợi ý bạn tải lại ứng dụng và trải nghiệm những tính năng mới!",
|
||||
"components.inputs.input_with_select.select.no_sections": "Bắt đầu đặt tên cho kênh đầu tiên của bạn.",
|
||||
"components.inputs.input_with_select.button.tooltip": "Đặt một đoạn kênh",
|
||||
@@ -523,7 +523,7 @@
|
||||
"services.apps.calendar.reminder_icon": "Nhắc nhở",
|
||||
"services.apps.messages.no_app": "Ứng dụng này không tồn tại.",
|
||||
"services.apps.messages.no_command_possible": "Chúng tôi không thể thực hiện được '{{$1}}' vì '{{$2}}' không tồn tại hoặc không cho phép thực hiện lệnh.",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Tải Twake Desktop để xem trước trên ứng dụng",
|
||||
"scenes.apps.drive.viewer.download_desktop": "Tải Tdrive Desktop để xem trước trên ứng dụng",
|
||||
"scenes.apps.tasks.board.tasks.subtask": "Việc phụ",
|
||||
"scenes.apps.tasks.board.tasks.add_subtask": "Thêm việc phụ",
|
||||
"scenes.apps.tasks.board.tasks.use_deadline": "Đặt hạn chót",
|
||||
@@ -564,10 +564,10 @@
|
||||
"scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} đã thêm {{$2}} tab {{$3}}",
|
||||
"components.alert.leave_private_channel.description": "Bạn sẽ không thể tham gia vào kênh riêng tư trừ khi ai đó mời bạn.",
|
||||
"components.blocked_account.trial_period_over": "Thời gian dùng thử của bạn đã hết. Để mở khóa tài khoản của bạn và có quyền truy cập vào tất cả các chức năng, vui lòng xác minh tài khoản của bạn qua email xác nhận",
|
||||
"components.add_mails_workspace.title_2": "Twake là công cụ cộng tác nhóm, hãy mời người dùng để sử dụng không gian làm việc mà chúng tôi đã tạo cho bạn.",
|
||||
"components.verify_mail.title_2": "Từ bây giờ bạn là người dùng chính thức của Twake!",
|
||||
"components.add_mails_workspace.title_2": "Tdrive là công cụ cộng tác nhóm, hãy mời người dùng để sử dụng không gian làm việc mà chúng tôi đã tạo cho bạn.",
|
||||
"components.verify_mail.title_2": "Từ bây giờ bạn là người dùng chính thức của Tdrive!",
|
||||
"components.verify_mail.text": "Trước tiên, bạn phải xác minh thư điện tử. Chúng tôi đã gửi đường dẫn xác minh đến",
|
||||
"components.verify_mail.paragraph": "Bạn có thể làm việc này sau nhưng nếu bạn chưa xác minh tài khoản bạn chỉ được dùng bản giới hạn của Twake",
|
||||
"components.verify_mail.paragraph": "Bạn có thể làm việc này sau nhưng nếu bạn chưa xác minh tài khoản bạn chỉ được dùng bản giới hạn của Tdrive",
|
||||
"services.console_services.toaster.add_emails_error": "Lỗi khi thêm thư điện tử",
|
||||
"services.console_services.toaster.add_email_error_message": "Lôi khi thêm {{$1}}",
|
||||
"scenes.client.channels_bar.modals.guest_management.title": "Quản lý khách trong {{$1}}",
|
||||
@@ -582,16 +582,16 @@
|
||||
"components.locked_features.locked_history_banner.title": "Bạn đã đạt đến giới hạn tin nhắn",
|
||||
"components.locked_features.locked_history_banner.description": "Công ty bạn có quá nhiều tin nhắn! Hãy nâng cấp ngay để truy cập được vào toàn bộ lịch sử tin nhắn.",
|
||||
"components.locked_features.locked_guests_popup.title": "Tính năng Khách mời đã khóa",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Tính năng này không có trên bản Twake miễn phí",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "Tính năng này không có trên bản Tdrive miễn phí",
|
||||
"components.on_boarding.company_billing_banner.link": "gói đăng ký cho công ty",
|
||||
"scenes.apps.messages.message.parts.deleted_content.text.current_user": "Bạn vừa xóa tin này",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " thay bằng",
|
||||
"components.locked_features.locked_only_office_popup.text": "Whoops!!Có vẻ như bạn muốn chỉnh sửa file trên Twake.Hãy cân nhắc đăng kí gói cao hơn. Khám phá các gói của chúng tôi và chọn gói phù hợp nhất với nhu cầu của công ty bạn.",
|
||||
"components.locked_features.locked_only_office_popup.text": "Whoops!!Có vẻ như bạn muốn chỉnh sửa file trên Tdrive.Hãy cân nhắc đăng kí gói cao hơn. Khám phá các gói của chúng tôi và chọn gói phù hợp nhất với nhu cầu của công ty bạn.",
|
||||
"scenes.apps.drive.open_link": "Mở đường dẫn ở một cửa sổ khác",
|
||||
"scenes.app.popup.workspaceparameter.pages.your_apps_label": "Ứng dụng của bạn",
|
||||
"scenes.apps.drive.go_out_trash_menu": "Bỏ vào thùng rác",
|
||||
"scenes.apps.account.message_user_signin": "Bạn có thể đăng nhập bất kì lúc nào sử dụng email đã đăng kí và chuyển nó thành một tài khoản bình thường.",
|
||||
"scenes.apps.account.message_temporary": "Một tài khoản tạm thời sẽ hoạt động như một tài khoản Twake bình thường nhưng bạn có thể tạo mật khẩu và đặt lại nó nếu cần thiết.",
|
||||
"scenes.apps.account.message_temporary": "Một tài khoản tạm thời sẽ hoạt động như một tài khoản Tdrive bình thường nhưng bạn có thể tạo mật khẩu và đặt lại nó nếu cần thiết.",
|
||||
"scenes.client.channels_bar.modals.guest_management.tips": "Bắt đầu thêm hoặc tìm kiếm bằng việc sử dụng ô nhập liệu ở trên",
|
||||
"components.on_boarding.popups.blocked_company.title": "Công ty của bạn bị khóa vì vấn đề thanh toán",
|
||||
"components.add_mails_workspace.text_area_placeholder": "Nhập thư điện tử người dùng của bạn*",
|
||||
@@ -741,7 +741,7 @@
|
||||
"general.verify": "Xác thực",
|
||||
"components.unverified_account.typography_text_danger": "Hãy xác minh tài khoản trong vòng {{$ 1}} ngày. Tài khoản dùng thử sẽ bị khóa sau 7 ngày và xóa vĩnh viễn sau 1 tháng đăng ký. Bạn có thể xác minh tài khoản của mình bằng cách nhấp vào nút \"Xác minh tài khoản của tôi\" trong email xác minh mà chúng tôi đã gửi cho bạn.",
|
||||
"scenes.app.popup.workspaceparameter.edit_from_console": "Xem trong bảng điều khiển",
|
||||
"components.on_boarding.popups.blocked_company.description": "Gói đăng ký Twake của bạn hết hạn. Hãy liên hệ với chủ sở hữ công ty hoặc quản trị viên để kiểm tra và để tiếp tục có thể trao đổi với nhóm của bạn!",
|
||||
"components.on_boarding.popups.blocked_company.description": "Gói đăng ký Tdrive của bạn hết hạn. Hãy liên hệ với chủ sở hữ công ty hoặc quản trị viên để kiểm tra và để tiếp tục có thể trao đổi với nhóm của bạn!",
|
||||
"components.richtexteditor.toolbar.underline": "Gạch chân",
|
||||
"scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "Mã định danh không gian làm việc hiện tại",
|
||||
"scenes.app.mainview.channel_description": "Mô tả kênh",
|
||||
@@ -764,7 +764,7 @@
|
||||
"components.emoji_picker.categories.animals_and_nature": "Động vật & Thiên nhiên",
|
||||
"scenes.apps.drive.no_storage_app_alert": "Bạn không có ứng dụng nào để được cấp quyền tạo ổ cứng ngoài.",
|
||||
"scenes.apps.tasks.no_connector": "Không có kết nối",
|
||||
"components.searchpopup.enter_text": "Điền một vài từ để tìm trong Twake.",
|
||||
"components.searchpopup.enter_text": "Điền một vài từ để tìm trong Tdrive.",
|
||||
"components.emoji_picker.categories.flags": "Đánh dấu",
|
||||
"components.emoji_picker.categories.search_result": "Kết quả tìm kiếm",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "Ở gói miễn phí, bạn không thể sử dụng onlyoffice.",
|
||||
@@ -801,7 +801,7 @@
|
||||
"scenes.apps.tasks.modals.attachments": "Tập tin đính kèm",
|
||||
"components.calendar.calendarselector.from": "Từ",
|
||||
"components.attachmentpicker.from_computer": "Từ thiết bị của bạn",
|
||||
"components.attachmentpicker.from_twake": "Từ tài liệu Twake",
|
||||
"components.attachmentpicker.from_twake": "Từ tài liệu Tdrive",
|
||||
"components.attachmentpicker.file": "Tập tin",
|
||||
"components.attachmentpicker.remove_attach": "Xóa tệp đính kèm",
|
||||
"components.drive.elements.see": "Nhìn thấy",
|
||||
@@ -821,7 +821,7 @@
|
||||
"scenes.join.wrong_link_description": "Yêu cầu người đã mời bạn tham gia công ty này để có liên kết mới hoặc tạo công ty của riêng bạn",
|
||||
"scenes.join.create_the_company_button": "Tạo công ty",
|
||||
"scenes.join.join_workspace_from_company": "Tham gia {{$1}} từ {{$2}}!",
|
||||
"scenes.join.twake_description": "Twake là một không gian làm việc kỹ thuật số mã nguồn mở được xây dựng để cải thiện năng suất nhóm của bạn",
|
||||
"scenes.join.twake_description": "Tdrive là một không gian làm việc kỹ thuật số mã nguồn mở được xây dựng để cải thiện năng suất nhóm của bạn",
|
||||
"scenes.join.login_first_button": "Đăng nhập hoặc tạo tài khoản trước",
|
||||
"scenes.join.join_the_team_button": "Tham gia nhóm",
|
||||
"scenes.apps.drive.move_text2": "Di chuyển",
|
||||
@@ -884,9 +884,9 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "Tôi hiểu rằng chủ sở hữu và quản trị viên của công ty này sẽ có thể sửa đổi và xuất bản ứng dụng này.",
|
||||
"twake.application.access.title": "Chọn phạm vi phù hợp cho ứng dụng của bạn.",
|
||||
"twake.application.access.no_default_scopes_available'": "Tích hợp này không có bất kỳ quyền truy cập {{$1}} nào",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "tài liệu API Twake",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "tài liệu API Tdrive",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "Tìm kiếm thêm",
|
||||
"components.open_desktop_popup.subtitle": "được mở trong ứng dụng Twake",
|
||||
"components.open_desktop_popup.subtitle": "được mở trong ứng dụng Tdrive",
|
||||
"components.open_desktop_popup.open_here_link": "Thay vào đó hãy mở ở đây",
|
||||
"molecules.download_banner.title": "Tận dụng tối đa twake, tải xuống ứng dụng dành cho máy tính để bàn ngay bây giờ",
|
||||
"molecules.download_banner.download_button": "Tải xuống ứng dụng dành cho máy tính để bàn",
|
||||
@@ -933,7 +933,7 @@
|
||||
"components.channel_attachement_list.open": "Mở thư viện",
|
||||
"scenes.apps.account.on_console": "Để chỉnh sửa tùy chọn tài khoản toàn cầu của bạn, hãy nhấp vào Đi tới Bảng điều khiển.",
|
||||
"scenes.apps.account.assistant.title": "Trợ lý",
|
||||
"scenes.apps.account.assistant.description": "Trợ lý Twake có thể hiểu được công việc hàng ngày của bạn trên Twake và cung cấp các phím tắt và hành động thông minh trong ngày của bạn. Trợ lý là một phần của sáng kiến Work @ Home https://workathome.linagora.com/ và hiện chỉ đang được thử nghiệm trong công ty Linagora và đang trong giai đoạn học hỏi. Nó có nghĩa là chúng tôi sẽ gửi dữ liệu sử dụng Twake để đào tạo tính năng trợ lý trong tương lai của chúng tôi.",
|
||||
"scenes.apps.account.assistant.description": "Trợ lý Tdrive có thể hiểu được công việc hàng ngày của bạn trên Tdrive và cung cấp các phím tắt và hành động thông minh trong ngày của bạn. Trợ lý là một phần của sáng kiến Work @ Home https://workathome.linagora.com/ và hiện chỉ đang được thử nghiệm trong công ty Linagora và đang trong giai đoạn học hỏi. Nó có nghĩa là chúng tôi sẽ gửi dữ liệu sử dụng Tdrive để đào tạo tính năng trợ lý trong tương lai của chúng tôi.",
|
||||
"scenes.apps.account.assistant.share.nothing": "Không chia sẻ bất kỳ thứ gì với trợ lý (tắt trợ lý)",
|
||||
"scenes.apps.account.assistant.share.all": "Chia sẻ mọi thứ bao gồm cả tin nhắn và nội dung tệp",
|
||||
"scenes.apps.account.assistant.share.metadata": "Chia sẻ siêu dữ liệu nhưng không chia sẻ nội dung",
|
||||
|
||||
@@ -70,14 +70,14 @@
|
||||
"scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "已成功复制到剪贴板",
|
||||
"scenes.app.popup.adduser.magiclinks.action_copy": "复制",
|
||||
"scenes.app.popup.adduser.magiclinks.action_generate": "产生",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "您的应用程序的发布目前正在等待 Twake 团队的验证。",
|
||||
"scenes.app.popup.appsparameters.pages.available_publication_alert": "您的应用程序的发布目前正在等待 Tdrive 团队的验证。",
|
||||
"scenes.app.popup.appsparameters.pages.button_force": "整个公司的力量",
|
||||
"scenes.app.popup.appsparameters.pages.read_privileges_label": "读取权限",
|
||||
"scenes.app.popup.appsparameters.pages.remove_app": "永久删除应用程序 {{$1}}。",
|
||||
"scenes.app.popup.appsparameters.pages.remove_app_from_company": "从整个公司中删除",
|
||||
"scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "从工作区中删除",
|
||||
"scenes.app.popup.appsparameters.pages.string_information": "此字符串标识您的应用程序并将用于消息命令。",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Twakecode 测试员",
|
||||
"scenes.app.popup.appsparameters.pages.title_tester": "Tdrivecode 测试员",
|
||||
"scenes.app.popup.appsparameters.pages.url_reception_events_label": "活动接收网址",
|
||||
"scenes.app.popup.appsparameters.pages.waiting_availability_application": "等待...",
|
||||
"scenes.app.popup.appsparameters.pages.write_privileges_label": "写入权限",
|
||||
@@ -122,14 +122,14 @@
|
||||
"components.drive.right_preview.suppress_link": "取消链接",
|
||||
"components.drive.right_preview.create_link": "创建访问链接",
|
||||
"components.drive.moove_here": "搬来这",
|
||||
"components.verify_mail.paragraph": "如果您愿意,您可以稍后再做,但未经验证的帐户只能访问有限版本的 Twake",
|
||||
"components.verify_mail.paragraph": "如果您愿意,您可以稍后再做,但未经验证的帐户只能访问有限版本的 Tdrive",
|
||||
"services.console_services.toaster.add_email_error_message": "添加 {{$1}} 时出错",
|
||||
"scenes.client.channels_bar.modals.guest_management.input_placeholder": "搜索来宾或待处理的电子邮件",
|
||||
"scenes.client.channels_bar.modals.guest_management.tips": "使用上面的输入开始添加或搜索电子邮件",
|
||||
"components.on_boarding.company_billing_banner.admin_or_owner_text": "您的公司订阅存在问题。请看看你的",
|
||||
"components.on_boarding.company_billing_banner.guest_or_member_text": "您的公司订阅存在问题。请联系公司老板或管理员!",
|
||||
"components.on_boarding.company_billing_banner.link": "公司认购计划",
|
||||
"components.on_boarding.popups.blocked_company.description": "您对 Twake 的订阅已过期。请联系贵公司的老板或管理员进行更新,以便再次与您的团队沟通!",
|
||||
"components.on_boarding.popups.blocked_company.description": "您对 Tdrive 的订阅已过期。请联系贵公司的老板或管理员进行更新,以便再次与您的团队沟通!",
|
||||
"components.on_boarding.popups.blocked_company.learn_more_text": "想了解更多公司订阅计划?",
|
||||
"components.upload.drop_files.toaster.error": "您不能上传超过 {{$1}} 个文件",
|
||||
"components.emoji_picker.categories.frequently_used": "经常使用",
|
||||
@@ -154,7 +154,7 @@
|
||||
"scenes.join.wrong_link_description": "向邀请您加入该公司的人询问新链接或创建您自己的公司",
|
||||
"scenes.join.create_the_company_button": "创建公司",
|
||||
"scenes.join.join_workspace_from_company": "从{{$2}}加入{{$1}}!",
|
||||
"scenes.join.twake_description": "Twake 是一个开源数字工作区,旨在提高您的团队生产力",
|
||||
"scenes.join.twake_description": "Tdrive 是一个开源数字工作区,旨在提高您的团队生产力",
|
||||
"scenes.join.login_first_button": "首先登录或创建一个帐户",
|
||||
"scenes.join.join_the_team_button": "加入团队",
|
||||
"general.unarchive": "取消存档",
|
||||
@@ -212,7 +212,7 @@
|
||||
"scenes.apps.account.account.password_modal.bad_old_password": "旧密码不正确。",
|
||||
"scenes.apps.account.account.password_modal.bad_password": "您的密码不匹配或密码太短。请输入至少 8 个字符的密码。",
|
||||
"scenes.apps.account.account.logout": "登出",
|
||||
"scenes.apps.account.languages.text": "更改 Twake 语言。",
|
||||
"scenes.apps.account.languages.text": "更改 Tdrive 语言。",
|
||||
"scenes.apps.account.notifications.title": "通知",
|
||||
"scenes.apps.account.notifications.keywords_subtitle": "关键词",
|
||||
"scenes.apps.account.notifications.keywords_placeholder": "开发,wifi,代码,...",
|
||||
@@ -245,7 +245,7 @@
|
||||
"scenes.apps.tasks.task.edit.dates": "日期",
|
||||
"scenes.apps.tasks.list_modal.remove_archived_tasks": "删除归档任务 ({{$1}})",
|
||||
"scenes.login.footer.go_to_twake": "去 twakeapp.com",
|
||||
"scenes.login.footer.branding": "您在 {{$1}} ({{$2}}) 私人 Twake 服务器上。 ",
|
||||
"scenes.login.footer.branding": "您在 {{$1}} ({{$2}}) 私人 Tdrive 服务器上。 ",
|
||||
"scenes.login.create_account.title": "创建一个新账户",
|
||||
"scenes.login.create_account.email": "电子邮件",
|
||||
"scenes.login.create_account.email_used": "此电子邮件已被使用。",
|
||||
@@ -255,7 +255,7 @@
|
||||
"scenes.login.create_account.fill_in_email": "您必须使用正确的电子邮件填写您的电子邮件",
|
||||
"scenes.login.create_account.too_short_password": "您的密码必须至少包含 8 个字符。",
|
||||
"scenes.login.create_account.firstname": "名",
|
||||
"scenes.login.create_account.newsletter": "接收有关 Twake 的信息",
|
||||
"scenes.login.create_account.newsletter": "接收有关 Tdrive 的信息",
|
||||
"scenes.login.create_account.lastname": "姓",
|
||||
"scenes.login.forgot_password.title": "忘记密码?",
|
||||
"scenes.login.forgot_password.text": "您将通过电子邮件收到一个 9 位代码以验证您的身份。",
|
||||
@@ -265,7 +265,7 @@
|
||||
"scenes.login.forgot_password.password": "密码",
|
||||
"scenes.login.forgot_password.password2": "确认密码",
|
||||
"scenes.login.forgot_password.password_dont_match": "您的密码不匹配或密码太短。请输入至少 8 个字符的密码。",
|
||||
"scenes.login.home.title": "登录 Twake",
|
||||
"scenes.login.home.title": "登录 Tdrive",
|
||||
"scenes.login.home.subtitle": "高兴看到你",
|
||||
"scenes.login.home.email": "电子邮件",
|
||||
"scenes.login.home.unable_to_connect": "无效证件",
|
||||
@@ -332,7 +332,7 @@
|
||||
"scenes.login.verifymail.signin_button": "登录",
|
||||
"scenes.login.verifymail.success": "您的邮箱已成功验证!",
|
||||
"scenes.login.verifymail.verification_waiting": "等待验证...",
|
||||
"scenes.no_panic": "不要惊慌!只需重新加载此页面即可修复 Twake。",
|
||||
"scenes.no_panic": "不要惊慌!只需重新加载此页面即可修复 Tdrive。",
|
||||
"services.apps.calendar.deadline_icon": "最后期限",
|
||||
"services.apps.calendar.event_icon": "事件",
|
||||
"services.apps.calendar.move_icon": "移动",
|
||||
@@ -369,7 +369,7 @@
|
||||
"scenes.client.channelbar.channelmemberslist.no_members": "此频道中没有用户,您可以通过单击添加用户来邀请他们。",
|
||||
"scenes.app.channelsbar.hide_discussion_leaving.menu": "隐藏讨论",
|
||||
"scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} 电子邮件将被添加",
|
||||
"components.newversion.new_version_component.row.part_1": "您运行的是过时的 Twake 版本",
|
||||
"components.newversion.new_version_component.row.part_1": "您运行的是过时的 Tdrive 版本",
|
||||
"general.re_send": "重发",
|
||||
"components.account_verication_status_blocked": "锁定",
|
||||
"components.unverified_account.re_send_email": "没有收到邮件?",
|
||||
@@ -407,12 +407,12 @@
|
||||
"scenes.app.workspaces.welcome_page.we_sent_you_mail": "我们通过 {{$1}} 向您发送了验证码",
|
||||
"scenes.app.workspaces.welcome_page.done": "我受够了",
|
||||
"scenes.login.forgot_password.finished": "您的密码已成功更新。",
|
||||
"scenes.apps.account.account.description_main": "您的主要地址是 Twake 发送通知的地方。您的辅助地址允许您自动被邀请到使用它们的工作区。",
|
||||
"scenes.apps.account.account.description_main": "您的主要地址是 Tdrive 发送通知的地方。您的辅助地址允许您自动被邀请到使用它们的工作区。",
|
||||
"scenes.apps.account.account.emails.description": "管理您的不同电子邮件地址。",
|
||||
"scenes.apps.account.account.make_main": "设置主要",
|
||||
"scenes.apps.account.account.password.description": "更改您的密码。",
|
||||
"scenes.apps.account.identity": "身份",
|
||||
"scenes.apps.account.identity.description": "更改其他 Twake 用户可见的名字、姓氏和个人资料图片。",
|
||||
"scenes.apps.account.identity.description": "更改其他 Tdrive 用户可见的名字、姓氏和个人资料图片。",
|
||||
"scenes.apps.account.preference": "喜好",
|
||||
"scenes.apps.account.thumbnail.max_weight": "最大大小 5 MB",
|
||||
"scenes.apps.account.account.email_add_modal.confirm": "确认此电子邮件",
|
||||
@@ -420,7 +420,7 @@
|
||||
"general.verify": "核实",
|
||||
"scenes.app.workspaces.create_company.group_data.title": "我们很快——我们只需要一些统计信息。",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_header": "留言号码",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "在 Twake 的免费版本上,您只能访问 {{$1}} 更新的消息。",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_info": "在 Tdrive 的免费版本上,您只能访问 {{$1}} 更新的消息。",
|
||||
"scenes.app.channelsbar.currentuser.company_messages_counter_link": "显示更多计划",
|
||||
"scenes.app.channelsbar.channelsuser.new_private_discussion": "新的私人讨论",
|
||||
"scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "没有私信。邀请用户!",
|
||||
@@ -436,15 +436,15 @@
|
||||
"scenes.app.channelsbar.private_channel_label": "私人的",
|
||||
"scenes.app.channelsbar.sending_message_instruction": "在讨论中发送您的第一条消息",
|
||||
"scenes.app.channelsbar.tutorial_alert": "不再显示此框架?",
|
||||
"scenes.app.channelsbar.welcome": "欢迎来到 Twake",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "只需点击几下即可成为 Twake 专家!",
|
||||
"scenes.app.channelsbar.welcome": "欢迎来到 Tdrive",
|
||||
"scenes.app.channelsbar.welcoming_message_subtitle": "只需点击几下即可成为 Tdrive 专家!",
|
||||
"scenes.app.mainview.instruction_current_tab": "首先选择左侧的频道。",
|
||||
"scenes.app.mainview.tabs.no_connected_connectors_for_channel": "您没有可以连接到通道的连接器。",
|
||||
"scenes.app.mainview.tabs.rename": "改名",
|
||||
"scenes.app.mainview.tabs.searching_connectors": "搜索连接器...",
|
||||
"scenes.app.popup.adduser.adresses_message": "请用逗号或空格分隔地址。请记住,Twake 可以根据您的订阅限制邀请数量。",
|
||||
"scenes.app.popup.adduser.adresses_message": "请用逗号或空格分隔地址。请记住,Tdrive 可以根据您的订阅限制邀请数量。",
|
||||
"scenes.app.popup.appsparameters.pages.amazing_app_name": "我惊人的应用程序",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Twake API 的有用数据。",
|
||||
"scenes.app.popup.appsparameters.pages.api_data_description": "Tdrive API 的有用数据。",
|
||||
"scenes.app.popup.appsparameters.pages.api_parameters_label": "接口设置",
|
||||
"scenes.app.popup.appsparameters.pages.app_name_label": "应用名称",
|
||||
"scenes.app.popup.appsparameters.pages.app_modification_right": "该公司的所有经理都可以编辑此应用程序。",
|
||||
@@ -478,7 +478,7 @@
|
||||
"scenes.app.popup.appsparameters.pages.new_app_title": "新应用",
|
||||
"scenes.app.popup.appsparameters.pages.ok_user_code": "好的",
|
||||
"scenes.app.popup.appsparameters.pages.optimal_format": "最佳格式:48x48px。",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "未发布的应用程序仅适用于您的公司。如果您想让所有 Twake 用户都可以使用它,请激活此选项。",
|
||||
"scenes.app.popup.appsparameters.pages.parameters_form_small_text": "未发布的应用程序仅适用于您的公司。如果您想让所有 Tdrive 用户都可以使用它,请激活此选项。",
|
||||
"scenes.app.popup.appsparameters.pages.public_availability_application": "公开申请",
|
||||
"scenes.app.popup.appsparameters.pages.public_login_label": "公共标识符",
|
||||
"scenes.app.popup.appsparameters.pages.publication_description": "确定应用程序的可见性。",
|
||||
@@ -646,7 +646,7 @@
|
||||
"components.locked_features.locked_history_banner.description": "贵公司有大量留言!立即升级以访问您的所有消息历史记录。",
|
||||
"components.locked_features.locked_history_banner.button": "了解更多",
|
||||
"components.locked_features.locked_guests_popup.title": "访客功能已锁定",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "此功能在 Twake 免费版中不可用",
|
||||
"components.locked_features.locked_guests_popup.subtitle": "此功能在 Tdrive 免费版中不可用",
|
||||
"components.locked_features.locked_guests_popup.description": "哎哟!!似乎您想邀请外部用户加入您的工作区。如果您想与客人和外部合作伙伴协作,您可能需要考虑升级您的计划。探索我们的定价选项并为您的团队协作需求选择最佳选项。",
|
||||
"components.locked_features.locked_guests_popup.learn_more_button": "了解更多",
|
||||
"components.locked_features.locked_guests_popup.skip_for_now_button": "暂时跳过",
|
||||
@@ -668,7 +668,7 @@
|
||||
"general.uploading": "上传",
|
||||
"components.locked_features.locked_workspace_popup.text": "哎哟!!您想在您的公司中创建一个新的工作空间吗?您可能需要考虑升级您的计划。探索我们的定价选项并为您的团队协作需求选择最佳选择。",
|
||||
"components.locked_features.locked_only_office_popup.subtitle": "在免费版本中,您不能使用 onlyoffice。",
|
||||
"components.locked_features.locked_only_office_popup.text": "哎哟!!似乎您想从 Twake 编辑文件。如果您想围绕办公文件进行协作,您可能需要考虑升级您的计划。探索我们的定价选项并为您的团队协作需求选择最佳选项。",
|
||||
"components.locked_features.locked_only_office_popup.text": "哎哟!!似乎您想从 Tdrive 编辑文件。如果您想围绕办公文件进行协作,您可能需要考虑升级您的计划。探索我们的定价选项并为您的团队协作需求选择最佳选项。",
|
||||
"components.locked_features.locked_drive_popup.title": "您刚刚达到驱动器限制",
|
||||
"components.locked_features.locked_drive_popup.subtitle": "在免费版本中,您只能存储 6GB。",
|
||||
"general.pause": "暂停",
|
||||
@@ -758,7 +758,7 @@
|
||||
"scenes.login.verifymail.error_message": "发生错误",
|
||||
"scenes.apps.drive.trash": "垃圾",
|
||||
"scenes.tell_us": "请告诉我们你在做什么:",
|
||||
"scenes.apps.drive.viewer.download_desktop": "下载 Twake Desktop 以在应用程序中进行预览",
|
||||
"scenes.apps.drive.viewer.download_desktop": "下载 Tdrive Desktop 以在应用程序中进行预览",
|
||||
"app.name.twake_drive": "文件",
|
||||
"scenes.login.forgot_password.email_to_recover": "要恢复的电子邮件",
|
||||
"scenes.login.forgot_password.mail_doesnt_exist": "此邮箱不存在",
|
||||
@@ -805,7 +805,7 @@
|
||||
"scenes.apps.messages.messageslist.go_last_message_button.new_messages": "新消息",
|
||||
"scenes.error_on_twake": "“休斯顿,我们有一个问题”",
|
||||
"scenes.help_us": "但是,如果您想帮助我们解决此错误,请在下面给我们发送消息: ",
|
||||
"scenes.apps.account.message_temporary": "临时帐户的工作方式与普通的 Twake 帐户类似,但您创建了密码,并且可以在必要时重置它。",
|
||||
"scenes.apps.account.message_temporary": "临时帐户的工作方式与普通的 Tdrive 帐户类似,但您创建了密码,并且可以在必要时重置它。",
|
||||
"scenes.apps.account.message_user_signin": "您的用户可以随时使用同一电子邮件登录并将临时帐户更改为普通帐户。",
|
||||
"scenes.app.mainview.link_expired": "此公共链接无效或已过期。",
|
||||
"scenes.app.mainview.create_account": "免费创建您的工作区 ",
|
||||
@@ -813,7 +813,7 @@
|
||||
"scenes.apps.parameters.workspace_sections.members.invite_all": "邀请所有人",
|
||||
"components.workspace.list_manager.current_company": "现任公司",
|
||||
"components.workspace.calendar.invalid": "无效的",
|
||||
"components.searchpopup.enter_text": "输入一些文本以搜索 Twake。",
|
||||
"components.searchpopup.enter_text": "输入一些文本以搜索 Tdrive。",
|
||||
"components.reminder.notification": "通知",
|
||||
"components.reminder.minutes_bef": "几分钟前",
|
||||
"components.reminder.hours_bef": "几小时前",
|
||||
@@ -831,12 +831,12 @@
|
||||
"components.unverified_account.verification_details": "我们已将验证详细信息发送至",
|
||||
"components.account_verification_status_sentence": "您的帐户状态是:{{$1}}",
|
||||
"components.account_verication_status_unverified": "未经证实",
|
||||
"components.add_mails_workspace.button": "开始使用 Twake",
|
||||
"components.add_mails_workspace.button": "开始使用 Tdrive",
|
||||
"components.add_mails_workspace.title_1": "添加一些用户",
|
||||
"components.add_mails_workspace.title_2": "Twake 是一个团队协作工具,因此请邀请一些用户来测试我们为您创建的工作区。",
|
||||
"components.add_mails_workspace.title_2": "Tdrive 是一个团队协作工具,因此请邀请一些用户来测试我们为您创建的工作区。",
|
||||
"components.add_mails_workspace.text_area_placeholder": "输入您的用户的电子邮件*",
|
||||
"components.verify_mail.title_1": "恭喜",
|
||||
"components.verify_mail.title_2": "您现在是 Twake 的正式用户!",
|
||||
"components.verify_mail.title_2": "您现在是 Tdrive 的正式用户!",
|
||||
"components.verify_mail.button": "添加用户",
|
||||
"general.user.role.company.member": "成员",
|
||||
"components.on_boarding.popups.blocked_company.or": "或者",
|
||||
@@ -882,11 +882,11 @@
|
||||
"scenes.app.popup.appsparameters.pages.application_creator.checkbox": "我了解该公司的所有者和管理员将能够修改和发布此应用程序。",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed": "成功删除应用程序 {{$1}} !",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "删除应用程序 {{$1}} 时出错!",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Twake API 文档",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_link": "Tdrive API 文档",
|
||||
"scenes.app.popup.appsparameters.pages.application_editor.help_text": "如果您不知道如何填写这些,请访问 ",
|
||||
"scenes.app.popup.appsparameters.pages.app.private_key": "私钥",
|
||||
"components.rich_text_editor.plugins.suggestions.loading": "寻找更多",
|
||||
"components.open_desktop_popup.subtitle": "在 Twake 應用中打開",
|
||||
"components.open_desktop_popup.subtitle": "在 Tdrive 應用中打開",
|
||||
"components.open_desktop_popup.open_here_link": "改為在此處打開",
|
||||
"molecules.download_banner.title": "充分利用 twake,立即下载桌面应用程序",
|
||||
"molecules.download_banner.download_button": "下载桌面应用程序",
|
||||
@@ -933,7 +933,7 @@
|
||||
"scenes.apps.messages.jump": "跳转到消息",
|
||||
"scenes.apps.account.assistant.title": "助手",
|
||||
"scenes.apps.account.on_console": "要编辑您的全局帐户首选项,请单击转到控制台。",
|
||||
"scenes.apps.account.assistant.description": "Twake 助手能够理解您在 Twake 上的日常工作,并在您的一天中提供智能快捷方式和操作。该助手是 Work@Home 倡议 https://workathome.linagora.com/ 的一部分,目前仅在 Linagora 公司进行测试,并处于学习阶段。这意味着我们将发送 Twake 使用数据以训练我们未来的助手功能。",
|
||||
"scenes.apps.account.assistant.description": "Tdrive 助手能够理解您在 Tdrive 上的日常工作,并在您的一天中提供智能快捷方式和操作。该助手是 Work@Home 倡议 https://workathome.linagora.com/ 的一部分,目前仅在 Linagora 公司进行测试,并处于学习阶段。这意味着我们将发送 Tdrive 使用数据以训练我们未来的助手功能。",
|
||||
"scenes.apps.account.assistant.share.nothing": "不与助手分享任何内容(禁用助手)",
|
||||
"scenes.apps.account.assistant.share.all": "共享所有内容,包括消息和文件内容",
|
||||
"scenes.apps.account.assistant.share.metadata": "共享元数据但不共享内容",
|
||||
|
||||
|
Before Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
Before Width: | Height: | Size: 309 B |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 789 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 7.3 KiB |
@@ -0,0 +1,29 @@
|
||||
<svg width="98" height="98" viewBox="0 0 98 98" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<mask id="mask0_1_3" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="98" height="98">
|
||||
<rect width="98" height="98" rx="33.0123" fill="white"/>
|
||||
</mask>
|
||||
<g mask="url(#mask0_1_3)">
|
||||
<g filter="url(#filter0_f_1_3)">
|
||||
<rect x="-55.1076" y="62.0473" width="165.672" height="128.781" transform="rotate(-45 -55.1076 62.0473)" fill="url(#paint0_angular_1_3)"/>
|
||||
</g>
|
||||
</g>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M50.3125 55.9998C50.3125 55.7135 50.3055 55.4274 50.2915 55.1413C50.2774 54.8552 50.2564 54.5695 50.2283 54.2846C50.2001 53.9995 50.1652 53.7153 50.1231 53.4321C50.0812 53.1489 50.0322 52.8666 49.9763 52.5858C49.9205 52.3048 49.8577 52.0256 49.7882 51.7477C49.7186 51.4698 49.6421 51.194 49.5591 50.92C49.4758 50.6459 49.3861 50.374 49.2896 50.1043C49.1931 49.8348 49.0901 49.5674 48.9804 49.303C48.8709 49.0383 48.7549 48.7765 48.6324 48.5176C48.51 48.2587 48.3812 48.0031 48.2462 47.7505C48.1112 47.4978 47.97 47.2488 47.8227 47.0031C47.6755 46.7574 47.5224 46.5156 47.3634 46.2773C47.2041 46.0391 47.0393 45.8052 46.8687 45.5752C46.698 45.3452 46.5219 45.1195 46.3402 44.8981C46.1586 44.6765 45.9716 44.4597 45.7791 44.2477C45.5868 44.0354 45.3895 43.828 45.1869 43.6254C44.9843 43.423 44.7771 43.2255 44.5649 43.0332C44.3527 42.841 44.1359 42.6538 43.9145 42.4721C43.6931 42.2904 43.4674 42.1143 43.2374 41.9437C43.0073 41.7731 42.7732 41.6083 42.535 41.4492C42.2968 41.2899 42.0549 41.1369 41.8093 40.9896C41.5636 40.8423 41.3145 40.7013 41.0619 40.5663C40.8095 40.4311 40.5537 40.3024 40.2948 40.1801C40.0359 40.0577 39.7741 39.9417 39.5096 39.832C39.2449 39.7225 38.9778 39.6192 38.7081 39.5228C38.4383 39.4263 38.1667 39.3365 37.8926 39.2535C37.6185 39.1702 37.3425 39.094 37.0646 39.0244C36.7869 38.9546 36.5076 38.8921 36.2265 38.836C35.9457 38.7802 35.6637 38.7313 35.3802 38.6892C35.097 38.6474 34.8128 38.6122 34.5279 38.5841C34.2428 38.5562 33.9572 38.535 33.6713 38.521C33.3852 38.5068 33.0989 38.4999 32.8125 38.4999C32.5262 38.4999 32.2399 38.5068 31.9538 38.521C31.6678 38.535 31.3823 38.5562 31.0972 38.5841C30.8122 38.6122 30.528 38.6474 30.2448 38.6892C29.9614 38.7313 29.6793 38.7802 29.3985 38.836C29.1175 38.8921 28.8382 38.9546 28.5604 39.0244C28.2825 39.094 28.0066 39.1702 27.7326 39.2535C27.4585 39.3365 27.1866 39.4263 26.917 39.5228C26.6473 39.6192 26.3801 39.7225 26.1155 39.832C25.851 39.9417 25.5892 40.0577 25.3303 40.1801C25.0714 40.3024 24.8157 40.4311 24.5631 40.5663C24.3105 40.7013 24.0614 40.8423 23.8157 40.9896C23.5701 41.1369 23.3282 41.2899 23.09 41.4492C22.8519 41.6083 22.6178 41.7731 22.3878 41.9437C22.1577 42.1143 21.932 42.2904 21.7106 42.4721C21.4892 42.6538 21.2724 42.841 21.0602 43.0332C20.848 43.2255 20.6407 43.423 20.4382 43.6254C20.2356 43.828 20.0382 44.0354 19.8459 44.2477C19.6535 44.4597 19.4665 44.6765 19.2848 44.8981C19.1031 45.1195 18.927 45.3452 18.7564 45.5752C18.5858 45.8052 18.4209 46.0391 18.2618 46.2773C18.1027 46.5156 17.9495 46.7574 17.8023 47.0031C17.655 47.2488 17.5139 47.4978 17.3789 47.7505C17.2439 48.0031 17.1151 48.2587 16.9927 48.5176C16.8702 48.7765 16.7542 49.0383 16.6446 49.303C16.535 49.5674 16.432 49.8348 16.3355 50.1043C16.239 50.374 16.1492 50.6459 16.066 50.92C15.9829 51.194 15.9066 51.4698 15.8369 51.7477C15.7674 52.0256 15.7046 52.3048 15.6487 52.5858C15.5929 52.8666 15.5439 53.1489 15.5019 53.4321C15.4599 53.7153 15.4248 53.9995 15.3968 54.2846C15.3687 54.5695 15.3476 54.8552 15.3336 55.1413C15.3195 55.4274 15.3125 55.7135 15.3125 55.9998C15.3125 56.2862 15.3195 56.5725 15.3336 56.8586C15.3476 57.1447 15.3687 57.4301 15.3968 57.7152C15.4248 58.0001 15.4599 58.2843 15.5019 58.5678C15.5439 58.851 15.5929 59.133 15.6487 59.4141C15.7046 59.6949 15.7674 59.9742 15.8369 60.2521C15.9066 60.5298 15.9829 60.8058 16.066 61.0799C16.1492 61.354 16.239 61.6259 16.3355 61.8954C16.432 62.1651 16.535 62.4322 16.6446 62.6969C16.7542 62.9614 16.8702 63.2232 16.9927 63.4821C17.1151 63.741 17.2439 63.9968 17.3789 64.2494C17.5139 64.5018 17.655 64.7511 17.8023 64.9966C17.9495 65.2422 18.1027 65.4843 18.2618 65.7223C18.4209 65.9605 18.5858 66.1946 18.7564 66.4247C18.927 66.6547 19.1031 66.8804 19.2848 67.1018C19.4665 67.3232 19.6535 67.54 19.8459 67.7522C20.0382 67.9644 20.2356 68.1719 20.4382 68.3742C20.6407 68.5768 20.848 68.7741 21.0602 68.9666C21.2724 69.1589 21.4892 69.3459 21.7106 69.5275C21.932 69.7092 22.1577 69.8854 22.3878 70.056C22.6178 70.2266 22.8519 70.3914 23.09 70.5507C23.3282 70.7097 23.5701 70.863 23.8157 71.01C24.0614 71.1573 24.3105 71.2985 24.5631 71.4335C24.8157 71.5685 25.0714 71.6973 25.3303 71.8197C25.5892 71.9422 25.851 72.0582 26.1155 72.1679C26.3801 72.2774 26.6473 72.3804 26.917 72.4769C27.1866 72.5734 27.4585 72.6631 27.7326 72.7464C28.0066 72.8294 28.2825 72.9059 28.5604 72.9755C28.8382 73.045 29.1175 73.1078 29.3985 73.1636C29.6793 73.2195 29.9614 73.2685 30.2448 73.3104C30.528 73.3525 30.8122 73.3877 31.0972 73.4156C31.3823 73.4437 31.6678 73.4649 31.9538 73.4788C32.2399 73.4928 32.5262 73.5 32.8125 73.5H60.8127V55.9998H50.3125Z" fill="white"/>
|
||||
<path d="M60.8131 73.5C74.3442 73.5 85.3134 62.5311 85.3134 49C85.3134 35.4689 74.3442 24.5 60.8131 24.5C47.2823 24.5 36.3131 35.4689 36.3131 49C36.3131 62.5311 47.2823 73.5 60.8131 73.5Z" fill="white"/>
|
||||
<defs>
|
||||
<filter id="filter0_f_1_3" x="-80.9383" y="-80.9313" width="259.871" height="259.871" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="12.9154" result="effect1_foregroundBlur_1_3"/>
|
||||
</filter>
|
||||
<radialGradient id="paint0_angular_1_3" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(27.7284 126.438) rotate(90) scale(64.3903 82.836)">
|
||||
<stop offset="0.0625" stop-color="#EA4335"/>
|
||||
<stop offset="0.197917" stop-color="#FFC700"/>
|
||||
<stop offset="0.348958" stop-color="#FFD600"/>
|
||||
<stop offset="0.468937" stop-color="#4FB500"/>
|
||||
<stop offset="0.516943" stop-color="#00B066"/>
|
||||
<stop offset="0.583333" stop-color="#0094FF"/>
|
||||
<stop offset="0.786458" stop-color="#A033FF"/>
|
||||
<stop offset="1" stop-color="#FF3B30"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 233 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-calendar"><rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect><line x1="16" y1="2" x2="16" y2="6"></line><line x1="8" y1="2" x2="8" y2="6"></line><line x1="3" y1="10" x2="21" y2="10"></line></svg>
|
||||
|
Before Width: | Height: | Size: 410 B |
|
Before Width: | Height: | Size: 224 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-folder"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg>
|
||||
|
Before Width: | Height: | Size: 311 B |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-check-square"><polyline points="9 11 12 14 22 4"></polyline><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"></path></svg>
|
||||
|
Before Width: | Height: | Size: 345 B |
|
Before Width: | Height: | Size: 267 B |
@@ -4,8 +4,7 @@ import { Router } from 'react-router';
|
||||
import { Switch, Route } from 'react-router-dom';
|
||||
import { RecoilRoot } from 'recoil';
|
||||
|
||||
import MobileRedirect from './views/mobile-redirect';
|
||||
import Integration from 'app/views/integration';
|
||||
import MobileRedirect from './components/mobile-redirect';
|
||||
import RouterServices, { RouteType } from './features/router/services/router-service';
|
||||
import ErrorBoundary from 'app/views/error/error-boundary';
|
||||
import InitService from './features/global/services/init-service';
|
||||
@@ -56,7 +55,6 @@ export default () => {
|
||||
<RecoilRoot>
|
||||
<DebugState />
|
||||
<MobileRedirect>
|
||||
<Integration>
|
||||
<Router history={RouterServices.history}>
|
||||
<Switch>
|
||||
{RouterServices.routes.map((route: RouteType, index: number) => (
|
||||
@@ -90,7 +88,6 @@ export default () => {
|
||||
}
|
||||
</Switch>
|
||||
</Router>
|
||||
</Integration>
|
||||
</MobileRedirect>
|
||||
</RecoilRoot>
|
||||
);
|
||||
|
||||
@@ -15,7 +15,7 @@ interface AvatarProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
||||
nogradient?: boolean;
|
||||
}
|
||||
|
||||
const sizes = { xl: 24, lg: 14, md: 11, sm: 9, xs: 6 };
|
||||
const sizes = { xl: 24, lg: 14, md: 10, sm: 9, xs: 6 };
|
||||
const fontSizes = { xl: '2xl', lg: '2xl', md: 'lg', sm: 'md', xs: 'sm' };
|
||||
|
||||
export const getGradient = (name: string) => {
|
||||
|
||||
@@ -3,7 +3,7 @@ import React from 'react';
|
||||
import _ from 'lodash';
|
||||
|
||||
interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
||||
theme?: 'primary' | 'secondary' | 'danger' | 'default' | 'outline' | 'dark';
|
||||
theme?: 'primary' | 'secondary' | 'danger' | 'default' | 'outline' | 'dark' | 'white';
|
||||
size?: 'md' | 'lg' | 'sm';
|
||||
icon?: (props: any) => JSX.Element;
|
||||
iconSize?: 'md' | 'lg';
|
||||
@@ -19,18 +19,22 @@ export const Button = (props: ButtonProps) => {
|
||||
|
||||
if (props.theme === 'secondary')
|
||||
className =
|
||||
'text-blue-500 bg-blue-100 hover:bg-blue-200 active:bg-blue-300 border-transparent ';
|
||||
'text-blue-500 bg-blue-500 hover:bg-opacity-30 active:bg-opacity-50 bg-opacity-25 border-transparent ';
|
||||
|
||||
if (props.theme === 'danger')
|
||||
className = 'text-white bg-rose-500 hover:bg-rose-600 active:bg-rose-700 border-transparent ';
|
||||
|
||||
if (props.theme === 'default')
|
||||
className =
|
||||
'text-black dark:text-white bg-white dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-gray-50 active:bg-gray-200 border-gray-300';
|
||||
'text-black dark:text-white bg-white dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-zinc-50 active:bg-zinc-200 border-zinc-300';
|
||||
|
||||
if (props.theme === 'white')
|
||||
className =
|
||||
'text-black dark:text-white dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-zinc-50 active:bg-zinc-200 border-transparent';
|
||||
|
||||
if (props.theme === 'outline')
|
||||
className =
|
||||
'text-blue-500 bg-white dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-gray-50 active:bg-gray-200 border-blue-500';
|
||||
'text-blue-500 bg-white dark:bg-zinc-800 dark:hover:bg-zinc-700 dark:active:bg-zinc-900 hover:bg-zinc-50 active:bg-zinc-200 border-blue-500';
|
||||
|
||||
if (props.theme === 'dark')
|
||||
className =
|
||||
@@ -38,12 +42,12 @@ export const Button = (props: ButtonProps) => {
|
||||
|
||||
if (disabled) className += ' opacity-50 pointer-events-none';
|
||||
|
||||
if (props.size === 'lg') className = className + ' text-lg h-11';
|
||||
if (props.size === 'lg') className = className + ' text-lg h-10';
|
||||
else if (props.size === 'sm') className = className + ' text-sm h-7 px-3';
|
||||
else className = className + ' text-base h-9';
|
||||
|
||||
if (!props.children) {
|
||||
if (props.size === 'lg') className = className + ' w-11 !p-0 justify-center';
|
||||
if (props.size === 'lg') className = className + ' w-10 !p-0 justify-center';
|
||||
else if (props.size === 'sm') className = className + ' w-7 !p-0 justify-center';
|
||||
else className = className + ' w-9 !p-0 justify-center';
|
||||
}
|
||||
|
||||
@@ -20,13 +20,13 @@ interface InputProps
|
||||
}
|
||||
|
||||
const baseInputClassName =
|
||||
'tw-input block w-full rounded-md focus:ring-1 focus:ring-blue-500 z-0 focus:z-10 dark:text-white text-black ';
|
||||
'tw-input block w-full rounded-md focus:ring-1 focus:ring-blue-500 z-0 focus:z-10 dark:text-white text-black text-base ';
|
||||
|
||||
export const defaultInputClassName = (theme: 'plain' | 'outline' = 'plain') => {
|
||||
return (
|
||||
baseInputClassName +
|
||||
(theme === 'plain'
|
||||
? 'bg-zinc-200 border-zinc-200 dark:bg-zinc-800 dark:border-zinc-800'
|
||||
? 'bg-zinc-100 border-zinc-100 dark:bg-zinc-800 dark:border-zinc-800'
|
||||
: 'bg-zinc-50 border-zinc-300 dark:bg-zinc-800 dark:border-zinc-700')
|
||||
);
|
||||
};
|
||||
@@ -47,7 +47,7 @@ export const Input = (props: InputProps) => {
|
||||
inputClassName = inputClassName + (props.disabled ? ' opacity-75' : '');
|
||||
|
||||
if (!props.multiline) {
|
||||
if (props.size === 'lg') inputClassName = inputClassName + ' h-11';
|
||||
if (props.size === 'lg') inputClassName = inputClassName + ' h-10 pl-10';
|
||||
else if (props.size === 'sm') inputClassName = inputClassName + ' h-7';
|
||||
else inputClassName = inputClassName + ' h-9';
|
||||
}
|
||||
|
||||
@@ -52,13 +52,13 @@ const Text = (props: TextProps) => {
|
||||
defaultClassName =
|
||||
'text-sm font-normal' +
|
||||
' ' +
|
||||
(props.noColor ? '' : 'text-zinc-400 dark:text-white dark:opacity-50');
|
||||
(props.noColor ? '' : 'text-zinc-500 dark:text-white dark:opacity-50');
|
||||
break;
|
||||
case 'info-small':
|
||||
defaultClassName =
|
||||
'text-xs font-normal' +
|
||||
' ' +
|
||||
(props.noColor ? '' : 'text-zinc-400 dark:text-white dark:opacity-50');
|
||||
(props.noColor ? '' : 'text-zinc-500 dark:text-white dark:opacity-50');
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
import React from 'react';
|
||||
|
||||
import ConfiguratorsManager from 'app/deprecated/Configurators/ConfiguratorsManager.js';
|
||||
import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx';
|
||||
import CloseIcon from '@material-ui/icons/CloseOutlined';
|
||||
import './configurators.scss';
|
||||
import Blocks from '../../views/applications/messages/message/parts/Blocks';
|
||||
|
||||
/*
|
||||
Where the configurators will be displayed, this component should be in app.js (menus should be over all elements of the page)
|
||||
*/
|
||||
export default class ConfigBodyLayer extends React.Component {
|
||||
constructor() {
|
||||
super();
|
||||
this.state = {};
|
||||
ConfiguratorsManager.addListener(this);
|
||||
}
|
||||
componentWillUnmount() {
|
||||
ConfiguratorsManager.removeListener(this);
|
||||
clearTimeout(this.loading_interaction_timeout);
|
||||
}
|
||||
UNSAFE_componentWillMount() {
|
||||
this.generateData();
|
||||
}
|
||||
shouldComponentUpdate(nextProps, nextState) {
|
||||
this.generateData();
|
||||
var string = JSON.stringify(this.configurator);
|
||||
if (string != this.saved) {
|
||||
nextState.loading_interaction = false;
|
||||
clearTimeout(this.loading_interaction_timeout);
|
||||
this.saved = string;
|
||||
return true;
|
||||
}
|
||||
return nextState.loading_interaction ? true : false;
|
||||
}
|
||||
generateData() {
|
||||
if (ConfiguratorsManager.configurator_order.length == 0) {
|
||||
this.configurator = null;
|
||||
}
|
||||
this.configurator =
|
||||
ConfiguratorsManager.currentConfigurators[
|
||||
ConfiguratorsManager.configurator_order[ConfiguratorsManager.configurator_order.length - 1]
|
||||
];
|
||||
}
|
||||
onAction(type, id, context, passives) {
|
||||
if (type == 'interactive_action') {
|
||||
this.setState({ loading_interaction: true });
|
||||
clearTimeout(this.loading_interaction_timeout);
|
||||
this.loading_interaction_timeout = setTimeout(() => {
|
||||
this.setState({ loading_interaction: false });
|
||||
}, 5000);
|
||||
var app_id = this.configurator.app.id;
|
||||
var ntype = 'interactive_configuration_action';
|
||||
var event = id;
|
||||
var data = {
|
||||
interactive_context: context,
|
||||
form: passives,
|
||||
hidden_data: this.configurator.hidden_data,
|
||||
configurator_id: this.configurator.id,
|
||||
};
|
||||
WorkspacesApps.notifyApp(app_id, ntype, event, data);
|
||||
}
|
||||
}
|
||||
render() {
|
||||
if (!this.configurator) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div
|
||||
className={
|
||||
'config_modal fade_in ' + (this.state.loading_interaction ? 'loading_interaction ' : '')
|
||||
}
|
||||
>
|
||||
<div className="modal">
|
||||
<div
|
||||
className="component"
|
||||
style={{
|
||||
height: this.configurator.hidden_data.height || 'auto',
|
||||
width: this.configurator.hidden_data.width || '500px',
|
||||
maxWidth: '90vw',
|
||||
maxHeight: '90vh',
|
||||
}}
|
||||
>
|
||||
<div className="header">
|
||||
<div
|
||||
className="app_logo"
|
||||
style={{
|
||||
backgroundImage: 'url(' + this.configurator.app.identity?.icon + ')',
|
||||
}}
|
||||
/>
|
||||
<div className="app_name">{this.configurator.app.identity?.name}</div>
|
||||
|
||||
<CloseIcon
|
||||
className="m-icon-medium close"
|
||||
onClick={() => {
|
||||
ConfiguratorsManager.closeConfigurator(this.configurator.app);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
<div className="content">
|
||||
<Blocks
|
||||
className="allow_selection"
|
||||
blocks={this.configurator.form}
|
||||
fallback={''}
|
||||
onAction={(type, id, context, passives, evt) =>
|
||||
this.onAction(type, id, context, passives, evt)
|
||||
}
|
||||
allowAdvancedBlocks={true}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
.config_modal {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
position: absolute;
|
||||
z-index: 200;
|
||||
top: 0;
|
||||
|
||||
.modal {
|
||||
width: 0px;
|
||||
height: 0px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
.component {
|
||||
background: white;
|
||||
border-radius: var(--border-radius-base);
|
||||
box-shadow: var(--box-shadow-base);
|
||||
position: relative;
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
transform: translateX(-50%) translateY(-50%);
|
||||
.header {
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #ddd;
|
||||
display: flex;
|
||||
|
||||
.app_logo {
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
background-size: contain;
|
||||
background-position: center;
|
||||
border-radius: var(--border-radius-base);
|
||||
margin-right: 5px;
|
||||
}
|
||||
.app_name {
|
||||
line-height: 30px;
|
||||
flex: auto;
|
||||
}
|
||||
.close {
|
||||
margin: 2px;
|
||||
opacity: 0.5;
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
.content {
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
padding: 15px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,7 @@ import RouterServices from 'app/features/router/services/router-service';
|
||||
import { useCurrentUser } from 'app/features/users/hooks/use-current-user';
|
||||
import workspaceUserRightsService from 'app/features/workspaces/services/workspace-user-rights-service';
|
||||
import Block from 'app/molecules/grouped-rows/base';
|
||||
import { addUrlTryDesktop } from 'app/views/desktop-redirect';
|
||||
import { addUrlTryDesktop } from 'app/components/desktop-redirect';
|
||||
import { useState } from 'react';
|
||||
|
||||
export const ChannelSettingsMenu = (props: {
|
||||
|
||||
@@ -12,17 +12,17 @@ import { useCurrentUser } from 'app/features/users/hooks/use-current-user';
|
||||
const AccountStatusComponent = (): JSX.Element => {
|
||||
const { user } = useCurrentUser();
|
||||
const maxUnverifiedDays =
|
||||
InitService.server_infos?.configuration?.accounts?.console?.max_unverified_days || 7;
|
||||
InitService.server_infos?.configuration?.accounts?.remote?.max_unverified_days || 7;
|
||||
const oneDay = 1000 * 60 * 60 * 24;
|
||||
const periodLimit = (user?.created_at || 0) + maxUnverifiedDays * oneDay;
|
||||
const daysLeft = Math.ceil((periodLimit - Date.now()) / oneDay);
|
||||
|
||||
if (!user || InitService.server_infos?.configuration?.accounts?.type !== 'console') {
|
||||
if (!user || InitService.server_infos?.configuration?.accounts?.type !== 'remote') {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
const showBlockedModal = () => {
|
||||
if (InitService.server_infos?.configuration?.accounts?.type === 'console')
|
||||
if (InitService.server_infos?.configuration?.accounts?.type === 'remote')
|
||||
return ModalManager.open(
|
||||
<BlockedAccount email={user?.email} />,
|
||||
{
|
||||
@@ -34,7 +34,7 @@ const AccountStatusComponent = (): JSX.Element => {
|
||||
};
|
||||
|
||||
const showUnverifiedModal = () => {
|
||||
if (InitService.server_infos?.configuration?.accounts?.type === 'console')
|
||||
if (InitService.server_infos?.configuration?.accounts?.type === 'remote')
|
||||
return ModalManager.open(
|
||||
<UnverifiedAccount daysLeft={daysLeft} limit={maxUnverifiedDays} email={user.email} />,
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@ const CompanyStatusComponent = (): JSX.Element => {
|
||||
const workspace = DepreciatedCollections.get('workspaces').find(workspaceId);
|
||||
|
||||
useEffect(() => {
|
||||
if (InitService.server_infos?.configuration?.accounts?.type === 'console') {
|
||||
if (InitService.server_infos?.configuration?.accounts?.type === 'remote') {
|
||||
isNewAccount();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
import React from 'react';
|
||||
import { useMessage } from 'app/features/messages/hooks/use-message';
|
||||
import useRouterCompany from 'app/features/router/hooks/use-router-company';
|
||||
import MessageQuote from 'app/molecules/message-quote';
|
||||
import { useUser } from 'app/features/users/hooks/use-user';
|
||||
import { useMessageQuoteReply } from 'app/features/messages/hooks/use-message-quote-reply';
|
||||
import useRouterChannel from 'app/features/router/hooks/use-router-channel';
|
||||
import User from 'app/features/users/services/current-user-service';
|
||||
import { gotoMessage } from 'src/utils/messages';
|
||||
import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace';
|
||||
import QuotedContent from 'app/molecules/quoted-content';
|
||||
import { NodeMessage } from 'app/features/messages/types/message';
|
||||
|
||||
type PropsType = {
|
||||
closable?: boolean;
|
||||
onClose?: () => void;
|
||||
};
|
||||
|
||||
export default ({ closable = true, onClose }: PropsType): React.ReactElement => {
|
||||
const companyId = useRouterCompany();
|
||||
const channelId = useRouterChannel();
|
||||
const workspaceId = useRouterWorkspace();
|
||||
const { message: quotedMessageId } = useMessageQuoteReply(channelId);
|
||||
const quotedMessage = useMessage({
|
||||
companyId,
|
||||
threadId: quotedMessageId,
|
||||
id: quotedMessageId,
|
||||
});
|
||||
|
||||
if (!quotedMessage.message) {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
const { message } = quotedMessage;
|
||||
const author = useUser(message.user_id);
|
||||
const authorName = author ? User.getFullName(author) : 'Anonymous';
|
||||
const deleted = message.subtype === 'deleted';
|
||||
|
||||
const quotedContent = (
|
||||
<QuotedContent message={message as unknown as NodeMessage['quote_message']} />
|
||||
);
|
||||
|
||||
return (
|
||||
<MessageQuote
|
||||
className="mx-1"
|
||||
message={quotedContent}
|
||||
author={authorName}
|
||||
closable={closable}
|
||||
onClose={onClose}
|
||||
deleted={deleted}
|
||||
goToMessage={() => gotoMessage(message, companyId, channelId, workspaceId)}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -25,7 +25,7 @@ import { useRecoilValue, useRecoilState } from 'recoil';
|
||||
import { openDriveItem, onDriveItemDownloadClick } from '../common';
|
||||
import ResultContext from './result-context';
|
||||
import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications';
|
||||
import { DriveCurrentFolderAtom } from 'app/views/applications/drive/browser';
|
||||
import { DriveCurrentFolderAtom } from 'app/views/client/body/drive/browser';
|
||||
import { FolderIcon } from '@heroicons/react/solid';
|
||||
|
||||
export default (props: { driveItem: DriveItem & { user?: UserType } }) => {
|
||||
|
||||
@@ -49,6 +49,8 @@ export default class UploadZone extends React.Component<PropsType, StateType> {
|
||||
this.file_input.style.left = '-10000px';
|
||||
this.file_input.style.width = '100px';
|
||||
this.file_input.multiple = this.props.multiple ? true : false;
|
||||
this.file_input.directory = this.props.multiple ? true : false;
|
||||
this.file_input.webkitdirectory = this.props.multiple ? true : false;
|
||||
|
||||
this.setCallback();
|
||||
|
||||
|
||||
@@ -1,26 +1,21 @@
|
||||
import React from 'react';
|
||||
import $ from 'jquery';
|
||||
import Observable from 'app/deprecated/CollectionsV1/observable.js';
|
||||
import popupManager from 'app/deprecated/popupManager/popupManager.js';
|
||||
import PopupManager from 'app/deprecated/popupManager/popupManager.js';
|
||||
import Api from 'app/features/global/framework/api-service';
|
||||
import ws from 'app/deprecated/websocket/websocket.js';
|
||||
import DepreciatedCollections from 'app/deprecated/CollectionsV1/Collections/Collections.js';
|
||||
import Observable from 'app/deprecated/CollectionsV1/observable.js';
|
||||
import { default as popupManager, default as PopupManager } from 'app/deprecated/popupManager/popupManager.js';
|
||||
import ws from 'app/deprecated/websocket/websocket.js';
|
||||
import Groups from 'app/deprecated/workspaces/groups.js';
|
||||
import LocalStorage from 'app/features/global/framework/local-storage-service';
|
||||
import workspacesUsers from 'app/features/workspace-members/services/workspace-members-service';
|
||||
import WindowService from 'app/features/global/utils/window';
|
||||
import workspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx';
|
||||
import RouterServices from 'app/features/router/services/router-service';
|
||||
import NoWorkspaces from 'app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces';
|
||||
import NoCompanies from 'app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies';
|
||||
import loginService from 'app/features/auth/login-service';
|
||||
import Globals from 'app/features/global/services/globals-twake-app-service';
|
||||
import JWTStorage from 'app/features/auth/jwt-storage-service';
|
||||
import loginService from 'app/features/auth/login-service';
|
||||
import ConsoleService from 'app/features/console/services/console-service';
|
||||
import WorkspaceAPIClient from '../../features/workspaces/api/workspace-api-client';
|
||||
import Api from 'app/features/global/framework/api-service';
|
||||
import LocalStorage from 'app/features/global/framework/local-storage-service';
|
||||
import Logger from 'app/features/global/framework/logger-service';
|
||||
import UserAPIClient from 'app/features/users/api/user-api-client';
|
||||
import Globals from 'app/features/global/services/globals-twake-app-service';
|
||||
import WindowService from 'app/features/global/utils/window';
|
||||
import RouterServices from 'app/features/router/services/router-service';
|
||||
import workspacesUsers from 'app/features/workspace-members/services/workspace-members-service';
|
||||
import $ from 'jquery';
|
||||
import WorkspaceAPIClient from '../../features/workspaces/api/workspace-api-client';
|
||||
|
||||
class Workspaces extends Observable {
|
||||
constructor() {
|
||||
@@ -90,7 +85,6 @@ class Workspaces extends Observable {
|
||||
openNoWorkspacesPage() {
|
||||
this.showNoWorkspacesPage = true;
|
||||
this.notify();
|
||||
popupManager.open(<NoWorkspaces />, false, 'no_workspace_parameters');
|
||||
}
|
||||
|
||||
closeNoWorkspacesPage() {
|
||||
@@ -102,7 +96,6 @@ class Workspaces extends Observable {
|
||||
openNoCompaniesPage() {
|
||||
this.showNoCompaniesPage = true;
|
||||
this.notify();
|
||||
popupManager.open(<NoCompanies />, false, 'no_companies_parameters');
|
||||
}
|
||||
|
||||
closeNoCompaniesPage() {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
export type EnvironmentType = {
|
||||
env_dev: boolean;
|
||||
env_dev_auth?: 'internal' | 'console';
|
||||
env_dev_auth?: 'internal' | 'remote';
|
||||
|
||||
api_root_url: string;
|
||||
front_root_url: string;
|
||||
|
||||
@@ -20,7 +20,7 @@ import Application from 'app/features/applications/services/application-service'
|
||||
import LocalStorage from 'app/features/global/framework/local-storage-service';
|
||||
import Globals from 'app/features/global/services/globals-twake-app-service';
|
||||
|
||||
type AccountType = 'console' | 'internal';
|
||||
type AccountType = 'remote' | 'internal';
|
||||
export type LoginState =
|
||||
| ''
|
||||
| 'app'
|
||||
@@ -60,7 +60,7 @@ class AuthService {
|
||||
|
||||
if (Globals.environment.env_dev_auth) accountType = Globals.environment.env_dev_auth;
|
||||
|
||||
if (accountType === 'console') {
|
||||
if (accountType === 'remote') {
|
||||
this.provider = new OIDCAuthProviderService(config as ConsoleConfiguration);
|
||||
} else if (accountType === 'internal') {
|
||||
this.provider = new InternalAuthProviderService(config as InternalConfiguration);
|
||||
|
||||
@@ -14,7 +14,6 @@ import LocalStorage from 'app/features/global/framework/local-storage-service';
|
||||
|
||||
const OIDC_CALLBACK_URL = '/oidccallback';
|
||||
const OIDC_SIGNOUT_URL = '/signout';
|
||||
const OIDC_CLIENT_ID = 'twake';
|
||||
|
||||
@TwakeService('OIDCAuthProvider')
|
||||
export default class OIDCAuthProviderService
|
||||
@@ -45,13 +44,15 @@ export default class OIDCAuthProviderService
|
||||
Oidc.Log.logger = Logger.getLogger('OIDCClient');
|
||||
Oidc.Log.level = EnvironmentService.isProduction() ? Oidc.Log.WARN : Oidc.Log.DEBUG;
|
||||
|
||||
const audience = ['https://dev-mxb6x0f2.eu.auth0.com/api/v2/'];
|
||||
|
||||
this.userManager = new Oidc.UserManager({
|
||||
userStore: new Oidc.WebStorageStateStore({ store: window.localStorage }),
|
||||
authority: this.configuration?.authority || environment.api_root_url,
|
||||
client_id: this.configuration?.client_id || OIDC_CLIENT_ID,
|
||||
client_id: this.configuration?.client_id,
|
||||
redirect_uri: getAsFrontUrl(OIDC_CALLBACK_URL),
|
||||
response_type: 'code',
|
||||
scope: 'openid profile email address phone offline_access',
|
||||
scope: 'openid profile email address phone offline_access ' + audience.join(' '),
|
||||
post_logout_redirect_uri: getAsFrontUrl(OIDC_SIGNOUT_URL),
|
||||
//silent_redirect_uri: getAsFrontUrl(OIDC_SILENT_URL),
|
||||
automaticSilentRenew: true,
|
||||
@@ -236,7 +237,10 @@ export default class OIDCAuthProviderService
|
||||
this.logger.info('getJWTFromOidcToken, user expired');
|
||||
}
|
||||
|
||||
ConsoleService.getNewAccessToken({ access_token: user.access_token }, callback);
|
||||
ConsoleService.getNewAccessToken(
|
||||
{ id_token: user.id_token, access_token: user.access_token },
|
||||
callback,
|
||||
);
|
||||
}
|
||||
|
||||
signinRedirect() {
|
||||
|
||||
@@ -109,7 +109,7 @@ class ConsoleService {
|
||||
* @param callback
|
||||
*/
|
||||
public getNewAccessToken(
|
||||
currentToken: { access_token: string },
|
||||
currentToken: { access_token: string; id_token: string },
|
||||
callback: (err?: Error, access_token?: JWTDataType) => void,
|
||||
): void {
|
||||
this.logger.debug(
|
||||
@@ -117,7 +117,7 @@ class ConsoleService {
|
||||
);
|
||||
Api.post(
|
||||
'/internal/services/console/v1/login',
|
||||
{ remote_access_token: currentToken.access_token },
|
||||
{ oidc_id_token: currentToken.id_token },
|
||||
(response: {
|
||||
access_token: JWTDataType;
|
||||
message: string;
|
||||
|
||||
@@ -13,7 +13,7 @@ prefix.apply(log, {
|
||||
return level.toUpperCase();
|
||||
},
|
||||
nameFormatter(name) {
|
||||
return name || 'Twake';
|
||||
return name || 'Tdrive';
|
||||
},
|
||||
timestampFormatter(date) {
|
||||
return date.toISOString();
|
||||
|
||||
@@ -38,14 +38,15 @@ export type ServerInfoType = null | {
|
||||
help_url: string | null;
|
||||
pricing_plan_url: string | null;
|
||||
app_download_url: string | null;
|
||||
app_grid: { logo: string; name: string; url: string }[];
|
||||
mobile: {
|
||||
mobile_redirect: string;
|
||||
mobile_appstore: string;
|
||||
mobile_googleplay: string;
|
||||
};
|
||||
accounts: {
|
||||
type: 'console' | 'internal';
|
||||
console?: ConsoleConfiguration;
|
||||
type: 'remote' | 'internal';
|
||||
remote?: ConsoleConfiguration;
|
||||
internal?: InternalConfiguration;
|
||||
};
|
||||
};
|
||||
@@ -68,7 +69,7 @@ class InitService extends Observable {
|
||||
companyId = companyId || WorkspaceService.currentGroupId;
|
||||
const identity_provider_id =
|
||||
getCompany(companyId || '')?.identity_provider_id || getCompany(companyId || '')?.id;
|
||||
return (this.server_infos?.configuration?.accounts?.console?.[link] || '').replace(
|
||||
return (this.server_infos?.configuration?.accounts?.remote?.[link] || '').replace(
|
||||
/\{company_id\}/gm,
|
||||
identity_provider_id,
|
||||
);
|
||||
|
||||
@@ -3,7 +3,7 @@ import { capitalize } from 'lodash';
|
||||
import Globals from 'app/features/global/services/globals-twake-app-service';
|
||||
|
||||
class WindowState {
|
||||
public readonly app_name: string = 'Twake';
|
||||
public readonly app_name: string = 'Tdrive';
|
||||
public prefix = '';
|
||||
public suffix = '';
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ import Login from 'app/views/login/login';
|
||||
import Logout from 'app/views/login/logout';
|
||||
import Error from 'app/views/error';
|
||||
import Join from 'app/views/join';
|
||||
import PublicMainView from 'app/views/applications/drive/shared';
|
||||
import PublicMainView from 'app/views/client/body/drive/shared';
|
||||
import Observable from '../../../deprecated/Observable/Observable';
|
||||
import { getWorkspacesByCompany } from 'app/features/workspaces/state/workspace-list';
|
||||
|
||||
|
||||
@@ -30,8 +30,8 @@ export default function Block(props: BlockProps) {
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex">
|
||||
<div className="grow truncate leading-normal text-slate-500 mr-1">
|
||||
<Text.Base className="text-slate-500 dark:text-slate-400">{props.subtitle}</Text.Base>
|
||||
<div className="grow truncate leading-normal text-zinc-500 mr-1">
|
||||
<Text.Base className="text-zinc-500 dark:text-zinc-400">{props.subtitle}</Text.Base>
|
||||
</div>
|
||||
<div className="whitespace-nowrap">{props.subtitle_suffix}</div>
|
||||
</div>
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
import {
|
||||
FileTypeArchiveIcon,
|
||||
FileTypeDocumentIcon,
|
||||
FileTypePdfIcon,
|
||||
FileTypeSlidesIcon,
|
||||
FileTypeSpreadsheetIcon,
|
||||
FileTypeUnknownIcon,
|
||||
} from 'app/atoms/icons-colored';
|
||||
import { Base } from 'app/atoms/text';
|
||||
import fileUploadApiClient from 'app/features/files/api/file-upload-api-client';
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
import { useMessage, useSetMessage } from 'app/features/messages/hooks/use-message';
|
||||
import { NodeMessage } from 'app/features/messages/types/message';
|
||||
import { MessageContext } from 'app/views/applications/messages/message/message-with-replies';
|
||||
import MessageContent from 'app/views/applications/messages/message/parts/MessageContent';
|
||||
import React, { useContext, useEffect } from 'react';
|
||||
|
||||
type PropsType = {
|
||||
message: NodeMessage['quote_message'];
|
||||
};
|
||||
|
||||
export const useQuotedMessage = (
|
||||
message: NodeMessage,
|
||||
context: {
|
||||
companyId: string;
|
||||
workspaceId: string;
|
||||
channelId: string;
|
||||
threadId: string;
|
||||
id: string;
|
||||
},
|
||||
) => {
|
||||
const quotedMessageFromStore = useMessage({
|
||||
...context,
|
||||
threadId: message.quote_message?.thread_id as string,
|
||||
id: message.quote_message?.id as string,
|
||||
}).message;
|
||||
|
||||
const quotedMessage = {
|
||||
...message.quote_message,
|
||||
...(quotedMessageFromStore || message.quote_message),
|
||||
} as NodeMessage['quote_message'];
|
||||
|
||||
const setMessage = useSetMessage(quotedMessage?.company_id || context.companyId);
|
||||
useEffect(() => {
|
||||
if (!quotedMessageFromStore?.id && quotedMessage?.id) {
|
||||
setMessage(quotedMessage);
|
||||
}
|
||||
}, []);
|
||||
|
||||
return quotedMessage;
|
||||
};
|
||||
|
||||
export default ({ message }: PropsType): React.ReactElement => {
|
||||
const context = useContext(MessageContext);
|
||||
|
||||
if (!message) {
|
||||
return <></>;
|
||||
}
|
||||
|
||||
const attachmentType = fileUploadApiClient.mimeToType(message.files?.[0]?.metadata?.mime || '');
|
||||
|
||||
if (context.channelId && message.channel_id !== context.channelId) {
|
||||
return (
|
||||
<>
|
||||
<MessageContext.Provider
|
||||
value={{
|
||||
companyId: message.company_id,
|
||||
workspaceId: message.workspace_id,
|
||||
channelId: message.channel_id,
|
||||
threadId: message.thread_id,
|
||||
id: message.id || message.thread_id,
|
||||
}}
|
||||
>
|
||||
<MessageContent />
|
||||
</MessageContext.Provider>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
{message.text && message.text.length ? (
|
||||
<Base className="!text-sm overflow-hidden whitespace-nowrap text-ellipsis">
|
||||
{message.text}
|
||||
</Base>
|
||||
) : (
|
||||
<div className="mb-1"></div>
|
||||
)}
|
||||
{!!message.files?.length &&
|
||||
(message.files?.length === 1 ? (
|
||||
<div className="flex flex-row align-items items-center mb-1">
|
||||
<>
|
||||
{attachmentType === 'archive' ? (
|
||||
<FileTypeArchiveIcon className="w-5 h-5 mr-1" />
|
||||
) : attachmentType === 'pdf' ? (
|
||||
<FileTypePdfIcon className="w-5 h-5 mr-1" />
|
||||
) : attachmentType === 'document' ? (
|
||||
<FileTypeDocumentIcon className="w-5 h-5 mr-1" />
|
||||
) : attachmentType === 'spreadsheet' ? (
|
||||
<FileTypeSpreadsheetIcon className="w-5 h-5 mr-1" />
|
||||
) : attachmentType === 'slides' ? (
|
||||
<FileTypeSlidesIcon className={'h-5 w-5 mr-1'} />
|
||||
) : (
|
||||
<FileTypeUnknownIcon className="w-5 h-5 mr-1" />
|
||||
)}
|
||||
</>
|
||||
<Base className="!text-sm">{message.files?.[0].metadata?.name}</Base>
|
||||
</div>
|
||||
) : (
|
||||
<div className="flex flex-row align-items items-center mb-1">
|
||||
<FileTypeUnknownIcon className="w-5 h-5 mr-1" />
|
||||
<Base className="!text-sm">
|
||||
{Languages.t('molecules.quoted_content.attachements', [message.files?.length])}
|
||||
</Base>
|
||||
</div>
|
||||
))}
|
||||
</>
|
||||
);
|
||||
};
|
||||
@@ -21,12 +21,14 @@ export default function Tab(props: TabsProps) {
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className={`overflow-auto flex w-100 border-b border-zinc-200 dark:border-zinc-800 transition-all select-none ${props.className}`}>
|
||||
<div
|
||||
className={`overflow-auto flex w-100 border-b border-zinc-200 dark:border-zinc-800 transition-all select-none ${props.className}`}
|
||||
>
|
||||
{props.tabs.map((tab, idx) => {
|
||||
const cl =
|
||||
defaultTabClassName +
|
||||
(idx === props.selected ? activeTabClassName : inactiveTabClassName)
|
||||
+ props.parentClassName;
|
||||
(idx === props.selected ? activeTabClassName : inactiveTabClassName) +
|
||||
props.parentClassName;
|
||||
return (
|
||||
<div key={idx} className={cl} onClick={() => props.onClick(idx)}>
|
||||
{tab}
|
||||
|
||||
@@ -6,7 +6,7 @@ html {
|
||||
color: var(--black);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
background-color: var(--secondary) !important;
|
||||
background-color: #FFF;
|
||||
}
|
||||
|
||||
#root {
|
||||
|
||||
@@ -1,850 +0,0 @@
|
||||
import React, { Component, useState } from 'react';
|
||||
|
||||
import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js';
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
import UserService from 'app/features/users/services/current-user-service';
|
||||
import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js';
|
||||
import LocalStorage from 'app/features/global/framework/local-storage-service';
|
||||
|
||||
import ModalManager from 'app/components/modal/modal-manager';
|
||||
|
||||
import Icon from 'app/components/icon/icon.jsx';
|
||||
import moment from 'moment';
|
||||
import Groups from 'app/deprecated/workspaces/groups.js';
|
||||
import FullCalendar from './full-calendar/full-calendar.jsx';
|
||||
import EventDetails from './modals/EventDetails.jsx';
|
||||
import EventCreation from './modals/EventCreation.jsx';
|
||||
import EventModification from './modals/EventModification.jsx';
|
||||
import CalendarEditor from './modals/CalendarEditor.jsx';
|
||||
import Menu from 'components/menus/menu.jsx';
|
||||
import DayPicker from 'components/calendar/day-picker/day-picker.jsx';
|
||||
import AlertManager from 'app/features/global/services/alert-manager-service';
|
||||
import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.jsx';
|
||||
import WorkspacesService from 'app/deprecated/workspaces/workspaces.jsx';
|
||||
import popupManager from 'app/deprecated/popupManager/popupManager.js';
|
||||
import ConnectorsListManager from 'components/connectors-list-manager/connectors-list-manager.jsx';
|
||||
import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service';
|
||||
import Checkbox from 'app/components/inputs/deprecated_checkbox.jsx';
|
||||
import InputWithClipBoard from 'components/input-with-clip-board/input-with-clip-board.jsx';
|
||||
import Select from 'components/select/select.jsx';
|
||||
import WorkspaceParameter from 'app/views/client/popup/WorkspaceParameter/WorkspaceParameter.jsx';
|
||||
import UnconfiguredTab from './unconfigured-tab.jsx';
|
||||
import RouterService from 'app/features/router/services/router-service';
|
||||
import MainPlus from 'components/main-plus/main-plus.jsx';
|
||||
import {
|
||||
getCompanyApplication as getApplication,
|
||||
getCompanyApplications,
|
||||
} from 'app/features/applications/state/company-applications';
|
||||
|
||||
import './calendar.scss';
|
||||
|
||||
const ExportView = props => {
|
||||
const [export_my_calendar, set_export_my_calendar] = useState(props.values.export_my_calendar);
|
||||
const [export_workspace_calendar, set_export_workspace_calendar] = useState(
|
||||
props.values.export_workspace_calendar,
|
||||
);
|
||||
return (
|
||||
<div style={{ marginTop: -8 }}>
|
||||
<Checkbox
|
||||
label={Languages.t('scenes.apps.calendar.my_calendar_label', [], 'Mon calendrier')}
|
||||
small
|
||||
className=""
|
||||
value={export_my_calendar}
|
||||
onChange={value => {
|
||||
set_export_my_calendar(value);
|
||||
props.onChange(export_my_calendar, export_workspace_calendar);
|
||||
}}
|
||||
/>
|
||||
<Checkbox
|
||||
label={Languages.t('scenes.apps.calendar.workspace_label', [], 'Cet espace de travail')}
|
||||
small
|
||||
className=""
|
||||
value={export_workspace_calendar}
|
||||
onChange={value => {
|
||||
set_export_workspace_calendar(value);
|
||||
props.onChange(export_my_calendar, export_workspace_calendar);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default class Calendar extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
i18n: Languages,
|
||||
view: 'timeGridWeek',
|
||||
filter: 'workspace',
|
||||
preview: null,
|
||||
export_my_calendar: true,
|
||||
export_workspace_calendar: true,
|
||||
new_calendar: {},
|
||||
};
|
||||
CalendarService.filter_mode = this.state.filter;
|
||||
|
||||
this.props = props;
|
||||
const { workspaceId, channelId } = RouterService.getStateFromRoute();
|
||||
|
||||
this.loaded_date_range = {};
|
||||
this.calendar_collection_key = 'calendar_' + workspaceId;
|
||||
|
||||
this.setLoadedRange(
|
||||
'both',
|
||||
moment(CalendarService.date).startOf('month').toDate().getTime() / 1000 - 60 * 60 * 24 * 31,
|
||||
moment(CalendarService.date).startOf('month').toDate().getTime() / 1000 +
|
||||
2 * 60 * 60 * 24 * 31,
|
||||
);
|
||||
|
||||
Collections.get('calendars').addListener(this);
|
||||
Collections.get('calendars').addSource(
|
||||
{
|
||||
http_base_url: 'calendar/calendar',
|
||||
http_options: {
|
||||
channel_id: channelId,
|
||||
workspace_id: workspaceId,
|
||||
},
|
||||
websockets: [
|
||||
{
|
||||
uri: 'calendars/' + workspaceId,
|
||||
options: { type: 'calendar' },
|
||||
},
|
||||
],
|
||||
},
|
||||
this.calendar_collection_key,
|
||||
() => {
|
||||
this.onFirstLoad();
|
||||
},
|
||||
);
|
||||
|
||||
if (Collections.get('calendars').did_load_first_time[this.calendar_collection_key]) {
|
||||
this.onFirstLoad();
|
||||
}
|
||||
|
||||
Collections.get('events').addListener(this);
|
||||
Languages.addListener(this);
|
||||
CalendarService.addListener(this);
|
||||
}
|
||||
onFirstLoad() {
|
||||
const { workspaceId, channelId } = RouterService.getStateFromRoute();
|
||||
var calendar_list = Collections.get('calendars')
|
||||
.findBy({ workspace_id: workspaceId })
|
||||
.map(cal => {
|
||||
return {
|
||||
calendar_id: cal.id,
|
||||
workspace_id: cal.workspace_id,
|
||||
};
|
||||
});
|
||||
if (this.props.tab != null && this.props.tab.configuration.calendars) {
|
||||
this.allowed_ids = this.props.tab.configuration.calendars.map(c => c.calendar_id);
|
||||
calendar_list = calendar_list.filter(c => this.allowed_ids.indexOf(c.calendar_id) >= 0);
|
||||
}
|
||||
Collections.get('events').addSource(
|
||||
{
|
||||
http_base_url: 'calendar/event',
|
||||
http_options: {
|
||||
channel_id: channelId,
|
||||
after_ts:
|
||||
this.loaded_date_range['both'].min || new Date().getTime() / 1000 - 24 * 60 * 60 * 60,
|
||||
before_ts:
|
||||
this.loaded_date_range['both'].max || new Date().getTime() / 1000 + 24 * 60 * 60 * 60,
|
||||
calendar_list: calendar_list,
|
||||
mode: 'both',
|
||||
},
|
||||
websockets: [
|
||||
{
|
||||
uri: 'calendar_events/' + workspaceId,
|
||||
options: { type: 'event' },
|
||||
},
|
||||
{
|
||||
uri: 'calendar_events/user/' + UserService.getCurrentUserId(),
|
||||
options: { type: 'event' },
|
||||
},
|
||||
],
|
||||
},
|
||||
this.calendar_collection_key,
|
||||
);
|
||||
}
|
||||
setLoadedRange(key, min, max) {
|
||||
if (!this.loaded_date_range[key]) {
|
||||
this.loaded_date_range[key] = {};
|
||||
}
|
||||
this.loaded_date_range[key].min = min;
|
||||
this.loaded_date_range[key].max = max;
|
||||
this.loaded_date_range[key].last_updated = new Date();
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const view = LocalStorage.getItem('calendar_view');
|
||||
|
||||
if (view && this.calendar) {
|
||||
this.setState({ view });
|
||||
this.calendar.view(view);
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
Collections.get('events').removeListener(this);
|
||||
Collections.get('events').removeSource(this.calendar_collection_key);
|
||||
|
||||
Collections.get('calendars').removeListener(this);
|
||||
Collections.get('calendars').removeSource(this.calendar_collection_key);
|
||||
|
||||
if (CalendarService.preview) {
|
||||
CalendarService.closePopups();
|
||||
}
|
||||
|
||||
Languages.removeListener(this);
|
||||
CalendarService.removeListener(this);
|
||||
}
|
||||
UNSAFE_componentWillUpdate(nextProps, nextState) {
|
||||
if (nextProps.tab != null && nextProps.tab.configuration.calendars) {
|
||||
this.allowed_ids = nextProps.tab.configuration.calendars.map(c => c.calendar_id);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
var filter = nextState.filter;
|
||||
if (!this.loaded_date_range['both']) {
|
||||
this.loaded_date_range['both'] = {};
|
||||
}
|
||||
var range = this.loaded_date_range['both'];
|
||||
var requested_min =
|
||||
moment(CalendarService.date).startOf('month').toDate().getTime() / 1000 - 60 * 60 * 24 * 31;
|
||||
var requested_max =
|
||||
moment(CalendarService.date).startOf('month').toDate().getTime() / 1000 +
|
||||
2 * 60 * 60 * 24 * 31;
|
||||
if (
|
||||
!range.min ||
|
||||
range.min > requested_min ||
|
||||
range.max < requested_max ||
|
||||
new Date().getTime() - range.last_updated.getTime() > 60000
|
||||
) {
|
||||
this.setLoadedRange('both', requested_min, requested_max);
|
||||
|
||||
var calendar_list = Collections.get('calendars')
|
||||
.findBy({ workspace_id: RouterService.getStateFromRoute().workspaceId })
|
||||
.map(cal => {
|
||||
return {
|
||||
calendar_id: cal.id,
|
||||
workspace_id: cal.workspace_id,
|
||||
};
|
||||
});
|
||||
|
||||
if (this.props.tab != null) {
|
||||
calendar_list = calendar_list.filter(c => this.allowed_ids.indexOf(c.calendar_id) >= 0);
|
||||
}
|
||||
|
||||
Collections.get('events').sourceLoad(
|
||||
this.calendar_collection_key,
|
||||
{
|
||||
after_ts: requested_min,
|
||||
before_ts: requested_max,
|
||||
calendar_list: calendar_list,
|
||||
mode: 'both',
|
||||
},
|
||||
() => {},
|
||||
);
|
||||
}
|
||||
}
|
||||
componentDidUpdate() {
|
||||
if (this.date !== CalendarService.date && this.calendar) {
|
||||
this.calendar.setDate(CalendarService.date, true);
|
||||
this.date = CalendarService.date;
|
||||
}
|
||||
}
|
||||
configureCalendarConnector(app, cal) {
|
||||
var data = {
|
||||
calendar: cal,
|
||||
};
|
||||
WorkspacesApps.notifyApp(app.id, 'configuration', 'calendar', data);
|
||||
}
|
||||
renderCalendarList() {
|
||||
const { workspaceId } = RouterService.getStateFromRoute();
|
||||
var calendars = Collections.get('calendars').findBy({
|
||||
workspace_id: workspaceId,
|
||||
});
|
||||
if (this.props.tab != null) {
|
||||
calendars = calendars.filter(c => this.allowed_ids.indexOf(c.id) >= 0);
|
||||
}
|
||||
|
||||
if (calendars && calendars.length > 0) {
|
||||
var list = [];
|
||||
calendars.forEach(cal => {
|
||||
var el = (
|
||||
<div className="">
|
||||
<div className="calendar_color " style={{ backgroundColor: cal.color }} /> {cal.title}
|
||||
</div>
|
||||
);
|
||||
if (WorkspaceUserRights.hasWorkspacePrivilege()) {
|
||||
list.push({
|
||||
type: 'menu',
|
||||
text: el,
|
||||
submenu: [
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.modify_calendar_menu',
|
||||
[],
|
||||
'Modifier le calendrier',
|
||||
),
|
||||
submenu_replace: true,
|
||||
submenu: [
|
||||
{
|
||||
type: 'title',
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.edit_calendar_title',
|
||||
[],
|
||||
'Éditer le calendrier',
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'react-element',
|
||||
reactElement: level => (
|
||||
<CalendarEditor
|
||||
calendar={Collections.get('calendars').edit(cal)}
|
||||
level={level}
|
||||
collectionKey={this.calendar_collection_key}
|
||||
/>
|
||||
),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'menu',
|
||||
className: 'error',
|
||||
text: Languages.t('general.delete', [], 'Supprimer'),
|
||||
onClick: () => {
|
||||
AlertManager.confirm(
|
||||
() => {
|
||||
Collections.get('calendars').remove(cal, this.calendar_collection_key);
|
||||
},
|
||||
() => {},
|
||||
{
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.remove_calendar_confirmation',
|
||||
[],
|
||||
'Supprimer le calendrier et ses événements définitivement ?',
|
||||
),
|
||||
},
|
||||
);
|
||||
},
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t('scenes.apps.calendar.connectors_menu', [], 'Connecteurs...'),
|
||||
submenu: [
|
||||
{
|
||||
type: 'react-element',
|
||||
reactElement: level => {
|
||||
var apps = getCompanyApplications(Groups.currentGroupId).filter(app => false);
|
||||
if (apps.length > 0) {
|
||||
return (
|
||||
<ConnectorsListManager
|
||||
list={apps}
|
||||
current={(cal.connectors || [])
|
||||
.map(id => getApplication(id))
|
||||
.filter(item => item)}
|
||||
configurable={item =>
|
||||
((item.display || {}).configuration || {}).can_configure_in_calendar
|
||||
}
|
||||
onChange={ids => {
|
||||
cal.connectors = ids;
|
||||
Collections.get('calendars').save(cal, this.calendar_collection_key);
|
||||
}}
|
||||
onConfig={app => {
|
||||
this.configureCalendarConnector(app, cal);
|
||||
}}
|
||||
/>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<div className="menu-text" style={{ margin: 0, padding: 0 }}>
|
||||
{Languages.t(
|
||||
'scenes.apps.calendar.no_connectors_menu_text',
|
||||
[],
|
||||
"Vous n'avez aucun connecteur capable de se connecter à un calendrier.",
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
},
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.connectors_search_menu',
|
||||
[],
|
||||
'Chercher des connecteurs...',
|
||||
),
|
||||
onClick: () => {
|
||||
popupManager.open(
|
||||
<WorkspaceParameter initial_page={3} options={'open_search_apps'} />,
|
||||
true,
|
||||
'workspace_parameters',
|
||||
);
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
});
|
||||
} else {
|
||||
list.push({ type: 'menu', text: el });
|
||||
}
|
||||
});
|
||||
return list;
|
||||
} else {
|
||||
return [
|
||||
{
|
||||
type: 'text',
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.no_calendar_text',
|
||||
[],
|
||||
"Vous n'avez défini aucun calendrier pour cet espace de travail.",
|
||||
),
|
||||
},
|
||||
];
|
||||
}
|
||||
}
|
||||
export(download) {
|
||||
if (!this.state.export_my_calendar && !this.state.export_workspace_calendar) {
|
||||
return;
|
||||
}
|
||||
var mode = 'mine';
|
||||
var calendar_list = [];
|
||||
if (this.state.export_my_calendar && this.state.export_workspace_calendar) {
|
||||
mode = 'both';
|
||||
} else if (this.state.export_workspace_calendar) {
|
||||
mode = 'workspace';
|
||||
}
|
||||
|
||||
if (mode === 'both' || mode === 'workspace') {
|
||||
calendar_list = Collections.get('calendars')
|
||||
.findBy({ workspace_id: RouterService.getStateFromRoute().workspaceId })
|
||||
.map(cal => {
|
||||
return {
|
||||
calendar_id: cal.id,
|
||||
workspace_id: cal.workspace_id,
|
||||
};
|
||||
});
|
||||
if (this.props.tab != null) {
|
||||
calendar_list = calendar_list.filter(c => this.allowed_ids.indexOf(c.calendar_id) >= 0);
|
||||
}
|
||||
}
|
||||
|
||||
CalendarService.export(
|
||||
WorkspacesService.currentWorkspaceId,
|
||||
{ mode: mode, calendar_list: calendar_list },
|
||||
download,
|
||||
token => {
|
||||
if (!download) {
|
||||
AlertManager.alert(() => {}, { text: <InputWithClipBoard value={token} /> });
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
completeRect(rect) {
|
||||
rect.x = rect.x || rect.left;
|
||||
rect.y = rect.y || rect.top;
|
||||
return rect;
|
||||
}
|
||||
render() {
|
||||
const { workspaceId } = RouterService.getStateFromRoute();
|
||||
if (
|
||||
this.props.tab != null &&
|
||||
(!this.props.tab.configuration || this.props.tab.configuration.calendars === undefined)
|
||||
) {
|
||||
return (
|
||||
<UnconfiguredTab
|
||||
saveTab={this.props.saveTab}
|
||||
channel={this.props.channel}
|
||||
tab={this.props.tab}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
var calendars = Collections.get('calendars')
|
||||
.findBy({ workspace_id: workspaceId })
|
||||
.map(cal => cal.id);
|
||||
|
||||
if (this.props.tab != null) {
|
||||
calendars = calendars.filter(c => this.allowed_ids.indexOf(c) >= 0);
|
||||
}
|
||||
|
||||
var events = Collections.get('events')
|
||||
.findBy({})
|
||||
.filter(event => {
|
||||
if (!event.id) {
|
||||
return true;
|
||||
}
|
||||
event._user_transparent = false;
|
||||
|
||||
var not_mine =
|
||||
(event.participants || []).filter(
|
||||
part => part.user_id_or_mail === UserService.getCurrentUserId(),
|
||||
).length === 0;
|
||||
if (this.state.filter === 'mine') {
|
||||
if (not_mine) {
|
||||
event._user_transparent = true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (this.state.filter === 'workspace' || this.state.filter === 'custom') {
|
||||
//Not in this workspace
|
||||
if (
|
||||
event.workspaces_calendars.filter(part => calendars.indexOf(part.calendar_id) >= 0)
|
||||
.length === 0
|
||||
) {
|
||||
if (!not_mine) {
|
||||
//Set transparent event
|
||||
event._user_transparent = true;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
if (
|
||||
CalendarService.edited &&
|
||||
CalendarService.edited.from &&
|
||||
CalendarService.edited.from !== this.lastEditedFrom
|
||||
) {
|
||||
this.lastEditedFrom = CalendarService.edited.from;
|
||||
this.calendar.setDate(new Date(CalendarService.edited.from * 1000), true);
|
||||
|
||||
if (!CalendarService.edited.id) {
|
||||
setTimeout(() => {
|
||||
var htmlEl = this.calendar.getDomElement(CalendarService.edited);
|
||||
if (htmlEl) {
|
||||
ModalManager.updateHighlight(this.completeRect(window.getBoundingClientRect(htmlEl)));
|
||||
}
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
|
||||
var calendar_menu = [
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t('scenes.apps.calendar.my_calendar_menu', [], 'Mon calendrier'),
|
||||
onClick: () => {
|
||||
this.setState({ filter: 'mine' });
|
||||
CalendarService.filter_mode = 'mine';
|
||||
Menu.closeAll();
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t('scenes.apps.calendar.workspace_menu', [], 'Espace de travail'),
|
||||
onClick: () => {
|
||||
this.setState({ filter: 'workspace' });
|
||||
CalendarService.filter_mode = 'workspace';
|
||||
Menu.closeAll();
|
||||
},
|
||||
},
|
||||
/*{type:"menu", text:"Personnaliser...", onClick: ()=>{
|
||||
|
||||
}},*/
|
||||
{ type: 'separator' },
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t('scenes.apps.calendar.export_view_menu', [], 'Exporter la vue'),
|
||||
submenu: [
|
||||
{ type: 'title', text: Languages.t('scenes.apps.calendar.export_title', [], 'Exporter') },
|
||||
{
|
||||
type: 'react-element',
|
||||
reactElement: () => {
|
||||
return (
|
||||
<ExportView
|
||||
values={this.state}
|
||||
onChange={(my, ws) => {
|
||||
this.setState({
|
||||
export_my_calendar: my,
|
||||
export_workspace_calendar: ws,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.ics_subscription_menu',
|
||||
[],
|
||||
"Obtenir un lien d'abonnement ICS",
|
||||
),
|
||||
onClick: () => {
|
||||
this.export(false);
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.ics_download_menu',
|
||||
[],
|
||||
'Télécharger un fichier ICS',
|
||||
),
|
||||
onClick: () => {
|
||||
this.export(true);
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
{ type: 'separator' },
|
||||
];
|
||||
|
||||
calendar_menu = calendar_menu.concat(this.renderCalendarList());
|
||||
|
||||
if (this.props.tab === null && WorkspaceUserRights.hasWorkspacePrivilege()) {
|
||||
calendar_menu = calendar_menu.concat([
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.add_calendar_menu',
|
||||
[],
|
||||
'Ajouter un calendrier...',
|
||||
),
|
||||
submenu_replace: true,
|
||||
submenu: [
|
||||
{
|
||||
type: 'title',
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.create_calendar_title',
|
||||
[],
|
||||
'Créer un calendrier',
|
||||
),
|
||||
},
|
||||
{
|
||||
type: 'react-element',
|
||||
reactElement: level => {
|
||||
return (
|
||||
<CalendarEditor level={level} collectionKey={this.calendar_collection_key} />
|
||||
);
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
var list = [];
|
||||
|
||||
list.push(
|
||||
<div className="calendar_app">
|
||||
<div className="calendar_header">
|
||||
<div className="left">
|
||||
<Menu
|
||||
className="select medium"
|
||||
style={{ width: 'auto' }}
|
||||
position="bottom"
|
||||
menu={calendar_menu}
|
||||
>
|
||||
{
|
||||
{
|
||||
mine: Languages.t('scenes.apps.calendar.my_calendar', [], 'Mon calendrier'),
|
||||
workspace: Languages.t('scenes.apps.calendar.workspace', [], 'Espace de travail'),
|
||||
}[this.state.filter]
|
||||
}
|
||||
</Menu>
|
||||
</div>
|
||||
|
||||
<div className="right">
|
||||
{this.state.view !== 'dayGridMonth' && (
|
||||
<div className="week_number">
|
||||
{Languages.t('scenes.apps.calendar.calendar.week_btn', [], 'Semaine')}{' '}
|
||||
{moment(CalendarService.date).week()}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<Menu
|
||||
className={'current_date ' + moment(CalendarService.date).format('DD-MM-YYYY')}
|
||||
position="bottom"
|
||||
menu={[
|
||||
{
|
||||
type: 'menu',
|
||||
text: Languages.t('scenes.apps.calendar.today_menu', [], "Aujourd'hui"),
|
||||
onClick: () => this.calendar.today(),
|
||||
},
|
||||
{ type: 'separator' },
|
||||
{
|
||||
type: 'react-element',
|
||||
reactElement: () => (
|
||||
<div style={{ padding: '4px 8px' }}>
|
||||
<DayPicker
|
||||
value={moment(CalendarService.date)}
|
||||
onChange={value => {
|
||||
this.calendar.setDate(value);
|
||||
Menu.closeAll();
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
),
|
||||
},
|
||||
]}
|
||||
>
|
||||
{CalendarService.date &&
|
||||
(this.state.view === 'dayGridMonth' ||
|
||||
this.state.view === 'timeGridWeek' ||
|
||||
this.state.view === 'listYear') &&
|
||||
moment(CalendarService.date).format('MMMM YYYY')}
|
||||
{CalendarService.date &&
|
||||
this.state.view === 'timeGridDay' &&
|
||||
moment(CalendarService.date).format('LL')}
|
||||
</Menu>
|
||||
|
||||
<div className="move">
|
||||
<Icon
|
||||
className="m-icon-small left"
|
||||
type="arrow-left"
|
||||
onClick={() => this.calendar.previous()}
|
||||
/>
|
||||
<Icon
|
||||
className="m-icon-small right"
|
||||
type="arrow-right"
|
||||
onClick={() => this.calendar.next()}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="view_selector">
|
||||
<Select
|
||||
medium
|
||||
style={{ width: 'auto' }}
|
||||
value={this.state.view}
|
||||
onChange={value => {
|
||||
this.calendar.view(value);
|
||||
LocalStorage.setItem('calendar_view', value);
|
||||
Menu.closeAll();
|
||||
}}
|
||||
options={[
|
||||
{
|
||||
value: 'dayGridMonth',
|
||||
text: Languages.t('scenes.apps.calendar.month_option', [], 'Mois'),
|
||||
},
|
||||
{
|
||||
value: 'timeGridWeek',
|
||||
text: Languages.t('scenes.apps.calendar.week_option', [], 'Semaine'),
|
||||
},
|
||||
{
|
||||
value: 'timeGridDay',
|
||||
text: Languages.t('scenes.apps.calendar.day_option', [], 'Jour'),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<FullCalendar
|
||||
i18n={Languages.language}
|
||||
ref={node => (this.calendar = node)}
|
||||
onViewChange={view => this.setState({ view: view })}
|
||||
onDateChange={date => {
|
||||
CalendarService.date = date;
|
||||
CalendarService.notify();
|
||||
}}
|
||||
date={CalendarService.date}
|
||||
onCreate={_event => {
|
||||
CalendarService.edit(_event);
|
||||
CalendarService.fullSizeModal = false;
|
||||
|
||||
setTimeout(() => {
|
||||
var htmlEl = this.calendar.getDomElement(CalendarService.edited);
|
||||
ModalManager.open(
|
||||
<EventCreation
|
||||
event={CalendarService.edited}
|
||||
collectionKey={this.calendar_collection_key}
|
||||
/>,
|
||||
{
|
||||
highlight: htmlEl
|
||||
? this.completeRect(window.getBoundingClientRect(htmlEl))
|
||||
: null,
|
||||
position: 'left',
|
||||
margin: 5,
|
||||
no_background: true,
|
||||
size: { width: 440 },
|
||||
},
|
||||
);
|
||||
}, 100);
|
||||
}}
|
||||
onUpdate={(event, htmlEl) => {
|
||||
//Collections.get("events").updateObject(event);
|
||||
if (event.id) {
|
||||
CalendarService.save(event, this.calendar_collection_key);
|
||||
}
|
||||
if (
|
||||
!CalendarService.fullSizeModal &&
|
||||
CalendarService.preview &&
|
||||
CalendarService.preview.front_id === event.front_id
|
||||
) {
|
||||
var updated = CalendarService.preview;
|
||||
setTimeout(() => {
|
||||
var e = this.calendar.getDomElement(updated);
|
||||
e &&
|
||||
ModalManager.updateHighlight(this.completeRect(window.getBoundingClientRect(e)));
|
||||
}, 100);
|
||||
}
|
||||
}}
|
||||
onClickOut={() => {
|
||||
CalendarService.closePopups();
|
||||
}}
|
||||
onClickEvent={(event, jsEvent) => {
|
||||
jsEvent.stopPropagation();
|
||||
jsEvent.preventDefault();
|
||||
if (
|
||||
!ModalManager.isOpen() ||
|
||||
!CalendarService.preview ||
|
||||
CalendarService.preview.front_id !== event.front_id
|
||||
) {
|
||||
CalendarService.fullSizeModal = false;
|
||||
CalendarService.startPreview(event);
|
||||
setTimeout(() => {
|
||||
var htmlEl = this.calendar.getDomElement(CalendarService.preview);
|
||||
ModalManager.open(
|
||||
<EventDetails event={event} collectionKey={this.calendar_collection_key} />,
|
||||
{
|
||||
highlight: htmlEl
|
||||
? this.completeRect(window.getBoundingClientRect(htmlEl))
|
||||
: null,
|
||||
position: 'left',
|
||||
margin: 5,
|
||||
no_background: true,
|
||||
size: { width: 440 },
|
||||
},
|
||||
);
|
||||
}, 100);
|
||||
}
|
||||
}}
|
||||
events={events}
|
||||
getCalendar={id => Collections.get('calendars').find(id)}
|
||||
/>
|
||||
|
||||
<MainPlus
|
||||
onClick={() => {
|
||||
CalendarService.fullSizeModal = true;
|
||||
CalendarService.edit({
|
||||
from: new Date().getTime() / 1000,
|
||||
to: new Date().getTime() / 1000 + 60 * 60,
|
||||
});
|
||||
setTimeout(() => {
|
||||
ModalManager.open(
|
||||
<EventModification
|
||||
event={CalendarService.edited}
|
||||
collectionKey={this.calendar_collection_key}
|
||||
/>,
|
||||
{ size: { width: 600 } },
|
||||
);
|
||||
}, 100);
|
||||
}}
|
||||
/>
|
||||
</div>,
|
||||
);
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
.calendar_app {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
left: 0;
|
||||
right: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.menu {
|
||||
.calendar_color {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
border-radius: 6px;
|
||||
margin: 10px 0;
|
||||
margin-right: 5px;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
|
||||
.calendar_header {
|
||||
display: flex;
|
||||
padding: 16px;
|
||||
|
||||
.left {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.right {
|
||||
& > div {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.current_date {
|
||||
height: 38px;
|
||||
line-height: 38px;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.move {
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
|
||||
.m-icon-small {
|
||||
font-size: 24px !important;
|
||||
vertical-align: middle;
|
||||
margin-top: -4px;
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.week_number {
|
||||
color: var(--white);
|
||||
background: var(--grey-dark);
|
||||
border-radius: var(--border-radius-base);
|
||||
padding: 1px 4px;
|
||||
font-size: 12px;
|
||||
vertical-align: middle;
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.unconfigured_tab {
|
||||
width: 100%;
|
||||
max-width: 400px;
|
||||
text-align: center;
|
||||
margin: auto;
|
||||
margin-top: 10vh;
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import React from 'react';
|
||||
import { ViewConfiguration } from '../../../features/router/services/app-view-service';
|
||||
import { useTab } from '../../../features/tabs/hooks/use-tabs';
|
||||
import CalendarContent from './calendar-content';
|
||||
|
||||
type Props = {
|
||||
options: ViewConfiguration;
|
||||
};
|
||||
|
||||
export default (props: Props) => {
|
||||
const tabId = props.options?.context?.tabId;
|
||||
const { tab, save } = useTab(tabId);
|
||||
|
||||
return (
|
||||
<CalendarContent
|
||||
options={props.options}
|
||||
tab={tab}
|
||||
saveTab={(configuration: any) => {
|
||||
save({ ...tab, configuration });
|
||||
}}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -1,11 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
export default class Event extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
render() {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
@@ -1,377 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
import ReactDOMServer from 'react-dom/server';
|
||||
|
||||
import '@fullcalendar/core';
|
||||
import '@fullcalendar/core/main.css';
|
||||
|
||||
import dayGridPlugin from '@fullcalendar/daygrid';
|
||||
import timeGridPlugin from '@fullcalendar/timegrid';
|
||||
import momentPlugin from '@fullcalendar/moment';
|
||||
import momentTimezonePlugin from '@fullcalendar/moment-timezone';
|
||||
import interactionPlugin from '@fullcalendar/interaction';
|
||||
import listPlugin from '@fullcalendar/list';
|
||||
import FullCalendarPlugin from '@fullcalendar/react';
|
||||
|
||||
import '@fullcalendar/daygrid/main.css';
|
||||
import '@fullcalendar/timegrid/main.css';
|
||||
import '@fullcalendar/list/main.css';
|
||||
import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js';
|
||||
import EventUI from 'components/calendar/event/event.jsx';
|
||||
import WorkspaceService from 'app/deprecated/workspaces/workspaces.jsx';
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
|
||||
import moment from 'moment';
|
||||
|
||||
import './full-calendar.scss';
|
||||
|
||||
export default class FullCalendar extends Component {
|
||||
constructor() {
|
||||
super();
|
||||
this.calendarRef = null;
|
||||
window.react_calendar = this;
|
||||
this.event_dom_elements = {};
|
||||
this.eventsById = {};
|
||||
|
||||
this.clickOut = this.clickOut.bind(this);
|
||||
}
|
||||
|
||||
getDomElement(event) {
|
||||
return this.event_dom_elements[event.front_id];
|
||||
}
|
||||
|
||||
UNSAFE_componentWillMount() {
|
||||
var that = this;
|
||||
var scrollTime = moment().format('HH') + ':00:00';
|
||||
this.options = {
|
||||
defaultDate: this.props.date || new Date(),
|
||||
header: false,
|
||||
timezone: 'local',
|
||||
height: 'parent',
|
||||
locale: this.props.i18n,
|
||||
nowIndicator: true,
|
||||
scrollTime: scrollTime,
|
||||
firstHour: new Date().getUTCHours() - 5,
|
||||
allDaySlot: true,
|
||||
editable: true,
|
||||
selectable: true,
|
||||
selectHelper: true,
|
||||
firstDay: moment().startOf('week').isoWeekday(),
|
||||
slotDuration: '00:30:00',
|
||||
snapDuration: '00:15:00',
|
||||
columnHeaderHtml: mom => {
|
||||
return ReactDOMServer.renderToString(
|
||||
<div className="">
|
||||
<div className="number">{moment(mom).format('D')}</div>
|
||||
<div className="day">{moment(mom).format('ddd')}</div>
|
||||
</div>,
|
||||
);
|
||||
},
|
||||
|
||||
eventAllow: function (dropLocation, draggedEvent) {
|
||||
// if(!that.state.calendar.calendars[draggedEvent.calendar]){
|
||||
// return false;
|
||||
// }
|
||||
return true;
|
||||
},
|
||||
select: function (event) {
|
||||
that.cancelClickOut = true;
|
||||
|
||||
//Create event
|
||||
if (moment(event.end).diff(event.start) === 15 * 60 * 1000) {
|
||||
that.api.unselect();
|
||||
that.props.onClickOut && that.props.onClickOut();
|
||||
return false;
|
||||
}
|
||||
if (that.props.onCreate) {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
var created_event = that.props.onCreate(
|
||||
that.fcToCollection(event),
|
||||
that.event_dom_elements[event.id],
|
||||
);
|
||||
}
|
||||
if (that.props.onUpdate) {
|
||||
that.props.onUpdate(that.fcToCollection(event), that.event_dom_elements[event.id]);
|
||||
}
|
||||
},
|
||||
eventResize: function (event) {
|
||||
event = event.event;
|
||||
if (that.props.onUpdate) {
|
||||
that.props.onUpdate(that.fcToCollection(event), that.event_dom_elements[event.id]);
|
||||
}
|
||||
},
|
||||
eventDrop: function (event) {
|
||||
event = event.event;
|
||||
if (that.props.onUpdate) {
|
||||
that.props.onUpdate(that.fcToCollection(event), that.event_dom_elements[event.id]);
|
||||
}
|
||||
},
|
||||
eventClick: function (_event) {
|
||||
if (this.disableUpdate) {
|
||||
this.disableUpdate = false;
|
||||
this.refreshEvent();
|
||||
}
|
||||
|
||||
var event = _event.event;
|
||||
|
||||
if (that.props.onClickEvent) {
|
||||
that.props.onClickEvent(that.fcToCollection(event), _event.jsEvent, _event.el);
|
||||
}
|
||||
|
||||
//if(!event.private_content){ViewsServiceImpl.open();that.state.calendar.selectEvent(event);}
|
||||
},
|
||||
eventRender: function (event) {
|
||||
if (event.event && event.event.id && event.isStart && !event.isMirror) {
|
||||
that.event_dom_elements[event.event.id] = event.el;
|
||||
}
|
||||
var col_event = that.eventsById[event.event.id];
|
||||
|
||||
if (col_event._user_transparent) {
|
||||
event.el.classList.add('transparent');
|
||||
} else {
|
||||
event.el.classList.remove('transparent');
|
||||
}
|
||||
|
||||
var color = '';
|
||||
if (col_event.workspaces_calendars && col_event.workspaces_calendars[0]) {
|
||||
var calendar = null;
|
||||
(col_event.workspaces_calendars || []).some(cal => {
|
||||
var calendar_id = cal.calendar_id;
|
||||
if (calendar_id && that.props.getCalendar) {
|
||||
var tmp = that.props.getCalendar(calendar_id);
|
||||
if (tmp && tmp.workspace_id === WorkspaceService.currentWorkspaceId) {
|
||||
calendar = tmp;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
color = calendar ? calendar.color : '#92929C';
|
||||
}
|
||||
|
||||
if (color) {
|
||||
event.el.style.backgroundColor = color;
|
||||
}
|
||||
|
||||
if (col_event.type === 'deadline' || col_event.type === 'remind') {
|
||||
event.el.classList.add('not_resizable');
|
||||
}
|
||||
|
||||
event.el.firstChild.innerHTML = ReactDOMServer.renderToString(
|
||||
<EventUI event={col_event} getColor={cal_id => color || 'var(--primary)'} />,
|
||||
);
|
||||
},
|
||||
eventResizeStart: () => {
|
||||
that.cancelClickOut = true;
|
||||
this.disableUpdate = true;
|
||||
},
|
||||
eventDragStart: () => {
|
||||
that.cancelClickOut = true;
|
||||
this.disableUpdate = true;
|
||||
},
|
||||
eventResizeStop: () => {
|
||||
that.cancelClickOut = false;
|
||||
this.disableUpdate = false;
|
||||
if (this.missedRefresh) {
|
||||
this.refreshEvent();
|
||||
}
|
||||
},
|
||||
eventDragStop: () => {
|
||||
that.cancelClickOut = false;
|
||||
this.disableUpdate = false;
|
||||
if (this.missedRefresh) {
|
||||
this.refreshEvent();
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
var page = window.document.getElementsByClassName('appPage')[0];
|
||||
if (page) {
|
||||
page.removeEventListener('click', this.clickOut);
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
var page = window.document.getElementsByClassName('appPage')[0];
|
||||
if (page) {
|
||||
page.addEventListener('click', this.clickOut);
|
||||
}
|
||||
|
||||
if (this.calendarRef) {
|
||||
this.api = this.calendarRef.getApi();
|
||||
}
|
||||
this.refreshEvent();
|
||||
|
||||
window.dispatchEvent(new Event('resize'));
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
this.refreshEvent();
|
||||
}
|
||||
|
||||
clickOut() {
|
||||
if (this.cancelClickOut) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.props.onClickOut && this.props.onClickOut();
|
||||
}
|
||||
|
||||
refreshEvent() {
|
||||
if (this.disableUpdate) {
|
||||
this.missedRefresh = true;
|
||||
return;
|
||||
}
|
||||
|
||||
this.missedRefresh = false;
|
||||
|
||||
var events = this.props.events.map(event => this.collectionToFc(event));
|
||||
//Monkey fix for events not appearing randomly
|
||||
this.api.removeAllEvents();
|
||||
this.api.addEventSource(events);
|
||||
this.api.rerenderEvents();
|
||||
}
|
||||
|
||||
previous() {
|
||||
this.willChangeView(false);
|
||||
this.api.prev();
|
||||
this.props.onDateChange && this.props.onDateChange(this.api.getDate());
|
||||
}
|
||||
|
||||
next() {
|
||||
this.willChangeView(true);
|
||||
this.api.next();
|
||||
this.props.onDateChange && this.props.onDateChange(this.api.getDate());
|
||||
}
|
||||
|
||||
today() {
|
||||
this.willChangeView();
|
||||
this.api.today();
|
||||
this.props.onDateChange && this.props.onDateChange(this.api.getDate());
|
||||
}
|
||||
|
||||
setDate(date, disableAnimation) {
|
||||
if (!disableAnimation) {
|
||||
this.willChangeView();
|
||||
}
|
||||
this.api.gotoDate(moment(date).toDate());
|
||||
this.props.onDateChange && this.props.onDateChange(moment(date).toDate());
|
||||
}
|
||||
|
||||
view(view) {
|
||||
if (view !== this.api.type) {
|
||||
this.willChangeView();
|
||||
this.api.changeView(view);
|
||||
this.props.onViewChange && this.props.onViewChange(view);
|
||||
this.props.onDateChange && this.props.onDateChange(this.api.getDate());
|
||||
}
|
||||
}
|
||||
|
||||
willChangeView(forward) {
|
||||
var old_effect =
|
||||
this.calendarRef.elRef.current.parentElement.getElementsByClassName('false_calendar')[0];
|
||||
if (old_effect) {
|
||||
this.calendarRef.elRef.current.parentElement.removeChild(old_effect);
|
||||
}
|
||||
var calendar = this.calendarRef.elRef.current;
|
||||
calendar.classList = 'fc fc-ltr fc-unthemed';
|
||||
var scroll_state = calendar.getElementsByClassName('fc-scroller')[0];
|
||||
if (scroll_state) {
|
||||
scroll_state = scroll_state.scrollTop;
|
||||
} else {
|
||||
scroll_state = 0;
|
||||
}
|
||||
|
||||
var clone = calendar.cloneNode(true);
|
||||
|
||||
calendar.classList.add('calendar_invisible');
|
||||
setTimeout(() => {
|
||||
this.calendarRef.elRef.current.classList.remove('calendar_invisible');
|
||||
if (forward === undefined) {
|
||||
this.calendarRef.elRef.current.classList.add('calendar_appear');
|
||||
} else if (forward) {
|
||||
this.calendarRef.elRef.current.classList.add('calendar_appear_right');
|
||||
} else {
|
||||
this.calendarRef.elRef.current.classList.add('calendar_appear_left');
|
||||
}
|
||||
}, 20);
|
||||
|
||||
clone.classList.add('calendar_disappear');
|
||||
clone.classList.add('false_calendar');
|
||||
calendar.parentElement.append(clone);
|
||||
var scroller = clone.getElementsByClassName('fc-scroller')[0];
|
||||
if (scroll_state !== scroller.scrollTop) {
|
||||
scroller.scrollTop = scroll_state;
|
||||
}
|
||||
}
|
||||
|
||||
fcToCollection(event) {
|
||||
return {
|
||||
id: event.extendedProps ? event.extendedProps.real_id : '',
|
||||
front_id: event.id,
|
||||
from:
|
||||
(event.allDay
|
||||
? moment(moment(event.start).format('YYYY-MM-DDT00:00:00+00:00')).valueOf()
|
||||
: moment(event.start).utc().valueOf()) / 1000,
|
||||
to:
|
||||
(event.allDay
|
||||
? moment(moment(event.end).format('YYYY-MM-DDT00:00:00+00:00')).valueOf()
|
||||
: moment(event.end).utc().valueOf()) /
|
||||
1000 -
|
||||
(event.allDay ? 24 * 60 * 60 : 0),
|
||||
all_day: event.allDay,
|
||||
//repetition_definition: { string: event.rrule, duration: event.duration },
|
||||
};
|
||||
}
|
||||
|
||||
collectionToFc(event) {
|
||||
var force_allday = false;
|
||||
if (Math.abs(event.from - event.to) > 60 * 60 * 24 * 2) {
|
||||
force_allday = true;
|
||||
}
|
||||
|
||||
this.eventsById[event.front_id] = event;
|
||||
|
||||
var from = event.from;
|
||||
var to = event.to;
|
||||
|
||||
if (event.type === 'remind' || event.type === 'deadline') {
|
||||
to = parseInt(from) + 15 * 60;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-redeclare
|
||||
var event = {
|
||||
id: event.front_id,
|
||||
real_id: event.id,
|
||||
start: moment(from * 1000).toDate(),
|
||||
end: moment(to * 1000 + (event.all_day ? 24 * 60 * 60 * 1000 : 0)).toDate(),
|
||||
allDay: event.all_day || force_allday,
|
||||
title: event.title || Languages.t('scenes.apps.drive.navigators.new_file.untitled'),
|
||||
//rrule: (event.repetition_definition || {}).string, //'DTSTART:20190201T103000Z\nRRULE:FREQ=WEEKLY;INTERVAL=5;UNTIL=20190601;BYDAY=MO,FR',
|
||||
duration: (event.repetition_definition || {}).duration,
|
||||
editable: !CalendarService.getIsReadonly(event),
|
||||
};
|
||||
return event;
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div className="twake_fullcalendar show_day_line">
|
||||
<FullCalendarPlugin
|
||||
defaultView="timeGridWeek"
|
||||
ref={node => (this.calendarRef = node)}
|
||||
plugins={[
|
||||
dayGridPlugin,
|
||||
timeGridPlugin,
|
||||
momentPlugin,
|
||||
momentTimezonePlugin,
|
||||
interactionPlugin,
|
||||
listPlugin,
|
||||
]}
|
||||
{...this.options}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,473 +0,0 @@
|
||||
.twake_fullcalendar {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
flex: 1;
|
||||
|
||||
& > div {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.false_calendar {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Annimations */
|
||||
.calendar_invisible {
|
||||
opacity: 0;
|
||||
}
|
||||
.calendar_disappear {
|
||||
animation: calendar_disappear 0.2s;
|
||||
opacity: 0;
|
||||
}
|
||||
.calendar_disappear_left {
|
||||
animation: calendar_disappear_left 0.2s;
|
||||
opacity: 0;
|
||||
}
|
||||
.calendar_disappear_right {
|
||||
animation: calendar_disappear_right 0.2s;
|
||||
opacity: 0;
|
||||
}
|
||||
.calendar_appear {
|
||||
animation: calendar_disappear 0.2s reverse;
|
||||
opacity: 1;
|
||||
}
|
||||
.calendar_appear_left {
|
||||
animation: calendar_disappear_left 0.2s reverse;
|
||||
opacity: 1;
|
||||
}
|
||||
.calendar_appear_right {
|
||||
animation: calendar_disappear_right 0.2s reverse;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@keyframes calendar_disappear {
|
||||
0% {
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes calendar_disappear_left {
|
||||
0% {
|
||||
transform: translateX(0);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
transform: translateX(-50px);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes calendar_disappear_right {
|
||||
0% {
|
||||
transform: translateX(0);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
transform: translateX(50px);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.fc.fc-unthemed {
|
||||
}
|
||||
|
||||
.fc-divider.fc-widget-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.fc-widget-content {
|
||||
border-top: 0px;
|
||||
}
|
||||
|
||||
&.show_day_line {
|
||||
.fc-timeGridWeek-view {
|
||||
.fc-day-grid {
|
||||
min-height: 2.5em;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
.fc-timeGridWeek-view {
|
||||
.fc-day-grid {
|
||||
transition: height 0.2s;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
.fc-dayGridMonth-view {
|
||||
.fc-week:last-child {
|
||||
.fc-day {
|
||||
border-bottom: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fc-day-grid .fc-bg table {
|
||||
border: unset;
|
||||
border-bottom: none;
|
||||
|
||||
.fc-day {
|
||||
border-top: 0px;
|
||||
border-right: 0px;
|
||||
}
|
||||
|
||||
.fc-today {
|
||||
background: var(--white) !important;
|
||||
}
|
||||
|
||||
.fc-axis.fc-widget-content {
|
||||
span {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fc-scroller {
|
||||
border-top: 1px solid var(--grey-background);
|
||||
}
|
||||
|
||||
.fc-head .fc-head-container {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.fc-day-header,
|
||||
.fc-widget-header.fc-axis {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-slats .fc-minor td {
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
.fc-timeGrid-view .fc-day-grid .fc-row {
|
||||
min-height: 2em;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-slats td {
|
||||
border-top: none;
|
||||
height: 2.5em;
|
||||
span {
|
||||
margin-top: -18px;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.fc-now-indicator.fc-now-indicator-arrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-now-indicator-line {
|
||||
border-top-width: 2px;
|
||||
border-color: var(--primary);
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background: var(--primary);
|
||||
position: absolute;
|
||||
left: -4px;
|
||||
top: -5px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
tr .fc-day-header .number {
|
||||
margin-top: 0px;
|
||||
text-align: center;
|
||||
font-size: 22px;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
tr .fc-day-header .day {
|
||||
padding-bottom: 10px;
|
||||
text-align: center;
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
th.fc-today.fc-day-header {
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
.fc-month-view {
|
||||
tr .fc-day-header .number {
|
||||
display: none;
|
||||
height: 0px !important;
|
||||
}
|
||||
.fc-day,
|
||||
.fc-unthemed td.fc-today {
|
||||
border-top: 1px solid var(--grey-background) !important;
|
||||
}
|
||||
.fc-day-top {
|
||||
background: transparent !important;
|
||||
}
|
||||
.fc-day-top .fc-day-number {
|
||||
float: left;
|
||||
margin: 5px;
|
||||
}
|
||||
.fc-day-header .day {
|
||||
padding-bottom: 0;
|
||||
padding-left: 6px;
|
||||
padding-top: 6px;
|
||||
text-align: left;
|
||||
font-weight: 400;
|
||||
border-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.fc-unthemed td.fc-today {
|
||||
background: #fff;
|
||||
border-right: 0;
|
||||
border-top: 1px;
|
||||
border-color: #eee;
|
||||
}
|
||||
}
|
||||
|
||||
.fc td {
|
||||
border-left: 1px solid var(--grey-background);
|
||||
}
|
||||
|
||||
.fc td:first-child {
|
||||
border-left: 0px;
|
||||
font-size: 12px;
|
||||
border-top: 0px;
|
||||
}
|
||||
|
||||
.fc-unthemed th,
|
||||
.fc-unthemed td,
|
||||
.fc-unthemed thead,
|
||||
.fc-unthemed tbody,
|
||||
.fc-unthemed .fc-divider,
|
||||
.fc-unthemed .fc-row,
|
||||
.fc-unthemed .fc-content,
|
||||
.fc-unthemed .fc-popover,
|
||||
.fc-unthemed .fc-list-view,
|
||||
.fc-unthemed .fc-list-heading td {
|
||||
border-color: var(--grey-background);
|
||||
color: var(--grey-dark);
|
||||
}
|
||||
|
||||
tr:nth-child(even) {
|
||||
.fc-widget-content {
|
||||
border-bottom: 1px solid var(--grey-background);
|
||||
}
|
||||
.fc-time {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.fc-day-top.fc-today {
|
||||
color: var(--primary);
|
||||
background: var(--grey-background);
|
||||
}
|
||||
.fc-unthemed td.fc-today {
|
||||
background: var(--grey-background);
|
||||
border-right: 0;
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.fc-axis {
|
||||
width: 40px !important;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.fc-time-grid-event .fc-time span {
|
||||
color: var(--white);
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.fc-event {
|
||||
min-height: 18px;
|
||||
background-color: var(--primary);
|
||||
border: 0;
|
||||
box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.1);
|
||||
overflow: visible !important;
|
||||
transition: z-index 0.5s;
|
||||
transition-delay: 0s;
|
||||
border-radius: var(--border-radius-base);
|
||||
margin-bottom: 0;
|
||||
background: #ffffff00 !important;
|
||||
display: flex;
|
||||
|
||||
&.not_resizable {
|
||||
.fc-resizer {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.transparent {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
&.selected {
|
||||
box-shadow: 0 0 4px 1px #549ae6;
|
||||
border-bottom: 0px !important;
|
||||
}
|
||||
|
||||
&:not(.selected):hover {
|
||||
transition-delay: 0.5s;
|
||||
z-index: 100 !important;
|
||||
}
|
||||
|
||||
.fc-content {
|
||||
background: transparent;
|
||||
transition: max-height 0.5s, background 0.5s, transform 0.5s, border-radius 0.5s,
|
||||
box-shadow 0.5s, min-width 0.5s;
|
||||
min-height: calc(100% - 10px);
|
||||
min-width: 100%;
|
||||
transition-delay: 0s;
|
||||
border-radius: 0px;
|
||||
color: var(--white);
|
||||
|
||||
.event_container {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.fc-title {
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
|
||||
.fc-time {
|
||||
opacity: 0.9;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
.fc-title,
|
||||
.fc-time,
|
||||
.fc-time span {
|
||||
transition: color 0.5s;
|
||||
transition-delay: 0s;
|
||||
color: var(--white);
|
||||
}
|
||||
}
|
||||
|
||||
.fc-bg {
|
||||
opacity: 0 !important;
|
||||
}
|
||||
|
||||
.fc-time {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
&.event-deadline {
|
||||
max-height: 23px;
|
||||
border-radius: 0 0 10px 10px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
left: 0% !important;
|
||||
right: 0% !important;
|
||||
padding-top: 3px;
|
||||
border-top: 3px solid #ff000a !important;
|
||||
.fc-resizer {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
&.event-move {
|
||||
border-radius: 0 10px 10px 10px;
|
||||
}
|
||||
|
||||
&.event-reminder {
|
||||
max-height: 23px;
|
||||
border-radius: 16px;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
min-height: 23px;
|
||||
.fc-resizer {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
&.private_content {
|
||||
background-color: var(--black) !important;
|
||||
border-radius: 0 !important;
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAAO0lEQVQImWNMS0tjgIF79+7B2UxYRZWUlJiwikJ1YIoyMDAwCwoKYoqi2IEseu/ePSasolAdmKIMDAwAGk0Wdkl75tAAAAAASUVORK5CYII=') !important;
|
||||
background-repeat: repeat;
|
||||
cursor: default;
|
||||
border: none !important;
|
||||
box-shadow: none !important;
|
||||
opacity: 0.3 !important;
|
||||
|
||||
& > div {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.fc-ltr .fc-time-grid .fc-event-container {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.fc-content .fc-title {
|
||||
font-size: 14px;
|
||||
color: var(--white);
|
||||
|
||||
.icon.event-type {
|
||||
margin-right: 5px;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.participant {
|
||||
display: inline-block;
|
||||
margin: 0 2px 2px 0;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
border-radius: 50%;
|
||||
background-color: var(--white);
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
.icon {
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
position: relative;
|
||||
margin: 0;
|
||||
padding: 0px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.icon:before {
|
||||
top: 30px;
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
.fc-day-grid-event .fc-time {
|
||||
font-weight: normal;
|
||||
color: var(--white);
|
||||
}
|
||||
|
||||
.fc-list-heading td {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.fc-list-item-marker {
|
||||
width: 10px;
|
||||
padding: 10px !important;
|
||||
}
|
||||
|
||||
.fc-list-item-title {
|
||||
border-left: none !important;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.fc-list-item-title > a {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.fc-time-grid .fc-slats td {
|
||||
height: 2em;
|
||||
}
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
/* eslint-disable react/no-direct-mutation-state */
|
||||
import React, { Component } from 'react';
|
||||
import InputWithColor from 'components/inputs/input-with-color.jsx';
|
||||
import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js';
|
||||
import WorkspaceService from 'app/deprecated/workspaces/workspaces.jsx';
|
||||
import Button from 'components/buttons/button.jsx';
|
||||
import Menu from 'components/menus/menu.jsx';
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
|
||||
export default class CalendarEditor extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
calendar: Collections.get('calendars').editCopy(props.calendar || {}),
|
||||
};
|
||||
}
|
||||
save() {
|
||||
this.state.calendar.workspace_id = WorkspaceService.currentWorkspaceId;
|
||||
Collections.get('calendars').save(this.state.calendar, this.props.collectionKey);
|
||||
Menu.closeAll();
|
||||
}
|
||||
setKey(obj) {
|
||||
Object.keys(obj || {}).forEach(k => {
|
||||
this.state.calendar[k] = obj[k];
|
||||
});
|
||||
this.setState({});
|
||||
}
|
||||
render() {
|
||||
var calendar = this.state.calendar;
|
||||
|
||||
return (
|
||||
<div className="">
|
||||
<InputWithColor
|
||||
className="medium bottom-margin full_width"
|
||||
focusOnDidMount
|
||||
menu_level={this.props.level}
|
||||
placeholder={Languages.t('scenes.apps.calendar.calendar_modal.placeholder', [], 'Name')}
|
||||
value={[this.state.calendar.color, this.state.calendar.title]}
|
||||
onEnter={() => this.save()}
|
||||
onChange={value => {
|
||||
this.setKey({ color: value[0], title: value[1] });
|
||||
}}
|
||||
/>
|
||||
|
||||
<div className="menu-buttons">
|
||||
<Button
|
||||
disabled={(this.state.calendar.title || '').length <= 0}
|
||||
type="button"
|
||||
value={
|
||||
this.state.calendar.id
|
||||
? Languages.t('general.save', [], 'Enregistrer')
|
||||
: Languages.t('general.add', [], 'Ajouter')
|
||||
}
|
||||
onClick={() => this.save()}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,199 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
import MediumPopupManager from 'app/components/modal/modal-manager';
|
||||
import EventModification from './EventModification.jsx';
|
||||
import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js';
|
||||
import Input from 'components/inputs/input.jsx';
|
||||
import InputIcon from 'components/inputs/input-icon.jsx';
|
||||
import Participants from './Part/Participants.jsx';
|
||||
import DateSelector from './Part/DateSelector.jsx';
|
||||
import CalendarSelector from 'components/calendar/calendar-selector/calendar-selector.jsx';
|
||||
import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js';
|
||||
import Button from 'components/buttons/button.jsx';
|
||||
import Select from 'components/select/select.jsx';
|
||||
import WorkspaceService from 'app/deprecated/workspaces/workspaces.jsx';
|
||||
import Icon from 'app/components/icon/icon.jsx';
|
||||
|
||||
export default class EventCreation extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
Collections.get('events').addListener(this);
|
||||
Collections.get('events').listenOnly([props.event.front_id], this);
|
||||
}
|
||||
|
||||
UNSAFE_componentWillMount() {
|
||||
CalendarService.fullSizeModal = false;
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
MediumPopupManager.mountedComponent = this;
|
||||
this.doNotCancelEdit = false;
|
||||
}
|
||||
componentWillUnmount() {
|
||||
Collections.get('events').removeListener(this);
|
||||
}
|
||||
|
||||
onMediumPopupClose() {
|
||||
if (!this.doNotCancelEdit) {
|
||||
CalendarService.closePopups();
|
||||
}
|
||||
}
|
||||
|
||||
save() {
|
||||
CalendarService.saveEdit(this.props.collectionKey);
|
||||
}
|
||||
change(key, value, notify) {
|
||||
this.props.event[key] = value;
|
||||
|
||||
if (notify || notify === undefined) {
|
||||
this.update_timeout && clearTimeout(this.update_timeout);
|
||||
this.update_timeout = setTimeout(() => {
|
||||
Collections.get('events').notify();
|
||||
}, 1000);
|
||||
this.setState({});
|
||||
}
|
||||
}
|
||||
render() {
|
||||
var event = this.props.event;
|
||||
var calendar_list = Collections.get('calendars').findBy({
|
||||
workspace_id: WorkspaceService.currentWorkspaceId,
|
||||
});
|
||||
|
||||
return (
|
||||
<div className="eventModal event_creation" style={{ padding: '16px' }}>
|
||||
<Input
|
||||
autoFocus
|
||||
value={event.title || ''}
|
||||
placeholder={Languages.t('scenes.apps.calendar.modals.title_placeholder', [], 'Titre')}
|
||||
onChange={evt => {
|
||||
this.change('title', evt.target.value);
|
||||
}}
|
||||
className="full_width bottom-margin"
|
||||
big
|
||||
/>
|
||||
|
||||
<div className="bottom-margin date_and_type">
|
||||
<Select
|
||||
medium
|
||||
value={event.type || 'event'}
|
||||
onChange={value => {
|
||||
this.change('type', value);
|
||||
}}
|
||||
options={CalendarService.event_types}
|
||||
className="right-margin"
|
||||
/>
|
||||
<DateSelector
|
||||
event={event}
|
||||
onChange={(from, to, all_day, repetition_definition) => {
|
||||
this.change('from', from, false);
|
||||
this.change('to', to, false);
|
||||
this.change('all_day', all_day, false);
|
||||
this.change('repetition_definition', repetition_definition);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'flex' }} className="full_width bottom-margin">
|
||||
<div style={{ flex: 1, display: 'flex' }} className="right-margin">
|
||||
<InputIcon
|
||||
icon={(event.location || '').slice(0, 4) == 'http' ? 'link' : 'location-point'}
|
||||
medium
|
||||
value={event.location || ''}
|
||||
placeholder={Languages.t(
|
||||
'scenes.apps.calendar.modals.event_adresse_placeholder',
|
||||
[],
|
||||
'Adresse',
|
||||
)}
|
||||
onChange={evt => {
|
||||
this.change('location', evt.target.value);
|
||||
}}
|
||||
className="full_width"
|
||||
/>
|
||||
</div>
|
||||
<Button
|
||||
className="button medium secondary"
|
||||
onClick={() => {
|
||||
this.change(
|
||||
'location',
|
||||
window.location.protocol +
|
||||
'//' +
|
||||
window.location.host +
|
||||
'/bundle/connectors/jitsi/call/twake_event_' +
|
||||
(event.front_id || '').replace(/-/g, '_') +
|
||||
'__' +
|
||||
(event.front_id || '').replace(/-/g, '_'),
|
||||
);
|
||||
}}
|
||||
>
|
||||
<Icon type="video" />
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<InputIcon
|
||||
autoHeight
|
||||
icon="align-left-justify"
|
||||
medium
|
||||
value={event.description || ''}
|
||||
placeholder={Languages.t(
|
||||
'scenes.apps.calendar.modals.description_placeholder',
|
||||
[],
|
||||
'Description',
|
||||
)}
|
||||
onChange={evt => {
|
||||
this.change('description', evt.target.value);
|
||||
}}
|
||||
className="full_width bottom-margin"
|
||||
/>
|
||||
|
||||
<CalendarSelector
|
||||
medium
|
||||
value={event.workspaces_calendars || []}
|
||||
onChange={workspaces_calendars => {
|
||||
this.change('workspaces_calendars', workspaces_calendars);
|
||||
}}
|
||||
calendarList={calendar_list || []}
|
||||
className=""
|
||||
/>
|
||||
|
||||
<div className="separator" />
|
||||
|
||||
<div className="small-bottom-margin">
|
||||
<Participants
|
||||
participants={event.participants}
|
||||
owner={event.owner}
|
||||
onChange={user_id_or_mail => this.change('participants', user_id_or_mail)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="separator" />
|
||||
|
||||
<Button
|
||||
className="button medium secondary-light"
|
||||
style={{ width: 'auto' }}
|
||||
onClick={() => {
|
||||
this.doNotCancelEdit = true;
|
||||
MediumPopupManager.open(
|
||||
<EventModification
|
||||
event={CalendarService.edited}
|
||||
collectionKey={this.props.collectionKey}
|
||||
/>,
|
||||
{ size: { width: 600 } },
|
||||
);
|
||||
}}
|
||||
>
|
||||
{Languages.t('scenes.apps.calendar.modals.advanced_options', [], 'Options avancées')}
|
||||
</Button>
|
||||
<Button
|
||||
className="button medium btn-primary medium"
|
||||
style={{ width: 'auto', marginLeft: 10, float: 'right' }}
|
||||
onClick={() => {
|
||||
this.save();
|
||||
}}
|
||||
>
|
||||
{Languages.t('general.save', [], 'Enregistrer')}
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,251 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js';
|
||||
import moment from 'moment';
|
||||
import MediumPopupManager from 'app/components/modal/modal-manager';
|
||||
import EventModification from './EventModification.jsx';
|
||||
import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js';
|
||||
import Participants from './Part/Participants.jsx';
|
||||
import CalendarSelector from 'components/calendar/calendar-selector/calendar-selector.jsx';
|
||||
import AlertManager from 'app/features/global/services/alert-manager-service';
|
||||
import DateTimeUtils from 'app/features/global/utils/datetime.js';
|
||||
import Button from 'components/buttons/button.jsx';
|
||||
import Icon from 'app/components/icon/icon.jsx';
|
||||
import Tabs from 'components/tabs/tabs.jsx';
|
||||
import SearchService from 'app/deprecated/search/search.js';
|
||||
import WorkspacesService from 'app/deprecated/workspaces/workspaces.jsx';
|
||||
import UserService from 'app/features/users/services/current-user-service';
|
||||
|
||||
export default class EventDetails extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
Collections.get('events').addListener(this);
|
||||
if (props.event.front_id) {
|
||||
Collections.get('events').listenOnly([props.event.front_id], this);
|
||||
}
|
||||
}
|
||||
UNSAFE_componentWillMount() {
|
||||
CalendarService.fullSizeModal = false;
|
||||
}
|
||||
componentDidMount() {
|
||||
MediumPopupManager.mountedComponent = this;
|
||||
}
|
||||
componentWillUnmount() {
|
||||
Collections.get('events').removeListener(this);
|
||||
}
|
||||
remove() {
|
||||
var event = Collections.get('events').findByFrontId(this.props.event.front_id);
|
||||
AlertManager.confirm(
|
||||
() => {
|
||||
CalendarService.remove(event, this.props.collectionKey);
|
||||
},
|
||||
() => {},
|
||||
{
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.modals.remove_event_text',
|
||||
[],
|
||||
Languages.t(
|
||||
'scenes.apps.calendar.modals.remove_event_alert_confirmation',
|
||||
[],
|
||||
"Supprimer l'événement ?",
|
||||
),
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
render() {
|
||||
var event = Collections.get('events').findByFrontId(this.props.event.front_id);
|
||||
|
||||
if (!event) {
|
||||
return '';
|
||||
}
|
||||
|
||||
var from = new Date(event.from * 1000);
|
||||
var to = new Date(event.to * 1000);
|
||||
|
||||
var next = Math.min(from || to, to || from);
|
||||
|
||||
var from_formatted = moment(from).format(
|
||||
'ddd Do MMMM YYYY' + (event.all_day ? '' : ', ' + DateTimeUtils.getDefaultTimeFormat()),
|
||||
);
|
||||
var to_formatted =
|
||||
(!event.type || event.type === 'event' || event.type === 'move') &&
|
||||
!isNaN(event.to) &&
|
||||
moment(to).format(
|
||||
(moment(to).format('D_M_YYYY') !== moment(from).format('D_M_YYYY')
|
||||
? 'ddd Do ' +
|
||||
(moment(to).format('M_YYYY') !== moment(from).format('M_YYYY')
|
||||
? 'MMMM ' + (moment(to).format('YYYY') !== moment(from).format('YYYY') ? 'YYYY' : '')
|
||||
: '') +
|
||||
(event.all_day ? '' : ', ')
|
||||
: '') + (event.all_day ? '' : DateTimeUtils.getDefaultTimeFormat()) || '[]',
|
||||
);
|
||||
|
||||
from_formatted = (from_formatted || '').replace(' ' + new Date().getFullYear(), '');
|
||||
to_formatted = (to_formatted || '').replace(' ' + new Date().getFullYear(), '');
|
||||
|
||||
var event_type =
|
||||
CalendarService.event_types_by_value[event.type] ||
|
||||
CalendarService.event_types_by_value['event'];
|
||||
var readonly = CalendarService.getIsReadonly(this.props.event);
|
||||
|
||||
return (
|
||||
<div className="eventModal event_details" style={{ padding: '16px' }}>
|
||||
<div className="title">
|
||||
{event.title || Languages.t('scenes.apps.drive.navigators.new_file.untitled')}
|
||||
</div>
|
||||
<div className="subtitle date">
|
||||
<Icon type="clock" />
|
||||
{from_formatted}
|
||||
{to_formatted && ' - ' + to_formatted}
|
||||
{' (' + moment(next).fromNow() + ')'}
|
||||
</div>
|
||||
|
||||
<div style={{ margin: '0 -16px' }}>
|
||||
<Tabs
|
||||
tabs={[
|
||||
{
|
||||
title: Languages.t('scenes.apps.calendar.modals.details_title', [], 'Détails'),
|
||||
render: (
|
||||
<div>
|
||||
<div className="bottom-margin">
|
||||
<div className="event_type">
|
||||
<Icon type={event_type.icon} />
|
||||
{event_type.text}
|
||||
</div>
|
||||
|
||||
<CalendarSelector
|
||||
readonly
|
||||
value={event.workspaces_calendars}
|
||||
openEventInWorkspace={workspace => {
|
||||
SearchService.select({
|
||||
type: 'event',
|
||||
event: this.props.event,
|
||||
workspace: workspace,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{event.description && (
|
||||
<div className="subtitle description bottom-margin">
|
||||
<Icon type="align-left-justify" style={{ marginRight: 4 }} />
|
||||
{event.description}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{event.location && (event.location || '').slice(0, 4) !== 'http' && (
|
||||
<div className="subtitle location bottom-margin">
|
||||
<Icon type="location-point" style={{ marginRight: 4 }} />
|
||||
{event.location}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{event.location && (event.location || '').slice(0, 4) === 'http' && (
|
||||
<div
|
||||
onClick={() => {
|
||||
var separator = '?';
|
||||
if (event.location.indexOf('?') > 0) {
|
||||
separator = '&';
|
||||
}
|
||||
window.open(
|
||||
event.location +
|
||||
separator +
|
||||
'twake_user=' +
|
||||
UserService.getCurrentUser().id +
|
||||
'&twake_group=' +
|
||||
WorkspacesService.currentGroupId,
|
||||
);
|
||||
}}
|
||||
className="subtitle location bottom-margin"
|
||||
style={{
|
||||
overflow: 'hidden',
|
||||
whiteSpace: 'nowrap',
|
||||
textOverflow: 'ellipsis',
|
||||
}}
|
||||
>
|
||||
<Icon type="link" style={{ marginRight: 4 }} />
|
||||
{/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
|
||||
<a>
|
||||
{Languages.t('scenes.apps.calendar.video_link', [], 'Click to open link')}{' '}
|
||||
- {event.location}
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
|
||||
{(event.notifications || []).length > 0 && (
|
||||
<div className="subtitle reminders bottom-margin">
|
||||
<Icon type="bell" style={{ marginRight: 4 }} />
|
||||
{(event.notifications || []).length}{' '}
|
||||
{Languages.t('scenes.apps.calendar.reminders', [], 'rappel(s)')}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/*
|
||||
<div className="text">
|
||||
{(event.notifications || []).length} rappel(s), événement {event.private?"privé":"public"} et marqué comme {event.available?"disponible":"occupé"}.
|
||||
</div>*/}
|
||||
|
||||
<div style={{ marginTop: '-16px' }} />
|
||||
</div>
|
||||
),
|
||||
},
|
||||
{
|
||||
title: Languages.t(
|
||||
'scenes.apps.calendar.modals.participants_event',
|
||||
[],
|
||||
'Participants',
|
||||
),
|
||||
render: (
|
||||
<div className="small-x-margin small-bottom-margin">
|
||||
<Participants readOnly participants={event.participants} owner={event.owner} />
|
||||
</div>
|
||||
),
|
||||
},
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{!readonly && (
|
||||
<div style={{ marginTop: '-16px' }}>
|
||||
<div className="separator" />
|
||||
|
||||
<Button
|
||||
className="button medium danger medium"
|
||||
style={{ width: 'auto' }}
|
||||
onClick={() => {
|
||||
this.remove();
|
||||
}}
|
||||
>
|
||||
{Languages.t('scenes.apps.calendar.modals.remove_button', [], 'Supprimer')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
className="button medium secondary-light medium"
|
||||
style={{ width: 'auto', float: 'right' }}
|
||||
onClick={() => {
|
||||
CalendarService.edit(this.props.event);
|
||||
MediumPopupManager.open(
|
||||
<EventModification
|
||||
event={CalendarService.edited}
|
||||
collectionKey={this.props.collectionKey}
|
||||
/>,
|
||||
{ size: { width: 600 } },
|
||||
);
|
||||
}}
|
||||
>
|
||||
{Languages.t(
|
||||
'scenes.apps.calendar.modals.modify_event_button',
|
||||
[],
|
||||
"Modifier l'évènement",
|
||||
)}
|
||||
</Button>
|
||||
</div>
|
||||
)}
|
||||
{readonly && <div style={{ marginTop: '-16px' }} />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,234 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js';
|
||||
import Input from 'components/inputs/input.jsx';
|
||||
import InputIcon from 'components/inputs/input-icon.jsx';
|
||||
import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js';
|
||||
import ReminderSelector from 'components/reminder-selector/reminder-selector.jsx';
|
||||
import Participants from './Part/Participants.jsx';
|
||||
import AlertManager from 'app/features/global/services/alert-manager-service';
|
||||
import DateSelector from './Part/DateSelector.jsx';
|
||||
import AttachmentPicker from 'components/attachment-picker/attachment-picker.jsx';
|
||||
import CalendarSelector from 'components/calendar/calendar-selector/calendar-selector.jsx';
|
||||
import Button from 'components/buttons/button.jsx';
|
||||
import Select from 'components/select/select.jsx';
|
||||
import WorkspaceService from 'app/deprecated/workspaces/workspaces.jsx';
|
||||
import MediumPopupManager from 'app/components/modal/modal-manager';
|
||||
import Icon from 'app/components/icon/icon.jsx';
|
||||
import PerfectScrollbar from 'react-perfect-scrollbar';
|
||||
import './Modals.scss';
|
||||
|
||||
export default class EventModification extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
UNSAFE_componentWillMount() {
|
||||
CalendarService.fullSizeModal = true;
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
MediumPopupManager.mountedComponent = this;
|
||||
}
|
||||
|
||||
save() {
|
||||
CalendarService.saveEdit(this.props.collectionKey);
|
||||
}
|
||||
|
||||
remove() {
|
||||
AlertManager.confirm(
|
||||
() => {
|
||||
CalendarService.remove(CalendarService.edited, this.props.collectionKey);
|
||||
},
|
||||
() => {},
|
||||
{
|
||||
text: Languages.t(
|
||||
'scenes.apps.calendar.modals.remove_event_text',
|
||||
[],
|
||||
"Supprimer l'événement ?",
|
||||
),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
onMediumPopupClose() {
|
||||
CalendarService.closePopups();
|
||||
}
|
||||
|
||||
change(key, value, notify) {
|
||||
this.props.event[key] = value;
|
||||
|
||||
if (notify || notify === undefined) {
|
||||
this.update_timeout && clearTimeout(this.update_timeout);
|
||||
this.update_timeout = setTimeout(() => {
|
||||
Collections.get('events').notify();
|
||||
}, 1000);
|
||||
this.setState({});
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
var event = this.props.event;
|
||||
var calendar_list = Collections.get('calendars').findBy({
|
||||
workspace_id: WorkspaceService.currentWorkspaceId,
|
||||
});
|
||||
|
||||
return (
|
||||
<PerfectScrollbar options={{ suppressScrollX: true }} style={{ padding: '16px' }}>
|
||||
<div className="eventModal event_modification">
|
||||
<Input
|
||||
autoFocus
|
||||
value={event.title || ''}
|
||||
placeholder={Languages.t('scenes.apps.calendar.modals.event_title_placeholder')}
|
||||
onChange={evt => {
|
||||
this.change('title', evt.target.value);
|
||||
}}
|
||||
className="full_width bottom-margin"
|
||||
big
|
||||
/>
|
||||
|
||||
<div className="bottom-margin date_and_type">
|
||||
<Select
|
||||
medium
|
||||
value={event.type || 'event'}
|
||||
onChange={value => {
|
||||
this.change('type', value);
|
||||
}}
|
||||
options={CalendarService.event_types}
|
||||
className="right-margin"
|
||||
/>
|
||||
<DateSelector
|
||||
event={event}
|
||||
onChange={(from, to, all_day, repetition_definition) => {
|
||||
this.change('from', from, false);
|
||||
this.change('to', to, false);
|
||||
this.change('all_day', all_day, false);
|
||||
this.change('repetition_definition', repetition_definition);
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div style={{ display: 'flex' }} className="full_width">
|
||||
<div style={{ flex: 1, display: 'flex' }}>
|
||||
<InputIcon
|
||||
icon={(event.location || '').slice(0, 4) == 'http' ? 'link' : 'location-point'}
|
||||
medium
|
||||
value={event.location || ''}
|
||||
placeholder={Languages.t('scenes.apps.calendar.modals.event_adresse_placeholder')}
|
||||
onChange={evt => {
|
||||
this.change('location', evt.target.value);
|
||||
}}
|
||||
className="full_width bottom-margin right-margin"
|
||||
/>
|
||||
</div>
|
||||
<Button
|
||||
className="button medium default bottom-margin"
|
||||
onClick={() => {
|
||||
this.change(
|
||||
'location',
|
||||
window.location.protocol +
|
||||
'//' +
|
||||
window.location.host +
|
||||
'/bundle/connectors/jitsi/call/twake_event_' +
|
||||
(event.front_id || '').replace(/-/g, '_') +
|
||||
'__' +
|
||||
(event.front_id || '').replace(/-/g, '_'),
|
||||
);
|
||||
}}
|
||||
>
|
||||
<Icon type="video" />
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<InputIcon
|
||||
autoHeight
|
||||
icon="align-left-justify"
|
||||
medium
|
||||
value={event.description || ''}
|
||||
placeholder={Languages.t(
|
||||
'scenes.apps.calendar.modals.event_description_placeholder',
|
||||
[],
|
||||
'Description',
|
||||
)}
|
||||
onChange={evt => {
|
||||
this.change('description', evt.target.value);
|
||||
}}
|
||||
className="full_width bottom-margin"
|
||||
/>
|
||||
|
||||
{/*
|
||||
<span className="right-margin">
|
||||
<Checkbox small value={event.available} onChange={(value)=>{this.change("available", value)}} label="Afficher comme disponible"/>
|
||||
</span>
|
||||
<Checkbox small value={event.private} onChange={(value)=>{this.change("private", value)}} label="Événement privé" />
|
||||
<br/>
|
||||
*/}
|
||||
|
||||
<CalendarSelector
|
||||
medium
|
||||
value={event.workspaces_calendars || []}
|
||||
onChange={workspaces_calendars => {
|
||||
this.change('workspaces_calendars', workspaces_calendars);
|
||||
}}
|
||||
calendarList={calendar_list}
|
||||
className=""
|
||||
/>
|
||||
|
||||
<div className="separator" />
|
||||
|
||||
<Participants
|
||||
style={{ margin: 0 }}
|
||||
participants={event.participants}
|
||||
owner={event.owner}
|
||||
onChange={user_id_or_mail => this.change('participants', user_id_or_mail)}
|
||||
/>
|
||||
|
||||
<div className="separator" />
|
||||
|
||||
<div className="bottom-margin">
|
||||
<b>{Languages.t('scenes.apps.tasks.modals.attachments')}</b>
|
||||
</div>
|
||||
|
||||
<AttachmentPicker
|
||||
attachments={event.attachments}
|
||||
onChange={attachments => this.change('attachments', attachments)}
|
||||
/>
|
||||
|
||||
<div className="separator" />
|
||||
|
||||
<div className="bottom-margin">
|
||||
<b>{Languages.t('scenes.apps.calendar.modals.reminders')}</b>
|
||||
</div>
|
||||
|
||||
<ReminderSelector
|
||||
reminders={event.notifications || []}
|
||||
onChange={reminders => this.change('notifications', reminders)}
|
||||
/>
|
||||
|
||||
<div className="separator" />
|
||||
|
||||
<Button
|
||||
className="button medium danger medium"
|
||||
style={{ width: 'auto' }}
|
||||
onClick={() => {
|
||||
this.remove();
|
||||
}}
|
||||
>
|
||||
{Languages.t('scenes.apps.calendar.modals.remove_event_button')}
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
className="button medium btn-primary medium"
|
||||
style={{ width: 'auto', float: 'right' }}
|
||||
onClick={() => {
|
||||
this.save();
|
||||
}}
|
||||
>
|
||||
{Languages.t('general.save')}
|
||||
</Button>
|
||||
</div>
|
||||
</PerfectScrollbar>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
.eventModal {
|
||||
.title {
|
||||
font-size: 22px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.date.subtitle,
|
||||
.location.subtitle,
|
||||
.reminders.subtitle {
|
||||
color: var(--grey-dark);
|
||||
}
|
||||
|
||||
.date_and_type {
|
||||
display: flex;
|
||||
.select {
|
||||
min-width: 25%;
|
||||
flex: 1;
|
||||
max-width: 140px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
.date_selector_full {
|
||||
& > div {
|
||||
vertical-align: top;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.participants > .menu-list {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.event_type {
|
||||
display: inline-block;
|
||||
height: 32px;
|
||||
padding: 0 8px;
|
||||
margin-right: 8px;
|
||||
margin-bottom: 8px;
|
||||
line-height: 32px;
|
||||
vertical-align: middle;
|
||||
background: var(--white);
|
||||
border-radius: var(--border-radius-base);
|
||||
border: 1px solid var(--grey-background);
|
||||
box-sizing: border-box;
|
||||
font-size: 14px;
|
||||
padding-left: 4px;
|
||||
.icon-unicon {
|
||||
color: var(--grey-dark);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,145 +0,0 @@
|
||||
/* eslint-disable react/no-direct-mutation-state */
|
||||
import React, { Component } from 'react';
|
||||
import DateSelectorInput from 'components/calendar/date-picker.jsx';
|
||||
import TimeSelector from 'components/calendar/time-selector.jsx';
|
||||
import Checkbox from 'app/components/inputs/deprecated_checkbox.jsx';
|
||||
import Icon from 'app/components/icon/icon.jsx';
|
||||
import './DateSelector.scss';
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
|
||||
export default class DateSelector extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
data: {},
|
||||
};
|
||||
|
||||
this.oldProps = JSON.stringify(props.event);
|
||||
this.updateFromProps(props);
|
||||
}
|
||||
shouldComponentUpdate(nextProps) {
|
||||
if (this.oldProps !== JSON.stringify(nextProps.event)) {
|
||||
this.oldProps = JSON.stringify(nextProps.event);
|
||||
this.updateFromProps(nextProps);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
change(key, value) {
|
||||
// eslint-disable-next-line react/no-direct-mutation-state
|
||||
this.state.data[key] = value;
|
||||
|
||||
if (key === 'from') {
|
||||
if (
|
||||
this.state.data.to < this.state.data.from ||
|
||||
(this.state.data.to - this.state.data.from > 60 * 60 * 24 * 2 && !this.state.data.all_day)
|
||||
) {
|
||||
this.state.data.to = this.state.data.from + (this.duration || 60 * 60);
|
||||
}
|
||||
}
|
||||
if (key === 'to') {
|
||||
if (
|
||||
this.state.data.to < this.state.data.from ||
|
||||
(this.state.data.to - this.state.data.from > 60 * 60 * 24 * 2 && !this.state.data.all_day)
|
||||
) {
|
||||
this.state.data.from = this.state.data.to - (this.duration || 60 * 60);
|
||||
}
|
||||
}
|
||||
if (key === 'all_day') {
|
||||
if (
|
||||
this.state.data.to - this.state.data.from > 60 * 60 * 24 * 2 &&
|
||||
!this.state.data.all_day
|
||||
) {
|
||||
this.state.data.to = this.state.data.from + Math.min(this.duration || 60 * 60, 60 * 60);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.state.data.to > this.state.data.from) {
|
||||
this.duration = this.state.data.to - this.state.data.from;
|
||||
}
|
||||
|
||||
this.setState({});
|
||||
this.update();
|
||||
}
|
||||
update() {
|
||||
var from = this.state.data.from;
|
||||
var to = this.state.data.to;
|
||||
|
||||
if (this.props.event.type === 'deadline' || this.props.event.type === 'remind') {
|
||||
to = from + 15 * 60;
|
||||
}
|
||||
|
||||
if (to < from) {
|
||||
to = from + 60 * 60;
|
||||
}
|
||||
|
||||
var all_day = this.state.data.all_day;
|
||||
this.props.onChange && this.props.onChange(from, to, all_day, null);
|
||||
}
|
||||
updateFromProps(props) {
|
||||
this.state.data.from = props.event.from;
|
||||
this.state.data.to = props.event.to;
|
||||
this.state.data.all_day = props.event.all_day;
|
||||
|
||||
if (this.state.data.to > this.state.data.from) {
|
||||
this.duration = this.state.data.to - this.state.data.from;
|
||||
}
|
||||
}
|
||||
render() {
|
||||
var event = this.props.event;
|
||||
return (
|
||||
<div className="calendar_selector">
|
||||
<div className="date_selector_full">
|
||||
<span className="clock_part" style={{ verticalAlign: 'top', display: 'inline-block' }}>
|
||||
<Icon type="clock" className="icon_clock" />
|
||||
</span>
|
||||
<div className="start">
|
||||
<DateSelectorInput
|
||||
ts={this.state.data.from}
|
||||
onChangeBlur={value => this.change('from', value)}
|
||||
className=""
|
||||
/>
|
||||
{!event.all_day && (
|
||||
<TimeSelector
|
||||
ts={this.state.data.from}
|
||||
onChangeBlur={value => this.change('from', value)}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
{(!event.type || event.type === 'event' || event.type === 'move') && [
|
||||
<span className="middle" key={`title-${event}`}>
|
||||
{Languages.t('scenes.apps.calendar.event_view.article_until')}
|
||||
</span>,
|
||||
<div className="end" key={`selector-${event}`}>
|
||||
{!event.all_day && (
|
||||
<TimeSelector
|
||||
ts={this.state.data.to}
|
||||
onChangeBlur={value => this.change('to', value)}
|
||||
className=""
|
||||
/>
|
||||
)}
|
||||
<DateSelectorInput
|
||||
ts={this.state.data.to}
|
||||
onChangeBlur={value => this.change('to', value)}
|
||||
/>
|
||||
</div>,
|
||||
]}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Checkbox
|
||||
small
|
||||
value={event.all_day}
|
||||
onChange={value => {
|
||||
this.change('all_day', value);
|
||||
}}
|
||||
label={Languages.t(
|
||||
'scenes.apps.calendar.event_edition.checkbox_all_day',
|
||||
[],
|
||||
'All day',
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
.date_selector_full {
|
||||
display: inline-flex;
|
||||
padding-left: 4px;
|
||||
padding-right: 4px;
|
||||
border-radius: var(--border-radius-base);
|
||||
background: var(--grey-background);
|
||||
max-width: 360px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
.clock_part {
|
||||
text-align: center;
|
||||
width: 6%;
|
||||
max-width: 32px;
|
||||
min-width: 20px;
|
||||
}
|
||||
& > .middle {
|
||||
width: 10%;
|
||||
max-width: 32px;
|
||||
text-align: center;
|
||||
line-height: 40px;
|
||||
vertical-align: top;
|
||||
display: inline-block;
|
||||
padding: 0px 4px;
|
||||
opacity: 0.5;
|
||||
}
|
||||
& > .start,
|
||||
& > .end {
|
||||
flex: 1;
|
||||
display: inline-flex;
|
||||
max-width: 150px;
|
||||
|
||||
input {
|
||||
width: 100%;
|
||||
max-width: none !important;
|
||||
}
|
||||
|
||||
& > .time_selector {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
& > .date_selector {
|
||||
flex: 2;
|
||||
}
|
||||
}
|
||||
|
||||
.icon_clock {
|
||||
color: var(--grey-dark);
|
||||
margin-top: 12px;
|
||||
display: inline-block;
|
||||
margin-right: -4px;
|
||||
}
|
||||
.input.medium {
|
||||
text-align: center;
|
||||
padding: 0px;
|
||||
}
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
import UserListManager from 'components/user-list-manager-depreciated/user-list-manager';
|
||||
import Menu from 'components/menus/menu.jsx';
|
||||
|
||||
export default class Participants extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
render() {
|
||||
return (
|
||||
<div className="participants">
|
||||
<div className="bottom-margin">
|
||||
<b>{Languages.t('scenes.apps.calendar.modals.part.participants', [], 'Participants')}</b>
|
||||
</div>
|
||||
|
||||
<div className="menu-list">
|
||||
<UserListManager
|
||||
showAddMe
|
||||
showAddAll
|
||||
readOnly={this.props.readOnly}
|
||||
canRemoveMyself
|
||||
noPlaceholder
|
||||
users={(this.props.participants || []).map(participant => {
|
||||
return { id: participant.user_id_or_mail };
|
||||
})}
|
||||
scope="workspace"
|
||||
allowMails
|
||||
onUpdate={ids_mails => {
|
||||
this.props.onChange &&
|
||||
this.props.onChange(
|
||||
ids_mails.map(id => {
|
||||
return { user_id_or_mail: id };
|
||||
}),
|
||||
);
|
||||
Menu.closeAll();
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import Languages from 'app/features/global/services/languages-service';
|
||||
import Menu from 'components/menus/menu.jsx';
|
||||
import Button from 'components/buttons/button.jsx';
|
||||
import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js';
|
||||
import RouterService from 'app/features/router/services/router-service';
|
||||
import CalendarSelector from 'components/calendar/calendar-selector/calendar-selector.jsx';
|
||||
import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service';
|
||||
import WorkspaceService from 'app/deprecated/workspaces/workspaces';
|
||||
|
||||
import './calendar.scss';
|
||||
|
||||
export default class UnconfiguredTab extends Component {
|
||||
constructor() {
|
||||
super();
|
||||
|
||||
this.state = {
|
||||
i18n: Languages,
|
||||
selected: [],
|
||||
};
|
||||
|
||||
Languages.addListener(this);
|
||||
}
|
||||
componentWillUnmount() {
|
||||
Languages.removeListener(this);
|
||||
}
|
||||
initInCalendars() {
|
||||
if (this.props.saveTab) this.props.saveTab({ calendars: this.state.selected });
|
||||
Menu.closeAll();
|
||||
}
|
||||
|
||||
render() {
|
||||
var calendar_list = Collections.get('calendars').findBy({
|
||||
workspace_id: RouterService.getStateFromRoute().workspaceId,
|
||||
});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="unconfigured_tab">
|
||||
<div className="title">{this.props.tab.name}</div>
|
||||
<div className="text" style={{ opacity: 0.5 }}>
|
||||
{Languages.t(
|
||||
'scenes.apps.calendar.unconfigured_tab',
|
||||
[],
|
||||
"Cet onglet n'est pas encore configuré.",
|
||||
)}
|
||||
</div>
|
||||
|
||||
{AccessRightsService.getCompanyLevel(WorkspaceService.currentGroupId) !== 'guest' && (
|
||||
<>
|
||||
<br />
|
||||
<CalendarSelector
|
||||
allowMultiple
|
||||
medium
|
||||
value={this.state.selected}
|
||||
onChange={workspaces_calendars => {
|
||||
this.setState({ selected: workspaces_calendars });
|
||||
}}
|
||||
calendarList={calendar_list || []}
|
||||
className=""
|
||||
/>
|
||||
|
||||
<br />
|
||||
|
||||
{this.state.selected.length > 0 && (
|
||||
<Button
|
||||
className="button medium"
|
||||
onClick={() => this.initInCalendars()}
|
||||
style={{ width: 'auto' }}
|
||||
>
|
||||
{Languages.t('general.continue', [], 'Continuer')}
|
||||
</Button>
|
||||
)}
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
import Browser from './browser';
|
||||
import { SelectorModal } from './modals/selector';
|
||||
import TwakeTabConfiguration from './twake-tab-configuration';
|
||||
|
||||
export type EmbedContext = {
|
||||
companyId?: string;
|
||||
workspaceId?: string;
|
||||
channelId?: string;
|
||||
tabId?: string;
|
||||
};
|
||||
|
||||
export default ({
|
||||
initialParentId,
|
||||
context,
|
||||
inPublicSharing,
|
||||
}: {
|
||||
initialParentId?: string;
|
||||
context?: EmbedContext;
|
||||
inPublicSharing?: boolean;
|
||||
}) => {
|
||||
return (
|
||||
<>
|
||||
<SelectorModal />
|
||||
<Drive
|
||||
initialParentId={initialParentId}
|
||||
context={context}
|
||||
inPublicSharing={inPublicSharing}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
const Drive = ({
|
||||
initialParentId,
|
||||
context,
|
||||
inPublicSharing,
|
||||
}: {
|
||||
initialParentId?: string;
|
||||
context?: EmbedContext;
|
||||
inPublicSharing?: boolean;
|
||||
}) => {
|
||||
if (context?.tabId) {
|
||||
return <TwakeTabConfiguration context={context} />;
|
||||
}
|
||||
|
||||
return <Browser initialParentId={initialParentId} inPublicSharing={inPublicSharing} />;
|
||||
};
|
||||