From 03c1a8d56cd48a7a7bbc4595820abfb96bc98d2d Mon Sep 17 00:00:00 2001 From: xuhongbo Date: Fri, 15 May 2026 10:56:07 +0800 Subject: [PATCH 01/11] feat(i18n): localize remaining hardcoded UI surfaces Localize remaining hardcoded UI strings across web, space, editor, and shared surfaces using the existing react-i18next namespace JSON files introduced by #8898. Add the new keys to the relevant auth, common, editor, empty-state, inbox, page, project, work-item, and workspace locale files across all supported locales. Co-authored-by: Codex --- apps/space/app/error.tsx | 20 +++-- apps/space/app/not-found.tsx | 10 +-- .../account/auth-forms/auth-header.tsx | 42 ++------- .../account/auth-forms/auth-root.tsx | 10 ++- .../components/account/auth-forms/email.tsx | 19 +++-- .../account/auth-forms/password.tsx | 38 ++++----- .../account/auth-forms/unique-code.tsx | 27 +++--- .../account/terms-and-conditions.tsx | 15 +++- .../components/account/user-logged-in.tsx | 15 ++-- apps/space/components/common/powered-by.tsx | 4 +- .../instance/instance-failure-view.tsx | 20 +++-- .../components/issues/filters/labels.tsx | 12 ++- apps/space/components/issues/filters/root.tsx | 4 +- .../components/issues/filters/selection.tsx | 5 +- .../space/components/issues/filters/state.tsx | 12 ++- .../components/issues/issue-layouts/error.tsx | 9 +- .../issues/issue-layouts/issue-layout-HOC.tsx | 6 +- .../issues/issue-layouts/kanban/default.tsx | 7 +- .../issues/issue-layouts/kanban/swimlanes.tsx | 29 ++++++- .../issues/issue-layouts/list/default.tsx | 7 +- .../properties/all-properties.tsx | 8 +- .../issues/issue-layouts/properties/cycle.tsx | 6 +- .../issue-layouts/properties/due-date.tsx | 6 +- .../issue-layouts/properties/labels.tsx | 14 +-- .../issue-layouts/properties/member.tsx | 4 +- .../issue-layouts/properties/modules.tsx | 8 +- .../issue-layouts/properties/priority.tsx | 2 +- .../issues/issue-layouts/properties/state.tsx | 4 +- .../components/issues/issue-layouts/utils.tsx | 85 ++++++++++++------- .../components/issues/navbar/user-avatar.tsx | 8 +- .../peek-overview/comment/add-comment.tsx | 39 ++++----- .../comment/comment-detail-card.tsx | 16 ++-- .../issues/peek-overview/header.tsx | 19 +++-- .../issues/peek-overview/issue-activity.tsx | 8 +- .../issues/peek-overview/issue-properties.tsx | 13 +-- .../issues/reactions/issue-vote-reactions.tsx | 14 +-- apps/space/components/ui/not-found.tsx | 12 +-- apps/space/hooks/oauth/core.tsx | 10 ++- .../profile/[userId]/activity/page.tsx | 2 +- .../pages/(detail)/[pageId]/page.tsx | 28 +++--- .../[workspaceSlug]/(projects)/sidebar.tsx | 4 +- .../(projects)/stickies/page.tsx | 5 +- .../(projects)/workspace-views/page.tsx | 6 +- .../(settings)/settings/projects/page.tsx | 15 ++-- .../app/(all)/workspace-invitations/page.tsx | 47 +++++----- apps/web/app/not-found.tsx | 14 +-- .../projects/settings/intake/header.tsx | 2 +- .../inbox/content/inbox-issue-header.tsx | 13 ++- .../content/inbox-issue-mobile-header.tsx | 30 ++++--- .../inbox/content/issue-properties.tsx | 20 +++-- .../components/inbox/content/issue-root.tsx | 22 ++--- .../inbox-filter/applied-filters/date.tsx | 37 ++++++-- .../inbox-filter/applied-filters/label.tsx | 14 +-- .../inbox-filter/applied-filters/root.tsx | 10 ++- .../inbox-filter/applied-filters/state.tsx | 14 +-- .../inbox-filter/applied-filters/status.tsx | 7 +- .../inbox/inbox-filter/filters/date.tsx | 25 ++++-- .../inbox-filter/filters/filter-selection.tsx | 19 +++-- .../inbox/inbox-filter/filters/labels.tsx | 12 ++- .../inbox/inbox-filter/filters/members.tsx | 16 ++-- .../inbox/inbox-filter/filters/state.tsx | 12 ++- .../inbox/inbox-filter/filters/status.tsx | 6 +- .../components/inbox/inbox-filter/root.tsx | 17 ++-- .../inbox/modals/create-modal/create-root.tsx | 73 ++++++++-------- .../modals/create-modal/issue-description.tsx | 4 +- .../modals/create-modal/issue-properties.tsx | 22 ++--- .../inbox/modals/select-duplicate.tsx | 10 ++- .../inbox/sidebar/inbox-list-item.tsx | 10 ++- .../core/components/inbox/sidebar/root.tsx | 10 +-- .../components/onboarding/invitations.tsx | 27 +++--- .../components/onboarding/invite-members.tsx | 35 ++++---- .../onboarding/steps/profile/root.tsx | 28 +++--- .../onboarding/steps/profile/set-password.tsx | 25 ++++-- .../components/onboarding/steps/team/root.tsx | 35 ++++---- .../onboarding/steps/usecase/root.tsx | 29 +++---- .../onboarding/steps/workspace/create.tsx | 15 ++-- .../steps/workspace/join-invites.tsx | 26 ++++-- .../components/stickies/modal/stickies.tsx | 6 +- .../layouts/auth-layout/workspace-wrapper.tsx | 33 ++++--- packages/editor/package.json | 1 + .../core/components/links/link-edit-view.tsx | 24 ++++-- packages/i18n/src/locales/cs/auth.json | 40 +++++++++ packages/i18n/src/locales/cs/common.json | 15 ++++ packages/i18n/src/locales/cs/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/cs/empty-state.json | 6 ++ packages/i18n/src/locales/cs/inbox.json | 51 +++++++++++ packages/i18n/src/locales/cs/page.json | 13 +++ packages/i18n/src/locales/cs/project.json | 6 ++ packages/i18n/src/locales/cs/work-item.json | 30 +++++++ packages/i18n/src/locales/cs/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/de/auth.json | 40 +++++++++ packages/i18n/src/locales/de/common.json | 15 ++++ packages/i18n/src/locales/de/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/de/empty-state.json | 6 ++ packages/i18n/src/locales/de/inbox.json | 51 +++++++++++ packages/i18n/src/locales/de/page.json | 13 +++ packages/i18n/src/locales/de/project.json | 6 ++ packages/i18n/src/locales/de/work-item.json | 30 +++++++ packages/i18n/src/locales/de/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/en/auth.json | 40 +++++++++ packages/i18n/src/locales/en/common.json | 15 ++++ packages/i18n/src/locales/en/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/en/empty-state.json | 6 ++ packages/i18n/src/locales/en/inbox.json | 51 +++++++++++ packages/i18n/src/locales/en/page.json | 13 +++ packages/i18n/src/locales/en/project.json | 6 ++ packages/i18n/src/locales/en/work-item.json | 30 +++++++ packages/i18n/src/locales/en/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/es/auth.json | 40 +++++++++ packages/i18n/src/locales/es/common.json | 15 ++++ packages/i18n/src/locales/es/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/es/empty-state.json | 6 ++ packages/i18n/src/locales/es/inbox.json | 51 +++++++++++ packages/i18n/src/locales/es/page.json | 13 +++ packages/i18n/src/locales/es/project.json | 6 ++ packages/i18n/src/locales/es/work-item.json | 30 +++++++ packages/i18n/src/locales/es/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/fr/auth.json | 40 +++++++++ packages/i18n/src/locales/fr/common.json | 15 ++++ packages/i18n/src/locales/fr/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/fr/empty-state.json | 6 ++ packages/i18n/src/locales/fr/inbox.json | 51 +++++++++++ packages/i18n/src/locales/fr/page.json | 13 +++ packages/i18n/src/locales/fr/project.json | 6 ++ packages/i18n/src/locales/fr/work-item.json | 30 +++++++ packages/i18n/src/locales/fr/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/id/auth.json | 40 +++++++++ packages/i18n/src/locales/id/common.json | 15 ++++ packages/i18n/src/locales/id/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/id/empty-state.json | 6 ++ packages/i18n/src/locales/id/inbox.json | 51 +++++++++++ packages/i18n/src/locales/id/page.json | 13 +++ packages/i18n/src/locales/id/project.json | 6 ++ packages/i18n/src/locales/id/work-item.json | 30 +++++++ packages/i18n/src/locales/id/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/it/auth.json | 40 +++++++++ packages/i18n/src/locales/it/common.json | 15 ++++ packages/i18n/src/locales/it/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/it/empty-state.json | 6 ++ packages/i18n/src/locales/it/inbox.json | 51 +++++++++++ packages/i18n/src/locales/it/page.json | 13 +++ packages/i18n/src/locales/it/project.json | 6 ++ packages/i18n/src/locales/it/work-item.json | 30 +++++++ packages/i18n/src/locales/it/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/ja/auth.json | 40 +++++++++ packages/i18n/src/locales/ja/common.json | 15 ++++ packages/i18n/src/locales/ja/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/ja/empty-state.json | 6 ++ packages/i18n/src/locales/ja/inbox.json | 51 +++++++++++ packages/i18n/src/locales/ja/page.json | 13 +++ packages/i18n/src/locales/ja/project.json | 6 ++ packages/i18n/src/locales/ja/work-item.json | 30 +++++++ packages/i18n/src/locales/ja/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/ko/auth.json | 40 +++++++++ packages/i18n/src/locales/ko/common.json | 15 ++++ packages/i18n/src/locales/ko/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/ko/empty-state.json | 6 ++ packages/i18n/src/locales/ko/inbox.json | 51 +++++++++++ packages/i18n/src/locales/ko/page.json | 13 +++ packages/i18n/src/locales/ko/project.json | 6 ++ packages/i18n/src/locales/ko/work-item.json | 30 +++++++ packages/i18n/src/locales/ko/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/pl/auth.json | 40 +++++++++ packages/i18n/src/locales/pl/common.json | 15 ++++ packages/i18n/src/locales/pl/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/pl/empty-state.json | 6 ++ packages/i18n/src/locales/pl/inbox.json | 51 +++++++++++ packages/i18n/src/locales/pl/page.json | 13 +++ packages/i18n/src/locales/pl/project.json | 6 ++ packages/i18n/src/locales/pl/work-item.json | 30 +++++++ packages/i18n/src/locales/pl/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/pt-BR/auth.json | 40 +++++++++ packages/i18n/src/locales/pt-BR/common.json | 15 ++++ packages/i18n/src/locales/pt-BR/editor.json | 74 ++++++++++++++++ .../i18n/src/locales/pt-BR/empty-state.json | 6 ++ packages/i18n/src/locales/pt-BR/inbox.json | 51 +++++++++++ packages/i18n/src/locales/pt-BR/page.json | 13 +++ packages/i18n/src/locales/pt-BR/project.json | 6 ++ .../i18n/src/locales/pt-BR/work-item.json | 30 +++++++ .../i18n/src/locales/pt-BR/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/ro/auth.json | 40 +++++++++ packages/i18n/src/locales/ro/common.json | 15 ++++ packages/i18n/src/locales/ro/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/ro/empty-state.json | 6 ++ packages/i18n/src/locales/ro/inbox.json | 51 +++++++++++ packages/i18n/src/locales/ro/page.json | 13 +++ packages/i18n/src/locales/ro/project.json | 6 ++ packages/i18n/src/locales/ro/work-item.json | 30 +++++++ packages/i18n/src/locales/ro/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/ru/auth.json | 40 +++++++++ packages/i18n/src/locales/ru/common.json | 15 ++++ packages/i18n/src/locales/ru/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/ru/empty-state.json | 6 ++ packages/i18n/src/locales/ru/inbox.json | 51 +++++++++++ packages/i18n/src/locales/ru/page.json | 13 +++ packages/i18n/src/locales/ru/project.json | 6 ++ packages/i18n/src/locales/ru/work-item.json | 30 +++++++ packages/i18n/src/locales/ru/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/sk/auth.json | 40 +++++++++ packages/i18n/src/locales/sk/common.json | 15 ++++ packages/i18n/src/locales/sk/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/sk/empty-state.json | 6 ++ packages/i18n/src/locales/sk/inbox.json | 51 +++++++++++ packages/i18n/src/locales/sk/page.json | 13 +++ packages/i18n/src/locales/sk/project.json | 6 ++ packages/i18n/src/locales/sk/work-item.json | 30 +++++++ packages/i18n/src/locales/sk/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/tr-TR/auth.json | 40 +++++++++ packages/i18n/src/locales/tr-TR/common.json | 15 ++++ packages/i18n/src/locales/tr-TR/editor.json | 74 ++++++++++++++++ .../i18n/src/locales/tr-TR/empty-state.json | 6 ++ packages/i18n/src/locales/tr-TR/inbox.json | 51 +++++++++++ packages/i18n/src/locales/tr-TR/page.json | 13 +++ packages/i18n/src/locales/tr-TR/project.json | 6 ++ .../i18n/src/locales/tr-TR/work-item.json | 30 +++++++ .../i18n/src/locales/tr-TR/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/ua/auth.json | 40 +++++++++ packages/i18n/src/locales/ua/common.json | 15 ++++ packages/i18n/src/locales/ua/editor.json | 74 ++++++++++++++++ packages/i18n/src/locales/ua/empty-state.json | 6 ++ packages/i18n/src/locales/ua/inbox.json | 51 +++++++++++ packages/i18n/src/locales/ua/page.json | 13 +++ packages/i18n/src/locales/ua/project.json | 6 ++ packages/i18n/src/locales/ua/work-item.json | 30 +++++++ packages/i18n/src/locales/ua/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/vi-VN/auth.json | 40 +++++++++ packages/i18n/src/locales/vi-VN/common.json | 15 ++++ packages/i18n/src/locales/vi-VN/editor.json | 74 ++++++++++++++++ .../i18n/src/locales/vi-VN/empty-state.json | 6 ++ packages/i18n/src/locales/vi-VN/inbox.json | 51 +++++++++++ packages/i18n/src/locales/vi-VN/page.json | 13 +++ packages/i18n/src/locales/vi-VN/project.json | 6 ++ .../i18n/src/locales/vi-VN/work-item.json | 30 +++++++ .../i18n/src/locales/vi-VN/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/zh-CN/auth.json | 40 +++++++++ packages/i18n/src/locales/zh-CN/common.json | 15 ++++ packages/i18n/src/locales/zh-CN/editor.json | 74 ++++++++++++++++ .../i18n/src/locales/zh-CN/empty-state.json | 6 ++ packages/i18n/src/locales/zh-CN/inbox.json | 51 +++++++++++ packages/i18n/src/locales/zh-CN/page.json | 13 +++ packages/i18n/src/locales/zh-CN/project.json | 6 ++ .../i18n/src/locales/zh-CN/work-item.json | 30 +++++++ .../i18n/src/locales/zh-CN/workspace.json | 68 ++++++++++++++- packages/i18n/src/locales/zh-TW/auth.json | 40 +++++++++ packages/i18n/src/locales/zh-TW/common.json | 15 ++++ packages/i18n/src/locales/zh-TW/editor.json | 74 ++++++++++++++++ .../i18n/src/locales/zh-TW/empty-state.json | 6 ++ packages/i18n/src/locales/zh-TW/inbox.json | 51 +++++++++++ packages/i18n/src/locales/zh-TW/page.json | 13 +++ packages/i18n/src/locales/zh-TW/project.json | 6 ++ .../i18n/src/locales/zh-TW/work-item.json | 30 +++++++ .../i18n/src/locales/zh-TW/workspace.json | 68 ++++++++++++++- packages/propel/src/banner/banner.tsx | 5 +- .../propel/src/spinners/circular-spinner.tsx | 7 +- pnpm-lock.yaml | 3 + 255 files changed, 6567 insertions(+), 602 deletions(-) diff --git a/apps/space/app/error.tsx b/apps/space/app/error.tsx index 87aa8dc1992..0b6366b3738 100644 --- a/apps/space/app/error.tsx +++ b/apps/space/app/error.tsx @@ -5,34 +5,36 @@ */ // ui +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; +const handleRetry = () => { + window.location.reload(); +}; + function ErrorPage() { - const handleRetry = () => { - window.location.reload(); - }; + const { t } = useTranslation(); return (
-

Yikes! That doesn{"'"}t look good.

+

{t("space_public.error_title")}

- That crashed Plane, pun intended. No worries, though. Our engineers have been notified. If you have more - details, please write to{" "} + {t("space_public.error_description_prefix")}{" "} support@plane.so {" "} - or on our{" "} + {t("space_public.error_description_middle")}{" "} - Forum + {t("space_public.forum")} .

{/*
); diff --git a/apps/space/components/account/auth-forms/email.tsx b/apps/space/components/account/auth-forms/email.tsx index 303f9038e60..f42743d66f4 100644 --- a/apps/space/components/account/auth-forms/email.tsx +++ b/apps/space/components/account/auth-forms/email.tsx @@ -5,12 +5,13 @@ */ import type { FormEvent } from "react"; -import { useMemo, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { observer } from "mobx-react"; // icons import { CircleAlert, XCircle } from "lucide-react"; // types import { Button } from "@plane/propel/button"; +import { useTranslation } from "@plane/i18n"; import type { IEmailCheckData } from "@plane/types"; // ui import { Input, Spinner } from "@plane/ui"; @@ -25,13 +26,14 @@ type TAuthEmailForm = { export const AuthEmailForm = observer(function AuthEmailForm(props: TAuthEmailForm) { const { onSubmit, defaultEmail } = props; + const { t } = useTranslation(); // states const [isSubmitting, setIsSubmitting] = useState(false); const [email, setEmail] = useState(defaultEmail); const emailError = useMemo( - () => (email && !checkEmailValidity(email) ? { email: "Email is invalid" } : undefined), - [email] + () => (email && !checkEmailValidity(email) ? { email: t("space_auth.email_invalid") } : undefined), + [email, t] ); const handleFormSubmit = async (event: FormEvent) => { @@ -49,11 +51,15 @@ export const AuthEmailForm = observer(function AuthEmailForm(props: TAuthEmailFo const [isFocused, setIsFocused] = useState(true); const inputRef = useRef(null); + useEffect(() => { + inputRef.current?.focus(); + }, []); + return (
{email.length > 0 && (
); diff --git a/apps/space/components/account/auth-forms/password.tsx b/apps/space/components/account/auth-forms/password.tsx index 7bf8971fa4a..9c37d6cbb63 100644 --- a/apps/space/components/account/auth-forms/password.tsx +++ b/apps/space/components/account/auth-forms/password.tsx @@ -9,6 +9,7 @@ import { observer } from "mobx-react"; import { Eye, EyeOff, XCircle } from "lucide-react"; // plane imports import { API_BASE_URL, E_PASSWORD_STRENGTH } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { AuthService } from "@plane/services"; import { Input, Spinner, PasswordStrengthIndicator } from "@plane/ui"; @@ -41,6 +42,7 @@ const authService = new AuthService(); export const AuthPasswordForm = observer(function AuthPasswordForm(props: Props) { const { email, nextPath, isSMTPConfigured, handleAuthStep, handleEmailClear, mode } = props; + const { t } = useTranslation(); // ref const formRef = useRef(null); // states @@ -79,14 +81,11 @@ export const AuthPasswordForm = observer(function AuthPasswordForm(props: Props) const isButtonDisabled = useMemo( () => - !isSubmitting && - !!passwordFormData.password && - (mode === EAuthModes.SIGN_UP - ? getPasswordStrength(passwordFormData.password) === E_PASSWORD_STRENGTH.STRENGTH_VALID && - passwordFormData.password === passwordFormData.confirm_password - : true) - ? false - : true, + isSubmitting || + !passwordFormData.password || + (mode === EAuthModes.SIGN_UP && + (getPasswordStrength(passwordFormData.password) !== E_PASSWORD_STRENGTH.STRENGTH_VALID || + passwordFormData.password !== passwordFormData.confirm_password)), [isSubmitting, mode, passwordFormData.confirm_password, passwordFormData.password] ); @@ -123,7 +122,7 @@ export const AuthPasswordForm = observer(function AuthPasswordForm(props: Props)
handleFormChange("password", e.target.value)} - placeholder="Enter password" + placeholder={t("space_auth.enter_password")} className="h-10 w-full border border-subtle !bg-surface-1 pr-12 disable-autofill-style placeholder:text-placeholder" onFocus={() => setIsPasswordInputFocused(true)} onBlur={() => setIsPasswordInputFocused(false)} autoComplete="off" - autoFocus /> {showPassword?.password ? (
handleFormChange("confirm_password", e.target.value)} - placeholder="Confirm password" + placeholder={t("space_auth.confirm_password")} className="h-10 w-full border border-subtle !bg-surface-1 pr-12 disable-autofill-style placeholder:text-placeholder" onFocus={() => setIsRetryPasswordInputFocused(true)} onBlur={() => setIsRetryPasswordInputFocused(false)} @@ -208,7 +206,9 @@ export const AuthPasswordForm = observer(function AuthPasswordForm(props: Props)
{!!passwordFormData.confirm_password && passwordFormData.password !== passwordFormData.confirm_password && - renderPasswordMatchError && Passwords don{"'"}t match} + renderPasswordMatchError && ( + {t("space_auth.passwords_dont_match")} + )}
)} @@ -219,9 +219,9 @@ export const AuthPasswordForm = observer(function AuthPasswordForm(props: Props) {isSubmitting ? ( ) : isSMTPConfigured ? ( - "Continue" + t("space_auth.continue") ) : ( - "Go to workspace" + t("space_auth.go_to_workspace") )} {isSMTPConfigured && ( @@ -232,13 +232,13 @@ export const AuthPasswordForm = observer(function AuthPasswordForm(props: Props) className="w-full" size="xl" > - Sign in with unique code + {t("space_auth.sign_in_with_unique_code")} )} ) : ( )}
diff --git a/apps/space/components/account/auth-forms/unique-code.tsx b/apps/space/components/account/auth-forms/unique-code.tsx index c1dd21278b6..4ccdb089658 100644 --- a/apps/space/components/account/auth-forms/unique-code.tsx +++ b/apps/space/components/account/auth-forms/unique-code.tsx @@ -8,6 +8,7 @@ import React, { useEffect, useState } from "react"; import { CircleCheck, XCircle } from "lucide-react"; // plane imports import { API_BASE_URL } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { AuthService } from "@plane/services"; import { Input, Spinner } from "@plane/ui"; @@ -39,6 +40,7 @@ const defaultValues: TUniqueCodeFormValues = { export function AuthUniqueCodeForm(props: TAuthUniqueCodeForm) { const { mode, email, nextPath, handleEmailClear, generateEmailUniqueCode } = props; + const { t } = useTranslation(); // derived values const defaultResetTimerValue = 5; // states @@ -52,10 +54,10 @@ export function AuthUniqueCodeForm(props: TAuthUniqueCodeForm) { const handleFormChange = (key: keyof TUniqueCodeFormValues, value: string) => setUniqueCodeFormData((prev) => ({ ...prev, [key]: value })); - const generateNewCode = async (email: string) => { + const generateNewCode = async (targetEmail: string) => { try { setIsRequestingNewCode(true); - const uniqueCode = await generateEmailUniqueCode(email); + const uniqueCode = await generateEmailUniqueCode(targetEmail); setResendCodeTimer(defaultResetTimerValue); handleFormChange("code", uniqueCode?.code || ""); setIsRequestingNewCode(false); @@ -87,7 +89,7 @@ export function AuthUniqueCodeForm(props: TAuthUniqueCodeForm) {

- Paste the code sent to your email + {t("space_auth.paste_code_sent")}

diff --git a/apps/space/components/account/terms-and-conditions.tsx b/apps/space/components/account/terms-and-conditions.tsx index 1e9a71a6ee0..3319ca22441 100644 --- a/apps/space/components/account/terms-and-conditions.tsx +++ b/apps/space/components/account/terms-and-conditions.tsx @@ -4,22 +4,29 @@ * See the LICENSE file for details. */ +import { useTranslation } from "@plane/i18n"; + type Props = { isSignUp?: boolean; }; export function TermsAndConditions(props: Props) { const { isSignUp = false } = props; + const { t } = useTranslation(); return (

- {isSignUp ? "By creating an account" : "By signing in"}, you agree to our{" \n"} + {isSignUp ? t("space_public.by_creating_account") : t("space_public.by_signing_in")},{" "} + {t("space_public.you_agree_to_our")} + {" \n"} - Terms of Service + + {t("space_public.terms_of_service")} + {" "} - and{" "} + {t("space_public.and")}{" "} - Privacy Policy + {t("space_public.privacy_policy")} {"."}

diff --git a/apps/space/components/account/user-logged-in.tsx b/apps/space/components/account/user-logged-in.tsx index 42815b013b4..89400c0c33c 100644 --- a/apps/space/components/account/user-logged-in.tsx +++ b/apps/space/components/account/user-logged-in.tsx @@ -5,6 +5,7 @@ */ import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; import { PlaneLockup } from "@plane/propel/icons"; // assets import UserLoggedInImage from "@/app/assets/user-logged-in.svg?url"; @@ -17,6 +18,7 @@ import { useUser } from "@/hooks/store/use-user"; export const UserLoggedIn = observer(function UserLoggedIn() { // store hooks const { data: user } = useUser(); + const { t } = useTranslation(); if (!user) return null; @@ -31,14 +33,15 @@ export const UserLoggedIn = observer(function UserLoggedIn() {
- User already logged in + {t("space_public.user_already_logged_in")}
-

Nice! Just one more step.

-

- Enter the public-share URL or link of the view or Page you are trying to see in the browser{"'"}s address - bar. -

+

{t("space_public.logged_in_title")}

+

{t("space_public.logged_in_hint")}

diff --git a/apps/space/components/common/powered-by.tsx b/apps/space/components/common/powered-by.tsx index 05da512100b..d14edd6ee10 100644 --- a/apps/space/components/common/powered-by.tsx +++ b/apps/space/components/common/powered-by.tsx @@ -5,6 +5,7 @@ */ import { WEBSITE_URL } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; // assets import { PlaneLogo } from "@plane/propel/icons"; @@ -15,6 +16,7 @@ type TPoweredBy = { export function PoweredBy(props: TPoweredBy) { // props const { disabled = false } = props; + const { t } = useTranslation(); if (disabled || !WEBSITE_URL) return null; @@ -27,7 +29,7 @@ export function PoweredBy(props: TPoweredBy) { >
- Powered by Plane Publish + {t("space_public.powered_by")} Plane Publish
); diff --git a/apps/space/components/instance/instance-failure-view.tsx b/apps/space/components/instance/instance-failure-view.tsx index 2bf810e9d01..8336204d043 100644 --- a/apps/space/components/instance/instance-failure-view.tsx +++ b/apps/space/components/instance/instance-failure-view.tsx @@ -5,34 +5,36 @@ */ import { useTheme } from "next-themes"; +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; // assets import InstanceFailureDarkImage from "@/app/assets/instance/instance-failure-dark.svg?url"; import InstanceFailureImage from "@/app/assets/instance/instance-failure.svg?url"; +const handleRetry = () => { + window.location.reload(); +}; + export function InstanceFailureView() { const { resolvedTheme } = useTheme(); + const { t } = useTranslation(); const instanceImage = resolvedTheme === "dark" ? InstanceFailureDarkImage : InstanceFailureImage; - const handleRetry = () => { - window.location.reload(); - }; - return (
- Plane instance failure image -

Unable to fetch instance details.

+ {t("space_public.instance_failure_image_alt")} +

{t("space_public.instance_failure_title")}

- We were unable to fetch the details of the instance.
- Fret not, it might just be a connectivity work items. + {t("space_public.instance_failure_description")}
+ {t("space_public.instance_failure_hint")}

diff --git a/apps/space/components/issues/filters/labels.tsx b/apps/space/components/issues/filters/labels.tsx index db235c5b798..5e98fe33501 100644 --- a/apps/space/components/issues/filters/labels.tsx +++ b/apps/space/components/issues/filters/labels.tsx @@ -6,6 +6,7 @@ import React, { useState } from "react"; // plane imports +import { useTranslation } from "@plane/i18n"; import { Loader } from "@plane/ui"; // types import type { IIssueLabel } from "@/types/issue"; @@ -26,6 +27,7 @@ type Props = { export function FilterLabels(props: Props) { const { appliedFilters, handleUpdate, labels, searchQuery } = props; + const { t } = useTranslation(); const [itemsToRender, setItemsToRender] = useState(5); const [previewEnabled, setPreviewEnabled] = useState(true); @@ -44,7 +46,7 @@ export function FilterLabels(props: Props) { return ( <> 0 ? ` (${appliedFiltersCount})` : ""}`} + title={`${t("labels")}${appliedFiltersCount > 0 ? ` (${appliedFiltersCount})` : ""}`} isPreviewEnabled={previewEnabled} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} /> @@ -56,7 +58,7 @@ export function FilterLabels(props: Props) { {filteredOptions.slice(0, itemsToRender).map((label) => ( handleUpdate(label?.id)} icon={} title={label.name} @@ -68,12 +70,14 @@ export function FilterLabels(props: Props) { className="ml-8 text-11 font-medium text-accent-primary" onClick={handleViewToggle} > - {itemsToRender === filteredOptions.length ? "View less" : "View all"} + {itemsToRender === filteredOptions.length + ? t("space_public.view_less") + : t("space_public.view_all")} )} ) : ( -

No matches found

+

{t("space_public.no_matches_found")}

) ) : ( diff --git a/apps/space/components/issues/filters/root.tsx b/apps/space/components/issues/filters/root.tsx index 983f00ad4ba..434aede1113 100644 --- a/apps/space/components/issues/filters/root.tsx +++ b/apps/space/components/issues/filters/root.tsx @@ -10,6 +10,7 @@ import { observer } from "mobx-react"; import { useRouter } from "next/navigation"; // constants import { ISSUE_DISPLAY_FILTERS_BY_LAYOUT } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; // components import { FiltersDropdown } from "@/components/issues/filters/helpers/dropdown"; import { FilterSelection } from "@/components/issues/filters/selection"; @@ -26,6 +27,7 @@ type IssueFiltersDropdownProps = { export const IssueFiltersDropdown = observer(function IssueFiltersDropdown(props: IssueFiltersDropdownProps) { const { anchor } = props; + const { t } = useTranslation(); // router const router = useRouter(); // hooks @@ -63,7 +65,7 @@ export const IssueFiltersDropdown = observer(function IssueFiltersDropdown(props return (
- + setFiltersSearchQuery(e.target.value)} - autoFocus /> {filtersSearchQuery !== "" && ( )} ) : ( -

No matches found

+

{t("space_public.no_matches_found")}

) ) : ( diff --git a/apps/space/components/issues/issue-layouts/error.tsx b/apps/space/components/issues/issue-layouts/error.tsx index 40e4f554038..cae5bee1f90 100644 --- a/apps/space/components/issues/issue-layouts/error.tsx +++ b/apps/space/components/issues/issue-layouts/error.tsx @@ -5,9 +5,12 @@ */ // assets +import { useTranslation } from "@plane/i18n"; import SomethingWentWrongImage from "@/app/assets/something-went-wrong.svg?url"; export function SomethingWentWrongError() { + const { t } = useTranslation(); + return (
@@ -15,13 +18,13 @@ export function SomethingWentWrongError() {
Oops! Something went wrong
-

Oops! Something went wrong.

-

The public board does not exist. Please check the URL.

+

{t("space_public.something_went_wrong")}

+

{t("space_public.public_board_not_found")}

); diff --git a/apps/space/components/issues/issue-layouts/issue-layout-HOC.tsx b/apps/space/components/issues/issue-layouts/issue-layout-HOC.tsx index 6a9a719bcd3..c59f409b15d 100644 --- a/apps/space/components/issues/issue-layouts/issue-layout-HOC.tsx +++ b/apps/space/components/issues/issue-layouts/issue-layout-HOC.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react"; // plane imports +import { useTranslation } from "@plane/i18n"; import type { TLoader } from "@plane/types"; // components import { LogoSpinner } from "@/components/common/logo-spinner"; @@ -22,6 +23,7 @@ interface Props { export const IssueLayoutHOC = observer(function IssueLayoutHOC(props: Props) { const { getIssueLoader, getGroupIssueCount } = props; + const { t } = useTranslation(); const issueCount = getGroupIssueCount(undefined, undefined, false); @@ -34,7 +36,9 @@ export const IssueLayoutHOC = observer(function IssueLayoutHOC(props: Props) { } if (getGroupIssueCount(undefined, undefined, false) === 0) { - return
No work items found
; + return ( +
{t("space_public.no_work_items_found")}
+ ); } return <>{props.children}; diff --git a/apps/space/components/issues/issue-layouts/kanban/default.tsx b/apps/space/components/issues/issue-layouts/kanban/default.tsx index fa934aeb995..693b6ae9a2f 100644 --- a/apps/space/components/issues/issue-layouts/kanban/default.tsx +++ b/apps/space/components/issues/issue-layouts/kanban/default.tsx @@ -7,6 +7,7 @@ import type { MutableRefObject } from "react"; import { isNil } from "lodash-es"; import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; // types import type { GroupByColumnTypes, @@ -68,8 +69,12 @@ export const KanBan = observer(function KanBan(props: IKanBan) { const cycle = useCycle(); const modules = useModule(); const state = useStates(); + const { t } = useTranslation(); - const groupList = getGroupByColumns(groupBy as GroupByColumnTypes, cycle, modules, label, state, member); + const groupList = getGroupByColumns(groupBy as GroupByColumnTypes, cycle, modules, label, state, member, false, { + allWorkItems: `${t("common.all")} ${t("work_items")}`, + none: t("common.none"), + }); if (!groupList) return null; diff --git a/apps/space/components/issues/issue-layouts/kanban/swimlanes.tsx b/apps/space/components/issues/issue-layouts/kanban/swimlanes.tsx index 977bf5bb0a2..f68528c6076 100644 --- a/apps/space/components/issues/issue-layouts/kanban/swimlanes.tsx +++ b/apps/space/components/issues/issue-layouts/kanban/swimlanes.tsx @@ -7,6 +7,7 @@ import type { MutableRefObject } from "react"; import { useState } from "react"; import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; // types import type { GroupByColumnTypes, @@ -69,9 +70,33 @@ export const KanBanSwimLanes = observer(function KanBanSwimLanes(props: IKanBanS const cycle = useCycle(); const modules = useModule(); const state = useStates(); + const { t } = useTranslation(); - const groupByList = getGroupByColumns(groupBy as GroupByColumnTypes, cycle, modules, label, state, member); - const subGroupByList = getGroupByColumns(subGroupBy as GroupByColumnTypes, cycle, modules, label, state, member); + const localizedLabels = { + allWorkItems: `${t("common.all")} ${t("work_items")}`, + none: t("common.none"), + }; + + const groupByList = getGroupByColumns( + groupBy as GroupByColumnTypes, + cycle, + modules, + label, + state, + member, + false, + localizedLabels + ); + const subGroupByList = getGroupByColumns( + subGroupBy as GroupByColumnTypes, + cycle, + modules, + label, + state, + member, + false, + localizedLabels + ); if (!groupByList || !subGroupByList) return null; diff --git a/apps/space/components/issues/issue-layouts/list/default.tsx b/apps/space/components/issues/issue-layouts/list/default.tsx index f8f545b47ee..f5645156be3 100644 --- a/apps/space/components/issues/issue-layouts/list/default.tsx +++ b/apps/space/components/issues/issue-layouts/list/default.tsx @@ -6,6 +6,7 @@ import { useRef } from "react"; import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; // types import type { GroupByColumnTypes, @@ -59,8 +60,12 @@ export const List = observer(function List(props: IList) { const cycle = useCycle(); const modules = useModule(); const state = useStates(); + const { t } = useTranslation(); - const groupList = getGroupByColumns(groupBy as GroupByColumnTypes, cycle, modules, label, state, member, true); + const groupList = getGroupByColumns(groupBy as GroupByColumnTypes, cycle, modules, label, state, member, true, { + allWorkItems: `${t("common.all")} ${t("work_items")}`, + none: t("common.none"), + }); if (!groupList) return null; diff --git a/apps/space/components/issues/issue-layouts/properties/all-properties.tsx b/apps/space/components/issues/issue-layouts/properties/all-properties.tsx index 9d9c9dace58..47d6e0b1a3b 100644 --- a/apps/space/components/issues/issue-layouts/properties/all-properties.tsx +++ b/apps/space/components/issues/issue-layouts/properties/all-properties.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react"; import { Paperclip } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; import { LinkIcon, ViewsIcon } from "@plane/propel/icons"; // plane imports import { Tooltip } from "@plane/propel/tooltip"; @@ -33,6 +34,7 @@ export interface IIssueProperties { export const IssueProperties = observer(function IssueProperties(props: IIssueProperties) { const { issue, displayProperties, className } = props; + const { t } = useTranslation(); if (!displayProperties || !issue.project_id) return null; @@ -138,7 +140,7 @@ export const IssueProperties = observer(function IssueProperties(props: IIssuePr displayPropertyKey="sub_issue_count" shouldRenderProperty={(properties) => !!properties.sub_issue_count && !!issue.sub_issues_count} > - +
!!properties.attachment_count && !!issue.attachment_count} > - +
{issue.attachment_count}
@@ -173,7 +175,7 @@ export const IssueProperties = observer(function IssueProperties(props: IIssuePr displayPropertyKey="link" shouldRenderProperty={(properties) => !!properties.link && !!issue.link_count} > - +
{issue.link_count}
diff --git a/apps/space/components/issues/issue-layouts/properties/cycle.tsx b/apps/space/components/issues/issue-layouts/properties/cycle.tsx index 4f70bac2a5b..0f757ded2f8 100644 --- a/apps/space/components/issues/issue-layouts/properties/cycle.tsx +++ b/apps/space/components/issues/issue-layouts/properties/cycle.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react"; // plane ui +import { useTranslation } from "@plane/i18n"; import { CycleIcon } from "@plane/propel/icons"; import { Tooltip } from "@plane/propel/tooltip"; // plane utils @@ -19,12 +20,13 @@ type Props = { }; export const IssueBlockCycle = observer(function IssueBlockCycle({ cycleId, shouldShowBorder = true }: Props) { + const { t } = useTranslation(); const { getCycleById } = useCycle(); const cycle = getCycleById(cycleId); return ( - +
-
{cycle?.name ?? "No Cycle"}
+
{cycle?.name ?? t("space_public.no_cycle")}
diff --git a/apps/space/components/issues/issue-layouts/properties/due-date.tsx b/apps/space/components/issues/issue-layouts/properties/due-date.tsx index 7fa853b4489..c547555580c 100644 --- a/apps/space/components/issues/issue-layouts/properties/due-date.tsx +++ b/apps/space/components/issues/issue-layouts/properties/due-date.tsx @@ -5,6 +5,7 @@ */ import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; import { DueDatePropertyIcon } from "@plane/propel/icons"; import { Tooltip } from "@plane/propel/tooltip"; import { cn } from "@plane/utils"; @@ -23,6 +24,7 @@ type Props = { export const IssueBlockDate = observer(function IssueBlockDate(props: Props) { const { due_date, stateId, shouldHighLight = true, shouldShowBorder = true } = props; + const { t } = useTranslation(); const { getStateById } = useStates(); const state = getStateById(stateId); @@ -30,7 +32,7 @@ export const IssueBlockDate = observer(function IssueBlockDate(props: Props) { const formattedDate = renderFormattedDate(due_date); return ( - +
- {formattedDate ? formattedDate : "No Date"} + {formattedDate ? formattedDate : t("space_public.no_date")}
); diff --git a/apps/space/components/issues/issue-layouts/properties/labels.tsx b/apps/space/components/issues/issue-layouts/properties/labels.tsx index 4a6d1ab0a03..c296783691c 100644 --- a/apps/space/components/issues/issue-layouts/properties/labels.tsx +++ b/apps/space/components/issues/issue-layouts/properties/labels.tsx @@ -5,6 +5,7 @@ */ import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; import { LabelPropertyIcon } from "@plane/propel/icons"; // plane imports import { Tooltip } from "@plane/propel/tooltip"; @@ -17,20 +18,21 @@ type Props = { }; export const IssueBlockLabels = observer(function IssueBlockLabels({ labelIds, shouldShowLabel = false }: Props) { + const { t } = useTranslation(); const { getLabelsByIds } = useLabel(); const labels = getLabelsByIds(labelIds); - const labelsString = labels.length > 0 ? labels.map((label) => label.name).join(", ") : "No Labels"; + const labelsString = labels.length > 0 ? labels.map((label) => label.name).join(", ") : t("space_public.no_labels"); if (labels.length <= 0) return ( - +
- {shouldShowLabel && No Labels} + {shouldShowLabel && {t("space_public.no_labels")}}
); @@ -40,7 +42,7 @@ export const IssueBlockLabels = observer(function IssueBlockLabels({ labelIds, s {labels.length <= 2 ? ( <> {labels.map((label) => ( - +
- +
- {`${labels.length} Labels`} + {t("space_public.labels_count", { count: labels.length })}
diff --git a/apps/space/components/issues/issue-layouts/properties/member.tsx b/apps/space/components/issues/issue-layouts/properties/member.tsx index c24f115932e..20ebe4a8b99 100644 --- a/apps/space/components/issues/issue-layouts/properties/member.tsx +++ b/apps/space/components/issues/issue-layouts/properties/member.tsx @@ -7,6 +7,7 @@ import { observer } from "mobx-react"; // icons import type { LucideIcon } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; import { MembersPropertyIcon } from "@plane/propel/icons"; // plane ui import { Avatar, AvatarGroup } from "@plane/ui"; @@ -61,6 +62,7 @@ export const ButtonAvatars = observer(function ButtonAvatars(props: AvatarProps) }); export const IssueBlockMembers = observer(function IssueBlockMembers({ memberIds, shouldShowBorder = true }: Props) { + const { t } = useTranslation(); const { getMembersByIds } = useMember(); const members = getMembersByIds(memberIds); @@ -75,7 +77,7 @@ export const IssueBlockMembers = observer(function IssueBlockMembers({ memberIds
{!shouldShowBorder && members.length <= 1 && ( - {members?.[0]?.member__display_name ?? "No Assignees"} + {members?.[0]?.member__display_name ?? t("space_public.no_assignees")} )}
diff --git a/apps/space/components/issues/issue-layouts/properties/modules.tsx b/apps/space/components/issues/issue-layouts/properties/modules.tsx index 5e80222063b..16ba65ea94b 100644 --- a/apps/space/components/issues/issue-layouts/properties/modules.tsx +++ b/apps/space/components/issues/issue-layouts/properties/modules.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react"; // plane ui +import { useTranslation } from "@plane/i18n"; import { ModuleIcon } from "@plane/propel/icons"; import { Tooltip } from "@plane/propel/tooltip"; // plane utils @@ -19,6 +20,7 @@ type Props = { }; export const IssueBlockModules = observer(function IssueBlockModules({ moduleIds, shouldShowBorder = true }: Props) { + const { t } = useTranslation(); const { getModulesByIds } = useModule(); const modules = getModulesByIds(moduleIds ?? []); @@ -27,7 +29,7 @@ export const IssueBlockModules = observer(function IssueBlockModules({ moduleIds return (
- + {modules.length <= 1 ? (
-
{modules?.[0]?.name ?? "No Modules"}
+
{modules?.[0]?.name ?? t("space_public.no_modules")}
) : (
-
{modules.length} Modules
+
{t("space_public.modules_count", { count: modules.length })}
)} diff --git a/apps/space/components/issues/issue-layouts/properties/priority.tsx b/apps/space/components/issues/issue-layouts/properties/priority.tsx index 9b4dc3d0176..084c078ac6d 100644 --- a/apps/space/components/issues/issue-layouts/properties/priority.tsx +++ b/apps/space/components/issues/issue-layouts/properties/priority.tsx @@ -35,7 +35,7 @@ export function IssueBlockPriority({ if (priority_detail === null) return <>; return ( - +
+
{ switch (groupBy) { case "cycle": - return getCycleColumns(cycle); + return getCycleColumns(cycle, localizedLabels); case "module": - return getModuleColumns(module); + return getModuleColumns(module, localizedLabels); case "state": return getStateColumns(projectState); case "priority": return getPriorityColumns(); case "labels": - return getLabelsColumns(label) as any; + return getLabelsColumns(label, localizedLabels) as any; case "assignees": - return getAssigneeColumns(member); + return getAssigneeColumns(member, localizedLabels); case "created_by": return getCreatedByColumns(member) as any; default: - if (includeNone) return [{ id: `All Issues`, name: `All work items`, payload: {}, icon: undefined }]; + if (includeNone) + return [ + { id: `All Issues`, name: localizedLabels?.allWorkItems ?? `All work items`, payload: {}, icon: undefined }, + ]; } }; -const getCycleColumns = (cycleStore: ICycleStore): IGroupByColumn[] | undefined => { +const getCycleColumns = ( + cycleStore: ICycleStore, + localizedLabels?: TGroupByLocalizedLabels +): IGroupByColumn[] | undefined => { const { cycles } = cycleStore; if (!cycles) return; @@ -78,7 +90,7 @@ const getCycleColumns = (cycleStore: ICycleStore): IGroupByColumn[] | undefined }); cycleGroups.push({ id: "None", - name: "None", + name: localizedLabels?.none ?? "None", icon: , payload: { cycle_id: null }, }); @@ -86,7 +98,10 @@ const getCycleColumns = (cycleStore: ICycleStore): IGroupByColumn[] | undefined return cycleGroups; }; -const getModuleColumns = (moduleStore: IIssueModuleStore): IGroupByColumn[] | undefined => { +const getModuleColumns = ( + moduleStore: IIssueModuleStore, + localizedLabels?: TGroupByLocalizedLabels +): IGroupByColumn[] | undefined => { const { modules } = moduleStore; if (!modules) return; @@ -104,7 +119,7 @@ const getModuleColumns = (moduleStore: IIssueModuleStore): IGroupByColumn[] | un }) as any; moduleGroups.push({ id: "None", - name: "None", + name: localizedLabels?.none ?? "None", icon: , payload: { module_ids: [] }, }); @@ -139,49 +154,55 @@ const getPriorityColumns = () => { })); }; -const getLabelsColumns = (label: IIssueLabelStore) => { - const { labels: storeLabels } = label; +const getLabelsColumns = (labelStore: IIssueLabelStore, localizedLabels?: TGroupByLocalizedLabels) => { + const { labels: storeLabels } = labelStore; if (!storeLabels) return; - const labels = [...storeLabels, { id: "None", name: "None", color: "#666" }]; + const labels = [...storeLabels, { id: "None", name: localizedLabels?.none ?? "None", color: "#666" }]; - return labels.map((label) => ({ - id: label.id, - name: label.name, + return labels.map((labelInfo) => ({ + id: labelInfo.id, + name: labelInfo.name, icon: ( -
+
), - payload: label?.id === "None" ? {} : { label_ids: [label.id] }, + payload: labelInfo?.id === "None" ? {} : { label_ids: [labelInfo.id] }, })); }; -const getAssigneeColumns = (member: IIssueMemberStore) => { - const { members } = member; +const getAssigneeColumns = ( + memberStore: IIssueMemberStore, + localizedLabels?: TGroupByLocalizedLabels +): IGroupByColumn[] | undefined => { + const { members } = memberStore; if (!members) return; - const assigneeColumns: any = members.map((member) => ({ - id: member.id, - name: member?.member__display_name || "", - icon: , - payload: { assignee_ids: [member.id] }, + const assigneeColumns: IGroupByColumn[] = members.map((memberInfo) => ({ + id: memberInfo.id, + name: memberInfo?.member__display_name || "", + icon: , + payload: { assignee_ids: [memberInfo.id] }, })); - assigneeColumns.push({ id: "None", name: "None", icon: , payload: {} }); + assigneeColumns.push({ id: "None", name: localizedLabels?.none ?? "None", icon: , payload: {} }); return assigneeColumns; }; -const getCreatedByColumns = (member: IIssueMemberStore) => { - const { members } = member; +const getCreatedByColumns = (memberStore: IIssueMemberStore) => { + const { members } = memberStore; if (!members) return; - return members.map((member) => ({ - id: member.id, - name: member?.member__display_name || "", - icon: , + return members.map((memberInfo) => ({ + id: memberInfo.id, + name: memberInfo?.member__display_name || "", + icon: , payload: {}, })); }; diff --git a/apps/space/components/issues/navbar/user-avatar.tsx b/apps/space/components/issues/navbar/user-avatar.tsx index 595fe570db6..99a8ab2ede3 100644 --- a/apps/space/components/issues/navbar/user-avatar.tsx +++ b/apps/space/components/issues/navbar/user-avatar.tsx @@ -13,6 +13,7 @@ import { LogOut } from "lucide-react"; import { Popover, Transition } from "@headlessui/react"; // plane imports import { API_BASE_URL } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { AuthService } from "@plane/services"; import { Avatar } from "@plane/ui"; @@ -27,6 +28,7 @@ const authService = new AuthService(); export const UserAvatar = observer(function UserAvatar() { const pathName = usePathname(); const searchParams = useSearchParams(); + const { t } = useTranslation(); // query params const board = searchParams.get("board") || undefined; const labels = searchParams.get("labels") || undefined; @@ -78,7 +80,7 @@ export const UserAvatar = observer(function UserAvatar() { {currentUser?.display_name || `${currentUser?.first_name} ${currentUser?.first_name}` || currentUser?.email || - "User"} + t("space_public.user")} @@ -107,7 +109,7 @@ export const UserAvatar = observer(function UserAvatar() { className="flex min-w-36 cursor-pointer items-center gap-2 rounded-sm p-2 text-13 whitespace-nowrap hover:bg-layer-transparent-hover" > -
Sign out
+
{t("sign_out")}
)} @@ -119,7 +121,7 @@ export const UserAvatar = observer(function UserAvatar() { ) : (
- +
)} diff --git a/apps/space/components/issues/peek-overview/comment/add-comment.tsx b/apps/space/components/issues/peek-overview/comment/add-comment.tsx index acd86cdd5cf..889c83b47b7 100644 --- a/apps/space/components/issues/peek-overview/comment/add-comment.tsx +++ b/apps/space/components/issues/peek-overview/comment/add-comment.tsx @@ -9,6 +9,7 @@ import { observer } from "mobx-react"; import { useForm, Controller } from "react-hook-form"; // plane imports import type { EditorRefApi } from "@plane/editor"; +import { useTranslation } from "@plane/i18n"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; import { SitesFileService } from "@plane/services"; import type { TIssuePublicComment } from "@plane/types"; @@ -32,6 +33,7 @@ type Props = { export const AddComment = observer(function AddComment(props: Props) { const { anchor } = props; + const { t } = useTranslation(); // states const [uploadedAssetIds, setUploadAssetIds] = useState([]); // refs @@ -52,24 +54,23 @@ export const AddComment = observer(function AddComment(props: Props) { const onSubmit = async (formData: TIssuePublicComment) => { if (!anchor || !issueId || isSubmitting || !formData.comment_html) return; - await addIssueComment(anchor, issueId, formData) - .then(async (res) => { - reset(defaultValues); - editorRef.current?.clearEditor(); - if (uploadedAssetIds.length > 0) { - await fileService.updateBulkAssetsUploadStatus(anchor, res.id, { - asset_ids: uploadedAssetIds, - }); - setUploadAssetIds([]); - } - }) - .catch(() => - setToast({ - type: TOAST_TYPE.ERROR, - title: "Error!", - message: "Comment could not be posted. Please try again.", - }) - ); + try { + const res = await addIssueComment(anchor, issueId, formData); + reset(defaultValues); + editorRef.current?.clearEditor(); + if (uploadedAssetIds.length > 0) { + await fileService.updateBulkAssetsUploadStatus(anchor, res.id, { + asset_ids: uploadedAssetIds, + }); + setUploadAssetIds([]); + } + } catch { + setToast({ + type: TOAST_TYPE.ERROR, + title: t("error"), + message: t("space_public.comment_post_error"), + }); + } }; // TODO: on click if he user is not logged in redirect to login page @@ -96,7 +97,7 @@ export const AddComment = observer(function AddComment(props: Props) { } onChange={(comment_json, comment_html) => onChange(comment_html)} isSubmitting={isSubmitting} - placeholder="Add comment..." + placeholder={t("space_public.add_comment")} uploadFile={async (blockId, file) => { const { asset_id } = await uploadCommentAsset(file, anchor); setUploadAssetIds((prev) => [...prev, asset_id]); diff --git a/apps/space/components/issues/peek-overview/comment/comment-detail-card.tsx b/apps/space/components/issues/peek-overview/comment/comment-detail-card.tsx index 27506d837bb..a42e84f533f 100644 --- a/apps/space/components/issues/peek-overview/comment/comment-detail-card.tsx +++ b/apps/space/components/issues/peek-overview/comment/comment-detail-card.tsx @@ -11,6 +11,7 @@ import { MessageSquare, MoreVertical } from "lucide-react"; import { Menu, Transition } from "@headlessui/react"; // plane imports import type { EditorRefApi } from "@plane/editor"; +import { useTranslation } from "@plane/i18n"; import { CheckIcon, CloseIcon } from "@plane/propel/icons"; import type { TIssuePublicComment } from "@plane/types"; import { getFileURL } from "@plane/utils"; @@ -32,6 +33,7 @@ type Props = { export const CommentCard = observer(function CommentCard(props: Props) { const { anchor, comment } = props; + const { t } = useTranslation(); // store hooks const { peekId, deleteIssueComment, updateIssueComment, uploadCommentAsset } = useIssueDetails(); const { data: currentUser } = useUser(); @@ -72,7 +74,9 @@ export const CommentCard = observer(function CommentCard(props: Props) { {
- {comment.actor_detail.is_bot ? comment.actor_detail.first_name + " Bot" : comment.actor_detail.display_name} + {comment.actor_detail.is_bot + ? t("space_public.bot_name", { name: comment.actor_detail.first_name }) + : comment.actor_detail.display_name}

- <>commented {timeAgo(comment.created_at)} + <>{t("space_public.commented_time", { time: timeAgo(comment.created_at) })}

@@ -199,7 +205,7 @@ export const CommentCard = observer(function CommentCard(props: Props) { active ? "bg-layer-transparent-hover" : "" }`} > - Edit + {t("edit")}
)} @@ -214,7 +220,7 @@ export const CommentCard = observer(function CommentCard(props: Props) { active ? "bg-layer-transparent-hover" : "" }`} > - Delete + {t("delete")}
)} diff --git a/apps/space/components/issues/peek-overview/header.tsx b/apps/space/components/issues/peek-overview/header.tsx index 764ac4ebf87..2c44fbeb126 100644 --- a/apps/space/components/issues/peek-overview/header.tsx +++ b/apps/space/components/issues/peek-overview/header.tsx @@ -9,6 +9,7 @@ import { observer } from "mobx-react"; import { MoveRight } from "lucide-react"; import { Listbox, Transition } from "@headlessui/react"; // ui +import { useTranslation } from "@plane/i18n"; import { LinkIcon, CenterPanelIcon, FullScreenPanelIcon, SidePanelIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; // helpers @@ -27,23 +28,24 @@ type Props = { const PEEK_MODES: { key: IPeekMode; icon: any; - label: string; + labelKey: string; }[] = [ - { key: "side", icon: SidePanelIcon, label: "Side Peek" }, + { key: "side", icon: SidePanelIcon, labelKey: "space_public.peek.side" }, { key: "modal", icon: CenterPanelIcon, - label: "Modal", + labelKey: "space_public.peek.modal", }, { key: "full", icon: FullScreenPanelIcon, - label: "Full Screen", + labelKey: "space_public.peek.full_screen", }, ]; export const PeekOverviewHeader = observer(function PeekOverviewHeader(props: Props) { const { handleClose } = props; + const { t } = useTranslation(); const { peekMode, setPeekMode } = useIssueDetails(); const isClipboardWriteAllowed = useClipboardWritePermission(); @@ -54,9 +56,10 @@ export const PeekOverviewHeader = observer(function PeekOverviewHeader(props: Pr copyTextToClipboard(urlToCopy).then(() => { setToast({ type: TOAST_TYPE.SUCCESS, - title: "Link copied!", - message: "Work item link copied to clipboard.", + title: t("space_public.link_copied"), + message: t("space_public.work_item_link_copied"), }); + return undefined; }); }; @@ -106,7 +109,7 @@ export const PeekOverviewHeader = observer(function PeekOverviewHeader(props: Pr >
- {mode.label} + {t(mode.labelKey)}
))} @@ -120,7 +123,7 @@ export const PeekOverviewHeader = observer(function PeekOverviewHeader(props: Pr type="button" onClick={handleCopyLink} className="shrink-0 text-tertiary hover:text-secondary focus:outline-none" - tabIndex={1} + tabIndex={0} > diff --git a/apps/space/components/issues/peek-overview/issue-activity.tsx b/apps/space/components/issues/peek-overview/issue-activity.tsx index 4e725c2b8cd..2eead3f1aa4 100644 --- a/apps/space/components/issues/peek-overview/issue-activity.tsx +++ b/apps/space/components/issues/peek-overview/issue-activity.tsx @@ -9,6 +9,7 @@ import { Link } from "react-router"; import { usePathname } from "next/navigation"; import { Lock } from "lucide-react"; // plane imports +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; // components import { AddComment } from "@/components/issues/peek-overview/comment/add-comment"; @@ -28,6 +29,7 @@ type Props = { export const PeekOverviewIssueActivity = observer(function PeekOverviewIssueActivity(props: Props) { const { anchor } = props; + const { t } = useTranslation(); // router const pathname = usePathname(); // store hooks @@ -40,7 +42,7 @@ export const PeekOverviewIssueActivity = observer(function PeekOverviewIssueActi return (
-

Comments

+

{t("comments")}

{comments.map((comment) => ( @@ -60,10 +62,10 @@ export const PeekOverviewIssueActivity = observer(function PeekOverviewIssueActi

- Sign in to add your comment + {t("space_public.sign_in_to_add_comment")}

- +
))} diff --git a/apps/space/components/issues/peek-overview/issue-properties.tsx b/apps/space/components/issues/peek-overview/issue-properties.tsx index 1c010ddafaf..80aafef58e7 100644 --- a/apps/space/components/issues/peek-overview/issue-properties.tsx +++ b/apps/space/components/issues/peek-overview/issue-properties.tsx @@ -54,9 +54,10 @@ export const PeekOverviewIssueProperties = observer(function PeekOverviewIssuePr copyTextToClipboard(urlToCopy).then(() => { setToast({ type: TOAST_TYPE.INFO, - title: "Link copied!", - message: "Work item link copied to clipboard", + title: t("space_public.link_copied"), + message: t("space_public.work_item_link_copied"), }); + return undefined; }); }; @@ -78,7 +79,7 @@ export const PeekOverviewIssueProperties = observer(function PeekOverviewIssuePr
- State + {t("state")}
@@ -89,7 +90,7 @@ export const PeekOverviewIssueProperties = observer(function PeekOverviewIssuePr
- Priority + {t("priority")}
- Due date + {t("due_date")}
{issueDetails.target_date ? ( @@ -127,7 +128,7 @@ export const PeekOverviewIssueProperties = observer(function PeekOverviewIssuePr {renderFormattedDate(issueDetails.target_date)}
) : ( - Empty + {t("common.none")} )}
diff --git a/apps/space/components/issues/reactions/issue-vote-reactions.tsx b/apps/space/components/issues/reactions/issue-vote-reactions.tsx index c41609317f0..7303c5ba89c 100644 --- a/apps/space/components/issues/reactions/issue-vote-reactions.tsx +++ b/apps/space/components/issues/reactions/issue-vote-reactions.tsx @@ -9,6 +9,7 @@ import { ArrowDown, ArrowUp } from "lucide-react"; import { observer } from "mobx-react"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; // plane imports +import { useTranslation } from "@plane/i18n"; import { Tooltip } from "@plane/propel/tooltip"; import { cn } from "@plane/utils"; // helpers @@ -26,6 +27,7 @@ type TIssueVotes = { export const IssueVotes = observer(function IssueVotes(props: TIssueVotes) { const { anchor, issueIdFromProps, size = "md" } = props; + const { t } = useTranslation(); // states const [isSubmitting, setIsSubmitting] = useState(false); // router @@ -89,10 +91,11 @@ export const IssueVotes = observer(function IssueVotes(props: TIssueVotes) { .map((r) => r.actor_details?.display_name) .splice(0, VOTES_LIMIT) .join(", ")} - {allUpVotes.length > VOTES_LIMIT && " and " + (allUpVotes.length - VOTES_LIMIT) + " more"} + {allUpVotes.length > VOTES_LIMIT && + t("space_public.and_more", { count: allUpVotes.length - VOTES_LIMIT })} ) : ( - "No upvotes yet" + t("space_public.no_upvotes_yet") )}
} @@ -127,13 +130,14 @@ export const IssueVotes = observer(function IssueVotes(props: TIssueVotes) { {allDownVotes.length > 0 ? ( <> {allDownVotes - .map((r) => r.actor_details.display_name) + .map((r) => r.actor_details?.display_name) .splice(0, VOTES_LIMIT) .join(", ")} - {allDownVotes.length > VOTES_LIMIT && " and " + (allDownVotes.length - VOTES_LIMIT) + " more"} + {allDownVotes.length > VOTES_LIMIT && + t("space_public.and_more", { count: allDownVotes.length - VOTES_LIMIT })} ) : ( - "No downvotes yet" + t("space_public.no_downvotes_yet") )}
} diff --git a/apps/space/components/ui/not-found.tsx b/apps/space/components/ui/not-found.tsx index e3952f58c89..2ee91e3c2d0 100644 --- a/apps/space/components/ui/not-found.tsx +++ b/apps/space/components/ui/not-found.tsx @@ -5,22 +5,22 @@ */ // images +import { useTranslation } from "@plane/i18n"; import Image404 from "@/app/assets/404.svg?url"; export function PageNotFound() { + const { t } = useTranslation(); + return (
- 404- Page not found + {t("space_public.page_not_found_alt")}
-

Oops! Something went wrong.

-

- Sorry, the page you are looking for cannot be found. It may have been removed, had its name changed, or is - temporarily unavailable. -

+

{t("space_public.something_went_wrong")}

+

{t("space_public.page_not_found_description")}

diff --git a/apps/space/hooks/oauth/core.tsx b/apps/space/hooks/oauth/core.tsx index 63a18cc2e59..348de767172 100644 --- a/apps/space/hooks/oauth/core.tsx +++ b/apps/space/hooks/oauth/core.tsx @@ -8,6 +8,7 @@ import { useSearchParams } from "next/navigation"; import { useTheme } from "next-themes"; import { API_BASE_URL } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import type { TOAuthConfigs, TOAuthOption } from "@plane/types"; // assets import giteaLogo from "@/app/assets/logos/gitea-logo.svg?url"; @@ -27,6 +28,7 @@ export const useCoreOAuthConfig = (oauthActionText: string): TOAuthConfigs => { const { resolvedTheme } = useTheme(); // store hooks const { config } = useInstance(); + const { t } = useTranslation(); // derived values const isOAuthEnabled = (config && @@ -38,7 +40,7 @@ export const useCoreOAuthConfig = (oauthActionText: string): TOAuthConfigs => { const oAuthOptions: TOAuthOption[] = [ { id: "google", - text: `${oauthActionText} with Google`, + text: t("space_public.oauth_with_provider", { action: oauthActionText, provider: "Google" }), icon: Google Logo, onClick: () => { window.location.assign(`${API_BASE_URL}/auth/google/${next_path ? `?next_path=${next_path}` : ``}`); @@ -47,7 +49,7 @@ export const useCoreOAuthConfig = (oauthActionText: string): TOAuthConfigs => { }, { id: "github", - text: `${oauthActionText} with GitHub`, + text: t("space_public.oauth_with_provider", { action: oauthActionText, provider: "GitHub" }), icon: ( { }, { id: "gitlab", - text: `${oauthActionText} with GitLab`, + text: t("space_public.oauth_with_provider", { action: oauthActionText, provider: "GitLab" }), icon: GitLab Logo, onClick: () => { window.location.assign(`${API_BASE_URL}/auth/gitlab/${next_path ? `?next_path=${next_path}` : ``}`); @@ -72,7 +74,7 @@ export const useCoreOAuthConfig = (oauthActionText: string): TOAuthConfigs => { }, { id: "gitea", - text: `${oauthActionText} with Gitea`, + text: t("space_public.oauth_with_provider", { action: oauthActionText, provider: "Gitea" }), icon: Gitea Logo, onClick: () => { window.location.assign(`${API_BASE_URL}/auth/gitea/${next_path ? `?next_path=${next_path}` : ``}`); diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx index 69e02a43bc7..04f60091823 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/profile/[userId]/activity/page.tsx @@ -54,7 +54,7 @@ function ProfileActivityPage() { return ( <> - +

{t("profile.stats.recent_activity.title")}

diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx index ec332bbe10d..6821611a31e 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/pages/(detail)/[pageId]/page.tsx @@ -9,6 +9,7 @@ import { observer } from "mobx-react"; import Link from "next/link"; import useSWR from "swr"; // plane types +import { useTranslation } from "@plane/i18n"; import { getButtonStyling } from "@plane/propel/button"; import type { TSearchEntityRequestPayload, TWebhookConnectionQueryParams } from "@plane/types"; import { EFileAssetType } from "@plane/types"; @@ -40,6 +41,7 @@ const projectPageVersionService = new ProjectPageVersionService(); const storeType = EPageStoreType.PROJECT; function PageDetailsPage({ params }: Route.ComponentProps) { + const { t } = useTranslation(); // router const router = useAppRouter(); const { workspaceSlug, projectId, pageId } = params; @@ -79,20 +81,20 @@ function PageDetailsPage({ params }: Route.ComponentProps) { const pageRootHandlers: TPageRootHandlers = useMemo( () => ({ create: createPage, - fetchAllVersions: async (pageId) => - await projectPageVersionService.fetchAllVersions(workspaceSlug, projectId, pageId), + fetchAllVersions: async (targetPageId) => + await projectPageVersionService.fetchAllVersions(workspaceSlug, projectId, targetPageId), fetchDescriptionBinary: async () => { if (!id) return; return await projectPageService.fetchDescriptionBinary(workspaceSlug, projectId, id); }, fetchEntity: fetchEntityCallback, - fetchVersionDetails: async (pageId, versionId) => - await projectPageVersionService.fetchVersionById(workspaceSlug, projectId, pageId, versionId), - restoreVersion: async (pageId, versionId) => - await projectPageVersionService.restoreVersion(workspaceSlug, projectId, pageId, versionId), - getRedirectionLink: (pageId) => { - if (pageId) { - return `/${workspaceSlug}/projects/${projectId}/pages/${pageId}`; + fetchVersionDetails: async (targetPageId, versionId) => + await projectPageVersionService.fetchVersionById(workspaceSlug, projectId, targetPageId, versionId), + restoreVersion: async (targetPageId, versionId) => + await projectPageVersionService.restoreVersion(workspaceSlug, projectId, targetPageId, versionId), + getRedirectionLink: (targetPageId) => { + if (targetPageId) { + return `/${workspaceSlug}/projects/${projectId}/pages/${targetPageId}`; } else { return `/${workspaceSlug}/projects/${projectId}/pages`; } @@ -161,15 +163,13 @@ function PageDetailsPage({ params }: Route.ComponentProps) { if (pageDetailsError || !canCurrentUserAccessPage) return (
-

Page not found

-

- The page you are trying to access doesn{"'"}t exist or you don{"'"}t have permission to view it. -

+

{t("page_access.not_found_title")}

+

{t("page_access.not_found_description")}

- View other Pages + {t("page_access.view_other_pages")}
); diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx index c529c4efe9f..8acc3d6b667 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/sidebar.tsx @@ -8,6 +8,7 @@ import { isEmpty } from "lodash-es"; import { observer } from "mobx-react"; // plane helpers import { EUserPermissions, EUserPermissionsLevel } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; // components import { SidebarWrapper } from "@/components/sidebar/sidebar-wrapper"; import { SidebarFavoritesMenu } from "@/components/workspace/sidebar/favorites/favorites-menu"; @@ -24,6 +25,7 @@ export const AppSidebar = observer(function AppSidebar() { // store hooks const { allowPermissions } = useUserPermissions(); const { groupedFavorites } = useFavorite(); + const { t } = useTranslation(); // derived values const canPerformWorkspaceMemberActions = allowPermissions( @@ -34,7 +36,7 @@ export const AppSidebar = observer(function AppSidebar() { const isFavoriteEmpty = isEmpty(groupedFavorites); return ( - }> + }> {/* Favorites Menu */} {canPerformWorkspaceMemberActions && !isFavoriteEmpty && } diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx index d925b2ce4fe..633729a4d96 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/stickies/page.tsx @@ -5,13 +5,16 @@ */ // components +import { useTranslation } from "@plane/i18n"; import { PageHead } from "@/components/core/page-title"; import { StickiesInfinite } from "@/components/stickies/layout/stickies-infinite"; export default function WorkspaceStickiesPage() { + const { t } = useTranslation(); + return ( <> - +
diff --git a/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx index 8043f47f8cb..3d32e6b0b10 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(projects)/workspace-views/page.tsx @@ -24,7 +24,9 @@ function WorkspaceViewsPage() { const { currentWorkspace } = useWorkspace(); const { t } = useTranslation(); // derived values - const pageTitle = currentWorkspace?.name ? `${currentWorkspace?.name} - All Views` : undefined; + const pageTitle = currentWorkspace?.name + ? t("workspace_views.page_title", { workspaceName: currentWorkspace.name }) + : undefined; return ( <> @@ -36,7 +38,7 @@ function WorkspaceViewsPage() { className="w-full bg-transparent !p-0 text-11 leading-5 text-secondary placeholder:text-placeholder focus:outline-none" value={query} onChange={(e) => setQuery(e.target.value)} - placeholder="Search" + placeholder={t("search")} mode="true-transparent" />
diff --git a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx index 86bd9f85f42..6c57b74809e 100644 --- a/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx +++ b/apps/web/app/(all)/[workspaceSlug]/(settings)/settings/projects/page.tsx @@ -9,6 +9,7 @@ import Link from "next/link"; import { useTheme } from "next-themes"; // plane imports import { PROJECT_TRACKER_ELEMENTS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { Button, getButtonStyling } from "@plane/propel/button"; import { cn } from "@plane/utils"; // assets @@ -21,25 +22,23 @@ function ProjectSettingsPage() { // store hooks const { resolvedTheme } = useTheme(); const { toggleCreateProjectModal } = useCommandPalette(); + const { t } = useTranslation(); // derived values const resolvedPath = resolvedTheme === "dark" ? ProjectDarkEmptyState : ProjectLightEmptyState; return (
- No projects yet -
No projects yet
-
- Projects act as the foundation for goal-driven work. They let you manage your teams, tasks, and everything you - need to get things done. -
+ {t("projects_empty_state.no_projects_yet")} +
{t("projects_empty_state.no_projects_yet")}
+
{t("projects_empty_state.description")}
- Learn more about projects + {t("projects_empty_state.learn_more")}
diff --git a/apps/web/app/(all)/workspace-invitations/page.tsx b/apps/web/app/(all)/workspace-invitations/page.tsx index 4ab9b02eb8e..d684b4c5bcf 100644 --- a/apps/web/app/(all)/workspace-invitations/page.tsx +++ b/apps/web/app/(all)/workspace-invitations/page.tsx @@ -9,6 +9,7 @@ import { useSearchParams } from "next/navigation"; import useSWR from "swr"; import { Boxes, Share2, Star, User2 } from "lucide-react"; import { CheckIcon, CloseIcon } from "@plane/propel/icons"; +import { useTranslation } from "@plane/i18n"; // components import { LogoSpinner } from "@/components/common/logo-spinner"; import { EmptySpace, EmptySpaceItem } from "@/components/ui/empty-space"; @@ -28,6 +29,7 @@ import { WorkspaceService } from "@/services/workspace.service"; const workspaceService = new WorkspaceService(); function WorkspaceInvitationPage() { + const { t } = useTranslation(); // router const router = useAppRouter(); // query params @@ -54,10 +56,9 @@ function WorkspaceInvitationPage() { }) .then(() => { if (invitationDetail.email === currentUser?.email) { - router.push(`/${invitationDetail.workspace.slug}`); - } else { - router.push("/"); + return router.push(`/${invitationDetail.workspace.slug}`); } + return router.push("/"); }) .catch((err: unknown) => console.error(err)); }; @@ -70,7 +71,7 @@ function WorkspaceInvitationPage() { token: token, }) .then(() => { - router.push("/"); + return router.push("/"); }) .catch((err: unknown) => console.error(err)); }; @@ -81,40 +82,48 @@ function WorkspaceInvitationPage() { {invitationDetail && !invitationDetail.responded_at ? ( error ? (
-

INVITATION NOT FOUND

+

{t("workspace_invitation.invitation_not_found")}

) : ( - - + + ) ) : error || invitationDetail?.responded_at ? ( invitationDetail?.accepted ? ( - + ) : ( {!currentUser ? ( - + ) : ( - + )} - + diff --git a/apps/web/app/not-found.tsx b/apps/web/app/not-found.tsx index 13763951ce1..a8b96b8f2f6 100644 --- a/apps/web/app/not-found.tsx +++ b/apps/web/app/not-found.tsx @@ -5,6 +5,7 @@ */ import Link from "next/link"; +import { useTranslation } from "@plane/i18n"; // ui import { Button } from "@plane/propel/button"; // images @@ -18,24 +19,23 @@ export const meta: Route.MetaFunction = () => [ ]; function PageNotFound() { + const { t } = useTranslation(); + return (
- 404- Page not found + {t("app_not_found.alt")}
-

Oops! Something went wrong.

-

- Sorry, the page you are looking for cannot be found. It may have been removed, had its name changed, or is - temporarily unavailable. -

+

{t("app_not_found.title")}

+

{t("app_not_found.description")}

diff --git a/apps/web/ce/components/projects/settings/intake/header.tsx b/apps/web/ce/components/projects/settings/intake/header.tsx index c60466e41a8..8456486aaf5 100644 --- a/apps/web/ce/components/projects/settings/intake/header.tsx +++ b/apps/web/ce/components/projects/settings/intake/header.tsx @@ -51,7 +51,7 @@ export const ProjectInboxHeader = observer(function ProjectInboxHeader() { } isLast diff --git a/apps/web/core/components/inbox/content/inbox-issue-header.tsx b/apps/web/core/components/inbox/content/inbox-issue-header.tsx index 5243521731e..48ae31d36c9 100644 --- a/apps/web/core/components/inbox/content/inbox-issue-header.tsx +++ b/apps/web/core/components/inbox/content/inbox-issue-header.tsx @@ -159,9 +159,8 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader const handleInboxIssueDelete = async () => { if (!inboxIssue || !currentInboxIssueId) return; - await deleteInboxIssue(workspaceSlug, projectId, currentInboxIssueId).then(() => { - if (!isNotificationEmbed) router.push(`/${workspaceSlug}/projects/${projectId}/intake`); - }); + await deleteInboxIssue(workspaceSlug, projectId, currentInboxIssueId); + if (!isNotificationEmbed) router.push(`/${workspaceSlug}/projects/${projectId}/intake`); }; const handleIssueSnoozeAction = async () => { @@ -217,7 +216,7 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader else { setToast({ type: TOAST_TYPE.ERROR, - title: "Permission denied", + title: t("inbox.errors.permission_denied"), message: errorMessage, }); } @@ -311,14 +310,14 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader variant="secondary" size="lg" icon={ChevronUpIcon} - aria-label="Previous work item" + aria-label={t("inbox.navigation.previous_work_item")} onClick={() => handleInboxIssueNavigation("prev")} /> handleInboxIssueNavigation("next")} />
@@ -407,7 +406,7 @@ export const InboxIssueActionsHeader = observer(function InboxIssueActionsHeader handleActionWithPermission( isProjectAdmin, () => setSelectDuplicateIssue(true), - "Only project admins can mark work item as duplicate" + t("inbox.errors.mark_duplicate_permission") ) } > diff --git a/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx b/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx index bde81665d54..62ba7cd2f8a 100644 --- a/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx +++ b/apps/web/core/components/inbox/content/inbox-issue-mobile-header.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react"; import { Clock, FileStack, MoreHorizontal, PanelLeft, MoveRight } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; import { IconButton, getIconButtonStyling } from "@plane/propel/icon-button"; import { LinkIcon, @@ -81,6 +82,7 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions } = props; const router = useAppRouter(); const { getProjectIdentifierById } = useProject(); + const { t } = useTranslation(); const issue = inboxIssue?.issue; const currentInboxIssueId = issue?.id; @@ -116,14 +118,14 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions variant="secondary" size="lg" icon={ChevronUpIcon} - aria-label="Previous work item" + aria-label={t("inbox.navigation.previous_work_item")} onClick={() => handleInboxIssueNavigation("prev")} /> handleInboxIssueNavigation("next")} />
@@ -143,7 +145,7 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions
- Copy work item link + {t("inbox_issue.actions.copy")}
)} @@ -151,7 +153,7 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions router.push(workItemLink)}>
- Open work item + {t("inbox_issue.actions.open")}
)} @@ -161,13 +163,15 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions handleActionWithPermission( isProjectAdmin, handleIssueSnoozeAction, - "Only project admins can snooze/Un-snooze work items" + t("inbox_issue.errors.snooze_permission") ) } >
- {inboxIssue?.snoozed_till && numberOfDaysLeft && numberOfDaysLeft > 0 ? "Un-snooze" : "Snooze"} + {inboxIssue?.snoozed_till && numberOfDaysLeft && numberOfDaysLeft > 0 + ? t("inbox_issue.actions.unsnooze") + : t("inbox_issue.actions.snooze")}
)} @@ -177,13 +181,13 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions handleActionWithPermission( isProjectAdmin, () => setSelectDuplicateIssue(true), - "Only project admins can mark work items as duplicate" + t("inbox.errors.mark_duplicate_permission_plural") ) } >
- Mark as duplicate + {t("inbox_issue.actions.mark_as_duplicate")}
)} @@ -193,13 +197,13 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions handleActionWithPermission( isProjectAdmin, () => setAcceptIssueModal(true), - "Only project admins can accept work items" + t("inbox_issue.errors.accept_permission") ) } >
- Accept + {t("inbox_issue.actions.accept")}
)} @@ -209,13 +213,13 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions handleActionWithPermission( isProjectAdmin, () => setDeclineIssueModal(true), - "Only project admins can deny work items" + t("inbox_issue.errors.decline_permission") ) } >
- Decline + {t("inbox_issue.actions.decline")}
)} @@ -223,7 +227,7 @@ export const InboxIssueActionsMobileHeader = observer(function InboxIssueActions setDeleteIssueModal(true)}>
- Delete + {t("inbox_issue.actions.delete")}
)} diff --git a/apps/web/core/components/inbox/content/issue-properties.tsx b/apps/web/core/components/inbox/content/issue-properties.tsx index f355e39e36c..04ca68f40fc 100644 --- a/apps/web/core/components/inbox/content/issue-properties.tsx +++ b/apps/web/core/components/inbox/content/issue-properties.tsx @@ -5,6 +5,7 @@ */ import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; import { StatePropertyIcon, MembersPropertyIcon, @@ -44,6 +45,7 @@ export const InboxIssueContentProperties = observer(function InboxIssueContentPr props; const router = useAppRouter(); + const { t } = useTranslation(); // store hooks const { currentProjectDetails } = useProject(); @@ -63,14 +65,14 @@ export const InboxIssueContentProperties = observer(function InboxIssueContentPr return (
-
Properties
+
{t("common.properties")}
{/* Intake State */}
- State + {t("common.state")}
{issue?.state_id && (
- Assignees + {t("common.assignees")}
0 ? "transparent-without-text" : "transparent-with-text" @@ -119,7 +121,7 @@ export const InboxIssueContentProperties = observer(function InboxIssueContentPr
- Priority + {t("common.priority")}
- Due date + {t("due_date")}
issue?.id && @@ -166,7 +168,7 @@ export const InboxIssueContentProperties = observer(function InboxIssueContentPr
- Labels + {t("common.labels")}
{issue?.id && ( @@ -189,7 +191,7 @@ export const InboxIssueContentProperties = observer(function InboxIssueContentPr
- Duplicate of + {t("inbox.properties.duplicate_of")}
{ + archive: async (_workspaceSlug: string, _projectId: string, issueId: string) => { try { - await archiveIssue(workspaceSlug, projectId, issueId); + await archiveIssue(_workspaceSlug, _projectId, issueId); } catch (error) { console.error("Error in archiving issue:", error); } }, }), - [inboxIssue] + [archiveIssue, inboxIssue, projectId, removeIssue, t, workspaceSlug] ); if (!issue) return <>; @@ -206,7 +208,7 @@ export const InboxIssueMainContent = observer(function InboxIssueMainContent(pro createdAt: issue.created_at ? new Date(issue.created_at) : new Date(), createdByDisplayName: inboxIssue.source === EInboxIssueSource.FORMS - ? "Intake Form user" + ? t("inbox.description_versions.intake_form_user") : (getUserDetails(issue.created_by ?? "")?.display_name ?? ""), id: issue.id, isRestoreDisabled: !isEditable, diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx index 53cf70989bd..8ad27a12c7f 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react"; import { PAST_DURATION_FILTER_OPTIONS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { CloseIcon } from "@plane/propel/icons"; import type { TInboxIssueFilterDateKeys } from "@plane/types"; // helpers @@ -15,25 +16,43 @@ import { renderFormattedDate } from "@plane/utils"; // hooks import { useProjectInbox } from "@/hooks/store/use-project-inbox"; -type InboxIssueAppliedFiltersDate = { +type TInboxIssueAppliedFiltersDate = { filterKey: TInboxIssueFilterDateKeys; label: string; }; +const PAST_DURATION_FILTER_I18N_KEYS: Record = { + today: "inbox.filters.date_options.today", + yesterday: "inbox.filters.date_options.yesterday", + last_7_days: "inbox.filters.date_options.last_7_days", + last_30_days: "inbox.filters.date_options.last_30_days", +}; + +const CUSTOM_DATE_OPERATOR_I18N_KEYS: Record = { + after: "inbox.filters.date_operators.after", + before: "inbox.filters.date_operators.before", +}; + export const InboxIssueAppliedFiltersDate = observer(function InboxIssueAppliedFiltersDate( - props: InboxIssueAppliedFiltersDate + props: TInboxIssueAppliedFiltersDate ) { const { filterKey, label } = props; // hooks + const { t } = useTranslation(); const { inboxFilters, handleInboxIssueFilters } = useProjectInbox(); // derived values const filteredValues = inboxFilters?.[filterKey] || []; const currentOptionDetail = (date: string) => { const currentDate = PAST_DURATION_FILTER_OPTIONS.find((d) => d.value === date); - if (currentDate) return currentDate; + if (currentDate) + return { + ...currentDate, + name: t(PAST_DURATION_FILTER_I18N_KEYS[currentDate.value]), + }; const dateSplit = date.split(";"); + const operator = dateSplit[1]; return { - name: `${dateSplit[1].charAt(0).toUpperCase() + dateSplit[1].slice(1)} ${renderFormattedDate(dateSplit[0])}`, + name: `${t(CUSTOM_DATE_OPERATOR_I18N_KEYS[operator])} ${renderFormattedDate(dateSplit[0])}`, value: date, }; }; @@ -53,22 +72,24 @@ export const InboxIssueAppliedFiltersDate = observer(function InboxIssueAppliedF return (
{optionDetail?.name}
-
handleInboxIssueFilters(filterKey, handleFilterValue(optionDetail?.value))} > -
+
); })} -
-
+ ); }); diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx index 1fd33cbe80c..429738f5ca0 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/label.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react"; // hooks +import { useTranslation } from "@plane/i18n"; import { CloseIcon } from "@plane/propel/icons"; import { Tag } from "@plane/ui"; import { useLabel } from "@/hooks/store/use-label"; @@ -19,6 +20,7 @@ export const InboxIssueAppliedFiltersLabel = observer(function InboxIssueApplied // hooks const { inboxFilters, handleInboxIssueFilters } = useProjectInbox(); const { getLabelById } = useLabel(); + const { t } = useTranslation(); // derived values const filteredValues = inboxFilters?.labels || []; const currentOptionDetail = (labelId: string) => getLabelById(labelId) || undefined; @@ -31,7 +33,7 @@ export const InboxIssueAppliedFiltersLabel = observer(function InboxIssueApplied if (filteredValues.length === 0) return <>; return ( -
Label
+
{t("common.label")}
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); if (!optionDetail) return <>; @@ -41,22 +43,24 @@ export const InboxIssueAppliedFiltersLabel = observer(function InboxIssueApplied
{optionDetail?.name}
-
handleInboxIssueFilters("labels", handleFilterValue(value))} > -
+
); })} -
-
+ ); }); diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx index 99283e6c2c9..7b3a85905c7 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/root.tsx @@ -5,6 +5,7 @@ */ import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; // plane imports import { Header, EHeaderVariant } from "@plane/ui"; // hooks @@ -19,6 +20,7 @@ import { InboxIssueAppliedFiltersStatus } from "./status"; export const InboxIssueAppliedFilters = observer(function InboxIssueAppliedFilters() { const { getAppliedFiltersCount } = useProjectInbox(); + const { t } = useTranslation(); if (getAppliedFiltersCount === 0) return <>; return ( @@ -30,15 +32,15 @@ export const InboxIssueAppliedFilters = observer(function InboxIssueAppliedFilte {/* priority */} {/* assignees */} - + {/* created_by */} - + {/* label */} {/* created_at */} - + {/* updated_at */} - + ); }); diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx index f8b94c9bcf0..15331454ca8 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/state.tsx @@ -6,6 +6,7 @@ import { observer } from "mobx-react"; import { EIconSize } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { StateGroupIcon, CloseIcon } from "@plane/propel/icons"; import { Tag } from "@plane/ui"; // hooks @@ -16,6 +17,7 @@ export const InboxIssueAppliedFiltersState = observer(function InboxIssueApplied // hooks const { inboxFilters, handleInboxIssueFilters } = useProjectInbox(); const { getStateById } = useProjectState(); + const { t } = useTranslation(); // derived values const filteredValues = inboxFilters?.state || []; const currentOptionDetail = (stateId: string) => getStateById(stateId) || undefined; @@ -28,7 +30,7 @@ export const InboxIssueAppliedFiltersState = observer(function InboxIssueApplied if (filteredValues.length === 0) return <>; return ( -
State
+
{t("common.state")}
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); if (!optionDetail) return <>; @@ -38,22 +40,24 @@ export const InboxIssueAppliedFiltersState = observer(function InboxIssueApplied
{optionDetail?.name}
-
handleInboxIssueFilters("state", handleFilterValue(optionDetail?.id))} > -
+
); })} -
-
+ ); }); diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx index ccc7c31ae7a..e2b028dcef0 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/status.tsx @@ -29,7 +29,7 @@ export const InboxIssueAppliedFiltersStatus = observer(function InboxIssueApplie if (filteredValues.length === 0) return <>; return ( -
Status
+
{t("inbox.filters.status")}
{filteredValues.map((value) => { const optionDetail = currentOptionDetail(value); if (!optionDetail) return <>; @@ -40,12 +40,13 @@ export const InboxIssueAppliedFiltersStatus = observer(function InboxIssueApplie
{t(optionDetail?.i18n_title)}
{handleFilterValue(optionDetail?.status).length >= 1 && ( -
handleInboxIssueFilters("status", handleFilterValue(optionDetail?.status))} > -
+ )}
); diff --git a/apps/web/core/components/inbox/inbox-filter/filters/date.tsx b/apps/web/core/components/inbox/inbox-filter/filters/date.tsx index 51fbbe6d495..b255399b734 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/date.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/date.tsx @@ -8,6 +8,7 @@ import { useState } from "react"; import { concat, uniq } from "lodash-es"; import { observer } from "mobx-react"; import { PAST_DURATION_FILTER_OPTIONS } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import type { TInboxIssueFilterDateKeys } from "@plane/types"; // components import { DateFilterModal } from "@/components/core/filters/date-filter-modal"; @@ -27,9 +28,17 @@ const isDate = (date: string) => { return datePattern.test(date); }; +const PAST_DURATION_FILTER_I18N_KEYS: Record = { + today: "inbox.filters.date_options.today", + yesterday: "inbox.filters.date_options.yesterday", + last_7_days: "inbox.filters.date_options.last_7_days", + last_30_days: "inbox.filters.date_options.last_30_days", +}; + export const FilterDate = observer(function FilterDate(props: Props) { const { filterKey, label, searchQuery } = props; // hooks + const { t } = useTranslation(); const { inboxFilters, handleInboxIssueFilters } = useProjectInbox(); // state const [previewEnabled, setPreviewEnabled] = useState(true); @@ -38,14 +47,14 @@ export const FilterDate = observer(function FilterDate(props: Props) { const filterValue: string[] = inboxFilters?.[filterKey] || []; const appliedFiltersCount = filterValue?.length ?? 0; const filteredOptions = PAST_DURATION_FILTER_OPTIONS.filter((d) => - d.name.toLowerCase().includes(searchQuery.toLowerCase()) + t(PAST_DURATION_FILTER_I18N_KEYS[d.value]).toLowerCase().includes(searchQuery.toLowerCase()) ); const handleFilterValue = (value: string): string[] => (filterValue?.includes(value) ? [] : uniq(concat(value))); const isCustomDateSelected = () => { const isValidDateSelected = filterValue?.filter((f) => isDate(f.split(";")[0])) || []; - return isValidDateSelected.length > 0 ? true : false; + return isValidDateSelected.length > 0; }; const handleCustomDate = () => { @@ -64,11 +73,11 @@ export const FilterDate = observer(function FilterDate(props: Props) { handleClose={() => setIsDateFilterModalOpen(false)} isOpen={isDateFilterModalOpen} onSelect={(val) => handleInboxIssueFilters(filterKey, val)} - title="Created date" + title={t("inbox.filters.created_date")} /> )} 0 ? ` (${appliedFiltersCount})` : ""}`} + title={`${label || t("inbox.filters.created_date")}${appliedFiltersCount > 0 ? ` (${appliedFiltersCount})` : ""}`} isPreviewEnabled={previewEnabled} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} /> @@ -79,21 +88,21 @@ export const FilterDate = observer(function FilterDate(props: Props) { {filteredOptions.map((option) => ( handleInboxIssueFilters(filterKey, handleFilterValue(option.value))} - title={option.name} + title={t(PAST_DURATION_FILTER_I18N_KEYS[option.value])} multiple={false} /> ))} ) : ( -

No matches found

+

{t("common.search.no_matches_found")}

)}
)} diff --git a/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx b/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx index 99ae144cd0c..9d05e0644a6 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx @@ -6,11 +6,11 @@ import { useState } from "react"; import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; import { SearchIcon, CloseIcon } from "@plane/propel/icons"; // hooks import { useLabel } from "@/hooks/store/use-label"; import { useMember } from "@/hooks/store/use-member"; -import { usePlatformOS } from "@/hooks/use-platform-os"; // local imports import { FilterDate } from "./date"; import { FilterLabels } from "./labels"; @@ -20,7 +20,7 @@ import { FilterStatus } from "./status"; export const InboxIssueFilterSelection = observer(function InboxIssueFilterSelection() { // hooks - const { isMobile } = usePlatformOS(); + const { t } = useTranslation(); const { project: { projectMemberIds }, } = useMember(); @@ -36,10 +36,9 @@ export const InboxIssueFilterSelection = observer(function InboxIssueFilterSelec setFiltersSearchQuery(e.target.value)} - autoFocus={!isMobile} /> {filtersSearchQuery !== "" && (
diff --git a/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx b/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx index 23e338b1d31..3a90ce6c847 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/labels.tsx @@ -6,6 +6,7 @@ import { useState } from "react"; import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; import type { IIssueLabel } from "@plane/types"; import { Loader } from "@plane/ui"; // components @@ -28,6 +29,7 @@ export const FilterLabels = observer(function FilterLabels(props: Props) { const [itemsToRender, setItemsToRender] = useState(5); const [previewEnabled, setPreviewEnabled] = useState(true); + const { t } = useTranslation(); const { inboxFilters, handleInboxIssueFilters } = useProjectInbox(); const filterValue = inboxFilters?.labels || []; @@ -49,7 +51,7 @@ export const FilterLabels = observer(function FilterLabels(props: Props) { return ( <> 0 ? ` (${appliedFiltersCount})` : ""}`} + title={`${t("common.label")}${appliedFiltersCount > 0 ? ` (${appliedFiltersCount})` : ""}`} isPreviewEnabled={previewEnabled} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} /> @@ -61,7 +63,7 @@ export const FilterLabels = observer(function FilterLabels(props: Props) { {filteredOptions.slice(0, itemsToRender).map((label) => ( handleInboxIssueFilters("labels", handleFilterValue(label.id))} icon={} title={label.name} @@ -73,12 +75,14 @@ export const FilterLabels = observer(function FilterLabels(props: Props) { className="ml-8 text-11 font-medium text-accent-primary" onClick={handleViewToggle} > - {itemsToRender === filteredOptions.length ? "View less" : "View all"} + {itemsToRender === filteredOptions.length + ? t("inbox.filters.view_less") + : t("inbox.filters.view_all")} )} ) : ( -

No matches found

+

{t("common.search.no_matches_found")}

) ) : ( diff --git a/apps/web/core/components/inbox/inbox-filter/filters/members.tsx b/apps/web/core/components/inbox/inbox-filter/filters/members.tsx index d555aa81b85..b134a0b8f5a 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/members.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/members.tsx @@ -7,6 +7,7 @@ import { useMemo, useState } from "react"; import { sortBy } from "lodash-es"; import { observer } from "mobx-react"; +import { useTranslation } from "@plane/i18n"; // plane types import type { TInboxIssueFilterMemberKeys } from "@plane/types"; // plane ui @@ -28,8 +29,9 @@ type Props = { }; export const FilterMember = observer(function FilterMember(props: Props) { - const { filterKey, label = "Members", memberIds, searchQuery } = props; + const { filterKey, label, memberIds, searchQuery } = props; // hooks + const { t } = useTranslation(); const { inboxFilters, handleInboxIssueFilters } = useProjectInbox(); const { getUserDetails } = useMember(); const { data: currentUser } = useUser(); @@ -66,7 +68,7 @@ export const FilterMember = observer(function FilterMember(props: Props) { return ( <> 0 ? ` (${appliedFiltersCount})` : ""}`} + title={`${label ?? t("members")} ${appliedFiltersCount > 0 ? ` (${appliedFiltersCount})` : ""}`} isPreviewEnabled={previewEnabled} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} /> @@ -82,7 +84,7 @@ export const FilterMember = observer(function FilterMember(props: Props) { return ( handleInboxIssueFilters(filterKey, handleFilterValue(member.id))} icon={ } - title={currentUser?.id === member.id ? "You" : member?.display_name} + title={currentUser?.id === member.id ? t("you") : member?.display_name} /> ); })} @@ -102,12 +104,14 @@ export const FilterMember = observer(function FilterMember(props: Props) { className="ml-8 text-11 font-medium text-accent-primary" onClick={handleViewToggle} > - {itemsToRender === sortedOptions.length ? "View less" : "View all"} + {itemsToRender === sortedOptions.length + ? t("inbox.filters.view_less") + : t("inbox.filters.view_all")} )} ) : ( -

No matches found

+

{t("common.search.no_matches_found")}

) ) : ( diff --git a/apps/web/core/components/inbox/inbox-filter/filters/state.tsx b/apps/web/core/components/inbox/inbox-filter/filters/state.tsx index 4a4af021fce..3b2d6d3970e 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/state.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/state.tsx @@ -7,6 +7,7 @@ import { useState } from "react"; import { observer } from "mobx-react"; import { EIconSize } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { StateGroupIcon } from "@plane/propel/icons"; import type { IState } from "@plane/types"; import { Loader } from "@plane/ui"; @@ -26,6 +27,7 @@ export const FilterState = observer(function FilterState(props: Props) { const [itemsToRender, setItemsToRender] = useState(5); const [previewEnabled, setPreviewEnabled] = useState(true); + const { t } = useTranslation(); const { inboxFilters, handleInboxIssueFilters } = useProjectInbox(); const filterValue = inboxFilters?.state || []; @@ -47,7 +49,7 @@ export const FilterState = observer(function FilterState(props: Props) { return ( <> 0 ? ` (${appliedFiltersCount})` : ""}`} + title={`${t("common.state")}${appliedFiltersCount > 0 ? ` (${appliedFiltersCount})` : ""}`} isPreviewEnabled={previewEnabled} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} /> @@ -59,7 +61,7 @@ export const FilterState = observer(function FilterState(props: Props) { {filteredOptions.slice(0, itemsToRender).map((state) => ( handleInboxIssueFilters("state", handleFilterValue(state.id))} icon={ - {itemsToRender === filteredOptions.length ? "View less" : "View all"} + {itemsToRender === filteredOptions.length + ? t("inbox.filters.view_less") + : t("inbox.filters.view_all")} )} ) : ( -

No matches found

+

{t("common.search.no_matches_found")}

) ) : ( diff --git a/apps/web/core/components/inbox/inbox-filter/filters/status.tsx b/apps/web/core/components/inbox/inbox-filter/filters/status.tsx index e08a71334ac..2566e24df91 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/status.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/status.tsx @@ -49,7 +49,7 @@ export const FilterStatus = observer(function FilterStatus(props: Props) { return ( <> 0 ? ` (${appliedFiltersCount})` : ""}`} + title={`${t("inbox.filters.work_item_status")} ${appliedFiltersCount > 0 ? ` (${appliedFiltersCount})` : ""}`} isPreviewEnabled={previewEnabled} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} /> @@ -59,14 +59,14 @@ export const FilterStatus = observer(function FilterStatus(props: Props) { filteredOptions.map((status) => ( handleStatusFilterSelect(status.status)} icon={} title={t(status.i18n_title)} /> )) ) : ( -

No matches found

+

{t("common.search.no_matches_found")}

)}
)} diff --git a/apps/web/core/components/inbox/inbox-filter/root.tsx b/apps/web/core/components/inbox/inbox-filter/root.tsx index 2413ccc382f..3fa02ff5650 100644 --- a/apps/web/core/components/inbox/inbox-filter/root.tsx +++ b/apps/web/core/components/inbox/inbox-filter/root.tsx @@ -5,6 +5,7 @@ */ import { ListFilter } from "lucide-react"; +import { useTranslation } from "@plane/i18n"; import { getButtonStyling } from "@plane/propel/button"; // plane imports import { ChevronDownIcon } from "@plane/propel/icons"; @@ -19,15 +20,17 @@ import { InboxIssueOrderByDropdown } from "./sorting/order-by"; const smallButton = ; -const largeButton = ( -
- - Filters - -
-); export function FiltersRoot() { const windowSize = useSize(); + const { t } = useTranslation(); + + const largeButton = ( +
+ + {t("common.filters")} + +
+ ); return (
diff --git a/apps/web/core/components/inbox/modals/create-modal/create-root.tsx b/apps/web/core/components/inbox/modals/create-modal/create-root.tsx index e31e8da1270..d5bc861cc60 100644 --- a/apps/web/core/components/inbox/modals/create-modal/create-root.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/create-root.tsx @@ -110,8 +110,8 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props } else { setToast({ type: TOAST_TYPE.ERROR, - title: "Error!", - message: "Editor is still processing changes. Please wait before proceeding.", + title: t("common.error.label"), + message: t("inbox.toasts.editor_processing"), }); event.preventDefault(); // Prevent default action if editor is not ready to discard } @@ -142,8 +142,8 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props if (!descriptionEditorRef.current?.isEditorReadyToDiscard()) { setToast({ type: TOAST_TYPE.ERROR, - title: "Error!", - message: "Editor is still processing changes. Please wait before proceeding.", + title: t("common.error.label"), + message: t("inbox.toasts.editor_processing"), }); return; } @@ -159,35 +159,34 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props }; setFormSubmitting(true); - await createInboxIssue(workspaceSlug, projectId, payload) - .then(async (res) => { - if (uploadedAssetIds.length > 0) { - await fileService.updateBulkProjectAssetsUploadStatus(workspaceSlug, projectId, res?.issue.id ?? "", { - asset_ids: uploadedAssetIds, - }); - setUploadedAssetIds([]); - } - if (!createMore) { - router.push(`/${workspaceSlug}/projects/${projectId}/intake/?currentTab=open&inboxIssueId=${res?.issue?.id}`); - handleModalClose(); - } else { - descriptionEditorRef?.current?.clearEditor(); - setFormData(defaultIssueData); - } - setToast({ - type: TOAST_TYPE.SUCCESS, - title: `Success!`, - message: "Work item created successfully.", - }); - }) - .catch((error) => { - console.error(error); - setToast({ - type: TOAST_TYPE.ERROR, - title: `Error!`, - message: "Some error occurred. Please try again.", + try { + const res = await createInboxIssue(workspaceSlug, projectId, payload); + if (uploadedAssetIds.length > 0) { + await fileService.updateBulkProjectAssetsUploadStatus(workspaceSlug, projectId, res?.issue.id ?? "", { + asset_ids: uploadedAssetIds, }); + setUploadedAssetIds([]); + } + if (!createMore) { + router.push(`/${workspaceSlug}/projects/${projectId}/intake/?currentTab=open&inboxIssueId=${res?.issue?.id}`); + handleModalClose(); + } else { + descriptionEditorRef?.current?.clearEditor(); + setFormData(defaultIssueData); + } + setToast({ + type: TOAST_TYPE.SUCCESS, + title: t("common.success"), + message: t("inbox.toasts.create_success"), }); + } catch (error) { + console.error(error); + setToast({ + type: TOAST_TYPE.ERROR, + title: t("common.error.label"), + message: t("common.error.message"), + }); + } setFormSubmitting(false); }; @@ -207,7 +206,7 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props 1 ? "s" : ""} found!`} + label={t("inbox.duplicate_issues_found", { count: duplicateIssues.length })} handleOnClick={() => handleDuplicateIssueModal(!isDuplicateModalOpen)} /> )} @@ -233,15 +232,15 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props
-
setCreateMore((prevData) => !prevData)} - role="button" tabIndex={getIndex("create_more")} > {}} size="sm" /> {t("create_more")} -
+
@@ -122,7 +124,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props onChange={(date) => handleData("target_date", date ? renderFormattedPayloadDate(date) : "")} buttonVariant="border-with-text" minDate={minDate ?? undefined} - placeholder="Due date" + placeholder={t("due_date")} tabIndex={getIndex("target_date")} />
@@ -134,7 +136,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props value={data?.cycle_id || ""} onChange={(cycleId) => handleData("cycle_id", cycleId)} projectId={projectId} - placeholder="Cycle" + placeholder={t("common.cycle")} buttonVariant="border-with-text" tabIndex={getIndex("cycle_id")} /> @@ -148,7 +150,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props value={data?.module_ids || []} onChange={(moduleIds) => handleData("module_ids", moduleIds)} projectId={projectId} - placeholder="Modules" + placeholder={t("common.modules")} buttonVariant="border-with-text" multiple showCount @@ -165,7 +167,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props onChange={(estimatePoint) => handleData("estimate_point", estimatePoint)} projectId={projectId} buttonVariant="border-with-text" - placeholder="Estimate" + placeholder={t("estimate")} tabIndex={getIndex("estimate_point")} />
@@ -185,7 +187,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props {selectedParentIssue ? `${selectedParentIssue.project__identifier}-${selectedParentIssue.sequence_id}` - : `Add parent`} + : t("add_parent")} } @@ -196,7 +198,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props > <> setParentIssueModalOpen(true)}> - Change parent work item + {t("change_parent_issue")} - Remove parent work item + {t("remove_parent_issue")} @@ -216,7 +218,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props onClick={() => setParentIssueModalOpen(true)} > - Add parent + {t("add_parent")} )} diff --git a/apps/web/core/components/inbox/modals/select-duplicate.tsx b/apps/web/core/components/inbox/modals/select-duplicate.tsx index 7b6911830f1..7f8a25c0ffa 100644 --- a/apps/web/core/components/inbox/modals/select-duplicate.tsx +++ b/apps/web/core/components/inbox/modals/select-duplicate.tsx @@ -77,7 +77,7 @@ export function SelectDuplicateInboxIssueModal(props: Props) { const handleSubmit = (selectedItem: string) => { if (!selectedItem || selectedItem.length === 0) return setToast({ - title: "Error", + title: t("error"), type: TOAST_TYPE.ERROR, }); onSubmit(selectedItem); @@ -87,7 +87,11 @@ export function SelectDuplicateInboxIssueModal(props: Props) { const issueList = filteredIssues.length > 0 ? (
  • - {query === "" &&

    Select work item

    } + {query === "" && ( +

    + {t("inbox.select_duplicate.select_work_item")} +

    + )}
      {filteredIssues.map((issue) => { const stateColor = issue.state__color || ""; @@ -141,7 +145,7 @@ export function SelectDuplicateInboxIssueModal(props: Props) { setQuery(e.target.value)} />
  • diff --git a/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx b/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx index db8d4240f9f..61d7d8cc54e 100644 --- a/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx +++ b/apps/web/core/components/inbox/sidebar/inbox-list-item.tsx @@ -9,6 +9,7 @@ import { observer } from "mobx-react"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; // plane imports +import { useTranslation } from "@plane/i18n"; import { PriorityIcon } from "@plane/propel/icons"; import { Tooltip } from "@plane/propel/tooltip"; import { Row, Avatar } from "@plane/ui"; @@ -43,6 +44,7 @@ export const InboxIssueListItem = observer(function InboxIssueListItem(props: In const { projectLabels } = useLabel(); const { isMobile } = usePlatformOS(); const { getUserDetails } = useMember(); + const { t } = useTranslation(); const inboxIssue = getIssueInboxByIssueId(inboxIssueId); const issue = inboxIssue?.issue; @@ -85,7 +87,7 @@ export const InboxIssueListItem = observer(function InboxIssueListItem(props: In
    @@ -95,7 +97,7 @@ export const InboxIssueListItem = observer(function InboxIssueListItem(props: In
    {issue.priority && ( - + )} @@ -103,7 +105,9 @@ export const InboxIssueListItem = observer(function InboxIssueListItem(props: In {issue.label_ids && issue.label_ids.length > 3 ? (
    - {`${issue.label_ids.length} labels`} + + {t("inbox.sidebar.label_count", { count: issue.label_ids.length })} +
    ) : ( <> diff --git a/apps/web/core/components/inbox/sidebar/root.tsx b/apps/web/core/components/inbox/sidebar/root.tsx index e378c766d56..c4023d98e49 100644 --- a/apps/web/core/components/inbox/sidebar/root.tsx +++ b/apps/web/core/components/inbox/sidebar/root.tsx @@ -87,7 +87,8 @@ export const InboxSidebar = observer(function InboxSidebar(props: IInboxSidebarP
    {tabNavigationOptions.map((option) => ( -
    -
    + ))}
    @@ -161,11 +162,10 @@ export const InboxSidebar = observer(function InboxSidebar(props: IInboxSidebarP rootClassName="px-page-x" /> ) : ( - // TODO: Add translation diff --git a/apps/web/core/components/onboarding/invitations.tsx b/apps/web/core/components/onboarding/invitations.tsx index f8537b96245..5866aed30df 100644 --- a/apps/web/core/components/onboarding/invitations.tsx +++ b/apps/web/core/components/onboarding/invitations.tsx @@ -7,6 +7,7 @@ import { useState } from "react"; // plane imports import { ROLE } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; // types import { Button } from "@plane/propel/button"; import type { IWorkspaceMemberInvitation } from "@plane/types"; @@ -31,6 +32,7 @@ const workspaceService = new WorkspaceService(); export function Invitations(props: Props) { const { invitations, handleNextStep, handleCurrentViewChange } = props; + const { t } = useTranslation(); // states const [isJoiningWorkspaces, setIsJoiningWorkspaces] = useState(false); const [invitationsRespond, setInvitationsRespond] = useState([]); @@ -47,8 +49,10 @@ export function Invitations(props: Props) { }; const submitInvitations = async () => { - const invitation = invitations?.find((invitation) => invitation.id === invitationsRespond[0]); - if (invitationsRespond.length <= 0 && !invitation?.role) return; + const selectedInvitation = invitations?.find( + (workspaceInvitation) => workspaceInvitation.id === invitationsRespond[0] + ); + if (invitationsRespond.length <= 0 && !selectedInvitation?.role) return; setIsJoiningWorkspaces(true); try { await workspaceService.joinWorkspaces({ invitations: invitationsRespond }); @@ -64,8 +68,8 @@ export function Invitations(props: Props) { return invitations && invitations.length > 0 ? (
    -

    You are invited!

    -

    Accept the invites to collaborate with your team.

    +

    {t("onboarding.you_are_invited")}

    +

    {t("onboarding.accept_invites")}

    {invitations && @@ -74,9 +78,10 @@ export function Invitations(props: Props) { const isSelected = invitationsRespond.includes(invitation.id); const invitedWorkspace = invitation.workspace; return ( -
    handleInvitation(invitation, isSelected ? "withdraw" : "accepted")} >
    @@ -93,7 +98,7 @@ export function Invitations(props: Props) { -
    + ); })}
    @@ -104,11 +109,11 @@ export function Invitations(props: Props) { onClick={submitInvitations} disabled={isJoiningWorkspaces || !invitationsRespond.length} > - {isJoiningWorkspaces ? : "Continue to workspace"} + {isJoiningWorkspaces ? : t("onboarding.continue_to_workspace")}

    -

    or

    +

    {t("onboarding.or")}


    ) : ( -
    No Invitations found
    +
    {t("onboarding.no_invitations_found")}
    ); } diff --git a/apps/web/core/components/onboarding/invite-members.tsx b/apps/web/core/components/onboarding/invite-members.tsx index b73c87bb8b8..a8dbadba6c4 100644 --- a/apps/web/core/components/onboarding/invite-members.tsx +++ b/apps/web/core/components/onboarding/invite-members.tsx @@ -213,7 +213,7 @@ const InviteMemberInput = observer(function InviteMemberInput(props: InviteMembe style={styles.popper} {...attributes.popper} > - {Object.entries(ROLE_DETAILS).map(([key, value]) => ( + {Object.entries(ROLE_DETAILS).map(([key, roleDetail]) => ( (
    -
    {t(value.i18n_title)}
    -
    {t(value.i18n_description)}
    +
    {t(roleDetail.i18n_title)}
    +
    {t(roleDetail.i18n_description)}
    {selected && }
    @@ -254,7 +254,7 @@ const InviteMemberInput = observer(function InviteMemberInput(props: InviteMembe {email && !emailRegex.test(email) && (
    🤥{" "} - That doesn{"'"}t look like an email address. + {t("onboarding.invalid_email")}
    )}
    @@ -263,6 +263,7 @@ const InviteMemberInput = observer(function InviteMemberInput(props: InviteMembe export function InviteMembers(props: Props) { const { finishOnboarding, workspace } = props; + const { t } = useTranslation(); const [isInvitationDisabled, setIsInvitationDisabled] = useState(true); @@ -297,18 +298,18 @@ export function InviteMembers(props: Props) { role: email.role, })), }) - .then(async () => { + .then(() => { setToast({ type: TOAST_TYPE.SUCCESS, - title: "Success!", - message: "Invitations sent successfully.", + title: t("onboarding.success"), + message: t("onboarding.invitations_sent"), }); - await nextStep(); + return nextStep(); }) .catch((err) => { setToast({ type: TOAST_TYPE.ERROR, - title: "Error!", + title: t("onboarding.error"), message: err?.error, }); }); @@ -338,10 +339,8 @@ export function InviteMembers(props: Props) {
    -

    Invite your teammates

    -

    - Work in plane happens best with your team. Invite them now to use Plane to its potential. -

    +

    {t("onboarding.invite_team_title")}

    +

    {t("onboarding.invite_team_description")}

    -
    Email
    -
    Role
    +
    {t("space_auth.email")}
    +
    {t("role")}
    {fields.map((field, index) => ( @@ -379,7 +378,7 @@ export function InviteMembers(props: Props) { onClick={appendField} > - Add another + {t("onboarding.add_another")}
    @@ -390,10 +389,10 @@ export function InviteMembers(props: Props) { className="w-full" disabled={isInvitationDisabled || !isValid || isSubmitting} > - {isSubmitting ? : "Continue"} + {isSubmitting ? : t("onboarding.continue")}
    diff --git a/apps/web/core/components/onboarding/steps/profile/root.tsx b/apps/web/core/components/onboarding/steps/profile/root.tsx index 5e71c802f3b..7bb6612f9d0 100644 --- a/apps/web/core/components/onboarding/steps/profile/root.tsx +++ b/apps/web/core/components/onboarding/steps/profile/root.tsx @@ -10,6 +10,7 @@ import { Controller, useForm } from "react-hook-form"; import { ImageIcon } from "lucide-react"; // plane imports import { E_PASSWORD_STRENGTH } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; import type { IUser } from "@plane/types"; @@ -54,6 +55,7 @@ const defaultValues: Partial = { }; export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepChange }: Props) { + const { t } = useTranslation(); // states const [isImageUploadModalOpen, setIsImageUploadModalOpen] = useState(false); // store hooks @@ -99,8 +101,8 @@ export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepC } catch { setToast({ type: TOAST_TYPE.ERROR, - title: "Error", - message: "User details update failed. Please try again!", + title: t("onboarding.error"), + message: t("something_went_wrong_please_try_again"), }); } }; @@ -141,13 +143,15 @@ export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepC // Check for all available fields validation and if password field is available, then checks for password validation (strength + confirmation). // Also handles the condition for optional password i.e if password field is optional it only checks for above validation if it's not empty. - const isButtonDisabled = - !isSubmitting && isValid ? (isPasswordAlreadySetup ? false : isValidPassword ? false : true) : true; + const isButtonDisabled = isSubmitting || !isValid || (!isPasswordAlreadySetup && !isValidPassword); return (
    {/* Header */} - + {/* Profile Picture Section */} setIsImageUploadModalOpen(true)} alt={user?.display_name} className="h-full w-full rounded-full object-cover" /> @@ -190,7 +193,7 @@ export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepC onClick={() => setIsImageUploadModalOpen(true)} > - {userAvatar ? "Change image" : "Upload image"} + {userAvatar ? t("onboarding.change_image") : t("onboarding.upload_image")}
    @@ -201,17 +204,17 @@ export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepC className="block text-13 font-medium text-tertiary after:ml-0.5 after:text-danger-primary after:content-['*']" htmlFor="first_name" > - Name + {t("onboarding.name")} ( @@ -222,7 +225,6 @@ export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepC type="text" value={value} onChange={(e) => onChange(e.target.value)} - autoFocus className={cn( "w-full rounded-md border border-strong bg-surface-1 px-3 py-2 text-secondary transition-all duration-200 placeholder:text-placeholder focus:border-transparent focus:ring-2 focus:ring-accent-strong focus:outline-none", { @@ -230,7 +232,7 @@ export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepC "border-danger-strong": errors.first_name, } )} - placeholder="Enter your full name" + placeholder={t("onboarding.enter_full_name")} autoComplete="on" /> )} @@ -248,7 +250,7 @@ export const ProfileSetupStep = observer(function ProfileSetupStep({ handleStepC
    {/* Continue Button */} {/* Marketing Consent */} diff --git a/apps/web/core/components/onboarding/steps/profile/set-password.tsx b/apps/web/core/components/onboarding/steps/profile/set-password.tsx index 95421e2b391..7684a5b82be 100644 --- a/apps/web/core/components/onboarding/steps/profile/set-password.tsx +++ b/apps/web/core/components/onboarding/steps/profile/set-password.tsx @@ -5,6 +5,7 @@ */ import React, { useState, useCallback, useMemo } from "react"; +import { useTranslation } from "@plane/i18n"; import { LockIcon, ChevronDownIcon } from "@plane/propel/icons"; import { PasswordInput, PasswordStrengthIndicator } from "@plane/ui"; import { cn } from "@plane/utils"; @@ -21,6 +22,7 @@ interface SetPasswordRootProps { } export function SetPasswordRoot({ onPasswordChange, onConfirmPasswordChange, disabled = false }: SetPasswordRootProps) { + const { t } = useTranslation(); const [isExpanded, setIsExpanded] = useState(false); const [passwordState, setPasswordState] = useState({ password: "", @@ -77,7 +79,8 @@ export function SetPasswordRoot({ onPasswordChange, onConfirmPasswordChange, dis return (
    -
    - Set a password - {`(Optional)`} + {t("onboarding.set_password")} + ({t("onboarding.optional")})
    -
    +
    {/* Password input */} @@ -102,7 +105,7 @@ export function SetPasswordRoot({ onPasswordChange, onConfirmPasswordChange, dis id="password" value={passwordState.password} onChange={(value) => handlePasswordChange("password", value)} - placeholder="Set a password" + placeholder={t("onboarding.set_password")} className="transition-all duration-200" /> {passwordState.password.length > 0 && } @@ -111,7 +114,7 @@ export function SetPasswordRoot({ onPasswordChange, onConfirmPasswordChange, dis
    {/* Confirm password label */}
    - Confirm password + {t("space_auth.confirm_password")}
    {/* Confirm password input */} @@ -120,11 +123,15 @@ export function SetPasswordRoot({ onPasswordChange, onConfirmPasswordChange, dis id="confirm-password" value={passwordState.confirmPassword} onChange={(value) => handlePasswordChange("confirmPassword", value)} - placeholder="Confirm password" + placeholder={t("space_auth.confirm_password")} className="transition-all duration-200" /> - {hasPasswordMismatch &&

    Passwords do not match

    } - {isPasswordValid &&

    ✓ Passwords match

    } + {hasPasswordMismatch && ( +

    {t("onboarding.passwords_do_not_match")}

    + )} + {isPasswordValid && ( +

    ✓ {t("onboarding.passwords_match")}

    + )}
    diff --git a/apps/web/core/components/onboarding/steps/team/root.tsx b/apps/web/core/components/onboarding/steps/team/root.tsx index 536110fd03b..6e17f824023 100644 --- a/apps/web/core/components/onboarding/steps/team/root.tsx +++ b/apps/web/core/components/onboarding/steps/team/root.tsx @@ -145,7 +145,7 @@ const InviteMemberInput = observer(function InviteMemberInput(props: InviteMembe rules={{ pattern: { value: emailRegex, - message: "Invalid Email ID", + message: t("onboarding.invalid_email"), }, }} render={({ field: { value, onChange, ref } }) => ( @@ -209,7 +209,7 @@ const InviteMemberInput = observer(function InviteMemberInput(props: InviteMembe style={styles.popper} {...attributes.popper} > - {Object.entries(ROLE_DETAILS).map(([key, value]) => ( + {Object.entries(ROLE_DETAILS).map(([key, roleDetail]) => ( (
    -
    {t(value.i18n_title)}
    -
    {t(value.i18n_description)}
    +
    {t(roleDetail.i18n_title)}
    +
    {t(roleDetail.i18n_description)}
    {selected && }
    @@ -250,7 +250,7 @@ const InviteMemberInput = observer(function InviteMemberInput(props: InviteMembe {email && !emailRegex.test(email) && (
    🤥{" "} - That doesn{"'"}t look like an email address. + {t("onboarding.invalid_email")}
    )}
    @@ -259,6 +259,7 @@ const InviteMemberInput = observer(function InviteMemberInput(props: InviteMembe export const InviteTeamStep = observer(function InviteTeamStep(props: Props) { const { handleStepChange } = props; + const { t } = useTranslation(); const [isInvitationDisabled, setIsInvitationDisabled] = useState(true); @@ -297,18 +298,18 @@ export const InviteTeamStep = observer(function InviteTeamStep(props: Props) { role: email.role, })), }) - .then(async () => { + .then(() => { setToast({ type: TOAST_TYPE.SUCCESS, - title: "Success!", - message: "Invitations sent successfully.", + title: t("onboarding.success"), + message: t("onboarding.invitations_sent"), }); - await nextStep(); + return nextStep(); }) .catch((err) => { setToast({ type: TOAST_TYPE.ERROR, - title: "Error!", + title: t("onboarding.error"), message: err?.error, }); }); @@ -342,13 +343,13 @@ export const InviteTeamStep = observer(function InviteTeamStep(props: Props) { }} >
    -
    Email
    -
    Role
    +
    {t("space_auth.email")}
    +
    {t("role")}
    {fields.map((field, index) => ( @@ -374,7 +375,7 @@ export const InviteTeamStep = observer(function InviteTeamStep(props: Props) { onClick={appendField} > - Add another + {t("onboarding.add_another")}
    @@ -385,10 +386,10 @@ export const InviteTeamStep = observer(function InviteTeamStep(props: Props) { className="w-full" disabled={isInvitationDisabled || !isValid || isSubmitting} > - {isSubmitting ? : "Continue"} + {isSubmitting ? : t("onboarding.continue")}
    diff --git a/apps/web/core/components/onboarding/steps/usecase/root.tsx b/apps/web/core/components/onboarding/steps/usecase/root.tsx index 8908adaf3b4..a30c0b0d40c 100644 --- a/apps/web/core/components/onboarding/steps/usecase/root.tsx +++ b/apps/web/core/components/onboarding/steps/usecase/root.tsx @@ -8,6 +8,7 @@ import { observer } from "mobx-react"; import { Controller, useForm } from "react-hook-form"; // plane imports import { USE_CASES } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import { CheckIcon } from "@plane/propel/icons"; import { TOAST_TYPE, setToast } from "@plane/propel/toast"; @@ -29,6 +30,7 @@ const defaultValues = { }; export const UseCaseSetupStep = observer(function UseCaseSetupStep({ handleStepChange }: Props) { + const { t } = useTranslation(); // store hooks const { data: profile, updateUserProfile } = useUserProfile(); // form info @@ -50,20 +52,17 @@ export const UseCaseSetupStep = observer(function UseCaseSetupStep({ handleStepC use_case: formData.use_case && formData.use_case.length > 0 ? formData.use_case.join(". ") : undefined, }; try { - await Promise.all([ - updateUserProfile(profileUpdatePayload), - // totalSteps > 2 && stepChange({ profile_complete: true }), - ]); + await updateUserProfile(profileUpdatePayload); setToast({ type: TOAST_TYPE.SUCCESS, - title: "Success", - message: "Profile setup completed!", + title: t("onboarding.success"), + message: t("onboarding.profile_setup_completed"), }); } catch { setToast({ type: TOAST_TYPE.ERROR, - title: "Error", - message: "Profile setup failed. Please try again!", + title: t("onboarding.error"), + message: t("onboarding.profile_setup_failed"), }); } }; @@ -81,23 +80,23 @@ export const UseCaseSetupStep = observer(function UseCaseSetupStep({ handleStepC }; // derived values - const isButtonDisabled = !isSubmitting && isValid ? false : true; + const isButtonDisabled = isSubmitting || !isValid; return (
    {/* Header */} - + {/* Use Case Selection */}
    -

    Select one or more

    +

    {t("onboarding.select_one_or_more")}

    (value && value.length > 0) || "Please select at least one option", + required: t("onboarding.select_at_least_one"), + validate: (value) => (value && value.length > 0) || t("onboarding.select_at_least_one"), }} render={({ field: { value, onChange } }) => (
    @@ -151,10 +150,10 @@ export const UseCaseSetupStep = observer(function UseCaseSetupStep({ handleStepC {/* Action Buttons */}
    diff --git a/apps/web/core/components/onboarding/steps/workspace/create.tsx b/apps/web/core/components/onboarding/steps/workspace/create.tsx index f9c32a91f26..c413c6791f2 100644 --- a/apps/web/core/components/onboarding/steps/workspace/create.tsx +++ b/apps/web/core/components/onboarding/steps/workspace/create.tsx @@ -117,11 +117,7 @@ export const WorkspaceCreateStep = observer(function WorkspaceCreateStep({ if (isWorkspaceCreationDisabled) { return (
    - - You don't seem to have any invites to a workspace and your instance admin has restricted creation of new - workspaces. Please ask a workspace owner or admin to invite you to a workspace first and come back to this - screen to join. - + {t("onboarding.workspace_creation_disabled")}
    ); } @@ -132,7 +128,10 @@ export const WorkspaceCreateStep = observer(function WorkspaceCreateStep({ void handleSubmit(handleCreateWorkspace)(e); }} > - +
    diff --git a/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx b/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx index c49c0d2aca2..2a0f1008fd4 100644 --- a/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx +++ b/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx @@ -7,6 +7,7 @@ import { useState } from "react"; // plane imports import { ROLE } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { Button } from "@plane/propel/button"; import type { IWorkspaceMemberInvitation } from "@plane/types"; import { Checkbox, Spinner } from "@plane/ui"; @@ -30,6 +31,7 @@ const workspaceService = new WorkspaceService(); export function WorkspaceJoinInvitesStep(props: Props) { const { invitations, handleNextStep, handleCurrentViewChange } = props; + const { t } = useTranslation(); // states const [isJoiningWorkspaces, setIsJoiningWorkspaces] = useState(false); const [invitationsRespond, setInvitationsRespond] = useState([]); @@ -48,9 +50,11 @@ export function WorkspaceJoinInvitesStep(props: Props) { // submit invitations const submitInvitations = async () => { - const invitation = invitations?.find((invitation) => invitation.id === invitationsRespond[0]); + const selectedInvitation = invitations?.find( + (workspaceInvitation) => workspaceInvitation.id === invitationsRespond[0] + ); - if (invitationsRespond.length <= 0 && !invitation?.role) return; + if (invitationsRespond.length <= 0 || !selectedInvitation?.role) return; setIsJoiningWorkspaces(true); @@ -67,7 +71,10 @@ export function WorkspaceJoinInvitesStep(props: Props) { return invitations && invitations.length > 0 ? (
    - +
    {invitations && invitations.length > 0 && @@ -75,9 +82,10 @@ export function WorkspaceJoinInvitesStep(props: Props) { const isSelected = invitationsRespond.includes(invitation.id); const invitedWorkspace = invitation.workspace; return ( -
    handleInvitation(invitation, isSelected ? "withdraw" : "accepted")} >
    @@ -94,7 +102,7 @@ export function WorkspaceJoinInvitesStep(props: Props) { -
    + ); })}
    @@ -106,7 +114,7 @@ export function WorkspaceJoinInvitesStep(props: Props) { onClick={submitInvitations} disabled={isJoiningWorkspaces || !invitationsRespond.length} > - {isJoiningWorkspaces ? : "Continue"} + {isJoiningWorkspaces ? : t("onboarding.continue")}
    ) : ( -
    No Invitations found
    +
    {t("onboarding.no_invitations_found")}
    ); } diff --git a/apps/web/core/components/stickies/modal/stickies.tsx b/apps/web/core/components/stickies/modal/stickies.tsx index 95746422ebc..4a5294aa837 100644 --- a/apps/web/core/components/stickies/modal/stickies.tsx +++ b/apps/web/core/components/stickies/modal/stickies.tsx @@ -8,6 +8,7 @@ import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // plane ui +import { useTranslation } from "@plane/i18n"; import { RecentStickyIcon, PlusIcon, CloseIcon } from "@plane/propel/icons"; // hooks import { useSticky } from "@/hooks/use-stickies"; @@ -22,6 +23,7 @@ type TProps = { export const Stickies = observer(function Stickies(props: TProps) { const { handleClose } = props; + const { t } = useTranslation(); // navigation const { workspaceSlug } = useParams(); // store hooks @@ -36,7 +38,7 @@ export const Stickies = observer(function Stickies(props: TProps) { {/* Title */}
    -

    Your stickies

    +

    {t("stickies.title")}

    {/* actions */}
    @@ -49,7 +51,7 @@ export const Stickies = observer(function Stickies(props: TProps) { className="my-auto flex gap-1 text-13 font-medium text-accent-primary" disabled={creatingSticky} > - Add sticky + {t("stickies.add")} {creatingSticky && (
    {currentUser?.email}
    -
    - + -
    +
    Plane logo
    -

    Workspace not found

    -

    - No workspace found with the URL. It may not exist or you lack authorization to view it. -

    +

    {t("workspace_access.not_found_title")}

    +

    {t("workspace_access.not_found_description")}

    {allWorkspaces && allWorkspaces.length > 0 && ( - Go Home + {t("go_home")} )} {allWorkspaces?.length > 0 && ( - Visit Profile + {t("workspace_access.visit_profile")} )} {allWorkspaces && allWorkspaces.length === 0 && ( - Create new workspace + {t("onboarding.create_new_workspace")} )}
    @@ -209,21 +211,18 @@ export const WorkspaceAuthWrapper = observer(function WorkspaceAuthWrapper(props
    -

    Not Authorized!

    -

    - You{"'"}re not a member of this workspace. Please contact the workspace admin to get an invitation or - check your pending invitations. -

    +

    {t("workspace_access.not_authorized_title")}

    +

    {t("workspace_access.not_authorized_description")}

    - + - +
    diff --git a/packages/editor/package.json b/packages/editor/package.json index ae4aa512d42..5de021008ab 100644 --- a/packages/editor/package.json +++ b/packages/editor/package.json @@ -39,6 +39,7 @@ "@hocuspocus/provider": "2.15.2", "@plane/constants": "workspace:*", "@plane/hooks": "workspace:*", + "@plane/i18n": "workspace:*", "@plane/propel": "workspace:*", "@plane/types": "workspace:*", "@plane/ui": "workspace:*", diff --git a/packages/editor/src/core/components/links/link-edit-view.tsx b/packages/editor/src/core/components/links/link-edit-view.tsx index 3adbefa27cd..77a74c70944 100644 --- a/packages/editor/src/core/components/links/link-edit-view.tsx +++ b/packages/editor/src/core/components/links/link-edit-view.tsx @@ -7,6 +7,7 @@ import type { Node } from "@tiptap/pm/model"; import { Link2Off } from "lucide-react"; import { useCallback, useEffect, useRef, useState } from "react"; +import { useTranslation } from "@plane/i18n"; // components import type { LinkViewProps, LinkViews } from "@/components/links"; // helpers @@ -17,10 +18,9 @@ type InputViewProps = { value: string; placeholder: string; onChange: (value: string) => void; - autoFocus?: boolean; }; -function InputView({ label, value, placeholder, onChange, autoFocus }: InputViewProps) { +function InputView({ label, value, placeholder, onChange }: InputViewProps) { return (
    @@ -30,7 +30,6 @@ function InputView({ label, value, placeholder, onChange, autoFocus }: InputView className="w-[280px] rounded-md border border-strong bg-layer-1 p-2 text-13 text-primary outline-none" value={value} onChange={(e) => onChange(e.target.value)} - autoFocus={autoFocus} />
    ); @@ -43,6 +42,7 @@ type LinkEditViewProps = { export function LinkEditView({ viewProps }: LinkEditViewProps) { const { editor, from, to, url: initialUrl, text: initialText, closeLinkView } = viewProps; + const { t } = useTranslation(); // State const [positionRef] = useState({ from, to }); @@ -139,18 +139,30 @@ export function LinkEditView({ viewProps }: LinkEditViewProps) {
    - - + +
    diff --git a/packages/i18n/src/locales/cs/auth.json b/packages/i18n/src/locales/cs/auth.json index e6e2f46c9d9..85eee435cb0 100644 --- a/packages/i18n/src/locales/cs/auth.json +++ b/packages/i18n/src/locales/cs/auth.json @@ -364,5 +364,45 @@ "sub_header": "Zadejte své přihlašovací údaje {ldapProviderName}" } } + }, + "space_auth": { + "email": "E-mail", + "email_invalid": "E-mail je neplatný", + "clear_email": "Vymazat e-mail", + "password": "Heslo", + "set_password": "Nastavte heslo", + "enter_password": "Zadejte heslo", + "confirm_password": "Potvrďte heslo", + "passwords_dont_match": "Hesla se neshodují", + "continue": "Pokračovat", + "go_to_workspace": "Přejděte do pracovního prostoru", + "sign_in_with_unique_code": "Přihlaste se pomocí jedinečného kódu", + "create_account": "Vytvořit účet", + "unique_code": "Unikátní kód", + "paste_code_sent": "Vložte kód zaslaný na váš e-mail", + "resend_in": "Znovu odeslat v {seconds}s", + "requesting_new_code": "Požadavek na nový kód", + "resend": "Odeslat znovu", + "sending_code": "Odesílání kódu" + }, + "space_public": { + "by_creating_account": "Vytvořením účtu", + "by_signing_in": "Přihlášením", + "you_agree_to_our": "souhlasíte s našimi", + "terms_of_service": "Podmínkami služby", + "and": "a", + "privacy_policy": "Zásadami ochrany osobních údajů", + "sign_up": "Zaregistrovat se", + "oauth_with_provider": "{action} přes {provider}", + "user_already_logged_in": "Uživatel je již přihlášen", + "logged_in_title": "Skvělé! Ještě jeden krok.", + "logged_in_hint": "Zadejte do adresního řádku prohlížeče veřejně sdílenou URL nebo odkaz na zobrazení či stránku, kterou chcete otevřít.", + "sign_in": "Přihlásit se", + "auth": { + "sign_in_header": "Přihlaste se, abyste mohli hlasovat nebo komentovat", + "sign_in_subheader": "Pomozte posunout funkce, které chcete mít vytvořené.", + "sign_up_header": "Zobrazujte, komentujte a dělejte víc", + "sign_up_subheader": "Zaregistrujte se nebo přihlaste, abyste mohli pracovat s pracovními položkami a stránkami Plane." + } } } diff --git a/packages/i18n/src/locales/cs/common.json b/packages/i18n/src/locales/cs/common.json index c1e9372c24e..2a2a2cf93b5 100644 --- a/packages/i18n/src/locales/cs/common.json +++ b/packages/i18n/src/locales/cs/common.json @@ -867,5 +867,20 @@ "description": "Exportujte položky do JSON.", "short_description": "Exportovat jako JSON" } + }, + "space_public": { + "error_title": "Jejda! Tohle nevypadá dobře.", + "error_description_prefix": "Plane spadl. Nemějte obavy, naši inženýři už byli upozorněni. Pokud máte další podrobnosti, napište na", + "error_description_middle": "nebo na našem", + "forum": "Fórum", + "refresh": "Obnovit", + "not_found_title": "Tohle nefungovalo", + "not_found_hint": "Zkontrolujte URL v adresním řádku prohlížeče a zkuste to znovu.", + "instance_failure_image_alt": "Nelze načíst podrobnosti instance", + "instance_failure_title": "Nelze načíst podrobnosti instance.", + "instance_failure_description": "Podrobnosti vaší instance se nepodařilo načíst.", + "instance_failure_hint": "Zkontrolujte připojení a zkuste to znovu.", + "retry": "Zkusit znovu", + "powered_by": "Používá" } } diff --git a/packages/i18n/src/locales/cs/editor.json b/packages/i18n/src/locales/cs/editor.json index 17b29db18f6..5e720818013 100644 --- a/packages/i18n/src/locales/cs/editor.json +++ b/packages/i18n/src/locales/cs/editor.json @@ -61,5 +61,79 @@ "use_this": "Použít toto", "refine": "Upřesnit" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Zadejte nebo vložte adresu URL", + "text": "Text", + "enter_text_to_display": "Zadejte text, který chcete zobrazit", + "remove_link": "Odebrat odkaz", + "edit_link": "Upravit odkaz", + "color": "Barva", + "text_colors": "Barvy textu", + "background_colors": "Barvy pozadí", + "link": "Odkaz", + "enter_or_paste_link": "Zadejte nebo vložte odkaz", + "please_enter_valid_url": "Zadejte prosím platné URL", + "delete": "Vymazat", + "duplicate": "Duplikovat", + "multiple": "Více", + "loading": "Načítání", + "no_results": "Žádné výsledky", + "copy_code": "Kopírovat kód", + "add_an_image": "Přidejte obrázek", + "error_loading_image": "Chyba při načítání obrázku", + "uploading": "Nahrávání", + "drop_image_here": "Přetáhněte obrázek sem", + "retry_duplication": "Opakovat duplikaci", + "retry": "Zkuste to znovu", + "no_emojis_found": "Nebyly nalezeny žádné emotikony", + "fullscreen_image_viewer": "Prohlížeč obrázků na celou obrazovku", + "close_image_viewer": "Zavřete prohlížeč obrázků", + "zoom_out": "Oddálit", + "zoom_in": "Přiblížit", + "download_image": "Stáhnout obrázek", + "open_image_in_new_tab": "Otevřít obrázek na nové kartě", + "view_in_full_screen": "Zobrazit přes celou obrazovku", + "view_image_in_full_screen": "Zobrazit obrázek na celé obrazovce", + "align": "Zarovnat", + "download": "Stáhnout", + "clear_contents": "Vymazat obsah", + "insert_above": "Vložte výše", + "insert_below": "Vložte níže", + "insert_left": "Vložte vlevo", + "insert_right": "Vložte vpravo", + "header_row": "Řádek záhlaví", + "header_column": "Sloupec záhlaví", + "alignment": { + "left": "Vlevo", + "center": "Centrum", + "right": "Vpravo" + }, + "menu_items": { + "text": "Text", + "h1": "Nadpis 1", + "h2": "Nadpis 2", + "h3": "Nadpis 3", + "h4": "Nadpis 4", + "h5": "Nadpis 5", + "h6": "Nadpis 6", + "bulleted-list": "Seznam s odrážkami", + "numbered-list": "Číslovaný seznam", + "to-do-list": "Seznam úkolů", + "quote": "Citovat", + "code": "Kód", + "table": "Tabulka", + "image": "Obrázek", + "divider": "Oddělovač", + "link": "Odkaz", + "bold": "Tučné", + "italic": "kurzíva", + "underline": "Podtržení", + "strikethrough": "Přeškrtnutí", + "text-color": "Barva textu", + "background-color": "Barva pozadí", + "text-align": "Zarovnání textu" + } } } diff --git a/packages/i18n/src/locales/cs/empty-state.json b/packages/i18n/src/locales/cs/empty-state.json index a812af9bea6..db12fc250f9 100644 --- a/packages/i18n/src/locales/cs/empty-state.json +++ b/packages/i18n/src/locales/cs/empty-state.json @@ -266,5 +266,11 @@ "description": "Vyberte stavy, kterými pracovní položka prochází." } } + }, + "app_not_found": { + "alt": "404 - Stránka nenalezena", + "title": "Jejda! Něco se pokazilo.", + "description": "Omlouváme se, stránku, kterou hledáte, nelze najít. Možná byla odstraněna, přejmenována nebo je dočasně nedostupná.", + "go_to_home": "Přejít domů" } } diff --git a/packages/i18n/src/locales/cs/inbox.json b/packages/i18n/src/locales/cs/inbox.json index db808d9a8ff..685ca3d5918 100644 --- a/packages/i18n/src/locales/cs/inbox.json +++ b/packages/i18n/src/locales/cs/inbox.json @@ -83,5 +83,56 @@ "title": "Vyberte pracovní položku pro zobrazení podrobností." } } + }, + "inbox": { + "duplicate_issues_found": "Nalezeno {count} duplicitních pracovních položek", + "description_versions": { + "intake_form_user": "Uživatel sběrného formuláře" + }, + "errors": { + "asset_upload_failed": "Nahrání podkladu se nezdařilo. Zkuste to znovu později.", + "asset_duplication_failed": "Duplikace aktiv se nezdařila. Zkuste to znovu později.", + "permission_denied": "Povolení odepřeno", + "mark_duplicate_permission": "Pouze správci projektu mohou označit pracovní položku jako duplicitní", + "mark_duplicate_permission_plural": "Pouze správci projektu mohou označit pracovní položky jako duplicitní" + }, + "filters": { + "created_date": "Datum vytvoření", + "updated_date": "Aktualizováno datum", + "last_updated_date": "Datum poslední aktualizace", + "status": "Stav", + "work_item_status": "Stav pracovní položky", + "view_all": "Zobrazit vše", + "view_less": "Zobrazit méně", + "date_options": { + "today": "Dnes", + "yesterday": "Včera", + "last_7_days": "Posledních 7 dní", + "last_30_days": "Posledních 30 dní" + }, + "date_operators": { + "after": "Po", + "before": "Před" + } + }, + "navigation": { + "previous_work_item": "Předchozí pracovní položka", + "next_work_item": "Další pracovní položka" + }, + "properties": { + "duplicate_of": "Duplikát" + }, + "select_duplicate": { + "select_work_item": "Vyberte pracovní položku" + }, + "sidebar": { + "label_count": "{count} štítky" + }, + "toasts": { + "editor_processing": "Editor stále zpracovává změny. Před pokračováním prosím počkejte.", + "create_success": "Pracovní položka byla úspěšně vytvořena.", + "delete_failed": "Smazání pracovní položky se nezdařilo", + "update_failed": "Aktualizace pracovní položky se nezdařila" + } } } diff --git a/packages/i18n/src/locales/cs/page.json b/packages/i18n/src/locales/cs/page.json index 2688d02bde3..3ef92486288 100644 --- a/packages/i18n/src/locales/cs/page.json +++ b/packages/i18n/src/locales/cs/page.json @@ -111,5 +111,18 @@ "success_message": "Stránka byla odebrána z kolekce.", "error_message": "Stránku se nepodařilo odebrat z kolekce. Zkuste to prosím znovu." } + }, + "page_access": { + "not_found_title": "Stránka nenalezena", + "not_found_description": "Stránka, ke které se pokoušíte přistoupit, neexistuje nebo k ní nemáte oprávnění.", + "view_other_pages": "Zobrazit další stránky" + }, + "profile_activity": { + "page_title": "Profil - Aktivita" + }, + "space_public": { + "page_not_found_alt": "Stránka nenalezena", + "page_not_found_description": "Stránka, kterou hledáte, neexistuje nebo byla přesunuta.", + "something_went_wrong": "Jejda! Něco se pokazilo." } } diff --git a/packages/i18n/src/locales/cs/project.json b/packages/i18n/src/locales/cs/project.json index 8e2d3b4cccd..482ad1aa70a 100644 --- a/packages/i18n/src/locales/cs/project.json +++ b/packages/i18n/src/locales/cs/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Zatím žádné projekty", + "description": "Projekty jsou základem práce řízené cíli. Pomáhají spravovat týmy, úkoly a vše potřebné k dokončení práce.", + "learn_more": "Další informace o projektech", + "start_first_project": "Začít první projekt" } } diff --git a/packages/i18n/src/locales/cs/work-item.json b/packages/i18n/src/locales/cs/work-item.json index 2fe97ce830d..60193def053 100644 --- a/packages/i18n/src/locales/cs/work-item.json +++ b/packages/i18n/src/locales/cs/work-item.json @@ -422,5 +422,35 @@ "label": "Název epiku", "required": "Název epiku je povinný." } + }, + "space_public": { + "peek": { + "side": "Boční náhled", + "modal": "Modální okno", + "full_screen": "Celá obrazovka" + }, + "public_board_not_found": "Veřejná nástěnka neexistuje. Zkontrolujte URL.", + "no_work_items_found": "Nebyly nalezeny žádné pracovní položky", + "bot_name": "Bot {name}", + "commented_time": "komentováno {time}", + "and_more": "a dalších {count}", + "no_upvotes_yet": "Zatím žádné hlasy pro", + "no_downvotes_yet": "Zatím žádné hlasy proti", + "view_less": "Zobrazit méně", + "view_all": "Zobrazit vše", + "no_matches_found": "Nebyly nalezeny žádné shody", + "no_date": "Bez data", + "no_cycle": "Bez cyklu", + "no_modules": "Bez modulů", + "modules_count": "{count} modulů", + "no_assignees": "Bez přiřazených osob", + "labels_count": "{count} štítků", + "no_labels": "Žádné štítky", + "sign_in_to_add_comment": "Přihlaste se a přidejte komentář", + "add_comment": "Přidat komentář", + "link_copied": "Odkaz zkopírován!", + "work_item_link_copied": "Odkaz na pracovní položku byl zkopírován do schránky.", + "comment_post_error": "Komentář se nepodařilo odeslat. Zkuste to prosím znovu.", + "user": "Uživatel" } } diff --git a/packages/i18n/src/locales/cs/workspace.json b/packages/i18n/src/locales/cs/workspace.json index 94b5a314412..539c9a07167 100644 --- a/packages/i18n/src/locales/cs/workspace.json +++ b/packages/i18n/src/locales/cs/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Opravdu chcete smazat tento pohled?", "content": "Pokud potvrdíte, všechny možnosti řazení, filtrování a zobrazení + rozvržení, které jste vybrali pro tento pohled, budou trvale odstraněny a nelze je obnovit." - } + }, + "page_title": "{workspaceName} - Všechna zobrazení" }, "workspace_draft_issues": { "draft_an_issue": "Vytvořit koncept položky", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Pracovní prostor nenalezen", + "not_found_description": "Pro tuto adresu URL nebyl nalezen žádný pracovní prostor. Možná neexistuje nebo k němu nemáte oprávnění.", + "visit_profile": "Navštívit profil", + "not_authorized_title": "Bez oprávnění!", + "not_authorized_description": "Nejste členem tohoto pracovního prostoru. Požádejte správce pracovního prostoru o pozvánku nebo zkontrolujte čekající pozvánky.", + "check_pending_invites": "Zkontrolovat čekající pozvánky" + }, + "workspace_invitation": { + "invitation_not_found": "Pozvánka nenalezena", + "invited_to_workspace": "Byli jste pozváni do {workspaceName}", + "description": "Váš pracovní prostor je místo, kde budete vytvářet projekty, spolupracovat na svých pracovních položkách a organizovat různé toky práce ve svém účtu Plane.", + "accept": "Přijmout", + "ignore": "Ignorovat", + "already_member": "Již jste členem {workspaceName}", + "continue_to_home": "Pokračovat na domovskou stránku", + "inactive_title": "Tento odkaz na pozvánku již není aktivní.", + "empty_project_link": "Nebo začněte z prázdného projektu", + "sign_in_to_continue": "Chcete-li pokračovat, přihlaste se", + "star_on_github": "Dejte nám hvězdu na GitHubu", + "join_community": "Připojte se k naší komunitě aktivních tvůrců" + }, + "onboarding": { + "create_profile_title": "Vytvořte si svůj profil.", + "create_profile_description": "Takto se objevíte v Plane.", + "change_image": "Změnit obrázek", + "upload_image": "Nahrajte obrázek", + "name": "Jméno", + "name_required": "Jméno je povinné", + "name_within_50": "Název musí mít maximálně 50 znaků.", + "enter_full_name": "Zadejte své celé jméno", + "set_password": "Nastavte heslo", + "optional": "Volitelný", + "passwords_do_not_match": "Hesla se neshodují", + "passwords_match": "Hesla se shodují", + "continue": "Pokračovat", + "invite_team_title": "Pozvěte své spoluhráče", + "invite_team_description": "Práce v Plane probíhá nejlépe s vaším týmem. Pozvěte je, aby využili potenciál Plane.", + "invalid_email": "To nevypadá jako e-mailová adresa.", + "success": "Úspěch!", + "invitations_sent": "Pozvánky byly úspěšně odeslány.", + "error": "Chyba!", + "add_another": "Přidejte další", + "do_later": "Udělám to později", + "join_invites_title": "Připojte se k pozvánkám nebo vytvořte pracovní prostor", + "unified_description": "Veškerá vaše práce – jednotná.", + "create_new_workspace": "Vytvořte nový pracovní prostor", + "no_invitations_found": "Nebyly nalezeny žádné pozvánky", + "you_are_invited": "Jste zváni!", + "accept_invites": "Přijměte pozvání ke spolupráci se svým týmem.", + "continue_to_workspace": "Pokračujte do pracovního prostoru", + "or": "nebo", + "create_own_workspace": "Vytvořte si vlastní pracovní prostor", + "workspace_creation_disabled": "Zdá se, že nemáte žádné pozvánky do pracovního prostoru a váš správce instance omezil vytváření nových pracovních prostorů. Požádejte vlastníka nebo správce pracovního prostoru, aby vás nejprve pozval do pracovního prostoru a vraťte se na tuto obrazovku a připojte se.", + "create_workspace_title": "Vytvořte si svůj pracovní prostor", + "enter_workspace_name": "Zadejte název pracovního prostoru", + "join_existing_workspace": "Připojte se k existujícímu pracovnímu prostoru", + "profile_setup_completed": "Nastavení profilu dokončeno.", + "profile_setup_failed": "Nastavení profilu se nezdařilo.", + "usecase_title": "Jak plánujete používat Plane?", + "usecase_description": "Vyberte jednu nebo více možností, abychom mohli přizpůsobit váš zážitek.", + "select_one_or_more": "Vyberte jednu nebo více", + "select_at_least_one": "Vyberte alespoň jednu možnost.", + "skip": "Přeskočit" } } diff --git a/packages/i18n/src/locales/de/auth.json b/packages/i18n/src/locales/de/auth.json index cce6c71fbec..440dab47ddd 100644 --- a/packages/i18n/src/locales/de/auth.json +++ b/packages/i18n/src/locales/de/auth.json @@ -364,5 +364,45 @@ "sub_header": "Geben Sie Ihre {ldapProviderName}-Anmeldedaten ein" } } + }, + "space_auth": { + "email": "E-Mail", + "email_invalid": "E-Mail ist ungültig", + "clear_email": "E-Mail leeren", + "password": "Passwort", + "set_password": "Legen Sie ein Passwort fest", + "enter_password": "Passwort eingeben", + "confirm_password": "Passwort bestätigen", + "passwords_dont_match": "Passwörter stimmen nicht überein", + "continue": "Weiter", + "go_to_workspace": "Gehen Sie zum Arbeitsbereich", + "sign_in_with_unique_code": "Melden Sie sich mit einem eindeutigen Code an", + "create_account": "Benutzerkonto erstellen", + "unique_code": "Eindeutiger Code", + "paste_code_sent": "Fügen Sie den an Ihre E-Mail gesendeten Code ein", + "resend_in": "In {seconds}s erneut senden", + "requesting_new_code": "Neuer Code wird angefordert", + "resend": "Erneut senden", + "sending_code": "Code wird gesendet" + }, + "space_public": { + "by_creating_account": "Mit dem Erstellen eines Kontos", + "by_signing_in": "Mit der Anmeldung", + "you_agree_to_our": "stimmen Sie unseren", + "terms_of_service": "Nutzungsbedingungen", + "and": "und", + "privacy_policy": "Datenschutzrichtlinie", + "sign_up": "Registrieren", + "oauth_with_provider": "{action} mit {provider}", + "user_already_logged_in": "Benutzer ist bereits angemeldet", + "logged_in_title": "Gut! Nur noch ein Schritt.", + "logged_in_hint": "Geben Sie die öffentliche Freigabe-URL oder den Link der Ansicht oder Seite, die Sie öffnen möchten, in die Adressleiste des Browsers ein.", + "sign_in": "Anmelden", + "auth": { + "sign_in_header": "Melden Sie sich an, um abzustimmen oder zu kommentieren", + "sign_in_subheader": "Helfen Sie dabei, die Funktionen voranzubringen, die Sie umgesetzt sehen möchten.", + "sign_up_header": "Ansehen, kommentieren und mehr tun", + "sign_up_subheader": "Registrieren Sie sich oder melden Sie sich an, um mit Plane-Arbeitselementen und Seiten zu arbeiten." + } } } diff --git a/packages/i18n/src/locales/de/common.json b/packages/i18n/src/locales/de/common.json index 1e18d4ee26e..14f88f49272 100644 --- a/packages/i18n/src/locales/de/common.json +++ b/packages/i18n/src/locales/de/common.json @@ -867,5 +867,20 @@ "description": "Arbeitselemente in JSON exportieren.", "short_description": "Als JSON exportieren" } + }, + "space_public": { + "error_title": "Hoppla! Das sieht nicht gut aus.", + "error_description_prefix": "Plane ist abgestürzt. Keine Sorge, unsere Entwickler wurden benachrichtigt. Wenn Sie weitere Details haben, schreiben Sie bitte an", + "error_description_middle": "oder in unserem", + "forum": "Forum", + "refresh": "Aktualisieren", + "not_found_title": "Das hat nicht funktioniert", + "not_found_hint": "Prüfen Sie die URL in der Adressleiste des Browsers und versuchen Sie es erneut.", + "instance_failure_image_alt": "Instanzdetails konnten nicht abgerufen werden", + "instance_failure_title": "Instanzdetails konnten nicht abgerufen werden.", + "instance_failure_description": "Ihre Instanzdetails konnten nicht geladen werden.", + "instance_failure_hint": "Prüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "retry": "Erneut versuchen", + "powered_by": "Bereitgestellt von" } } diff --git a/packages/i18n/src/locales/de/editor.json b/packages/i18n/src/locales/de/editor.json index 93b032181a1..f2fdcfb6bbe 100644 --- a/packages/i18n/src/locales/de/editor.json +++ b/packages/i18n/src/locales/de/editor.json @@ -61,5 +61,79 @@ "use_this": "Übernehmen", "refine": "Verfeinern" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Geben Sie die URL ein oder fügen Sie sie ein", + "text": "Text", + "enter_text_to_display": "Geben Sie den anzuzeigenden Text ein", + "remove_link": "Link entfernen", + "edit_link": "Link bearbeiten", + "color": "Farbe", + "text_colors": "Textfarben", + "background_colors": "Hintergrundfarben", + "link": "Link", + "enter_or_paste_link": "Link eingeben oder einfügen", + "please_enter_valid_url": "Bitte geben Sie eine gültige URL ein", + "delete": "Löschen", + "duplicate": "Duplizieren", + "multiple": "Mehrere", + "loading": "Laden", + "no_results": "Keine Ergebnisse", + "copy_code": "Code kopieren", + "add_an_image": "Fügen Sie ein Bild hinzu", + "error_loading_image": "Fehler beim Laden des Bildes", + "uploading": "Hochladen", + "drop_image_here": "Bild hier einfügen", + "retry_duplication": "Versuchen Sie es erneut", + "retry": "Wiederholen", + "no_emojis_found": "Keine Emojis gefunden", + "fullscreen_image_viewer": "Vollbild-Bildbetrachter", + "close_image_viewer": "Bildbetrachter schließen", + "zoom_out": "Herauszoomen", + "zoom_in": "Vergrößern", + "download_image": "Bild herunterladen", + "open_image_in_new_tab": "Bild in neuem Tab öffnen", + "view_in_full_screen": "Im Vollbildmodus ansehen", + "view_image_in_full_screen": "Bild im Vollbildmodus anzeigen", + "align": "Ausrichten", + "download": "Herunterladen", + "clear_contents": "Inhalte leeren", + "insert_above": "Oben einfügen", + "insert_below": "Unten einfügen", + "insert_left": "Links einfügen", + "insert_right": "Rechts einfügen", + "header_row": "Kopfzeile", + "header_column": "Kopfspalte", + "alignment": { + "left": "Links", + "center": "Zentriert", + "right": "Rechts" + }, + "menu_items": { + "text": "Text", + "h1": "Überschrift 1", + "h2": "Überschrift 2", + "h3": "Überschrift 3", + "h4": "Überschrift 4", + "h5": "Überschrift 5", + "h6": "Überschrift 6", + "bulleted-list": "Liste mit Aufzählungszeichen", + "numbered-list": "Nummerierte Liste", + "to-do-list": "To-Do-Liste", + "quote": "Zitat", + "code": "Code", + "table": "Tabelle", + "image": "Bild", + "divider": "Teiler", + "link": "Link", + "bold": "Fett", + "italic": "Kursiv", + "underline": "Unterstreichen", + "strikethrough": "Durchgestrichen", + "text-color": "Textfarbe", + "background-color": "Hintergrundfarbe", + "text-align": "Text ausrichten" + } } } diff --git a/packages/i18n/src/locales/de/empty-state.json b/packages/i18n/src/locales/de/empty-state.json index 74bc261a01f..9bc09add512 100644 --- a/packages/i18n/src/locales/de/empty-state.json +++ b/packages/i18n/src/locales/de/empty-state.json @@ -266,5 +266,11 @@ "description": "Wählen Sie die Zustände aus, die das Arbeitselement durchläuft." } } + }, + "app_not_found": { + "alt": "404 - Seite nicht gefunden", + "title": "Hoppla! Etwas ist schiefgelaufen.", + "description": "Die gesuchte Seite wurde nicht gefunden. Sie wurde möglicherweise entfernt, umbenannt oder ist vorübergehend nicht verfügbar.", + "go_to_home": "Zur Startseite" } } diff --git a/packages/i18n/src/locales/de/inbox.json b/packages/i18n/src/locales/de/inbox.json index 79591e38df8..03a59108580 100644 --- a/packages/i18n/src/locales/de/inbox.json +++ b/packages/i18n/src/locales/de/inbox.json @@ -83,5 +83,56 @@ "title": "Wählen Sie ein Arbeitselement, um Details anzuzeigen." } } + }, + "inbox": { + "duplicate_issues_found": "{count} doppelte Arbeitselemente gefunden", + "description_versions": { + "intake_form_user": "Benutzer des Intake-Formulars" + }, + "errors": { + "asset_upload_failed": "Das Hochladen des Assets ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal.", + "asset_duplication_failed": "Die Duplizierung von Assets ist fehlgeschlagen. Bitte versuchen Sie es später noch einmal.", + "permission_denied": "Zugriff verweigert", + "mark_duplicate_permission": "Nur Projektadministratoren können Arbeitselemente als Duplikat markieren", + "mark_duplicate_permission_plural": "Nur Projektadministratoren können Arbeitselemente als Duplikat markieren" + }, + "filters": { + "created_date": "Erstellungsdatum", + "updated_date": "Aktualisiertes Datum", + "last_updated_date": "Datum der letzten Aktualisierung", + "status": "Status", + "work_item_status": "Arbeitselementstatus", + "view_all": "Alle anzeigen", + "view_less": "Weniger anzeigen", + "date_options": { + "today": "Heute", + "yesterday": "Gestern", + "last_7_days": "Letzte 7 Tage", + "last_30_days": "Letzte 30 Tage" + }, + "date_operators": { + "after": "Nach", + "before": "Vor" + } + }, + "navigation": { + "previous_work_item": "Vorheriges Arbeitselement", + "next_work_item": "Nächstes Arbeitselement" + }, + "properties": { + "duplicate_of": "Duplikat von" + }, + "select_duplicate": { + "select_work_item": "Arbeitselement auswählen" + }, + "sidebar": { + "label_count": "{count}-Etiketten" + }, + "toasts": { + "editor_processing": "Der Editor verarbeitet noch Änderungen. Bitte warten Sie, bevor Sie fortfahren.", + "create_success": "Arbeitselement erfolgreich erstellt.", + "delete_failed": "Das Löschen des Arbeitselements ist fehlgeschlagen", + "update_failed": "Die Aktualisierung des Arbeitselements ist fehlgeschlagen" + } } } diff --git a/packages/i18n/src/locales/de/page.json b/packages/i18n/src/locales/de/page.json index 10af7310003..83e55dc7ba1 100644 --- a/packages/i18n/src/locales/de/page.json +++ b/packages/i18n/src/locales/de/page.json @@ -111,5 +111,18 @@ "success_message": "Seite aus Sammlung entfernt.", "error_message": "Die Seite konnte nicht aus der Sammlung entfernt werden. Bitte versuchen Sie es erneut." } + }, + "page_access": { + "not_found_title": "Seite nicht gefunden", + "not_found_description": "Die Seite, auf die Sie zugreifen möchten, existiert nicht oder Sie haben keine Berechtigung, sie anzusehen.", + "view_other_pages": "Andere Seiten anzeigen" + }, + "profile_activity": { + "page_title": "Profil - Aktivität" + }, + "space_public": { + "page_not_found_alt": "Seite nicht gefunden", + "page_not_found_description": "Die gesuchte Seite existiert nicht oder wurde verschoben.", + "something_went_wrong": "Hoppla! Etwas ist schiefgelaufen." } } diff --git a/packages/i18n/src/locales/de/project.json b/packages/i18n/src/locales/de/project.json index 96623077f69..8530939b486 100644 --- a/packages/i18n/src/locales/de/project.json +++ b/packages/i18n/src/locales/de/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Noch keine Projekte", + "description": "Projekte bilden die Grundlage für zielorientierte Arbeit. Mit ihnen verwalten Sie Teams, Aufgaben und alles, was Sie zur Erledigung der Arbeit benötigen.", + "learn_more": "Mehr über Projekte erfahren", + "start_first_project": "Erstes Projekt starten" } } diff --git a/packages/i18n/src/locales/de/work-item.json b/packages/i18n/src/locales/de/work-item.json index 9c235f60554..c1ff57be63b 100644 --- a/packages/i18n/src/locales/de/work-item.json +++ b/packages/i18n/src/locales/de/work-item.json @@ -422,5 +422,35 @@ "label": "Epic-Titel", "required": "Ein Titel für das Epic ist erforderlich." } + }, + "space_public": { + "peek": { + "side": "Seitenansicht", + "modal": "Modal", + "full_screen": "Vollbild" + }, + "public_board_not_found": "Das öffentliche Board existiert nicht. Bitte prüfen Sie die URL.", + "no_work_items_found": "Keine Arbeitselemente gefunden", + "bot_name": "{name}-Bot", + "commented_time": "kommentierte {time}", + "and_more": "und {count} weitere", + "no_upvotes_yet": "Noch keine Upvotes", + "no_downvotes_yet": "Noch keine Downvotes", + "view_less": "Weniger anzeigen", + "view_all": "Alle anzeigen", + "no_matches_found": "Keine Treffer gefunden", + "no_date": "Kein Datum", + "no_cycle": "Kein Zyklus", + "no_modules": "Keine Module", + "modules_count": "{count} Module", + "no_assignees": "Keine Zuständigen", + "labels_count": "{count} Labels", + "no_labels": "Keine Labels", + "sign_in_to_add_comment": "Melden Sie sich an, um einen Kommentar hinzuzufügen", + "add_comment": "Kommentar hinzufügen", + "link_copied": "Link kopiert!", + "work_item_link_copied": "Link zum Arbeitselement in die Zwischenablage kopiert.", + "comment_post_error": "Kommentar konnte nicht veröffentlicht werden. Bitte versuchen Sie es erneut.", + "user": "Benutzer" } } diff --git a/packages/i18n/src/locales/de/workspace.json b/packages/i18n/src/locales/de/workspace.json index 46408ba8bdb..e77c0e36eb6 100644 --- a/packages/i18n/src/locales/de/workspace.json +++ b/packages/i18n/src/locales/de/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Sind Sie sicher, dass Sie diese Ansicht löschen möchten?", "content": "Wenn Sie bestätigen, werden alle Sortier-, Filter- und Anzeigeoptionen + das Layout, das Sie für diese Ansicht gewählt haben, dauerhaft gelöscht und können nicht wiederhergestellt werden." - } + }, + "page_title": "{workspaceName} - Alle Ansichten" }, "workspace_draft_issues": { "draft_an_issue": "Einen Entwurf für ein Element erstellen", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Arbeitsbereich nicht gefunden", + "not_found_description": "Für diese URL wurde kein Arbeitsbereich gefunden. Er existiert möglicherweise nicht oder Sie haben keine Berechtigung, ihn anzusehen.", + "visit_profile": "Profil öffnen", + "not_authorized_title": "Nicht autorisiert!", + "not_authorized_description": "Sie sind kein Mitglied dieses Arbeitsbereichs. Wenden Sie sich an den Administrator des Arbeitsbereichs, um eine Einladung zu erhalten, oder prüfen Sie Ihre ausstehenden Einladungen.", + "check_pending_invites": "Ausstehende Einladungen prüfen" + }, + "workspace_invitation": { + "invitation_not_found": "Einladung nicht gefunden", + "invited_to_workspace": "Sie wurden zu {workspaceName} eingeladen", + "description": "In Ihrem Arbeitsbereich erstellen Sie Projekte, arbeiten gemeinsam an Ihren Arbeitselementen und organisieren verschiedene Arbeitsströme in Ihrem Plane-Konto.", + "accept": "Akzeptieren", + "ignore": "Ignorieren", + "already_member": "Sie sind bereits Mitglied von {workspaceName}", + "continue_to_home": "Weiter zur Startseite", + "inactive_title": "Dieser Einladungslink ist nicht mehr aktiv.", + "empty_project_link": "Oder beginnen Sie mit einem leeren Projekt", + "sign_in_to_continue": "Melden Sie sich an, um fortzufahren", + "star_on_github": "Geben Sie uns einen Stern auf GitHub", + "join_community": "Treten Sie unserer Community aktiver Entwickler bei" + }, + "onboarding": { + "create_profile_title": "Erstellen Sie Ihr Profil.", + "create_profile_description": "So werden Sie in Plane angezeigt.", + "change_image": "Bild ändern", + "upload_image": "Bild hochladen", + "name": "Name", + "name_required": "Name ist erforderlich", + "name_within_50": "Der Name muss maximal 50 Zeichen lang sein.", + "enter_full_name": "Geben Sie Ihren vollständigen Namen ein", + "set_password": "Legen Sie ein Passwort fest", + "optional": "Optional", + "passwords_do_not_match": "Passwörter stimmen nicht überein", + "passwords_match": "Passwörter stimmen überein", + "continue": "Weiter", + "invite_team_title": "Laden Sie Ihre Teamkollegen ein", + "invite_team_description": "Die Arbeit in Plane gelingt am besten mit Ihrem Team. Laden Sie sie jetzt ein, Plane voll auszuschöpfen.", + "invalid_email": "Das sieht nicht nach einer E-Mail-Adresse aus.", + "success": "Erfolg!", + "invitations_sent": "Einladungen erfolgreich versendet.", + "error": "Fehler!", + "add_another": "Fügen Sie einen weiteren hinzu", + "do_later": "Ich werde es später tun", + "join_invites_title": "Nehmen Sie an Einladungen teil oder erstellen Sie einen Arbeitsbereich", + "unified_description": "Ihre gesamte Arbeit – einheitlich.", + "create_new_workspace": "Neuen Arbeitsbereich erstellen", + "no_invitations_found": "Keine Einladungen gefunden", + "you_are_invited": "Sie sind eingeladen!", + "accept_invites": "Nehmen Sie die Einladungen zur Zusammenarbeit mit Ihrem Team an.", + "continue_to_workspace": "Weiter zum Arbeitsbereich", + "or": "oder", + "create_own_workspace": "Erstellen Sie Ihren eigenen Arbeitsbereich", + "workspace_creation_disabled": "Sie haben offenbar keine Einladungen zu einem Arbeitsbereich und Ihr Instanzadministrator hat die Erstellung neuer Arbeitsbereiche eingeschränkt. Bitten Sie einen Workspace-Inhaber oder Administrator, Sie zunächst zu einem Workspace einzuladen und zu diesem Bildschirm zurückzukehren, um beizutreten.", + "create_workspace_title": "Erstellen Sie Ihren Arbeitsbereich", + "enter_workspace_name": "Geben Sie den Namen des Arbeitsbereichs ein", + "join_existing_workspace": "Treten Sie einem vorhandenen Arbeitsbereich bei", + "profile_setup_completed": "Profileinrichtung abgeschlossen.", + "profile_setup_failed": "Die Profileinrichtung ist fehlgeschlagen.", + "usecase_title": "Wie planen Sie den Einsatz von Plane?", + "usecase_description": "Wählen Sie eine oder mehrere Optionen aus, damit wir Ihr Erlebnis personalisieren können.", + "select_one_or_more": "Wählen Sie eine oder mehrere aus", + "select_at_least_one": "Wählen Sie mindestens eine Option aus.", + "skip": "Überspringen" } } diff --git a/packages/i18n/src/locales/en/auth.json b/packages/i18n/src/locales/en/auth.json index fdc4cf781e0..b6a55e923c9 100644 --- a/packages/i18n/src/locales/en/auth.json +++ b/packages/i18n/src/locales/en/auth.json @@ -364,5 +364,45 @@ "sub_header": "Enter your {ldapProviderName} credentials" } } + }, + "space_auth": { + "email": "Email", + "email_invalid": "Email is invalid", + "clear_email": "Clear email", + "password": "Password", + "set_password": "Set a password", + "enter_password": "Enter password", + "confirm_password": "Confirm password", + "passwords_dont_match": "Passwords do not match", + "continue": "Continue", + "go_to_workspace": "Go to workspace", + "sign_in_with_unique_code": "Sign in with unique code", + "create_account": "Create account", + "unique_code": "Unique code", + "paste_code_sent": "Paste the code sent to your email", + "resend_in": "Resend in {seconds}s", + "requesting_new_code": "Requesting new code", + "resend": "Resend", + "sending_code": "Sending code" + }, + "space_public": { + "by_creating_account": "By creating an account", + "by_signing_in": "By signing in", + "you_agree_to_our": "you agree to our", + "terms_of_service": "Terms of Service", + "and": "and", + "privacy_policy": "Privacy Policy", + "sign_up": "Sign up", + "oauth_with_provider": "{action} with {provider}", + "user_already_logged_in": "User already logged in", + "logged_in_title": "Nice! Just one more step.", + "logged_in_hint": "Enter the public-share URL or link of the view or Page you are trying to see in the browser address bar.", + "sign_in": "Sign in", + "auth": { + "sign_in_header": "Sign in to upvote or comment", + "sign_in_subheader": "Contribute in nudging the features you want to get built.", + "sign_up_header": "View, comment, and do more", + "sign_up_subheader": "Sign up or log in to work with Plane work items and Pages." + } } } diff --git a/packages/i18n/src/locales/en/common.json b/packages/i18n/src/locales/en/common.json index a138304371e..1b8567fe1e4 100644 --- a/packages/i18n/src/locales/en/common.json +++ b/packages/i18n/src/locales/en/common.json @@ -867,5 +867,20 @@ "description": "Export work items to a JSON file.", "short_description": "Export as json" } + }, + "space_public": { + "error_title": "Yikes! That does not look good.", + "error_description_prefix": "That crashed Plane, pun intended. No worries, though. Our engineers have been notified. If you have more details, please write to", + "error_description_middle": "or on our", + "forum": "Forum", + "refresh": "Refresh", + "not_found_title": "That did not work", + "not_found_hint": "Check the URL you are entering in the browser address bar and try again.", + "instance_failure_image_alt": "Unable to fetch instance details", + "instance_failure_title": "Unable to fetch instance details.", + "instance_failure_description": "We could not load your instance details.", + "instance_failure_hint": "Please check your connection and try again.", + "retry": "Retry", + "powered_by": "Powered by" } } diff --git a/packages/i18n/src/locales/en/editor.json b/packages/i18n/src/locales/en/editor.json index 293dc511e61..525ea682230 100644 --- a/packages/i18n/src/locales/en/editor.json +++ b/packages/i18n/src/locales/en/editor.json @@ -61,5 +61,79 @@ "use_this": "Use this", "refine": "Refine" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Enter or paste URL", + "text": "Text", + "enter_text_to_display": "Enter text to display", + "remove_link": "Remove link", + "edit_link": "Edit link", + "color": "Color", + "text_colors": "Text colors", + "background_colors": "Background colors", + "link": "Link", + "enter_or_paste_link": "Enter or paste link", + "please_enter_valid_url": "Please enter a valid URL", + "delete": "Delete", + "duplicate": "Duplicate", + "multiple": "Multiple", + "loading": "Loading", + "no_results": "No results", + "copy_code": "Copy code", + "add_an_image": "Add an image", + "error_loading_image": "Error loading image", + "uploading": "Uploading", + "drop_image_here": "Drop image here", + "retry_duplication": "Retry duplication", + "retry": "Retry", + "no_emojis_found": "No emojis found", + "fullscreen_image_viewer": "Fullscreen image viewer", + "close_image_viewer": "Close image viewer", + "zoom_out": "Zoom out", + "zoom_in": "Zoom in", + "download_image": "Download image", + "open_image_in_new_tab": "Open image in new tab", + "view_in_full_screen": "View in full screen", + "view_image_in_full_screen": "View image in full screen", + "align": "Align", + "download": "Download", + "clear_contents": "Clear contents", + "insert_above": "Insert above", + "insert_below": "Insert below", + "insert_left": "Insert left", + "insert_right": "Insert right", + "header_row": "Header row", + "header_column": "Header column", + "alignment": { + "left": "Left", + "center": "Center", + "right": "Right" + }, + "menu_items": { + "text": "Text", + "h1": "Heading 1", + "h2": "Heading 2", + "h3": "Heading 3", + "h4": "Heading 4", + "h5": "Heading 5", + "h6": "Heading 6", + "bulleted-list": "Bulleted list", + "numbered-list": "Numbered list", + "to-do-list": "To-do list", + "quote": "Quote", + "code": "Code", + "table": "Table", + "image": "Image", + "divider": "Divider", + "link": "Link", + "bold": "Bold", + "italic": "Italic", + "underline": "Underline", + "strikethrough": "Strikethrough", + "text-color": "Text color", + "background-color": "Background color", + "text-align": "Text align" + } } } diff --git a/packages/i18n/src/locales/en/empty-state.json b/packages/i18n/src/locales/en/empty-state.json index 33b556ecd28..56c7571d2fb 100644 --- a/packages/i18n/src/locales/en/empty-state.json +++ b/packages/i18n/src/locales/en/empty-state.json @@ -266,5 +266,11 @@ "description": "Select the states through which the work item progresses." } } + }, + "app_not_found": { + "alt": "404 - Page not found", + "title": "Oops! Something went wrong.", + "description": "Sorry, the page you are looking for cannot be found. It may have been removed, renamed, or is temporarily unavailable.", + "go_to_home": "Go to Home" } } diff --git a/packages/i18n/src/locales/en/inbox.json b/packages/i18n/src/locales/en/inbox.json index 4d868dbd8d2..4ee0deb6b44 100644 --- a/packages/i18n/src/locales/en/inbox.json +++ b/packages/i18n/src/locales/en/inbox.json @@ -83,5 +83,56 @@ "title": "Select a work item to view its details." } } + }, + "inbox": { + "duplicate_issues_found": "{count} duplicate issues found", + "description_versions": { + "intake_form_user": "Intake Form user" + }, + "errors": { + "asset_upload_failed": "Asset upload failed. Please try again later.", + "asset_duplication_failed": "Asset duplication failed. Please try again later.", + "permission_denied": "Permission denied", + "mark_duplicate_permission": "Only project admins can mark work item as duplicate", + "mark_duplicate_permission_plural": "Only project admins can mark work items as duplicate" + }, + "filters": { + "created_date": "Created date", + "updated_date": "Updated date", + "last_updated_date": "Last updated date", + "status": "Status", + "work_item_status": "Work item status", + "view_all": "View all", + "view_less": "View less", + "date_options": { + "today": "Today", + "yesterday": "Yesterday", + "last_7_days": "Last 7 days", + "last_30_days": "Last 30 days" + }, + "date_operators": { + "after": "After", + "before": "Before" + } + }, + "navigation": { + "previous_work_item": "Previous work item", + "next_work_item": "Next work item" + }, + "properties": { + "duplicate_of": "Duplicate of" + }, + "select_duplicate": { + "select_work_item": "Select work item" + }, + "sidebar": { + "label_count": "{count} labels" + }, + "toasts": { + "editor_processing": "Editor is still processing changes. Please wait before proceeding.", + "create_success": "Work item created successfully.", + "delete_failed": "Work item delete failed", + "update_failed": "Work item update failed" + } } } diff --git a/packages/i18n/src/locales/en/page.json b/packages/i18n/src/locales/en/page.json index f14a4b017b3..c3b6580cb68 100644 --- a/packages/i18n/src/locales/en/page.json +++ b/packages/i18n/src/locales/en/page.json @@ -111,5 +111,18 @@ "success_message": "Page removed from collection.", "error_message": "Page could not be removed from the collection. Please try again." } + }, + "page_access": { + "not_found_title": "Page not found", + "not_found_description": "The page you are trying to access does not exist or you do not have permission to view it.", + "view_other_pages": "View other Pages" + }, + "profile_activity": { + "page_title": "Profile - Activity" + }, + "space_public": { + "page_not_found_alt": "Page not found", + "page_not_found_description": "The page you are looking for does not exist or has been moved.", + "something_went_wrong": "Oops! Something went wrong." } } diff --git a/packages/i18n/src/locales/en/project.json b/packages/i18n/src/locales/en/project.json index fa6be606e2d..0a1b66bdca3 100644 --- a/packages/i18n/src/locales/en/project.json +++ b/packages/i18n/src/locales/en/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "No projects yet", + "description": "Projects act as the foundation for goal-driven work. They let you manage your teams, tasks, and everything you need to get things done.", + "learn_more": "Learn more about projects", + "start_first_project": "Start your first project" } } diff --git a/packages/i18n/src/locales/en/work-item.json b/packages/i18n/src/locales/en/work-item.json index b7935a125c3..905949dac17 100644 --- a/packages/i18n/src/locales/en/work-item.json +++ b/packages/i18n/src/locales/en/work-item.json @@ -422,5 +422,35 @@ "label": "Epic Title", "required": "Epic title is required." } + }, + "space_public": { + "peek": { + "side": "Side Peek", + "modal": "Modal", + "full_screen": "Full Screen" + }, + "public_board_not_found": "The public board does not exist. Please check the URL.", + "no_work_items_found": "No work items found", + "bot_name": "{name} Bot", + "commented_time": "commented {time}", + "and_more": "and {count} more", + "no_upvotes_yet": "No upvotes yet", + "no_downvotes_yet": "No downvotes yet", + "view_less": "View less", + "view_all": "View all", + "no_matches_found": "No matches found", + "no_date": "No Date", + "no_cycle": "No Cycle", + "no_modules": "No Modules", + "modules_count": "{count} Modules", + "no_assignees": "No Assignees", + "labels_count": "{count} Labels", + "no_labels": "No labels", + "sign_in_to_add_comment": "Sign in to add a comment", + "add_comment": "Add comment", + "link_copied": "Link copied!", + "work_item_link_copied": "Work item link copied to clipboard.", + "comment_post_error": "Failed to post comment. Please try again.", + "user": "User" } } diff --git a/packages/i18n/src/locales/en/workspace.json b/packages/i18n/src/locales/en/workspace.json index 7e75895ca6f..40db421e99a 100644 --- a/packages/i18n/src/locales/en/workspace.json +++ b/packages/i18n/src/locales/en/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Are you sure you want to delete this view?", "content": "If you confirm, all the sort, filter, and display options + the layout you have chosen for this view will be permanently deleted without any way to restore them." - } + }, + "page_title": "{workspaceName} - All Views" }, "workspace_draft_issues": { "draft_an_issue": "Draft a work item", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Workspace not found", + "not_found_description": "No workspace was found for this URL. It may not exist or you may not have permission to view it.", + "visit_profile": "Visit Profile", + "not_authorized_title": "Not Authorized!", + "not_authorized_description": "You are not a member of this workspace. Please contact the workspace admin to get an invitation or check your pending invitations.", + "check_pending_invites": "Check pending invites" + }, + "workspace_invitation": { + "invitation_not_found": "Invitation not found", + "invited_to_workspace": "You have been invited to {workspaceName}", + "description": "Your workspace is where you will create projects, collaborate on your work items, and organize different streams of work in your Plane account.", + "accept": "Accept", + "ignore": "Ignore", + "already_member": "You are already a member of {workspaceName}", + "continue_to_home": "Continue to home", + "inactive_title": "This invitation link is not active anymore.", + "empty_project_link": "Or start from an empty project", + "sign_in_to_continue": "Sign in to continue", + "star_on_github": "Star us on GitHub", + "join_community": "Join our community of active creators" + }, + "onboarding": { + "create_profile_title": "Create your profile.", + "create_profile_description": "This is how you will appear in Plane.", + "change_image": "Change image", + "upload_image": "Upload image", + "name": "Name", + "name_required": "Name is required", + "name_within_50": "Name must be within 50 characters.", + "enter_full_name": "Enter your full name", + "set_password": "Set a password", + "optional": "Optional", + "passwords_do_not_match": "Passwords do not match", + "passwords_match": "Passwords match", + "continue": "Continue", + "invite_team_title": "Invite your teammates", + "invite_team_description": "Work in Plane happens best with your team. Invite them now to use Plane to its potential.", + "invalid_email": "That does not look like an email address.", + "success": "Success!", + "invitations_sent": "Invitations sent successfully.", + "error": "Error!", + "add_another": "Add another", + "do_later": "I will do it later", + "join_invites_title": "Join invites or create a workspace", + "unified_description": "All your work — unified.", + "create_new_workspace": "Create new workspace", + "no_invitations_found": "No invitations found", + "you_are_invited": "You are invited!", + "accept_invites": "Accept the invites to collaborate with your team.", + "continue_to_workspace": "Continue to workspace", + "or": "or", + "create_own_workspace": "Create your own workspace", + "workspace_creation_disabled": "You do not seem to have any invites to a workspace and your instance admin has restricted creation of new workspaces. Please ask a workspace owner or admin to invite you to a workspace first and come back to this screen to join.", + "create_workspace_title": "Create your workspace", + "enter_workspace_name": "Enter workspace name", + "join_existing_workspace": "Join existing workspace", + "profile_setup_completed": "Profile setup completed.", + "profile_setup_failed": "Profile setup failed.", + "usecase_title": "How are you planning to use Plane?", + "usecase_description": "Select one or more options so we can personalize your experience.", + "select_one_or_more": "Select one or more", + "select_at_least_one": "Select at least one option.", + "skip": "Skip" } } diff --git a/packages/i18n/src/locales/es/auth.json b/packages/i18n/src/locales/es/auth.json index b8e0353df89..0c47b7aa2fe 100644 --- a/packages/i18n/src/locales/es/auth.json +++ b/packages/i18n/src/locales/es/auth.json @@ -364,5 +364,45 @@ "sub_header": "Ingrese sus credenciales de {ldapProviderName}" } } + }, + "space_auth": { + "email": "Correo electrónico", + "email_invalid": "El correo electrónico no es válido", + "clear_email": "Borrar correo electrónico", + "password": "Contraseña", + "set_password": "Establecer una contraseña", + "enter_password": "Introduce la contraseña", + "confirm_password": "Confirmar Contraseña", + "passwords_dont_match": "Las contraseñas no coinciden", + "continue": "Continuar", + "go_to_workspace": "Ir al espacio de trabajo", + "sign_in_with_unique_code": "Inicia sesión con código único", + "create_account": "Crear una cuenta", + "unique_code": "código único", + "paste_code_sent": "Pega el código enviado a tu correo electrónico", + "resend_in": "Reenviar en {seconds}s", + "requesting_new_code": "Solicitando nuevo código", + "resend": "Reenviar", + "sending_code": "Enviando código" + }, + "space_public": { + "by_creating_account": "Al crear una cuenta", + "by_signing_in": "Al iniciar sesión", + "you_agree_to_our": "aceptas nuestros", + "terms_of_service": "Términos de servicio", + "and": "y", + "privacy_policy": "Política de privacidad", + "sign_up": "Registrarse", + "oauth_with_provider": "{action} con {provider}", + "user_already_logged_in": "El usuario ya ha iniciado sesión", + "logged_in_title": "Bien. Solo falta un paso.", + "logged_in_hint": "Introduce en la barra de direcciones del navegador la URL pública compartida o el enlace de la vista o página que quieres ver.", + "sign_in": "Iniciar sesión", + "auth": { + "sign_in_header": "Inicia sesión para votar o comentar", + "sign_in_subheader": "Ayuda a impulsar las funciones que quieres que se creen.", + "sign_up_header": "Ver, comentar y hacer más", + "sign_up_subheader": "Regístrate o inicia sesión para trabajar con elementos de trabajo y páginas de Plane." + } } } diff --git a/packages/i18n/src/locales/es/common.json b/packages/i18n/src/locales/es/common.json index 64440c9c653..e484d1f45d4 100644 --- a/packages/i18n/src/locales/es/common.json +++ b/packages/i18n/src/locales/es/common.json @@ -867,5 +867,20 @@ "description": "Exporta elementos de trabajo a un archivo JSON.", "short_description": "Exportar como json" } + }, + "space_public": { + "error_title": "¡Vaya! Esto no se ve bien.", + "error_description_prefix": "Plane se bloqueó. No te preocupes, nuestros ingenieros ya fueron notificados. Si tienes más detalles, escribe a", + "error_description_middle": "o en nuestro", + "forum": "Foro", + "refresh": "Actualizar", + "not_found_title": "Eso no funcionó", + "not_found_hint": "Comprueba la URL en la barra de direcciones del navegador e inténtalo de nuevo.", + "instance_failure_image_alt": "No se pudieron obtener los detalles de la instancia", + "instance_failure_title": "No se pudieron obtener los detalles de la instancia.", + "instance_failure_description": "No pudimos cargar los detalles de tu instancia.", + "instance_failure_hint": "Comprueba tu conexión e inténtalo de nuevo.", + "retry": "Reintentar", + "powered_by": "Con tecnología de" } } diff --git a/packages/i18n/src/locales/es/editor.json b/packages/i18n/src/locales/es/editor.json index ec7dedbf94d..3c8b678adb6 100644 --- a/packages/i18n/src/locales/es/editor.json +++ b/packages/i18n/src/locales/es/editor.json @@ -61,5 +61,79 @@ "use_this": "Usar esto", "refine": "Refinar" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Introduce o pega la URL", + "text": "Texto", + "enter_text_to_display": "Ingrese el texto para mostrar", + "remove_link": "Quitar enlace", + "edit_link": "Editar enlace", + "color": "Color", + "text_colors": "Colores de texto", + "background_colors": "Colores de fondo", + "link": "Enlace", + "enter_or_paste_link": "Ingresar o pegar enlace", + "please_enter_valid_url": "Por favor ingresa un URL válido", + "delete": "Borrar", + "duplicate": "Duplicado", + "multiple": "Múltiple", + "loading": "Cargando", + "no_results": "Sin resultados", + "copy_code": "Copiar código", + "add_an_image": "Añadir una imagen", + "error_loading_image": "Error al cargar la imagen", + "uploading": "Subiendo", + "drop_image_here": "Suelta imagen aquí", + "retry_duplication": "Reintentar la duplicación", + "retry": "Reintentar", + "no_emojis_found": "No se encontraron emojis", + "fullscreen_image_viewer": "Visor de imágenes en pantalla completa", + "close_image_viewer": "Cerrar visor de imágenes", + "zoom_out": "Alejar", + "zoom_in": "Acercar", + "download_image": "Descargar imagen", + "open_image_in_new_tab": "Abrir imagen en nueva pestaña", + "view_in_full_screen": "Ver en pantalla completa", + "view_image_in_full_screen": "Ver imagen en pantalla completa", + "align": "Alinear", + "download": "Descargar", + "clear_contents": "Borrar contenidos", + "insert_above": "Insertar arriba", + "insert_below": "Insertar abajo", + "insert_left": "Insertar a la izquierda", + "insert_right": "Insertar a la derecha", + "header_row": "fila de encabezado", + "header_column": "Columna de encabezado", + "alignment": { + "left": "Izquierda", + "center": "Centro", + "right": "Derecha" + }, + "menu_items": { + "text": "Texto", + "h1": "Título 1", + "h2": "Título 2", + "h3": "Título 3", + "h4": "Título 4", + "h5": "Título 5", + "h6": "Título 6", + "bulleted-list": "Lista con viñetas", + "numbered-list": "lista numerada", + "to-do-list": "Lista de tareas pendientes", + "quote": "Cita", + "code": "Código", + "table": "Tabla", + "image": "Imagen", + "divider": "Divisor", + "link": "Enlace", + "bold": "Negrita", + "italic": "Itálico", + "underline": "Subrayar", + "strikethrough": "Tachado", + "text-color": "Color del texto", + "background-color": "Color de fondo", + "text-align": "Alinear texto" + } } } diff --git a/packages/i18n/src/locales/es/empty-state.json b/packages/i18n/src/locales/es/empty-state.json index 08feb2cc7e3..818dac25b04 100644 --- a/packages/i18n/src/locales/es/empty-state.json +++ b/packages/i18n/src/locales/es/empty-state.json @@ -266,5 +266,11 @@ "description": "Selecciona los estados por los que avanza el elemento de trabajo." } } + }, + "app_not_found": { + "alt": "404 - Página no encontrada", + "title": "¡Ups! Algo salió mal.", + "description": "Lo sentimos, no se pudo encontrar la página que buscas. Puede que se haya eliminado, cambiado de nombre o no esté disponible temporalmente.", + "go_to_home": "Ir al inicio" } } diff --git a/packages/i18n/src/locales/es/inbox.json b/packages/i18n/src/locales/es/inbox.json index 28a015950aa..d2cb15eae90 100644 --- a/packages/i18n/src/locales/es/inbox.json +++ b/packages/i18n/src/locales/es/inbox.json @@ -83,5 +83,56 @@ "title": "Selecciona un elemento de trabajo para ver sus detalles." } } + }, + "inbox": { + "duplicate_issues_found": "Se encontraron {count} elementos de trabajo duplicados", + "description_versions": { + "intake_form_user": "Usuario del formulario de recepción" + }, + "errors": { + "asset_upload_failed": "Error al cargar el recurso. Inténtelo de nuevo más tarde.", + "asset_duplication_failed": "Falló la duplicación de activos. Inténtelo de nuevo más tarde.", + "permission_denied": "Permiso denegado", + "mark_duplicate_permission": "Solo los administradores del proyecto pueden marcar un elemento de trabajo como duplicado", + "mark_duplicate_permission_plural": "Solo los administradores del proyecto pueden marcar elementos de trabajo como duplicados" + }, + "filters": { + "created_date": "Fecha de creación", + "updated_date": "Fecha actualizada", + "last_updated_date": "Fecha de última actualización", + "status": "Estado", + "work_item_status": "Estado del elemento de trabajo", + "view_all": "Ver todo", + "view_less": "Ver menos", + "date_options": { + "today": "Hoy", + "yesterday": "Ayer", + "last_7_days": "últimos 7 días", + "last_30_days": "últimos 30 días" + }, + "date_operators": { + "after": "Después", + "before": "Antes" + } + }, + "navigation": { + "previous_work_item": "Elemento de trabajo anterior", + "next_work_item": "Siguiente elemento de trabajo" + }, + "properties": { + "duplicate_of": "Duplicado de" + }, + "select_duplicate": { + "select_work_item": "Seleccionar elemento de trabajo" + }, + "sidebar": { + "label_count": "Etiquetas {count}" + }, + "toasts": { + "editor_processing": "El editor todavía está procesando cambios. Espere antes de continuar.", + "create_success": "Elemento de trabajo creado correctamente.", + "delete_failed": "Error al eliminar el elemento de trabajo", + "update_failed": "Error al actualizar el elemento de trabajo" + } } } diff --git a/packages/i18n/src/locales/es/page.json b/packages/i18n/src/locales/es/page.json index c013497b230..dcc502b1ae9 100644 --- a/packages/i18n/src/locales/es/page.json +++ b/packages/i18n/src/locales/es/page.json @@ -111,5 +111,18 @@ "success_message": "Página quitada de la colección.", "error_message": "No se pudo quitar la página de la colección. Inténtalo de nuevo." } + }, + "page_access": { + "not_found_title": "Página no encontrada", + "not_found_description": "La página a la que intentas acceder no existe o no tienes permiso para verla.", + "view_other_pages": "Ver otras páginas" + }, + "profile_activity": { + "page_title": "Perfil - Actividad" + }, + "space_public": { + "page_not_found_alt": "Página no encontrada", + "page_not_found_description": "La página que buscas no existe o se ha movido.", + "something_went_wrong": "¡Ups! Algo salió mal." } } diff --git a/packages/i18n/src/locales/es/project.json b/packages/i18n/src/locales/es/project.json index fc2df3542bf..97a88652514 100644 --- a/packages/i18n/src/locales/es/project.json +++ b/packages/i18n/src/locales/es/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Aún no hay proyectos", + "description": "Los proyectos son la base del trabajo orientado a objetivos. Te permiten gestionar equipos, tareas y todo lo necesario para completar el trabajo.", + "learn_more": "Más información sobre proyectos", + "start_first_project": "Inicia tu primer proyecto" } } diff --git a/packages/i18n/src/locales/es/work-item.json b/packages/i18n/src/locales/es/work-item.json index 738fff249c7..8a3be82cef8 100644 --- a/packages/i18n/src/locales/es/work-item.json +++ b/packages/i18n/src/locales/es/work-item.json @@ -422,5 +422,35 @@ "label": "Título del Epic", "required": "El título del epic es obligatorio." } + }, + "space_public": { + "peek": { + "side": "Vista lateral", + "modal": "Modal", + "full_screen": "Pantalla completa" + }, + "public_board_not_found": "El tablero público no existe. Comprueba la URL.", + "no_work_items_found": "No se encontraron elementos de trabajo", + "bot_name": "Bot de {name}", + "commented_time": "comentó {time}", + "and_more": "y {count} más", + "no_upvotes_yet": "Aún no hay votos positivos", + "no_downvotes_yet": "Aún no hay votos negativos", + "view_less": "Ver menos", + "view_all": "Ver todo", + "no_matches_found": "No se encontraron coincidencias", + "no_date": "Sin fecha", + "no_cycle": "Sin ciclo", + "no_modules": "Sin módulos", + "modules_count": "{count} módulos", + "no_assignees": "Sin responsables", + "labels_count": "{count} etiquetas", + "no_labels": "Sin etiquetas", + "sign_in_to_add_comment": "Inicia sesión para añadir un comentario", + "add_comment": "Añadir comentario", + "link_copied": "¡Enlace copiado!", + "work_item_link_copied": "Enlace del elemento de trabajo copiado al portapapeles.", + "comment_post_error": "No se pudo publicar el comentario. Inténtalo de nuevo.", + "user": "Usuario" } } diff --git a/packages/i18n/src/locales/es/workspace.json b/packages/i18n/src/locales/es/workspace.json index f671d0b145a..f0ac5679d2f 100644 --- a/packages/i18n/src/locales/es/workspace.json +++ b/packages/i18n/src/locales/es/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "¿Estás seguro de que quieres eliminar esta vista?", "content": "Si confirmas, todas las opciones de ordenación, filtro y visualización + el diseño que has elegido para esta vista se eliminarán permanentemente sin posibilidad de restaurarlas." - } + }, + "page_title": "{workspaceName} - Todas las vistas" }, "workspace_draft_issues": { "draft_an_issue": "Borrador de elemento de trabajo", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Espacio de trabajo no encontrado", + "not_found_description": "No se encontró ningún espacio de trabajo para esta URL. Puede que no exista o que no tengas permiso para verlo.", + "visit_profile": "Visitar perfil", + "not_authorized_title": "¡No autorizado!", + "not_authorized_description": "No eres miembro de este espacio de trabajo. Contacta con el administrador para recibir una invitación o revisa tus invitaciones pendientes.", + "check_pending_invites": "Revisar invitaciones pendientes" + }, + "workspace_invitation": { + "invitation_not_found": "Invitación no encontrada", + "invited_to_workspace": "Has sido invitado a {workspaceName}", + "description": "Su espacio de trabajo es donde creará proyectos, colaborará en sus elementos de trabajo y organizará diferentes flujos de trabajo en su cuenta Plane.", + "accept": "Aceptar", + "ignore": "Ignorar", + "already_member": "Ya eres miembro de {workspaceName}", + "continue_to_home": "Continuar al inicio", + "inactive_title": "Este enlace de invitación ya no está activo.", + "empty_project_link": "O empezar desde un proyecto vacío", + "sign_in_to_continue": "Inicia sesión para continuar", + "star_on_github": "Danos una estrella en GitHub", + "join_community": "Únete a nuestra comunidad de creadores activos" + }, + "onboarding": { + "create_profile_title": "Crea tu perfil.", + "create_profile_description": "Así aparecerás en Plane.", + "change_image": "Cambiar imagen", + "upload_image": "Subir imagen", + "name": "Nombre", + "name_required": "El nombre es obligatorio", + "name_within_50": "El nombre debe tener 50 caracteres como máximo.", + "enter_full_name": "Introduce tu nombre completo", + "set_password": "Establecer una contraseña", + "optional": "Opcional", + "passwords_do_not_match": "Las contraseñas no coinciden", + "passwords_match": "Las contraseñas coinciden", + "continue": "Continuar", + "invite_team_title": "Invita a tus compañeros de equipo", + "invite_team_description": "El trabajo en Plane se desarrolla mejor con tu equipo. Invítalos ahora a utilizar Plane en todo su potencial.", + "invalid_email": "Eso no parece una dirección de correo electrónico.", + "success": "¡Éxito!", + "invitations_sent": "Invitaciones enviadas exitosamente.", + "error": "¡Error!", + "add_another": "agregar otro", + "do_later": "lo haré más tarde", + "join_invites_title": "Únase a invitaciones o cree un espacio de trabajo", + "unified_description": "Todo tu trabajo, unificado.", + "create_new_workspace": "Crear nuevo espacio de trabajo", + "no_invitations_found": "No se encontraron invitaciones", + "you_are_invited": "¡Estás invitado!", + "accept_invites": "Acepta las invitaciones para colaborar con tu equipo.", + "continue_to_workspace": "Continuar al espacio de trabajo", + "or": "o", + "create_own_workspace": "Crea tu propio espacio de trabajo", + "workspace_creation_disabled": "Parece que no tiene ninguna invitación a un espacio de trabajo y el administrador de su instancia ha restringido la creación de nuevos espacios de trabajo. Pídale al propietario o administrador del espacio de trabajo que lo invite primero a un espacio de trabajo y regrese a esta pantalla para unirse.", + "create_workspace_title": "Crea tu espacio de trabajo", + "enter_workspace_name": "Introduzca el nombre del espacio de trabajo", + "join_existing_workspace": "Unirse al espacio de trabajo existente", + "profile_setup_completed": "Configuración del perfil completada.", + "profile_setup_failed": "Error en la configuración del perfil.", + "usecase_title": "¿Cómo planeas utilizar Plane?", + "usecase_description": "Seleccione una o más opciones para que podamos personalizar su experiencia.", + "select_one_or_more": "Seleccione uno o más", + "select_at_least_one": "Seleccione al menos una opción.", + "skip": "Saltar" } } diff --git a/packages/i18n/src/locales/fr/auth.json b/packages/i18n/src/locales/fr/auth.json index 031cffea656..4fb83d9c102 100644 --- a/packages/i18n/src/locales/fr/auth.json +++ b/packages/i18n/src/locales/fr/auth.json @@ -364,5 +364,45 @@ "sub_header": "Entrez vos identifiants {ldapProviderName}" } } + }, + "space_auth": { + "email": "E-mail", + "email_invalid": "L'e-mail n'est pas valide", + "clear_email": "Effacer l'e-mail", + "password": "Mot de passe", + "set_password": "Définir un mot de passe", + "enter_password": "Entrez le mot de passe", + "confirm_password": "Confirmez le mot de passe", + "passwords_dont_match": "Les mots de passe ne correspondent pas", + "continue": "Continuer", + "go_to_workspace": "Aller à l'espace de travail", + "sign_in_with_unique_code": "Connectez-vous avec un code unique", + "create_account": "Créer un compte", + "unique_code": "Code unique", + "paste_code_sent": "Collez le code envoyé sur votre email", + "resend_in": "Renvoyer dans {seconds}s", + "requesting_new_code": "Demander un nouveau code", + "resend": "Renvoyer", + "sending_code": "Envoi du code" + }, + "space_public": { + "by_creating_account": "En créant un compte", + "by_signing_in": "En vous connectant", + "you_agree_to_our": "vous acceptez nos", + "terms_of_service": "Conditions d'utilisation", + "and": "et", + "privacy_policy": "Politique de confidentialité", + "sign_up": "S'inscrire", + "oauth_with_provider": "{action} avec {provider}", + "user_already_logged_in": "Utilisateur déjà connecté", + "logged_in_title": "Parfait ! Plus qu'une étape.", + "logged_in_hint": "Saisissez dans la barre d'adresse du navigateur l'URL publique partagée ou le lien de la vue ou de la page que vous souhaitez consulter.", + "sign_in": "Se connecter", + "auth": { + "sign_in_header": "Connectez-vous pour voter ou commenter", + "sign_in_subheader": "Aidez à faire avancer les fonctionnalités que vous souhaitez voir créées.", + "sign_up_header": "Consultez, commentez et faites plus", + "sign_up_subheader": "Inscrivez-vous ou connectez-vous pour travailler avec les éléments de travail et les pages Plane." + } } } diff --git a/packages/i18n/src/locales/fr/common.json b/packages/i18n/src/locales/fr/common.json index a94ab8aba2d..f17b52567db 100644 --- a/packages/i18n/src/locales/fr/common.json +++ b/packages/i18n/src/locales/fr/common.json @@ -867,5 +867,20 @@ "description": "Exportez les éléments de travail vers un fichier JSON.", "short_description": "Exporter en json" } + }, + "space_public": { + "error_title": "Oups ! Cela ne semble pas bon.", + "error_description_prefix": "Plane a planté. Pas d'inquiétude, nos ingénieurs ont été informés. Si vous avez plus de détails, écrivez à", + "error_description_middle": "ou sur notre", + "forum": "Forum", + "refresh": "Actualiser", + "not_found_title": "Cela n'a pas fonctionné", + "not_found_hint": "Vérifiez l'URL dans la barre d'adresse du navigateur puis réessayez.", + "instance_failure_image_alt": "Impossible de récupérer les détails de l'instance", + "instance_failure_title": "Impossible de récupérer les détails de l'instance.", + "instance_failure_description": "Nous n'avons pas pu charger les détails de votre instance.", + "instance_failure_hint": "Vérifiez votre connexion puis réessayez.", + "retry": "Réessayer", + "powered_by": "Fourni par" } } diff --git a/packages/i18n/src/locales/fr/editor.json b/packages/i18n/src/locales/fr/editor.json index 633f0eb00cc..cd473d98f16 100644 --- a/packages/i18n/src/locales/fr/editor.json +++ b/packages/i18n/src/locales/fr/editor.json @@ -61,5 +61,79 @@ "use_this": "Utiliser ceci", "refine": "Affiner" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Saisissez ou collez l'URL", + "text": "Texte", + "enter_text_to_display": "Saisissez le texte à afficher", + "remove_link": "Supprimer le lien", + "edit_link": "Modifier le lien", + "color": "Couleur", + "text_colors": "Couleurs du texte", + "background_colors": "Couleurs d'arrière-plan", + "link": "Lien", + "enter_or_paste_link": "Saisir ou coller le lien", + "please_enter_valid_url": "Veuillez entrer un URL valide", + "delete": "Supprimer", + "duplicate": "Dupliquer", + "multiple": "Multiple", + "loading": "Chargement", + "no_results": "Aucun résultat", + "copy_code": "Copier le code", + "add_an_image": "Ajouter une image", + "error_loading_image": "Erreur de chargement de l'image", + "uploading": "Téléchargement", + "drop_image_here": "Déposez l'image ici", + "retry_duplication": "Réessayer la duplication", + "retry": "Réessayer", + "no_emojis_found": "Aucun emoji trouvé", + "fullscreen_image_viewer": "Visionneuse d'images plein écran", + "close_image_viewer": "Fermer la visionneuse d'images", + "zoom_out": "Zoom arrière", + "zoom_in": "Zoomer", + "download_image": "Télécharger l'image", + "open_image_in_new_tab": "Ouvrir l'image dans un nouvel onglet", + "view_in_full_screen": "Afficher en plein écran", + "view_image_in_full_screen": "Afficher l'image en plein écran", + "align": "Aligner", + "download": "Télécharger", + "clear_contents": "Effacer le contenu", + "insert_above": "Insérer ci-dessus", + "insert_below": "Insérer ci-dessous", + "insert_left": "Insérer à gauche", + "insert_right": "Insérer à droite", + "header_row": "Ligne d'en-tête", + "header_column": "Colonne d'en-tête", + "alignment": { + "left": "Gauche", + "center": "Centre", + "right": "Droite" + }, + "menu_items": { + "text": "Texte", + "h1": "Titre 1", + "h2": "Titre 2", + "h3": "Titre 3", + "h4": "Titre 4", + "h5": "Titre 5", + "h6": "Rubrique 6", + "bulleted-list": "Liste à puces", + "numbered-list": "Liste numérotée", + "to-do-list": "Liste de choses à faire", + "quote": "Citation", + "code": "Code", + "table": "Tableau", + "image": "Image", + "divider": "Diviseur", + "link": "Lien", + "bold": "Gras", + "italic": "Italique", + "underline": "Souligner", + "strikethrough": "Barré", + "text-color": "Couleur du texte", + "background-color": "Couleur de fond", + "text-align": "Aligner le texte" + } } } diff --git a/packages/i18n/src/locales/fr/empty-state.json b/packages/i18n/src/locales/fr/empty-state.json index 18e996a6309..f53303beda2 100644 --- a/packages/i18n/src/locales/fr/empty-state.json +++ b/packages/i18n/src/locales/fr/empty-state.json @@ -266,5 +266,11 @@ "description": "Sélectionnez les états par lesquels passe l’élément de travail." } } + }, + "app_not_found": { + "alt": "404 - Page introuvable", + "title": "Oups ! Une erreur s'est produite.", + "description": "Désolé, la page que vous recherchez est introuvable. Elle a peut-être été supprimée, renommée ou est temporairement indisponible.", + "go_to_home": "Aller à l'accueil" } } diff --git a/packages/i18n/src/locales/fr/inbox.json b/packages/i18n/src/locales/fr/inbox.json index 186ce5a595a..deb81896ffc 100644 --- a/packages/i18n/src/locales/fr/inbox.json +++ b/packages/i18n/src/locales/fr/inbox.json @@ -83,5 +83,56 @@ "title": "Sélectionnez un élément de travail pour voir ses détails." } } + }, + "inbox": { + "duplicate_issues_found": "{count} éléments de travail en double trouvés", + "description_versions": { + "intake_form_user": "Utilisateur du formulaire de réception" + }, + "errors": { + "asset_upload_failed": "Échec du téléchargement de l'élément. Veuillez réessayer plus tard.", + "asset_duplication_failed": "La duplication des actifs a échoué. Veuillez réessayer plus tard.", + "permission_denied": "Autorisation refusée", + "mark_duplicate_permission": "Seuls les administrateurs de projet peuvent marquer un élément de travail comme doublon", + "mark_duplicate_permission_plural": "Seuls les administrateurs de projet peuvent marquer les éléments de travail comme doublons" + }, + "filters": { + "created_date": "Date de création", + "updated_date": "Date mise à jour", + "last_updated_date": "Date de dernière mise à jour", + "status": "Statut", + "work_item_status": "Statut de l'élément de travail", + "view_all": "Voir tout", + "view_less": "Voir moins", + "date_options": { + "today": "Aujourd'hui", + "yesterday": "Hier", + "last_7_days": "7 derniers jours", + "last_30_days": "30 derniers jours" + }, + "date_operators": { + "after": "Après", + "before": "Avant" + } + }, + "navigation": { + "previous_work_item": "Élément de travail précédent", + "next_work_item": "Élément de travail suivant" + }, + "properties": { + "duplicate_of": "Doublon de" + }, + "select_duplicate": { + "select_work_item": "Sélectionner un élément de travail" + }, + "sidebar": { + "label_count": "Étiquettes {count}" + }, + "toasts": { + "editor_processing": "L'éditeur est toujours en train de traiter les modifications. Veuillez patienter avant de continuer.", + "create_success": "Élément de travail créé avec succès.", + "delete_failed": "Échec de la suppression de l'élément de travail", + "update_failed": "Échec de la mise à jour de l'élément de travail" + } } } diff --git a/packages/i18n/src/locales/fr/page.json b/packages/i18n/src/locales/fr/page.json index 576ecb00c3b..ffa9196640a 100644 --- a/packages/i18n/src/locales/fr/page.json +++ b/packages/i18n/src/locales/fr/page.json @@ -111,5 +111,18 @@ "success_message": "Page retirée de la collection.", "error_message": "La page n'a pas pu être retirée de la collection. Veuillez réessayer." } + }, + "page_access": { + "not_found_title": "Page introuvable", + "not_found_description": "La page à laquelle vous essayez d’accéder n’existe pas ou vous n’êtes pas autorisé à la consulter.", + "view_other_pages": "Voir d’autres pages" + }, + "profile_activity": { + "page_title": "Profil - Activité" + }, + "space_public": { + "page_not_found_alt": "Page introuvable", + "page_not_found_description": "La page que vous recherchez n'existe pas ou a été déplacée.", + "something_went_wrong": "Oups ! Une erreur s'est produite." } } diff --git a/packages/i18n/src/locales/fr/project.json b/packages/i18n/src/locales/fr/project.json index 8681827417d..2cba1dd7a8c 100644 --- a/packages/i18n/src/locales/fr/project.json +++ b/packages/i18n/src/locales/fr/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Aucun projet pour le moment", + "description": "Les projets sont la base du travail orienté objectifs. Ils vous permettent de gérer vos équipes, vos tâches et tout ce dont vous avez besoin pour avancer.", + "learn_more": "En savoir plus sur les projets", + "start_first_project": "Démarrer votre premier projet" } } diff --git a/packages/i18n/src/locales/fr/work-item.json b/packages/i18n/src/locales/fr/work-item.json index 04a5958092b..f7f5f5189e6 100644 --- a/packages/i18n/src/locales/fr/work-item.json +++ b/packages/i18n/src/locales/fr/work-item.json @@ -422,5 +422,35 @@ "label": "Titre de l’Epic", "required": "Le titre de l’Epic est requis." } + }, + "space_public": { + "peek": { + "side": "Aperçu latéral", + "modal": "Fenêtre modale", + "full_screen": "Plein écran" + }, + "public_board_not_found": "Le tableau public n'existe pas. Veuillez vérifier l'URL.", + "no_work_items_found": "Aucun élément de travail trouvé", + "bot_name": "Bot {name}", + "commented_time": "a commenté {time}", + "and_more": "et {count} de plus", + "no_upvotes_yet": "Aucun vote positif pour le moment", + "no_downvotes_yet": "Aucun vote négatif pour le moment", + "view_less": "Voir moins", + "view_all": "Tout voir", + "no_matches_found": "Aucune correspondance trouvée", + "no_date": "Aucune date", + "no_cycle": "Aucun cycle", + "no_modules": "Aucun module", + "modules_count": "{count} modules", + "no_assignees": "Aucune personne assignée", + "labels_count": "{count} étiquettes", + "no_labels": "Aucune étiquette", + "sign_in_to_add_comment": "Connectez-vous pour ajouter un commentaire", + "add_comment": "Ajouter un commentaire", + "link_copied": "Lien copié !", + "work_item_link_copied": "Lien de l'élément de travail copié dans le presse-papiers.", + "comment_post_error": "Impossible de publier le commentaire. Veuillez réessayer.", + "user": "Utilisateur" } } diff --git a/packages/i18n/src/locales/fr/workspace.json b/packages/i18n/src/locales/fr/workspace.json index 088f7b54e78..89d457aed8c 100644 --- a/packages/i18n/src/locales/fr/workspace.json +++ b/packages/i18n/src/locales/fr/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Êtes-vous sûr de vouloir supprimer cette vue ?", "content": "Si vous confirmez, toutes les options de tri, de filtrage et d’affichage et la mise en page que vous avez choisie pour cette vue seront définitivement supprimées sans possibilité de les restaurer." - } + }, + "page_title": "{workspaceName} - Toutes les vues" }, "workspace_draft_issues": { "draft_an_issue": "Créer un brouillon d’élément de travail", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Espace de travail introuvable", + "not_found_description": "Aucun espace de travail n’a été trouvé pour cette URL. Il n’existe peut-être pas ou vous n’êtes pas autorisé à le consulter.", + "visit_profile": "Voir le profil", + "not_authorized_title": "Non autorisé !", + "not_authorized_description": "Vous n’êtes pas membre de cet espace de travail. Contactez l’administrateur de l’espace de travail pour obtenir une invitation ou vérifiez vos invitations en attente.", + "check_pending_invites": "Vérifier les invitations en attente" + }, + "workspace_invitation": { + "invitation_not_found": "Invitation introuvable", + "invited_to_workspace": "Vous avez été invité à {workspaceName}", + "description": "Votre espace de travail est l'endroit où vous créerez des projets, collaborerez sur vos éléments de travail et organiserez différents flux de travail dans votre compte Plane.", + "accept": "Accepter", + "ignore": "Ignorer", + "already_member": "Vous êtes déjà membre de {workspaceName}", + "continue_to_home": "Continuer vers l'accueil", + "inactive_title": "Ce lien d'invitation n'est plus actif.", + "empty_project_link": "Ou partir d'un projet vide", + "sign_in_to_continue": "Connectez-vous pour continuer", + "star_on_github": "Ajoutez une étoile sur GitHub", + "join_community": "Rejoignez notre communauté de créateurs actifs" + }, + "onboarding": { + "create_profile_title": "Créez votre profil.", + "create_profile_description": "C'est ainsi que vous apparaîtrez dans Plane.", + "change_image": "Changer l'image", + "upload_image": "Télécharger une image", + "name": "Nom", + "name_required": "Le nom est requis", + "name_within_50": "Le nom doit contenir moins de 50 caractères.", + "enter_full_name": "Entrez votre nom complet", + "set_password": "Définir un mot de passe", + "optional": "Facultatif", + "passwords_do_not_match": "Les mots de passe ne correspondent pas", + "passwords_match": "Les mots de passe correspondent", + "continue": "Continuer", + "invite_team_title": "Invitez vos coéquipiers", + "invite_team_description": "Le travail chez Plane se déroule mieux avec votre équipe. Invitez-les maintenant à utiliser Plane à son potentiel.", + "invalid_email": "Cela ne ressemble pas à une adresse e-mail.", + "success": "Succès!", + "invitations_sent": "Invitations envoyées avec succès.", + "error": "Erreur!", + "add_another": "Ajoutez-en un autre", + "do_later": "je le ferai plus tard", + "join_invites_title": "Rejoignez des invitations ou créez un espace de travail", + "unified_description": "Tout votre travail – unifié.", + "create_new_workspace": "Créer un nouvel espace de travail", + "no_invitations_found": "Aucune invitation trouvée", + "you_are_invited": "Vous êtes invité !", + "accept_invites": "Acceptez les invitations à collaborer avec votre équipe.", + "continue_to_workspace": "Continuer vers l'espace de travail", + "or": "ou", + "create_own_workspace": "Créez votre propre espace de travail", + "workspace_creation_disabled": "Vous ne semblez recevoir aucune invitation à un espace de travail et l'administrateur de votre instance a restreint la création de nouveaux espaces de travail. Veuillez d'abord demander à un propriétaire ou à un administrateur d'espace de travail de vous inviter à un espace de travail, puis de revenir sur cet écran pour le rejoindre.", + "create_workspace_title": "Créez votre espace de travail", + "enter_workspace_name": "Entrez le nom de l'espace de travail", + "join_existing_workspace": "Rejoindre l'espace de travail existant", + "profile_setup_completed": "Configuration du profil terminée.", + "profile_setup_failed": "La configuration du profil a échoué.", + "usecase_title": "Comment comptez-vous utiliser Plane ?", + "usecase_description": "Sélectionnez une ou plusieurs options afin que nous puissions personnaliser votre expérience.", + "select_one_or_more": "Sélectionnez un ou plusieurs", + "select_at_least_one": "Sélectionnez au moins une option.", + "skip": "Sauter" } } diff --git a/packages/i18n/src/locales/id/auth.json b/packages/i18n/src/locales/id/auth.json index 4fa5a310a4f..b1871f767db 100644 --- a/packages/i18n/src/locales/id/auth.json +++ b/packages/i18n/src/locales/id/auth.json @@ -364,5 +364,45 @@ "sub_header": "Masukkan kredensial {ldapProviderName} Anda" } } + }, + "space_auth": { + "email": "E-mail", + "email_invalid": "Email tidak valid", + "clear_email": "Hapus email", + "password": "Kata sandi", + "set_password": "Tetapkan kata sandi", + "enter_password": "Masukkan kata sandi", + "confirm_password": "Konfirmasikan kata sandi", + "passwords_dont_match": "Kata sandi tidak cocok", + "continue": "Lanjut", + "go_to_workspace": "Pergi ke ruang kerja", + "sign_in_with_unique_code": "Masuk dengan kode unik", + "create_account": "Buat akun", + "unique_code": "Kode unik", + "paste_code_sent": "Tempelkan kode yang dikirimkan ke email Anda", + "resend_in": "Kirim ulang dalam {seconds}s", + "requesting_new_code": "Meminta kode baru", + "resend": "Kirim ulang", + "sending_code": "Mengirim kode" + }, + "space_public": { + "by_creating_account": "Dengan membuat akun", + "by_signing_in": "Dengan masuk", + "you_agree_to_our": "Anda menyetujui", + "terms_of_service": "Ketentuan Layanan", + "and": "dan", + "privacy_policy": "Kebijakan Privasi", + "sign_up": "Daftar", + "oauth_with_provider": "{action} dengan {provider}", + "user_already_logged_in": "Pengguna sudah masuk", + "logged_in_title": "Bagus! Tinggal satu langkah lagi.", + "logged_in_hint": "Masukkan URL berbagi publik atau tautan tampilan maupun Halaman yang ingin Anda lihat di bilah alamat browser.", + "sign_in": "Masuk", + "auth": { + "sign_in_header": "Masuk untuk memberi suara atau berkomentar", + "sign_in_subheader": "Bantu mendorong fitur yang ingin Anda lihat dibangun.", + "sign_up_header": "Lihat, komentari, dan lakukan lebih banyak", + "sign_up_subheader": "Daftar atau masuk untuk bekerja dengan item kerja dan Halaman Plane." + } } } diff --git a/packages/i18n/src/locales/id/common.json b/packages/i18n/src/locales/id/common.json index 7d266850dc4..694bf6d2fcf 100644 --- a/packages/i18n/src/locales/id/common.json +++ b/packages/i18n/src/locales/id/common.json @@ -867,5 +867,20 @@ "description": "Ekspor item kerja ke file JSON.", "short_description": "Ekspor sebagai json" } + }, + "space_public": { + "error_description_prefix": "Plane mengalami crash. Teknisi kami telah diberi tahu. Jika Anda memiliki detail tambahan, silakan tulis ke", + "error_description_middle": "atau di", + "not_found_hint": "Periksa URL di bilah alamat browser lalu coba lagi.", + "instance_failure_image_alt": "Tidak dapat mengambil detail instans", + "instance_failure_title": "Tidak dapat mengambil detail instans.", + "instance_failure_description": "Kami tidak dapat memuat detail instans Anda.", + "instance_failure_hint": "Periksa koneksi Anda lalu coba lagi.", + "powered_by": "Didukung oleh", + "error_title": "Ups! Ini tidak terlihat baik.", + "refresh": "Muat ulang", + "forum": "Forum", + "not_found_title": "Itu tidak berhasil", + "retry": "Coba lagi" } } diff --git a/packages/i18n/src/locales/id/editor.json b/packages/i18n/src/locales/id/editor.json index ffdf9b0c0c8..39291c57615 100644 --- a/packages/i18n/src/locales/id/editor.json +++ b/packages/i18n/src/locales/id/editor.json @@ -61,5 +61,79 @@ "use_this": "Gunakan ini", "refine": "Perbaiki" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Masukkan atau tempel URL", + "text": "Teks", + "enter_text_to_display": "Masukkan teks untuk ditampilkan", + "remove_link": "Hapus tautan", + "edit_link": "Sunting tautan", + "color": "Warna", + "text_colors": "Warna teks", + "background_colors": "Warna latar belakang", + "link": "Link", + "enter_or_paste_link": "Masukkan atau tempel tautan", + "please_enter_valid_url": "Silakan masukkan URL yang valid", + "delete": "Menghapus", + "duplicate": "Duplikasi", + "multiple": "Banyak", + "loading": "Memuat", + "no_results": "Tidak ada hasil", + "copy_code": "Salin kode", + "add_an_image": "Tambahkan gambar", + "error_loading_image": "Terjadi kesalahan saat memuat gambar", + "uploading": "Mengunggah", + "drop_image_here": "Jatuhkan gambar di sini", + "retry_duplication": "Coba lagi duplikasi", + "retry": "Mencoba kembali", + "no_emojis_found": "Tidak ada emoji yang ditemukan", + "fullscreen_image_viewer": "Penampil gambar layar penuh", + "close_image_viewer": "Tutup penampil gambar", + "zoom_out": "Perkecil", + "zoom_in": "Perbesar", + "download_image": "Unduh gambar", + "open_image_in_new_tab": "Buka gambar di tab baru", + "view_in_full_screen": "Lihat dalam layar penuh", + "view_image_in_full_screen": "Lihat gambar dalam layar penuh", + "align": "Meluruskan", + "download": "Unduh", + "clear_contents": "Hapus isinya", + "insert_above": "Sisipkan di atas", + "insert_below": "Sisipkan di bawah", + "insert_left": "Sisipkan ke kiri", + "insert_right": "Masukkan ke kanan", + "header_row": "Baris tajuk", + "header_column": "Kolom tajuk", + "alignment": { + "left": "Kiri", + "center": "Tengah", + "right": "Kanan" + }, + "menu_items": { + "text": "Teks", + "h1": "Judul 1", + "h2": "Judul 2", + "h3": "Pos 3", + "h4": "Pos 4", + "h5": "Pos 5", + "h6": "Pos 6", + "bulleted-list": "Daftar berpoin", + "numbered-list": "Daftar bernomor", + "to-do-list": "Daftar tugas", + "quote": "Mengutip", + "code": "Kode", + "table": "Tabel", + "image": "Gambar", + "divider": "Pembagi", + "link": "Link", + "bold": "Tebal", + "italic": "miring", + "underline": "Garis bawah", + "strikethrough": "Dicoret", + "text-color": "Warna teks", + "background-color": "Warna latar belakang", + "text-align": "Perataan teks" + } } } diff --git a/packages/i18n/src/locales/id/empty-state.json b/packages/i18n/src/locales/id/empty-state.json index 5c339ce2769..ff2af0390cb 100644 --- a/packages/i18n/src/locales/id/empty-state.json +++ b/packages/i18n/src/locales/id/empty-state.json @@ -266,5 +266,11 @@ "description": "Pilih status yang dilalui item kerja." } } + }, + "app_not_found": { + "alt": "404 - Halaman tidak ditemukan", + "title": "Ups! Terjadi kesalahan.", + "description": "Maaf, halaman yang Anda cari tidak dapat ditemukan. Halaman tersebut mungkin telah dihapus, diganti namanya, atau sementara tidak tersedia.", + "go_to_home": "Ke Beranda" } } diff --git a/packages/i18n/src/locales/id/inbox.json b/packages/i18n/src/locales/id/inbox.json index 0a99fc72042..c122c00eda6 100644 --- a/packages/i18n/src/locales/id/inbox.json +++ b/packages/i18n/src/locales/id/inbox.json @@ -83,5 +83,56 @@ "title": "Pilih item kerja untuk melihat detailnya." } } + }, + "inbox": { + "duplicate_issues_found": "{count} item kerja duplikat ditemukan", + "description_versions": { + "intake_form_user": "Pengguna formulir intake" + }, + "errors": { + "asset_upload_failed": "Pengunggahan aset gagal. Silakan coba lagi nanti.", + "asset_duplication_failed": "Duplikasi aset gagal. Silakan coba lagi nanti.", + "permission_denied": "Izin ditolak", + "mark_duplicate_permission": "Hanya admin proyek yang dapat menandai item pekerjaan sebagai duplikat", + "mark_duplicate_permission_plural": "Hanya admin proyek yang dapat menandai item pekerjaan sebagai duplikat" + }, + "filters": { + "created_date": "Tanggal dibuat", + "updated_date": "Tanggal diperbarui", + "last_updated_date": "Tanggal terakhir diperbarui", + "status": "Status", + "work_item_status": "Status item pekerjaan", + "view_all": "Lihat semuanya", + "view_less": "Lihat lebih sedikit", + "date_options": { + "today": "Hari ini", + "yesterday": "Kemarin", + "last_7_days": "7 hari terakhir", + "last_30_days": "30 hari terakhir" + }, + "date_operators": { + "after": "Setelah", + "before": "Sebelum" + } + }, + "navigation": { + "previous_work_item": "Item pekerjaan sebelumnya", + "next_work_item": "Item pekerjaan berikutnya" + }, + "properties": { + "duplicate_of": "Duplikat dari" + }, + "select_duplicate": { + "select_work_item": "Pilih item pekerjaan" + }, + "sidebar": { + "label_count": "label {count}" + }, + "toasts": { + "editor_processing": "Editor masih memproses perubahan. Harap tunggu sebelum melanjutkan.", + "create_success": "Item pekerjaan berhasil dibuat.", + "delete_failed": "Penghapusan item pekerjaan gagal", + "update_failed": "Pembaruan item pekerjaan gagal" + } } } diff --git a/packages/i18n/src/locales/id/page.json b/packages/i18n/src/locales/id/page.json index 3e6fcdb3b0e..9675451b008 100644 --- a/packages/i18n/src/locales/id/page.json +++ b/packages/i18n/src/locales/id/page.json @@ -111,5 +111,18 @@ "success_message": "Halaman dihapus dari koleksi.", "error_message": "Halaman tidak dapat dihapus dari koleksi. Silakan coba lagi." } + }, + "page_access": { + "not_found_title": "Halaman tidak ditemukan", + "not_found_description": "Halaman yang Anda coba akses tidak ada atau Anda tidak memiliki izin untuk melihatnya.", + "view_other_pages": "Lihat halaman lainnya" + }, + "profile_activity": { + "page_title": "Profil - Aktivitas" + }, + "space_public": { + "page_not_found_alt": "Halaman tidak ditemukan", + "page_not_found_description": "Halaman yang Anda cari tidak ada atau telah dipindahkan.", + "something_went_wrong": "Ups! Terjadi kesalahan." } } diff --git a/packages/i18n/src/locales/id/project.json b/packages/i18n/src/locales/id/project.json index 5c60f89dac9..ace58a4f64f 100644 --- a/packages/i18n/src/locales/id/project.json +++ b/packages/i18n/src/locales/id/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Belum ada proyek", + "description": "Proyek adalah dasar kerja berbasis tujuan. Proyek membantu Anda mengelola tim, tugas, dan semua hal yang diperlukan untuk menyelesaikan pekerjaan.", + "learn_more": "Pelajari lebih lanjut tentang proyek", + "start_first_project": "Mulai proyek pertama Anda" } } diff --git a/packages/i18n/src/locales/id/work-item.json b/packages/i18n/src/locales/id/work-item.json index 917fdeb1b6a..9c9ff51b4ca 100644 --- a/packages/i18n/src/locales/id/work-item.json +++ b/packages/i18n/src/locales/id/work-item.json @@ -422,5 +422,35 @@ "label": "Judul Epik", "required": "Judul epik wajib diisi." } + }, + "space_public": { + "peek": { + "side": "Pratinjau Samping", + "modal": "Modal", + "full_screen": "Layar Penuh" + }, + "public_board_not_found": "Papan publik tidak ada. Periksa URL.", + "no_work_items_found": "Tidak ada item kerja yang ditemukan", + "bot_name": "Bot {name}", + "commented_time": "berkomentar {time}", + "and_more": "dan {count} lainnya", + "no_upvotes_yet": "Belum ada suara positif", + "no_downvotes_yet": "Belum ada suara negatif", + "view_less": "Tampilkan lebih sedikit", + "view_all": "Tampilkan semua", + "no_matches_found": "Tidak ada hasil yang cocok", + "no_date": "Tanpa Tanggal", + "no_cycle": "Tanpa Siklus", + "no_modules": "Tanpa Modul", + "modules_count": "{count} Modul", + "no_assignees": "Tanpa Penanggung Jawab", + "labels_count": "{count} Label", + "no_labels": "Tanpa label", + "sign_in_to_add_comment": "Masuk untuk menambahkan komentar", + "add_comment": "Tambahkan komentar", + "link_copied": "Tautan disalin!", + "work_item_link_copied": "Tautan item kerja disalin ke papan klip.", + "comment_post_error": "Gagal mengirim komentar. Silakan coba lagi.", + "user": "Pengguna" } } diff --git a/packages/i18n/src/locales/id/workspace.json b/packages/i18n/src/locales/id/workspace.json index 911b67edb2a..3bb4fbe68b4 100644 --- a/packages/i18n/src/locales/id/workspace.json +++ b/packages/i18n/src/locales/id/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Apakah Anda yakin ingin menghapus tampilan ini?", "content": "Jika Anda mengonfirmasi, semua opsi pengurutan, filter, dan tampilan + tata letak yang telah Anda pilih untuk tampilan ini akan dihapus secara permanen tanpa cara untuk memulihkannya." - } + }, + "page_title": "{workspaceName} - Semua Tampilan" }, "workspace_draft_issues": { "draft_an_issue": "Draf item kerja", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Workspace tidak ditemukan", + "not_found_description": "Tidak ada workspace yang ditemukan untuk URL ini. Workspace tersebut mungkin tidak ada atau Anda tidak memiliki izin untuk melihatnya.", + "visit_profile": "Kunjungi profil", + "not_authorized_title": "Tidak diizinkan!", + "not_authorized_description": "Anda bukan anggota workspace ini. Hubungi admin workspace untuk mendapatkan undangan atau periksa undangan yang tertunda.", + "check_pending_invites": "Periksa undangan tertunda" + }, + "workspace_invitation": { + "invitation_not_found": "Undangan tidak ditemukan", + "invited_to_workspace": "Anda telah diundang ke {workspaceName}", + "description": "Ruang kerja Anda adalah tempat Anda membuat proyek, berkolaborasi pada item pekerjaan Anda, dan mengatur berbagai aliran pekerjaan di akun Plane Anda.", + "accept": "Terima", + "ignore": "Abaikan", + "already_member": "Anda sudah menjadi anggota {workspaceName}", + "continue_to_home": "Lanjutkan ke beranda", + "inactive_title": "Tautan undangan ini sudah tidak aktif lagi.", + "empty_project_link": "Atau mulai dari proyek kosong", + "sign_in_to_continue": "Masuk untuk melanjutkan", + "star_on_github": "Bintangi kami di GitHub", + "join_community": "Bergabunglah dengan komunitas pembuat konten aktif kami" + }, + "onboarding": { + "create_profile_title": "Buat profil Anda.", + "create_profile_description": "Ini adalah tampilan Anda di Plane.", + "change_image": "Ubah gambar", + "upload_image": "Unggah gambar", + "name": "Nama", + "name_required": "Nama wajib diisi", + "name_within_50": "Nama harus dalam 50 karakter.", + "enter_full_name": "Masukkan nama lengkap Anda", + "set_password": "Tetapkan kata sandi", + "optional": "Opsional", + "passwords_do_not_match": "Kata sandi tidak cocok", + "passwords_match": "Kata sandi cocok", + "continue": "Lanjut", + "invite_team_title": "Undang rekan satu tim Anda", + "invite_team_description": "Pekerjaan di Plane paling baik dilakukan bersama tim Anda. Undang mereka sekarang untuk menggunakan Plane semaksimal mungkin.", + "invalid_email": "Itu tidak terlihat seperti alamat email.", + "success": "Kesuksesan!", + "invitations_sent": "Undangan berhasil dikirim.", + "error": "Kesalahan!", + "add_another": "Tambahkan yang lain", + "do_later": "Saya akan melakukannya nanti", + "join_invites_title": "Bergabunglah dengan undangan atau buat ruang kerja", + "unified_description": "Semua pekerjaan Anda — terpadu.", + "create_new_workspace": "Buat ruang kerja baru", + "no_invitations_found": "Tidak ada undangan yang ditemukan", + "you_are_invited": "Anda diundang!", + "accept_invites": "Terima undangan untuk berkolaborasi dengan tim Anda.", + "continue_to_workspace": "Lanjutkan ke ruang kerja", + "or": "atau", + "create_own_workspace": "Buat ruang kerja Anda sendiri", + "workspace_creation_disabled": "Tampaknya Anda tidak mendapat undangan apa pun ke ruang kerja dan admin instans Anda telah membatasi pembuatan ruang kerja baru. Silakan minta pemilik atau admin ruang kerja untuk mengundang Anda ke ruang kerja terlebih dahulu dan kembali ke layar ini untuk bergabung.", + "create_workspace_title": "Ciptakan ruang kerja Anda", + "enter_workspace_name": "Masukkan nama ruang kerja", + "join_existing_workspace": "Bergabunglah dengan ruang kerja yang ada", + "profile_setup_completed": "Penyiapan profil selesai.", + "profile_setup_failed": "Penyiapan profil gagal.", + "usecase_title": "Bagaimana Anda berencana menggunakan Plane?", + "usecase_description": "Pilih satu atau lebih opsi sehingga kami dapat mempersonalisasi pengalaman Anda.", + "select_one_or_more": "Pilih satu atau lebih", + "select_at_least_one": "Pilih setidaknya satu opsi.", + "skip": "Melewati" } } diff --git a/packages/i18n/src/locales/it/auth.json b/packages/i18n/src/locales/it/auth.json index 7b051cbf829..0d5f46c90f9 100644 --- a/packages/i18n/src/locales/it/auth.json +++ b/packages/i18n/src/locales/it/auth.json @@ -364,5 +364,45 @@ "sub_header": "Inserisci le tue credenziali {ldapProviderName}" } } + }, + "space_auth": { + "email": "E-mail", + "email_invalid": "L'e-mail non è valida", + "clear_email": "Cancella e-mail", + "password": "Password", + "set_password": "Imposta una password", + "enter_password": "Inserisci la password", + "confirm_password": "Conferma password", + "passwords_dont_match": "Le password non corrispondono", + "continue": "Continua", + "go_to_workspace": "Vai all'area di lavoro", + "sign_in_with_unique_code": "Accedi con codice univoco", + "create_account": "Creare un account", + "unique_code": "Codice univoco", + "paste_code_sent": "Incolla il codice inviato alla tua email", + "resend_in": "Invia nuovamente tra {seconds}s", + "requesting_new_code": "Richiesta nuovo codice", + "resend": "Invia nuovamente", + "sending_code": "Invio del codice" + }, + "space_public": { + "by_creating_account": "Creando un account", + "by_signing_in": "Accedendo", + "you_agree_to_our": "accetti i nostri", + "terms_of_service": "Termini di servizio", + "and": "e", + "privacy_policy": "Informativa sulla privacy", + "sign_up": "Registrati", + "oauth_with_provider": "{action} con {provider}", + "user_already_logged_in": "Utente già connesso", + "logged_in_title": "Bene! Manca solo un passaggio.", + "logged_in_hint": "Inserisci nella barra degli indirizzi del browser l'URL pubblico condiviso o il link della vista o della Pagina che vuoi visualizzare.", + "sign_in": "Accedi", + "auth": { + "sign_in_header": "Accedi per votare o commentare", + "sign_in_subheader": "Aiuta a spingere le funzionalità che vuoi vedere realizzate.", + "sign_up_header": "Visualizza, commenta e fai di più", + "sign_up_subheader": "Registrati o accedi per lavorare con gli elementi di lavoro e le Pagine di Plane." + } } } diff --git a/packages/i18n/src/locales/it/common.json b/packages/i18n/src/locales/it/common.json index 6fda1b04957..42de260e055 100644 --- a/packages/i18n/src/locales/it/common.json +++ b/packages/i18n/src/locales/it/common.json @@ -867,5 +867,20 @@ "description": "Esporta elementi di lavoro in un file JSON.", "short_description": "Esporta come JSON" } + }, + "space_public": { + "error_description_prefix": "Plane è andato in crash. I nostri ingegneri sono stati avvisati. Se hai altri dettagli, scrivi a", + "error_description_middle": "o sul nostro", + "not_found_hint": "Controlla l'URL nella barra degli indirizzi del browser e riprova.", + "instance_failure_image_alt": "Impossibile recuperare i dettagli dell'istanza", + "instance_failure_title": "Impossibile recuperare i dettagli dell'istanza.", + "instance_failure_description": "Non siamo riusciti a caricare i dettagli della tua istanza.", + "instance_failure_hint": "Controlla la connessione e riprova.", + "powered_by": "Offerto da", + "error_title": "Ops! Non sembra andare bene.", + "refresh": "Aggiorna", + "forum": "Forum", + "not_found_title": "Non ha funzionato", + "retry": "Riprova" } } diff --git a/packages/i18n/src/locales/it/editor.json b/packages/i18n/src/locales/it/editor.json index 9a8a638c1bd..a391bd486a2 100644 --- a/packages/i18n/src/locales/it/editor.json +++ b/packages/i18n/src/locales/it/editor.json @@ -61,5 +61,79 @@ "use_this": "Usa questo", "refine": "Affina" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Inserisci o incolla l'URL", + "text": "Testo", + "enter_text_to_display": "Inserisci il testo da visualizzare", + "remove_link": "Rimuovi collegamento", + "edit_link": "Modifica collegamento", + "color": "Colore", + "text_colors": "Colori del testo", + "background_colors": "Colori di sfondo", + "link": "Collegamento", + "enter_or_paste_link": "Inserisci o incolla il collegamento", + "please_enter_valid_url": "Inserisci un URL valido", + "delete": "Eliminare", + "duplicate": "Duplicato", + "multiple": "Molteplici", + "loading": "Caricamento", + "no_results": "Nessun risultato", + "copy_code": "Copia il codice", + "add_an_image": "Aggiungi un'immagine", + "error_loading_image": "Errore durante il caricamento dell'immagine", + "uploading": "Caricamento", + "drop_image_here": "Rilascia l'immagine qui", + "retry_duplication": "Riprovare la duplicazione", + "retry": "Riprova", + "no_emojis_found": "Nessun emoji trovato", + "fullscreen_image_viewer": "Visualizzatore di immagini a schermo intero", + "close_image_viewer": "Chiudi il visualizzatore di immagini", + "zoom_out": "Rimpicciolisci", + "zoom_in": "Ingrandisci", + "download_image": "Scarica l'immagine", + "open_image_in_new_tab": "Apri l'immagine in una nuova scheda", + "view_in_full_screen": "Visualizza a schermo intero", + "view_image_in_full_screen": "Visualizza l'immagine a schermo intero", + "align": "Allineare", + "download": "Scarica", + "clear_contents": "Cancella contenuto", + "insert_above": "Inserisci sopra", + "insert_below": "Inserisci qui sotto", + "insert_left": "Inserisci a sinistra", + "insert_right": "Inserisci a destra", + "header_row": "Riga di intestazione", + "header_column": "Colonna di intestazione", + "alignment": { + "left": "Sinistra", + "center": "Centro", + "right": "Destra" + }, + "menu_items": { + "text": "Testo", + "h1": "Rubrica 1", + "h2": "Rubrica 2", + "h3": "Rubrica 3", + "h4": "Rubrica 4", + "h5": "Rubrica 5", + "h6": "Rubrica 6", + "bulleted-list": "Elenco puntato", + "numbered-list": "Elenco numerato", + "to-do-list": "Lista delle cose da fare", + "quote": "Citazione", + "code": "Codice", + "table": "Tabella", + "image": "Immagine", + "divider": "Divisore", + "link": "Collegamento", + "bold": "Grassetto", + "italic": "Corsivo", + "underline": "Sottolineato", + "strikethrough": "Barrato", + "text-color": "Colore del testo", + "background-color": "Colore di sfondo", + "text-align": "Allinea il testo" + } } } diff --git a/packages/i18n/src/locales/it/empty-state.json b/packages/i18n/src/locales/it/empty-state.json index 1af7d40eb99..d5cd25082b9 100644 --- a/packages/i18n/src/locales/it/empty-state.json +++ b/packages/i18n/src/locales/it/empty-state.json @@ -266,5 +266,11 @@ "description": "Seleziona gli stati attraverso i quali avanza l'elemento di lavoro." } } + }, + "app_not_found": { + "alt": "404 - Pagina non trovata", + "title": "Ops! Qualcosa è andato storto.", + "description": "Spiacenti, la pagina che stai cercando non è stata trovata. Potrebbe essere stata rimossa, rinominata o essere temporaneamente non disponibile.", + "go_to_home": "Vai alla home" } } diff --git a/packages/i18n/src/locales/it/inbox.json b/packages/i18n/src/locales/it/inbox.json index b734b2837da..ed5d28069da 100644 --- a/packages/i18n/src/locales/it/inbox.json +++ b/packages/i18n/src/locales/it/inbox.json @@ -83,5 +83,56 @@ "title": "Seleziona un elemento di lavoro per visualizzarne i dettagli." } } + }, + "inbox": { + "duplicate_issues_found": "Trovati {count} elementi di lavoro duplicati", + "description_versions": { + "intake_form_user": "Utente del modulo di raccolta" + }, + "errors": { + "asset_upload_failed": "Caricamento della risorsa non riuscito. Per favore riprova più tardi.", + "asset_duplication_failed": "Duplicazione della risorsa non riuscita. Per favore riprova più tardi.", + "permission_denied": "Autorizzazione negata", + "mark_duplicate_permission": "Solo gli amministratori del progetto possono contrassegnare l'elemento di lavoro come duplicato", + "mark_duplicate_permission_plural": "Solo gli amministratori del progetto possono contrassegnare gli elementi di lavoro come duplicati" + }, + "filters": { + "created_date": "Data di creazione", + "updated_date": "Data aggiornata", + "last_updated_date": "Data dell'ultimo aggiornamento", + "status": "Stato", + "work_item_status": "Stato dell'elemento di lavoro", + "view_all": "Visualizza tutto", + "view_less": "Visualizza meno", + "date_options": { + "today": "Oggi", + "yesterday": "Ieri", + "last_7_days": "Ultimi 7 giorni", + "last_30_days": "Ultimi 30 giorni" + }, + "date_operators": { + "after": "Dopo", + "before": "Prima" + } + }, + "navigation": { + "previous_work_item": "Elemento di lavoro precedente", + "next_work_item": "Elemento di lavoro successivo" + }, + "properties": { + "duplicate_of": "Duplicato di" + }, + "select_duplicate": { + "select_work_item": "Seleziona elemento di lavoro" + }, + "sidebar": { + "label_count": "Etichette {count}" + }, + "toasts": { + "editor_processing": "L'editor sta ancora elaborando le modifiche. Si prega di attendere prima di procedere.", + "create_success": "Elemento di lavoro creato correttamente.", + "delete_failed": "Eliminazione dell'elemento di lavoro non riuscita", + "update_failed": "Aggiornamento dell'elemento di lavoro non riuscito" + } } } diff --git a/packages/i18n/src/locales/it/page.json b/packages/i18n/src/locales/it/page.json index 7898785aec2..b87551c8cbe 100644 --- a/packages/i18n/src/locales/it/page.json +++ b/packages/i18n/src/locales/it/page.json @@ -111,5 +111,18 @@ "success_message": "Pagina rimossa dalla raccolta.", "error_message": "Non è stato possibile rimuovere la pagina dalla raccolta. Riprova." } + }, + "page_access": { + "not_found_title": "Pagina non trovata", + "not_found_description": "La pagina a cui stai tentando di accedere non esiste o non hai l’autorizzazione per visualizzarla.", + "view_other_pages": "Visualizza altre pagine" + }, + "profile_activity": { + "page_title": "Profilo - Attività" + }, + "space_public": { + "page_not_found_alt": "Pagina non trovata", + "page_not_found_description": "La pagina che stai cercando non esiste o è stata spostata.", + "something_went_wrong": "Ops! Qualcosa è andato storto." } } diff --git a/packages/i18n/src/locales/it/project.json b/packages/i18n/src/locales/it/project.json index f6e9ff6f4a7..698b37e01cc 100644 --- a/packages/i18n/src/locales/it/project.json +++ b/packages/i18n/src/locales/it/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Nessun progetto ancora", + "description": "I progetti sono la base del lavoro orientato agli obiettivi. Ti aiutano a gestire team, attività e tutto ciò che serve per portare a termine il lavoro.", + "learn_more": "Scopri di più sui progetti", + "start_first_project": "Avvia il tuo primo progetto" } } diff --git a/packages/i18n/src/locales/it/work-item.json b/packages/i18n/src/locales/it/work-item.json index 7622c815bb8..fcdd58db578 100644 --- a/packages/i18n/src/locales/it/work-item.json +++ b/packages/i18n/src/locales/it/work-item.json @@ -422,5 +422,35 @@ "label": "Titolo Epic", "required": "Il titolo dell'Epic è obbligatorio." } + }, + "space_public": { + "peek": { + "side": "Anteprima laterale", + "modal": "Modale", + "full_screen": "Schermo intero" + }, + "public_board_not_found": "La bacheca pubblica non esiste. Controlla l'URL.", + "no_work_items_found": "Nessun elemento di lavoro trovato", + "bot_name": "Bot {name}", + "commented_time": "ha commentato {time}", + "and_more": "e altri {count}", + "no_upvotes_yet": "Ancora nessun voto positivo", + "no_downvotes_yet": "Ancora nessun voto negativo", + "view_less": "Mostra meno", + "view_all": "Mostra tutto", + "no_matches_found": "Nessuna corrispondenza trovata", + "no_date": "Nessuna data", + "no_cycle": "Nessun ciclo", + "no_modules": "Nessun modulo", + "modules_count": "{count} moduli", + "no_assignees": "Nessun assegnatario", + "labels_count": "{count} etichette", + "no_labels": "Nessuna etichetta", + "sign_in_to_add_comment": "Accedi per aggiungere un commento", + "add_comment": "Aggiungi commento", + "link_copied": "Link copiato!", + "work_item_link_copied": "Link dell'elemento di lavoro copiato negli appunti.", + "comment_post_error": "Impossibile pubblicare il commento. Riprova.", + "user": "Utente" } } diff --git a/packages/i18n/src/locales/it/workspace.json b/packages/i18n/src/locales/it/workspace.json index 64b7e1258ea..6f388541c6b 100644 --- a/packages/i18n/src/locales/it/workspace.json +++ b/packages/i18n/src/locales/it/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Sei sicuro di voler eliminare questa visualizzazione?", "content": "Se confermi, tutte le opzioni di ordinamento, filtro e visualizzazione + il layout che hai scelto per questa visualizzazione saranno eliminate permanentemente senza possibilità di ripristinarle." - } + }, + "page_title": "{workspaceName} - Tutte le viste" }, "workspace_draft_issues": { "draft_an_issue": "Bozza di un elemento di lavoro", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Workspace non trovato", + "not_found_description": "Non è stato trovato alcuno workspace per questo URL. Potrebbe non esistere o potresti non avere l’autorizzazione per visualizzarlo.", + "visit_profile": "Visita profilo", + "not_authorized_title": "Non autorizzato!", + "not_authorized_description": "Non sei membro di questo workspace. Contatta l’amministratore del workspace per ricevere un invito o controlla gli inviti in sospeso.", + "check_pending_invites": "Controlla inviti in sospeso" + }, + "workspace_invitation": { + "invitation_not_found": "Invito non trovato", + "invited_to_workspace": "Sei stato invitato a {workspaceName}", + "description": "Il tuo spazio di lavoro è il luogo in cui creerai progetti, collaborerai sui tuoi elementi di lavoro e organizzerai diversi flussi di lavoro nel tuo account Plane.", + "accept": "Accetta", + "ignore": "Ignora", + "already_member": "Sei già membro di {workspaceName}", + "continue_to_home": "Continua alla home", + "inactive_title": "Questo collegamento di invito non è più attivo.", + "empty_project_link": "Oppure inizia da un progetto vuoto", + "sign_in_to_continue": "Accedi per continuare", + "star_on_github": "Lasciaci una stella su GitHub", + "join_community": "Unisciti alla nostra community di creatori attivi" + }, + "onboarding": { + "create_profile_title": "Crea il tuo profilo.", + "create_profile_description": "Ecco come apparirai in Plane.", + "change_image": "Cambia immagine", + "upload_image": "Carica immagine", + "name": "Nome", + "name_required": "Il nome è obbligatorio", + "name_within_50": "Il nome deve contenere massimo 50 caratteri.", + "enter_full_name": "Inserisci il tuo nome completo", + "set_password": "Imposta una password", + "optional": "Opzionale", + "passwords_do_not_match": "Le password non corrispondono", + "passwords_match": "Le password corrispondono", + "continue": "Continua", + "invite_team_title": "Invita i tuoi compagni di squadra", + "invite_team_description": "Il lavoro in Plane avviene meglio con il tuo team. Invitali ora a sfruttare Plane al massimo delle sue potenzialità.", + "invalid_email": "Non sembra un indirizzo email.", + "success": "Successo!", + "invitations_sent": "Inviti inviati con successo.", + "error": "Errore!", + "add_another": "Aggiungine un altro", + "do_later": "Lo farò più tardi", + "join_invites_title": "Partecipa agli inviti o crea uno spazio di lavoro", + "unified_description": "Tutto il tuo lavoro: unificato.", + "create_new_workspace": "Crea un nuovo spazio di lavoro", + "no_invitations_found": "Nessun invito trovato", + "you_are_invited": "Sei invitato!", + "accept_invites": "Accetta gli inviti a collaborare con il tuo team.", + "continue_to_workspace": "Continua nell'area di lavoro", + "or": "O", + "create_own_workspace": "Crea il tuo spazio di lavoro", + "workspace_creation_disabled": "Sembra che tu non abbia inviti a un'area di lavoro e l'amministratore dell'istanza ha limitato la creazione di nuove aree di lavoro. Chiedi prima al proprietario o all'amministratore di un'area di lavoro di invitarti in un'area di lavoro e di tornare a questa schermata per partecipare.", + "create_workspace_title": "Crea il tuo spazio di lavoro", + "enter_workspace_name": "Inserisci il nome dell'area di lavoro", + "join_existing_workspace": "Unisciti allo spazio di lavoro esistente", + "profile_setup_completed": "Configurazione del profilo completata.", + "profile_setup_failed": "La configurazione del profilo non è riuscita.", + "usecase_title": "Come intendi utilizzare Plane?", + "usecase_description": "Seleziona una o più opzioni per consentirci di personalizzare la tua esperienza.", + "select_one_or_more": "Seleziona uno o più", + "select_at_least_one": "Seleziona almeno un'opzione.", + "skip": "Saltare" } } diff --git a/packages/i18n/src/locales/ja/auth.json b/packages/i18n/src/locales/ja/auth.json index d3dd8d37a9e..18b2005dd35 100644 --- a/packages/i18n/src/locales/ja/auth.json +++ b/packages/i18n/src/locales/ja/auth.json @@ -364,5 +364,45 @@ "sub_header": "{ldapProviderName}の認証情報を入力してください" } } + }, + "space_auth": { + "email": "電子メール", + "email_invalid": "電子メールが無効です", + "clear_email": "メールアドレスをクリア", + "password": "パスワード", + "set_password": "パスワードを設定する", + "enter_password": "パスワードを入力してください", + "confirm_password": "パスワードを確認", + "passwords_dont_match": "パスワードが一致しません", + "continue": "続行", + "go_to_workspace": "ワークスペースに移動", + "sign_in_with_unique_code": "認証コードでサインイン", + "create_account": "アカウントを作成する", + "unique_code": "認証コード", + "paste_code_sent": "メールに送信されたコードを貼り付けます", + "resend_in": "{seconds}sで再送信", + "requesting_new_code": "新しいコードをリクエスト中", + "resend": "再送信", + "sending_code": "コードを送信中" + }, + "space_public": { + "by_creating_account": "アカウントを作成すると", + "by_signing_in": "サインインすると", + "you_agree_to_our": "以下に同意したことになります", + "terms_of_service": "利用規約", + "and": "および", + "privacy_policy": "プライバシーポリシー", + "sign_up": "登録", + "oauth_with_provider": "{provider} で{action}", + "user_already_logged_in": "ユーザーはすでにログインしています", + "logged_in_title": "あと 1 ステップです。", + "logged_in_hint": "表示したいビューまたはページの公開共有 URL もしくはリンクをブラウザーのアドレスバーに入力してください。", + "sign_in": "サインイン", + "auth": { + "sign_in_header": "投票またはコメントするにはサインインしてください", + "sign_in_subheader": "実装してほしい機能を後押ししましょう。", + "sign_up_header": "表示、コメント、さらに多くの操作", + "sign_up_subheader": "Plane の作業項目とページを扱うには、登録またはサインインしてください。" + } } } diff --git a/packages/i18n/src/locales/ja/common.json b/packages/i18n/src/locales/ja/common.json index 4899411b615..3b02b3e5afb 100644 --- a/packages/i18n/src/locales/ja/common.json +++ b/packages/i18n/src/locales/ja/common.json @@ -867,5 +867,20 @@ "description": "作業項目をJSONファイルにエクスポートします。", "short_description": "JSONとしてエクスポート" } + }, + "space_public": { + "error_description_prefix": "Plane がクラッシュしました。担当エンジニアには通知済みです。追加の詳細がある場合は、次までご連絡ください", + "error_description_middle": "または次の場所で", + "not_found_hint": "ブラウザーのアドレスバーに入力した URL を確認して、もう一度お試しください。", + "instance_failure_image_alt": "インスタンスの詳細を取得できません", + "instance_failure_title": "インスタンスの詳細を取得できません。", + "instance_failure_description": "インスタンスの詳細を読み込めませんでした。", + "instance_failure_hint": "接続を確認して、もう一度お試しください。", + "powered_by": "提供元", + "error_title": "問題が発生しました。", + "refresh": "再読み込み", + "forum": "フォーラム", + "not_found_title": "うまくいきませんでした", + "retry": "再試行" } } diff --git a/packages/i18n/src/locales/ja/editor.json b/packages/i18n/src/locales/ja/editor.json index 222916565c7..08928853dee 100644 --- a/packages/i18n/src/locales/ja/editor.json +++ b/packages/i18n/src/locales/ja/editor.json @@ -61,5 +61,79 @@ "use_this": "これを使用", "refine": "改良" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "URLを入力または貼り付けます", + "text": "文章", + "enter_text_to_display": "表示するテキストを入力してください", + "remove_link": "リンクを削除する", + "edit_link": "リンクを編集", + "color": "色", + "text_colors": "文字の色", + "background_colors": "背景色", + "link": "リンク", + "enter_or_paste_link": "リンクを入力または貼り付けます", + "please_enter_valid_url": "有効な URL を入力してください", + "delete": "消去", + "duplicate": "複製", + "multiple": "複数", + "loading": "読み込み中", + "no_results": "結果はありません", + "copy_code": "コードをコピーする", + "add_an_image": "画像を追加する", + "error_loading_image": "画像の読み込みエラー", + "uploading": "アップロード中", + "drop_image_here": "ここに画像をドロップ", + "retry_duplication": "重複を再試行する", + "retry": "リトライ", + "no_emojis_found": "絵文字が見つかりませんでした", + "fullscreen_image_viewer": "全画面画像ビューア", + "close_image_viewer": "画像ビューアを閉じる", + "zoom_out": "ズームアウト", + "zoom_in": "ズームイン", + "download_image": "画像をダウンロード", + "open_image_in_new_tab": "新しいタブで画像を開く", + "view_in_full_screen": "全画面で表示する", + "view_image_in_full_screen": "画像を全画面で表示する", + "align": "整列", + "download": "ダウンロード", + "clear_contents": "内容をクリア", + "insert_above": "上に挿入", + "insert_below": "以下に挿入", + "insert_left": "左に挿入", + "insert_right": "右に挿入", + "header_row": "ヘッダー行", + "header_column": "ヘッダー列", + "alignment": { + "left": "左", + "center": "中心", + "right": "右" + }, + "menu_items": { + "text": "文章", + "h1": "見出し1", + "h2": "見出し2", + "h3": "見出し 3", + "h4": "見出し 4", + "h5": "見出し 5", + "h6": "見出し6", + "bulleted-list": "箇条書きリスト", + "numbered-list": "番号付きリスト", + "to-do-list": "やることリスト", + "quote": "引用", + "code": "コード", + "table": "テーブル", + "image": "画像", + "divider": "ディバイダー", + "link": "リンク", + "bold": "太字", + "italic": "イタリック", + "underline": "下線", + "strikethrough": "取り消し線", + "text-color": "文字の色", + "background-color": "背景色", + "text-align": "テキストの配置" + } } } diff --git a/packages/i18n/src/locales/ja/empty-state.json b/packages/i18n/src/locales/ja/empty-state.json index eb3b067ffe8..2ef4f1bafa6 100644 --- a/packages/i18n/src/locales/ja/empty-state.json +++ b/packages/i18n/src/locales/ja/empty-state.json @@ -266,5 +266,11 @@ "description": "作業項目が進行するステータスを選択します。" } } + }, + "app_not_found": { + "alt": "404 - ページが見つかりません", + "title": "問題が発生しました。", + "description": "お探しのページは見つかりません。削除、名前変更、または一時的に利用できない可能性があります。", + "go_to_home": "ホームへ移動" } } diff --git a/packages/i18n/src/locales/ja/inbox.json b/packages/i18n/src/locales/ja/inbox.json index e210571e267..36e9cb62586 100644 --- a/packages/i18n/src/locales/ja/inbox.json +++ b/packages/i18n/src/locales/ja/inbox.json @@ -83,5 +83,56 @@ "title": "詳細を表示する作業項目を選択してください。" } } + }, + "inbox": { + "duplicate_issues_found": "{count} 件の重複する作業項目が見つかりました", + "description_versions": { + "intake_form_user": "インテークフォームユーザー" + }, + "errors": { + "asset_upload_failed": "アセットのアップロードに失敗しました。後でもう一度試してください。", + "asset_duplication_failed": "アセットの複製に失敗しました。後でもう一度試してください。", + "permission_denied": "許可が拒否されました", + "mark_duplicate_permission": "プロジェクト管理者のみが作業項目を重複としてマークできます", + "mark_duplicate_permission_plural": "プロジェクト管理者のみが作業項目を重複としてマークできます" + }, + "filters": { + "created_date": "作成日", + "updated_date": "更新日", + "last_updated_date": "最終更新日", + "status": "状態", + "work_item_status": "作業項目のステータス", + "view_all": "すべて見る", + "view_less": "表示を減らす", + "date_options": { + "today": "今日", + "yesterday": "昨日", + "last_7_days": "過去 7 日間", + "last_30_days": "過去 30 日間" + }, + "date_operators": { + "after": "後", + "before": "前に" + } + }, + "navigation": { + "previous_work_item": "前の作業項目", + "next_work_item": "次の作業項目" + }, + "properties": { + "duplicate_of": "重複元" + }, + "select_duplicate": { + "select_work_item": "作業項目を選択してください" + }, + "sidebar": { + "label_count": "{count} ラベル" + }, + "toasts": { + "editor_processing": "エディターはまだ変更を処理中です。続行する前にお待ちください。", + "create_success": "作業項目が正常に作成されました。", + "delete_failed": "作業項目の削除に失敗しました", + "update_failed": "作業項目の更新に失敗しました" + } } } diff --git a/packages/i18n/src/locales/ja/page.json b/packages/i18n/src/locales/ja/page.json index 10b45a38f06..bdfcfb0992f 100644 --- a/packages/i18n/src/locales/ja/page.json +++ b/packages/i18n/src/locales/ja/page.json @@ -111,5 +111,18 @@ "success_message": "ページをコレクションから削除しました。", "error_message": "ページをコレクションから削除できませんでした。もう一度お試しください。" } + }, + "page_access": { + "not_found_title": "ページが見つかりません", + "not_found_description": "アクセスしようとしているページは存在しないか、表示する権限がありません。", + "view_other_pages": "他のページを表示" + }, + "profile_activity": { + "page_title": "プロフィール - アクティビティ" + }, + "space_public": { + "page_not_found_alt": "ページが見つかりません", + "page_not_found_description": "お探しのページは存在しないか、移動されました。", + "something_went_wrong": "問題が発生しました。" } } diff --git a/packages/i18n/src/locales/ja/project.json b/packages/i18n/src/locales/ja/project.json index 16b3b4a6177..eb87ac83009 100644 --- a/packages/i18n/src/locales/ja/project.json +++ b/packages/i18n/src/locales/ja/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "プロジェクトはまだありません", + "description": "プロジェクトは、目標に基づく作業の基盤です。チーム、タスク、作業を進めるために必要なものをまとめて管理できます。", + "learn_more": "プロジェクトの詳細を見る", + "start_first_project": "最初のプロジェクトを開始" } } diff --git a/packages/i18n/src/locales/ja/work-item.json b/packages/i18n/src/locales/ja/work-item.json index ca6ed7ffc96..c943edca19b 100644 --- a/packages/i18n/src/locales/ja/work-item.json +++ b/packages/i18n/src/locales/ja/work-item.json @@ -422,5 +422,35 @@ "label": "エピックのタイトル", "required": "エピックのタイトルは必須です。" } + }, + "space_public": { + "peek": { + "side": "サイドピーク", + "modal": "モーダル", + "full_screen": "全画面" + }, + "public_board_not_found": "公開ボードが存在しません。URL を確認してください。", + "no_work_items_found": "作業項目が見つかりません", + "bot_name": "{name} ボット", + "commented_time": "{time}にコメント", + "and_more": "他 {count} 件", + "no_upvotes_yet": "賛成票はまだありません", + "no_downvotes_yet": "反対票はまだありません", + "view_less": "少なく表示", + "view_all": "すべて表示", + "no_matches_found": "一致するものが見つかりません", + "no_date": "日付なし", + "no_cycle": "サイクルなし", + "no_modules": "モジュールなし", + "modules_count": "{count} 個のモジュール", + "no_assignees": "担当者なし", + "labels_count": "{count} 個のラベル", + "no_labels": "ラベルなし", + "sign_in_to_add_comment": "コメントを追加するにはサインインしてください", + "add_comment": "コメントを追加", + "link_copied": "リンクをコピーしました。", + "work_item_link_copied": "作業項目のリンクをクリップボードにコピーしました。", + "comment_post_error": "コメントを投稿できませんでした。もう一度お試しください。", + "user": "ユーザー" } } diff --git a/packages/i18n/src/locales/ja/workspace.json b/packages/i18n/src/locales/ja/workspace.json index 40b2c751163..ffe5053f64e 100644 --- a/packages/i18n/src/locales/ja/workspace.json +++ b/packages/i18n/src/locales/ja/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "このビューを削除してもよろしいですか?", "content": "確認すると、このビューに選択したすべてのソート、フィルター、表示オプション + レイアウトが復元不可能な形で完全に削除されます。" - } + }, + "page_title": "{workspaceName} - すべてのビュー" }, "workspace_draft_issues": { "draft_an_issue": "作業項目の下書き", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "ワークスペースが見つかりません", + "not_found_description": "この URL に対応するワークスペースが見つかりません。存在しないか、表示する権限がない可能性があります。", + "visit_profile": "プロフィールを表示", + "not_authorized_title": "権限がありません", + "not_authorized_description": "あなたはこのワークスペースのメンバーではありません。ワークスペース管理者に招待を依頼するか、保留中の招待を確認してください。", + "check_pending_invites": "保留中の招待を確認" + }, + "workspace_invitation": { + "invitation_not_found": "招待状が見つかりません", + "invited_to_workspace": "{workspaceName} に招待されました", + "description": "ワークスペースは、Plane アカウントでプロジェクトを作成し、作業項目で共同作業し、さまざまな作業ストリームを整理する場所です。", + "accept": "受け入れる", + "ignore": "無視する", + "already_member": "あなたはすでに {workspaceName} のメンバーです", + "continue_to_home": "ホームに進む", + "inactive_title": "この招待リンクはもうアクティブではありません。", + "empty_project_link": "または空のプロジェクトから開始します", + "sign_in_to_continue": "続行するにはサインインしてください", + "star_on_github": "GitHub でスターを付けてください", + "join_community": "アクティブなクリエイターのコミュニティに参加しましょう" + }, + "onboarding": { + "create_profile_title": "プロフィールを作成します。", + "create_profile_description": "これがPlaneに登場する様子です。", + "change_image": "イメージを変更する", + "upload_image": "画像をアップロードする", + "name": "名前", + "name_required": "名前は必須です", + "name_within_50": "名前は50文字以内にしてください。", + "enter_full_name": "フルネームを入力してください", + "set_password": "パスワードを設定する", + "optional": "オプション", + "passwords_do_not_match": "パスワードが一致しません", + "passwords_match": "パスワードが一致する", + "continue": "続行", + "invite_team_title": "チームメイトを招待する", + "invite_team_description": "Plane での作業は、チームと一緒に行うのが最も効果的です。今すぐ彼らを招待して、Plane の可能性を最大限に活用してください。", + "invalid_email": "それは電子メールアドレスのようには見えません。", + "success": "成功!", + "invitations_sent": "招待状は正常に送信されました。", + "error": "エラー!", + "add_another": "別のを追加", + "do_later": "後でやります", + "join_invites_title": "招待に参加するか、ワークスペースを作成する", + "unified_description": "すべての作業を統合します。", + "create_new_workspace": "新しいワークスペースを作成する", + "no_invitations_found": "招待状が見つかりませんでした", + "you_are_invited": "あなたは招待されています!", + "accept_invites": "チームと共同作業するための招待を受け入れます。", + "continue_to_workspace": "ワークスペースに進む", + "or": "または", + "create_own_workspace": "独自のワークスペースを作成する", + "workspace_creation_disabled": "ワークスペースへの招待がなく、インスタンス管理者によって新しいワークスペースの作成が制限されているようです。まずワークスペースに招待するようワークスペースの所有者または管理者に依頼してから、この画面に戻って参加してください。", + "create_workspace_title": "ワークスペースを作成する", + "enter_workspace_name": "ワークスペース名を入力してください", + "join_existing_workspace": "既存のワークスペースに参加する", + "profile_setup_completed": "プロファイルの設定が完了しました。", + "profile_setup_failed": "プロファイルのセットアップに失敗しました。", + "usecase_title": "Planeをどのように使用する予定ですか?", + "usecase_description": "エクスペリエンスをパーソナライズできるように、1 つ以上のオプションを選択してください。", + "select_one_or_more": "1 つ以上を選択してください", + "select_at_least_one": "少なくとも 1 つのオプションを選択してください。", + "skip": "スキップ" } } diff --git a/packages/i18n/src/locales/ko/auth.json b/packages/i18n/src/locales/ko/auth.json index 812d61734ea..f81f66556df 100644 --- a/packages/i18n/src/locales/ko/auth.json +++ b/packages/i18n/src/locales/ko/auth.json @@ -364,5 +364,45 @@ "sub_header": "{ldapProviderName} 자격 증명을 입력하세요" } } + }, + "space_auth": { + "email": "이메일", + "email_invalid": "이메일이 잘못되었습니다", + "clear_email": "이메일 지우기", + "password": "비밀번호", + "set_password": "비밀번호를 설정하세요", + "enter_password": "비밀번호를 입력하세요", + "confirm_password": "비밀번호 확인", + "passwords_dont_match": "비밀번호가 일치하지 않습니다.", + "continue": "계속", + "go_to_workspace": "작업공간으로 이동", + "sign_in_with_unique_code": "고유 코드로 로그인", + "create_account": "계정 만들기", + "unique_code": "고유 코드", + "paste_code_sent": "이메일로 전송된 코드를 붙여넣으세요.", + "resend_in": "{seconds}s 후에 재전송", + "requesting_new_code": "새 코드 요청 중", + "resend": "재전송", + "sending_code": "코드 전송 중" + }, + "space_public": { + "by_creating_account": "계정을 만들면", + "by_signing_in": "로그인하면", + "you_agree_to_our": "다음에 동의하게 됩니다", + "terms_of_service": "서비스 약관", + "and": "및", + "privacy_policy": "개인정보 처리방침", + "sign_up": "가입", + "oauth_with_provider": "{provider}(으)로 {action}", + "user_already_logged_in": "이미 로그인한 사용자입니다", + "logged_in_title": "좋습니다! 한 단계만 더 남았습니다.", + "logged_in_hint": "보려는 보기 또는 페이지의 공개 공유 URL이나 링크를 브라우저 주소 표시줄에 입력하세요.", + "sign_in": "로그인", + "auth": { + "sign_in_header": "투표하거나 댓글을 달려면 로그인하세요", + "sign_in_subheader": "원하는 기능이 만들어지도록 의견을 보태세요.", + "sign_up_header": "보고, 댓글을 달고, 더 많은 작업을 수행하세요", + "sign_up_subheader": "Plane 작업 항목과 페이지를 사용하려면 가입하거나 로그인하세요." + } } } diff --git a/packages/i18n/src/locales/ko/common.json b/packages/i18n/src/locales/ko/common.json index 73eea6b1c25..72c65365c8a 100644 --- a/packages/i18n/src/locales/ko/common.json +++ b/packages/i18n/src/locales/ko/common.json @@ -867,5 +867,20 @@ "description": "작업 항목을 JSON 파일로 내보냅니다.", "short_description": "JSON으로 내보내기" } + }, + "space_public": { + "error_description_prefix": "Plane이 충돌했습니다. 담당 엔지니어에게 알림이 전송되었습니다. 추가 세부 정보가 있으면 다음으로 보내 주세요", + "error_description_middle": "또는 다음에서", + "not_found_hint": "브라우저 주소 표시줄의 URL을 확인한 뒤 다시 시도하세요.", + "instance_failure_image_alt": "인스턴스 세부 정보를 가져올 수 없음", + "instance_failure_title": "인스턴스 세부 정보를 가져올 수 없습니다.", + "instance_failure_description": "인스턴스 세부 정보를 로드할 수 없습니다.", + "instance_failure_hint": "연결을 확인한 뒤 다시 시도하세요.", + "powered_by": "제공", + "error_title": "문제가 발생했습니다.", + "refresh": "새로 고침", + "forum": "포럼", + "not_found_title": "작동하지 않았습니다", + "retry": "다시 시도" } } diff --git a/packages/i18n/src/locales/ko/editor.json b/packages/i18n/src/locales/ko/editor.json index 677832723ff..cf18695016a 100644 --- a/packages/i18n/src/locales/ko/editor.json +++ b/packages/i18n/src/locales/ko/editor.json @@ -61,5 +61,79 @@ "use_this": "이것 사용", "refine": "정제" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "URL을 입력하거나 붙여넣으세요.", + "text": "텍스트", + "enter_text_to_display": "표시할 텍스트를 입력하세요.", + "remove_link": "링크 삭제", + "edit_link": "링크 수정", + "color": "색상", + "text_colors": "텍스트 색상", + "background_colors": "배경색", + "link": "링크", + "enter_or_paste_link": "링크 입력 또는 붙여넣기", + "please_enter_valid_url": "유효한 URL를 입력하세요.", + "delete": "삭제", + "duplicate": "복제", + "multiple": "여러 개", + "loading": "로드 중", + "no_results": "결과 없음", + "copy_code": "코드 복사", + "add_an_image": "이미지 추가", + "error_loading_image": "이미지를 로드하는 중에 오류가 발생했습니다.", + "uploading": "업로드 중", + "drop_image_here": "여기에 이미지를 드롭하세요.", + "retry_duplication": "복제 재시도", + "retry": "다시 해 보다", + "no_emojis_found": "이모티콘을 찾을 수 없습니다.", + "fullscreen_image_viewer": "전체 화면 이미지 뷰어", + "close_image_viewer": "이미지 뷰어 닫기", + "zoom_out": "축소", + "zoom_in": "확대", + "download_image": "이미지 다운로드", + "open_image_in_new_tab": "새 탭에서 이미지 열기", + "view_in_full_screen": "전체 화면으로 보기", + "view_image_in_full_screen": "전체 화면으로 이미지 보기", + "align": "정렬", + "download": "다운로드", + "clear_contents": "내용 지우기", + "insert_above": "위에 삽입", + "insert_below": "아래에 삽입", + "insert_left": "왼쪽에 삽입", + "insert_right": "오른쪽에 삽입", + "header_row": "헤더 행", + "header_column": "헤더 열", + "alignment": { + "left": "왼쪽", + "center": "가운데", + "right": "오른쪽" + }, + "menu_items": { + "text": "텍스트", + "h1": "제목 1", + "h2": "제목 2", + "h3": "제목 3", + "h4": "제목 4", + "h5": "제목 5", + "h6": "제목 6", + "bulleted-list": "글머리 기호 목록", + "numbered-list": "번호가 매겨진 목록", + "to-do-list": "할 일 목록", + "quote": "인용하다", + "code": "코드", + "table": "표", + "image": "이미지", + "divider": "구분선", + "link": "링크", + "bold": "굵게", + "italic": "이탤릭체", + "underline": "밑줄", + "strikethrough": "취소선", + "text-color": "텍스트 색상", + "background-color": "배경색", + "text-align": "텍스트 정렬" + } } } diff --git a/packages/i18n/src/locales/ko/empty-state.json b/packages/i18n/src/locales/ko/empty-state.json index d37876bc6f1..b5577cab07e 100644 --- a/packages/i18n/src/locales/ko/empty-state.json +++ b/packages/i18n/src/locales/ko/empty-state.json @@ -266,5 +266,11 @@ "description": "작업 항목이 진행되는 상태를 선택하세요." } } + }, + "app_not_found": { + "alt": "404 - 페이지를 찾을 수 없습니다", + "title": "문제가 발생했습니다.", + "description": "찾고 있는 페이지를 찾을 수 없습니다. 삭제되었거나 이름이 변경되었거나 일시적으로 사용할 수 없을 수 있습니다.", + "go_to_home": "홈으로 이동" } } diff --git a/packages/i18n/src/locales/ko/inbox.json b/packages/i18n/src/locales/ko/inbox.json index a191d955f8e..dd2b2852837 100644 --- a/packages/i18n/src/locales/ko/inbox.json +++ b/packages/i18n/src/locales/ko/inbox.json @@ -83,5 +83,56 @@ "title": "작업 항목의 세부 정보를 보려면 선택하세요." } } + }, + "inbox": { + "duplicate_issues_found": "중복 작업 항목 {count}개 발견", + "description_versions": { + "intake_form_user": "접수 양식 사용자" + }, + "errors": { + "asset_upload_failed": "자산 업로드에 실패했습니다. 나중에 다시 시도해 주세요.", + "asset_duplication_failed": "자산 복제에 실패했습니다. 나중에 다시 시도해 주세요.", + "permission_denied": "허가가 거부되었습니다", + "mark_duplicate_permission": "프로젝트 관리자만 작업 항목을 중복으로 표시할 수 있습니다.", + "mark_duplicate_permission_plural": "프로젝트 관리자만 작업 항목을 중복으로 표시할 수 있습니다." + }, + "filters": { + "created_date": "생성일", + "updated_date": "업데이트된 날짜", + "last_updated_date": "마지막 업데이트 날짜", + "status": "상태", + "work_item_status": "작업 항목 상태", + "view_all": "모두 보기", + "view_less": "간략히 보기", + "date_options": { + "today": "오늘", + "yesterday": "어제", + "last_7_days": "지난 7일", + "last_30_days": "지난 30일" + }, + "date_operators": { + "after": "후에", + "before": "전에" + } + }, + "navigation": { + "previous_work_item": "이전 작업 항목", + "next_work_item": "다음 작업 항목" + }, + "properties": { + "duplicate_of": "중복 항목" + }, + "select_duplicate": { + "select_work_item": "작업 항목 선택" + }, + "sidebar": { + "label_count": "{count} 라벨" + }, + "toasts": { + "editor_processing": "편집기가 아직 변경사항을 처리 중입니다. 계속하기 전에 잠시 기다려 주십시오.", + "create_success": "작업 항목이 성공적으로 생성되었습니다.", + "delete_failed": "작업 항목 삭제 실패", + "update_failed": "작업 항목 업데이트 실패" + } } } diff --git a/packages/i18n/src/locales/ko/page.json b/packages/i18n/src/locales/ko/page.json index bfc60e4de75..96be071cbce 100644 --- a/packages/i18n/src/locales/ko/page.json +++ b/packages/i18n/src/locales/ko/page.json @@ -111,5 +111,18 @@ "success_message": "페이지가 컬렉션에서 제거되었습니다.", "error_message": "페이지를 컬렉션에서 제거할 수 없습니다. 다시 시도해 주세요." } + }, + "page_access": { + "not_found_title": "페이지를 찾을 수 없습니다", + "not_found_description": "접근하려는 페이지가 존재하지 않거나 볼 권한이 없습니다.", + "view_other_pages": "다른 페이지 보기" + }, + "profile_activity": { + "page_title": "프로필 - 활동" + }, + "space_public": { + "page_not_found_alt": "페이지를 찾을 수 없음", + "page_not_found_description": "찾고 있는 페이지가 없거나 이동되었습니다.", + "something_went_wrong": "문제가 발생했습니다." } } diff --git a/packages/i18n/src/locales/ko/project.json b/packages/i18n/src/locales/ko/project.json index 7175491bbc5..b17de7e15a1 100644 --- a/packages/i18n/src/locales/ko/project.json +++ b/packages/i18n/src/locales/ko/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "아직 프로젝트가 없습니다", + "description": "프로젝트는 목표 중심 업무의 기반입니다. 팀, 작업, 업무 완료에 필요한 모든 것을 관리할 수 있습니다.", + "learn_more": "프로젝트 자세히 알아보기", + "start_first_project": "첫 프로젝트 시작" } } diff --git a/packages/i18n/src/locales/ko/work-item.json b/packages/i18n/src/locales/ko/work-item.json index 259adc2fc57..4762d407ec3 100644 --- a/packages/i18n/src/locales/ko/work-item.json +++ b/packages/i18n/src/locales/ko/work-item.json @@ -422,5 +422,35 @@ "label": "에픽 제목", "required": "에픽 제목이 필요합니다." } + }, + "space_public": { + "peek": { + "side": "사이드 피크", + "modal": "모달", + "full_screen": "전체 화면" + }, + "public_board_not_found": "공개 보드가 없습니다. URL을 확인하세요.", + "no_work_items_found": "작업 항목을 찾을 수 없습니다", + "bot_name": "{name} 봇", + "commented_time": "{time}에 댓글 작성", + "and_more": "외 {count}명", + "no_upvotes_yet": "아직 찬성표가 없습니다", + "no_downvotes_yet": "아직 반대표가 없습니다", + "view_less": "간단히 보기", + "view_all": "모두 보기", + "no_matches_found": "일치하는 항목이 없습니다", + "no_date": "날짜 없음", + "no_cycle": "사이클 없음", + "no_modules": "모듈 없음", + "modules_count": "모듈 {count}개", + "no_assignees": "담당자 없음", + "labels_count": "라벨 {count}개", + "no_labels": "라벨 없음", + "sign_in_to_add_comment": "댓글을 추가하려면 로그인하세요", + "add_comment": "댓글 추가", + "link_copied": "링크가 복사되었습니다!", + "work_item_link_copied": "작업 항목 링크가 클립보드에 복사되었습니다.", + "comment_post_error": "댓글을 게시하지 못했습니다. 다시 시도하세요.", + "user": "사용자" } } diff --git a/packages/i18n/src/locales/ko/workspace.json b/packages/i18n/src/locales/ko/workspace.json index 196b8e20a69..e3898520f4f 100644 --- a/packages/i18n/src/locales/ko/workspace.json +++ b/packages/i18n/src/locales/ko/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "이 뷰를 삭제하시겠습니까?", "content": "확인하면 이 뷰에 대해 선택한 모든 정렬, 필터 및 표시 옵션 + 레이아웃이 복원할 수 없는 방식으로 영구적으로 삭제됩니다." - } + }, + "page_title": "{workspaceName} - 모든 보기" }, "workspace_draft_issues": { "draft_an_issue": "작업 항목 초안", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "워크스페이스를 찾을 수 없습니다", + "not_found_description": "이 URL에 해당하는 워크스페이스를 찾을 수 없습니다. 존재하지 않거나 볼 권한이 없을 수 있습니다.", + "visit_profile": "프로필 방문", + "not_authorized_title": "권한이 없습니다", + "not_authorized_description": "이 워크스페이스의 멤버가 아닙니다. 워크스페이스 관리자에게 초대를 요청하거나 대기 중인 초대를 확인하세요.", + "check_pending_invites": "보류 중인 초대 확인" + }, + "workspace_invitation": { + "invitation_not_found": "초대장을 찾을 수 없습니다.", + "invited_to_workspace": "{workspaceName}에 초대되었습니다", + "description": "작업 공간은 Plane 계정에서 프로젝트를 생성하고, 작업 항목에 대해 공동 작업하고, 다양한 작업 흐름을 구성하는 곳입니다.", + "accept": "수락", + "ignore": "무시", + "already_member": "귀하는 이미 {workspaceName}의 회원입니다.", + "continue_to_home": "홈으로 계속", + "inactive_title": "이 초대 링크는 더 이상 활성화되지 않습니다.", + "empty_project_link": "또는 빈 프로젝트에서 시작", + "sign_in_to_continue": "계속하려면 로그인하세요.", + "star_on_github": "GitHub에 별표를 표시해 주세요.", + "join_community": "활동적인 제작자 커뮤니티에 참여하세요" + }, + "onboarding": { + "create_profile_title": "프로필을 만드세요.", + "create_profile_description": "이것이 Plane에 나타나는 모습입니다.", + "change_image": "이미지 변경", + "upload_image": "이미지 업로드", + "name": "이름", + "name_required": "이름은 필수입니다", + "name_within_50": "이름은 50자 이내로 입력해야 합니다.", + "enter_full_name": "이름을 입력하세요", + "set_password": "비밀번호를 설정하세요", + "optional": "선택 과목", + "passwords_do_not_match": "비밀번호가 일치하지 않습니다.", + "passwords_match": "비밀번호가 일치합니다.", + "continue": "계속", + "invite_team_title": "팀원을 초대하세요", + "invite_team_description": "Plane에서의 작업은 팀과 함께 가장 잘 이루어집니다. 지금 Plane를 활용해 잠재력을 발휘하도록 초대하세요.", + "invalid_email": "이메일 주소가 아닌 것 같습니다.", + "success": "성공!", + "invitations_sent": "초대장이 성공적으로 전송되었습니다.", + "error": "오류!", + "add_another": "다른 것을 추가하세요", + "do_later": "나중에 할게요", + "join_invites_title": "초대에 참여하거나 작업 공간 만들기", + "unified_description": "모든 작업이 통합됩니다.", + "create_new_workspace": "새 작업공간 만들기", + "no_invitations_found": "초대장을 찾을 수 없습니다.", + "you_are_invited": "당신을 초대합니다!", + "accept_invites": "팀과 협력하려면 초대를 수락하세요.", + "continue_to_workspace": "계속해서 작업공간으로 이동", + "or": "또는", + "create_own_workspace": "나만의 작업 공간 만들기", + "workspace_creation_disabled": "워크스페이스에 대한 초대가 없는 것 같고 인스턴스 관리자가 새 워크스페이스 생성을 제한했습니다. 먼저 워크스페이스 소유자나 관리자에게 워크스페이스에 초대해 달라고 요청한 후 이 화면으로 돌아와 참여하세요.", + "create_workspace_title": "작업 공간 만들기", + "enter_workspace_name": "작업공간 이름을 입력하세요.", + "join_existing_workspace": "기존 작업공간에 참여", + "profile_setup_completed": "프로필 설정이 완료되었습니다.", + "profile_setup_failed": "프로필 설정에 실패했습니다.", + "usecase_title": "Plane를 어떻게 사용할 계획인가요?", + "usecase_description": "귀하의 경험을 개인화할 수 있도록 하나 이상의 옵션을 선택하십시오.", + "select_one_or_more": "하나 이상 선택", + "select_at_least_one": "옵션을 하나 이상 선택하세요.", + "skip": "건너뛰다" } } diff --git a/packages/i18n/src/locales/pl/auth.json b/packages/i18n/src/locales/pl/auth.json index a39ce3ac3c6..cb578fdd432 100644 --- a/packages/i18n/src/locales/pl/auth.json +++ b/packages/i18n/src/locales/pl/auth.json @@ -364,5 +364,45 @@ "sub_header": "Wprowadź swoje dane logowania {ldapProviderName}" } } + }, + "space_auth": { + "email": "E-mail", + "email_invalid": "Adres e-mail jest nieprawidłowy", + "clear_email": "Wyczyść e-mail", + "password": "Hasło", + "set_password": "Ustaw hasło", + "enter_password": "Wprowadź hasło", + "confirm_password": "Potwierdź hasło", + "passwords_dont_match": "Hasła nie pasują", + "continue": "Kontynuuj", + "go_to_workspace": "Przejdź do obszaru roboczego", + "sign_in_with_unique_code": "Zaloguj się za pomocą unikalnego kodu", + "create_account": "Utwórz konto", + "unique_code": "Unikalny kod", + "paste_code_sent": "Wklej kod przesłany na Twój adres e-mail", + "resend_in": "Wyślij ponownie za {seconds}s", + "requesting_new_code": "Prośba o nowy kod", + "resend": "Wyślij ponownie", + "sending_code": "Wysyłanie kodu" + }, + "space_public": { + "by_creating_account": "Tworząc konto", + "by_signing_in": "Logując się", + "you_agree_to_our": "akceptujesz nasze", + "terms_of_service": "Warunki korzystania", + "and": "oraz", + "privacy_policy": "Politykę prywatności", + "sign_up": "Zarejestruj się", + "oauth_with_provider": "{action} przez {provider}", + "user_already_logged_in": "Użytkownik jest już zalogowany", + "logged_in_title": "Świetnie! Jeszcze jeden krok.", + "logged_in_hint": "Wprowadź w pasku adresu przeglądarki publiczny URL udostępnienia lub link do widoku albo strony, którą chcesz zobaczyć.", + "sign_in": "Zaloguj się", + "auth": { + "sign_in_header": "Zaloguj się, aby głosować lub komentować", + "sign_in_subheader": "Pomóż przesuwać do przodu funkcje, które chcesz zobaczyć.", + "sign_up_header": "Przeglądaj, komentuj i rób więcej", + "sign_up_subheader": "Zarejestruj się lub zaloguj, aby pracować z elementami pracy i stronami Plane." + } } } diff --git a/packages/i18n/src/locales/pl/common.json b/packages/i18n/src/locales/pl/common.json index 4c4850cbf66..d7eecfe8088 100644 --- a/packages/i18n/src/locales/pl/common.json +++ b/packages/i18n/src/locales/pl/common.json @@ -867,5 +867,20 @@ "description": "Eksportuj elementy do pliku JSON.", "short_description": "Eksportuj jako JSON" } + }, + "space_public": { + "error_description_prefix": "Plane uległ awarii. Nasi inżynierowie zostali powiadomieni. Jeśli masz więcej szczegółów, napisz na", + "error_description_middle": "lub na naszym", + "not_found_hint": "Sprawdź URL w pasku adresu przeglądarki i spróbuj ponownie.", + "instance_failure_image_alt": "Nie można pobrać szczegółów instancji", + "instance_failure_title": "Nie można pobrać szczegółów instancji.", + "instance_failure_description": "Nie mogliśmy załadować szczegółów Twojej instancji.", + "instance_failure_hint": "Sprawdź połączenie i spróbuj ponownie.", + "powered_by": "Obsługiwane przez", + "error_title": "Ups! To nie wygląda dobrze.", + "refresh": "Odśwież", + "forum": "Forum", + "not_found_title": "To nie zadziałało", + "retry": "Spróbuj ponownie" } } diff --git a/packages/i18n/src/locales/pl/editor.json b/packages/i18n/src/locales/pl/editor.json index ffe63821769..346771f407a 100644 --- a/packages/i18n/src/locales/pl/editor.json +++ b/packages/i18n/src/locales/pl/editor.json @@ -61,5 +61,79 @@ "use_this": "Użyj tego", "refine": "Udoskonal" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Wpisz lub wklej adres URL", + "text": "Tekst", + "enter_text_to_display": "Wprowadź tekst do wyświetlenia", + "remove_link": "Usuń link", + "edit_link": "Edytuj link", + "color": "Kolor", + "text_colors": "Kolory tekstu", + "background_colors": "Kolory tła", + "link": "Link", + "enter_or_paste_link": "Wpisz lub wklej link", + "please_enter_valid_url": "Proszę wprowadzić prawidłowy URL", + "delete": "Usuń", + "duplicate": "Duplikuj", + "multiple": "Wiele", + "loading": "Ładowanie", + "no_results": "Brak wyników", + "copy_code": "Skopiuj kod", + "add_an_image": "Dodaj obraz", + "error_loading_image": "Błąd ładowania obrazu", + "uploading": "Przesyłanie", + "drop_image_here": "Upuść obraz tutaj", + "retry_duplication": "Ponów próbę duplikacji", + "retry": "Spróbuj ponownie", + "no_emojis_found": "Nie znaleziono emoji", + "fullscreen_image_viewer": "Pełnoekranowa przeglądarka obrazów", + "close_image_viewer": "Zamknij przeglądarkę zdjęć", + "zoom_out": "Pomniejsz", + "zoom_in": "Powiększ", + "download_image": "Pobierz obraz", + "open_image_in_new_tab": "Otwórz obraz w nowej karcie", + "view_in_full_screen": "Wyświetl na pełnym ekranie", + "view_image_in_full_screen": "Wyświetl obraz na pełnym ekranie", + "align": "Wyrównaj", + "download": "Pobierz", + "clear_contents": "Wyczyść zawartość", + "insert_above": "Wstaw powyżej", + "insert_below": "Wstaw poniżej", + "insert_left": "Wstaw lewy", + "insert_right": "Wstaw po prawej", + "header_row": "Wiersz nagłówka", + "header_column": "Kolumna nagłówka", + "alignment": { + "left": "Lewy", + "center": "Centrum", + "right": "Do prawej" + }, + "menu_items": { + "text": "Tekst", + "h1": "Nagłówek 1", + "h2": "Nagłówek 2", + "h3": "Nagłówek 3", + "h4": "Nagłówek 4", + "h5": "Nagłówek 5", + "h6": "Nagłówek 6", + "bulleted-list": "Lista punktowana", + "numbered-list": "Lista numerowana", + "to-do-list": "Lista rzeczy do zrobienia", + "quote": "Cytat", + "code": "Kod", + "table": "Tabela", + "image": "Obraz", + "divider": "Rozdzielacz", + "link": "Link", + "bold": "Pogrubiony", + "italic": "Kursywa", + "underline": "Podkreślenie", + "strikethrough": "Przekreślenie", + "text-color": "Kolor tekstu", + "background-color": "Kolor tła", + "text-align": "Wyrównaj tekst" + } } } diff --git a/packages/i18n/src/locales/pl/empty-state.json b/packages/i18n/src/locales/pl/empty-state.json index 9ade0d857e9..851d8d568c5 100644 --- a/packages/i18n/src/locales/pl/empty-state.json +++ b/packages/i18n/src/locales/pl/empty-state.json @@ -266,5 +266,11 @@ "description": "Wybierz stany, przez które przechodzi element pracy." } } + }, + "app_not_found": { + "alt": "404 - Nie znaleziono strony", + "title": "Ups! Coś poszło nie tak.", + "description": "Nie można znaleźć strony, której szukasz. Mogła zostać usunięta, zmieniono jej nazwę albo jest tymczasowo niedostępna.", + "go_to_home": "Przejdź do strony głównej" } } diff --git a/packages/i18n/src/locales/pl/inbox.json b/packages/i18n/src/locales/pl/inbox.json index 5a42e768d48..3ae7a50825c 100644 --- a/packages/i18n/src/locales/pl/inbox.json +++ b/packages/i18n/src/locales/pl/inbox.json @@ -83,5 +83,56 @@ "title": "Wybierz element pracy, aby zobaczyć szczegóły." } } + }, + "inbox": { + "duplicate_issues_found": "Znaleziono {count} zduplikowanych elementów pracy", + "description_versions": { + "intake_form_user": "Użytkownik formularza przyjęcia" + }, + "errors": { + "asset_upload_failed": "Przesyłanie zasobu nie powiodło się. Spróbuj ponownie później.", + "asset_duplication_failed": "Powielanie zasobów nie powiodło się. Spróbuj ponownie później.", + "permission_denied": "Odmowa pozwolenia", + "mark_duplicate_permission": "Tylko administratorzy projektu mogą oznaczać element pracy jako duplikat", + "mark_duplicate_permission_plural": "Tylko administratorzy projektu mogą oznaczać elementy pracy jako duplikaty" + }, + "filters": { + "created_date": "Data utworzenia", + "updated_date": "Zaktualizowana data", + "last_updated_date": "Ostatnia aktualizacja", + "status": "Status", + "work_item_status": "Stan elementu pracy", + "view_all": "Zobacz wszystkie", + "view_less": "Zobacz mniej", + "date_options": { + "today": "Dzisiaj", + "yesterday": "Wczoraj", + "last_7_days": "Ostatnie 7 dni", + "last_30_days": "Ostatnie 30 dni" + }, + "date_operators": { + "after": "Po", + "before": "Zanim" + } + }, + "navigation": { + "previous_work_item": "Poprzedni element pracy", + "next_work_item": "Następny element pracy" + }, + "properties": { + "duplicate_of": "Duplikat elementu" + }, + "select_duplicate": { + "select_work_item": "Wybierz element pracy" + }, + "sidebar": { + "label_count": "Etykiety {count}" + }, + "toasts": { + "editor_processing": "Edytor nadal przetwarza zmiany. Proszę poczekać przed kontynuowaniem.", + "create_success": "Element pracy został pomyślnie utworzony.", + "delete_failed": "Nie udało się usunąć elementu roboczego", + "update_failed": "Aktualizacja elementu roboczego nie powiodła się" + } } } diff --git a/packages/i18n/src/locales/pl/page.json b/packages/i18n/src/locales/pl/page.json index 676a197ab11..b14aa6b41ff 100644 --- a/packages/i18n/src/locales/pl/page.json +++ b/packages/i18n/src/locales/pl/page.json @@ -111,5 +111,18 @@ "success_message": "Strona została usunięta z kolekcji.", "error_message": "Nie udało się usunąć strony z kolekcji. Spróbuj ponownie." } + }, + "page_access": { + "not_found_title": "Nie znaleziono strony", + "not_found_description": "Strona, do której próbujesz uzyskać dostęp, nie istnieje albo nie masz uprawnień do jej wyświetlenia.", + "view_other_pages": "Wyświetl inne strony" + }, + "profile_activity": { + "page_title": "Profil - Aktywność" + }, + "space_public": { + "page_not_found_alt": "Strona nie znaleziona", + "page_not_found_description": "Strona, której szukasz, nie istnieje lub została przeniesiona.", + "something_went_wrong": "Ups! Coś poszło nie tak." } } diff --git a/packages/i18n/src/locales/pl/project.json b/packages/i18n/src/locales/pl/project.json index 6a3dc76f7cf..b2830fa6ab3 100644 --- a/packages/i18n/src/locales/pl/project.json +++ b/packages/i18n/src/locales/pl/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Brak projektów", + "description": "Projekty są podstawą pracy ukierunkowanej na cele. Pozwalają zarządzać zespołami, zadaniami i wszystkim, czego potrzebujesz, aby wykonać pracę.", + "learn_more": "Dowiedz się więcej o projektach", + "start_first_project": "Rozpocznij pierwszy projekt" } } diff --git a/packages/i18n/src/locales/pl/work-item.json b/packages/i18n/src/locales/pl/work-item.json index f9c6a284957..238cdf10b1c 100644 --- a/packages/i18n/src/locales/pl/work-item.json +++ b/packages/i18n/src/locales/pl/work-item.json @@ -422,5 +422,35 @@ "label": "Tytuł epiku", "required": "Tytuł epiku jest wymagany." } + }, + "space_public": { + "peek": { + "side": "Podgląd boczny", + "modal": "Okno modalne", + "full_screen": "Pełny ekran" + }, + "public_board_not_found": "Publiczna tablica nie istnieje. Sprawdź URL.", + "no_work_items_found": "Nie znaleziono elementów pracy", + "bot_name": "Bot {name}", + "commented_time": "skomentowano {time}", + "and_more": "i jeszcze {count}", + "no_upvotes_yet": "Brak głosów za", + "no_downvotes_yet": "Brak głosów przeciw", + "view_less": "Pokaż mniej", + "view_all": "Pokaż wszystko", + "no_matches_found": "Nie znaleziono dopasowań", + "no_date": "Brak daty", + "no_cycle": "Brak cyklu", + "no_modules": "Brak modułów", + "modules_count": "{count} modułów", + "no_assignees": "Brak przypisanych", + "labels_count": "{count} etykiet", + "no_labels": "Brak etykiet", + "sign_in_to_add_comment": "Zaloguj się, aby dodać komentarz", + "add_comment": "Dodaj komentarz", + "link_copied": "Link skopiowany!", + "work_item_link_copied": "Link do elementu pracy skopiowany do schowka.", + "comment_post_error": "Nie udało się opublikować komentarza. Spróbuj ponownie.", + "user": "Użytkownik" } } diff --git a/packages/i18n/src/locales/pl/workspace.json b/packages/i18n/src/locales/pl/workspace.json index 53d57357e86..a8a06356916 100644 --- a/packages/i18n/src/locales/pl/workspace.json +++ b/packages/i18n/src/locales/pl/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Czy na pewno chcesz usunąć ten widok?", "content": "Jeśli potwierdzisz, wszystkie opcje sortowania, filtrowania i wyświetlania + układ, który wybrałeś dla tego widoku, zostaną trwale usunięte bez możliwości przywrócenia." - } + }, + "page_title": "{workspaceName} - Wszystkie widoki" }, "workspace_draft_issues": { "draft_an_issue": "Utwórz szkic elementu pracy", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Nie znaleziono obszaru roboczego", + "not_found_description": "Nie znaleziono obszaru roboczego dla tego adresu URL. Może nie istnieć albo nie masz uprawnień do jego wyświetlenia.", + "visit_profile": "Odwiedź profil", + "not_authorized_title": "Brak autoryzacji!", + "not_authorized_description": "Nie jesteś członkiem tego obszaru roboczego. Skontaktuj się z administratorem obszaru roboczego, aby otrzymać zaproszenie, albo sprawdź oczekujące zaproszenia.", + "check_pending_invites": "Sprawdź oczekujące zaproszenia" + }, + "workspace_invitation": { + "invitation_not_found": "Nie znaleziono zaproszenia", + "invited_to_workspace": "Zostałeś zaproszony do {workspaceName}", + "description": "Twój obszar roboczy to miejsce, w którym będziesz tworzyć projekty, współpracować nad elementami pracy i organizować różne strumienie pracy na swoim koncie Plane.", + "accept": "Przyjmij", + "ignore": "Ignoruj", + "already_member": "Jesteś już członkiem {workspaceName}", + "continue_to_home": "Przejdź do strony głównej", + "inactive_title": "Ten link z zaproszeniem nie jest już aktywny.", + "empty_project_link": "Lub zacznij od pustego projektu", + "sign_in_to_continue": "Zaloguj się, aby kontynuować", + "star_on_github": "Daj nam gwiazdkę na GitHubie", + "join_community": "Dołącz do naszej społeczności aktywnych twórców" + }, + "onboarding": { + "create_profile_title": "Utwórz swój profil.", + "create_profile_description": "Tak będziesz wyglądać w Plane.", + "change_image": "Zmień obraz", + "upload_image": "Prześlij obraz", + "name": "Nazwa", + "name_required": "Imię i nazwisko jest wymagane", + "name_within_50": "Nazwa musi zawierać maksymalnie 50 znaków.", + "enter_full_name": "Wpisz swoje pełne imię i nazwisko", + "set_password": "Ustaw hasło", + "optional": "Opcjonalnie", + "passwords_do_not_match": "Hasła nie pasują", + "passwords_match": "Hasła się zgadzają", + "continue": "Kontynuuj", + "invite_team_title": "Zaproś swoich kolegów z drużyny", + "invite_team_description": "Praca w Plane najlepiej przebiega z Twoim zespołem. Zaproś ich teraz, aby wykorzystali cały potencjał Plane.", + "invalid_email": "To nie wygląda na adres e-mail.", + "success": "Sukces!", + "invitations_sent": "Zaproszenia wysłane pomyślnie.", + "error": "Błąd!", + "add_another": "Dodaj kolejny", + "do_later": "Zrobię to później", + "join_invites_title": "Dołącz do zaproszeń lub utwórz obszar roboczy", + "unified_description": "Cała Twoja praca — ujednolicona.", + "create_new_workspace": "Utwórz nowy obszar roboczy", + "no_invitations_found": "Nie znaleziono zaproszeń", + "you_are_invited": "Zapraszamy!", + "accept_invites": "Zaakceptuj zaproszenia do współpracy ze swoim zespołem.", + "continue_to_workspace": "Przejdź do obszaru roboczego", + "or": "Lub", + "create_own_workspace": "Stwórz własną przestrzeń do pracy", + "workspace_creation_disabled": "Wygląda na to, że nie masz żadnych zaproszeń do obszaru roboczego, a administrator Twojej instancji ograniczył tworzenie nowych obszarów roboczych. Poproś właściciela lub administratora obszaru roboczego, aby najpierw zaprosił Cię do obszaru roboczego, a następnie wróć do tego ekranu, aby dołączyć.", + "create_workspace_title": "Stwórz swoje miejsce do pracy", + "enter_workspace_name": "Wprowadź nazwę obszaru roboczego", + "join_existing_workspace": "Dołącz do istniejącego obszaru roboczego", + "profile_setup_completed": "Konfiguracja profilu zakończona.", + "profile_setup_failed": "Konfiguracja profilu nie powiodła się.", + "usecase_title": "Jak planujesz używać Plane?", + "usecase_description": "Wybierz jedną lub więcej opcji, abyśmy mogli spersonalizować Twoje doświadczenia.", + "select_one_or_more": "Wybierz jeden lub więcej", + "select_at_least_one": "Wybierz co najmniej jedną opcję.", + "skip": "Pominąć" } } diff --git a/packages/i18n/src/locales/pt-BR/auth.json b/packages/i18n/src/locales/pt-BR/auth.json index eff421c1be0..76edf5808eb 100644 --- a/packages/i18n/src/locales/pt-BR/auth.json +++ b/packages/i18n/src/locales/pt-BR/auth.json @@ -364,5 +364,45 @@ "sub_header": "Digite suas credenciais {ldapProviderName}" } } + }, + "space_auth": { + "email": "E-mail", + "email_invalid": "O e-mail é inválido", + "clear_email": "Limpar e-mail", + "password": "Senha", + "set_password": "Defina uma senha", + "enter_password": "Digite a senha", + "confirm_password": "Confirme sua senha", + "passwords_dont_match": "As senhas não coincidem", + "continue": "Continuar", + "go_to_workspace": "Ir para o espaço de trabalho", + "sign_in_with_unique_code": "Faça login com código exclusivo", + "create_account": "Criar uma conta", + "unique_code": "Código exclusivo", + "paste_code_sent": "Cole o código enviado para seu e-mail", + "resend_in": "Reenviar em {seconds}s", + "requesting_new_code": "Solicitando novo código", + "resend": "Reenviar", + "sending_code": "Enviando código" + }, + "space_public": { + "by_creating_account": "Ao criar uma conta", + "by_signing_in": "Ao entrar", + "you_agree_to_our": "você concorda com nossos", + "terms_of_service": "Termos de Serviço", + "and": "e", + "privacy_policy": "Política de Privacidade", + "sign_up": "Cadastrar-se", + "oauth_with_provider": "{action} com {provider}", + "user_already_logged_in": "Usuário já conectado", + "logged_in_title": "Ótimo! Só falta mais uma etapa.", + "logged_in_hint": "Insira na barra de endereços do navegador a URL pública compartilhada ou o link da visualização ou Página que você quer ver.", + "sign_in": "Entrar", + "auth": { + "sign_in_header": "Entre para votar ou comentar", + "sign_in_subheader": "Ajude a impulsionar as funcionalidades que você quer ver criadas.", + "sign_up_header": "Veja, comente e faça mais", + "sign_up_subheader": "Cadastre-se ou entre para trabalhar com itens de trabalho e Páginas do Plane." + } } } diff --git a/packages/i18n/src/locales/pt-BR/common.json b/packages/i18n/src/locales/pt-BR/common.json index 565e85d8739..c47493a984c 100644 --- a/packages/i18n/src/locales/pt-BR/common.json +++ b/packages/i18n/src/locales/pt-BR/common.json @@ -867,5 +867,20 @@ "description": "Exporte itens de trabalho para um arquivo JSON.", "short_description": "Exportar como JSON" } + }, + "space_public": { + "error_description_prefix": "O Plane travou. Nossos engenheiros foram notificados. Se você tiver mais detalhes, escreva para", + "error_description_middle": "ou em nosso", + "not_found_hint": "Confira a URL na barra de endereços do navegador e tente novamente.", + "instance_failure_image_alt": "Não foi possível buscar os detalhes da instância", + "instance_failure_title": "Não foi possível buscar os detalhes da instância.", + "instance_failure_description": "Não conseguimos carregar os detalhes da sua instância.", + "instance_failure_hint": "Verifique sua conexão e tente novamente.", + "powered_by": "Desenvolvido por", + "error_title": "Ops! Isso não parece bom.", + "refresh": "Atualizar", + "forum": "Fórum", + "not_found_title": "Isso não funcionou", + "retry": "Tentar novamente" } } diff --git a/packages/i18n/src/locales/pt-BR/editor.json b/packages/i18n/src/locales/pt-BR/editor.json index 105df382c7e..62a064ddf20 100644 --- a/packages/i18n/src/locales/pt-BR/editor.json +++ b/packages/i18n/src/locales/pt-BR/editor.json @@ -61,5 +61,79 @@ "use_this": "Usar este", "refine": "Refinar" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Insira ou cole o URL", + "text": "Texto", + "enter_text_to_display": "Digite o texto para exibir", + "remove_link": "Remover link", + "edit_link": "Editar link", + "color": "Cor", + "text_colors": "Cores do texto", + "background_colors": "Cores de fundo", + "link": "Link", + "enter_or_paste_link": "Insira ou cole o link", + "please_enter_valid_url": "Insira um URL válido", + "delete": "Excluir", + "duplicate": "Duplicado", + "multiple": "Múltiplo", + "loading": "Carregando", + "no_results": "Nenhum resultado", + "copy_code": "Copiar código", + "add_an_image": "Adicione uma imagem", + "error_loading_image": "Erro ao carregar a imagem", + "uploading": "Enviando", + "drop_image_here": "Solte a imagem aqui", + "retry_duplication": "Tentar novamente a duplicação", + "retry": "Tentar novamente", + "no_emojis_found": "Nenhum emoji encontrado", + "fullscreen_image_viewer": "Visualizador de imagens em tela cheia", + "close_image_viewer": "Fechar visualizador de imagens", + "zoom_out": "Diminuir zoom", + "zoom_in": "Ampliar", + "download_image": "Baixar imagem", + "open_image_in_new_tab": "Abrir imagem em nova aba", + "view_in_full_screen": "Ver em tela cheia", + "view_image_in_full_screen": "Ver imagem em tela cheia", + "align": "Alinhar", + "download": "Baixar", + "clear_contents": "Limpar conteúdo", + "insert_above": "Inserir acima", + "insert_below": "Inserir abaixo", + "insert_left": "Inserir à esquerda", + "insert_right": "Inserir à direita", + "header_row": "Linha de cabeçalho", + "header_column": "Coluna de cabeçalho", + "alignment": { + "left": "Esquerda", + "center": "Centro", + "right": "Direita" + }, + "menu_items": { + "text": "Texto", + "h1": "Título 1", + "h2": "Título 2", + "h3": "Título 3", + "h4": "Título 4", + "h5": "Título 5", + "h6": "Título 6", + "bulleted-list": "Lista com marcadores", + "numbered-list": "Lista numerada", + "to-do-list": "Lista de tarefas", + "quote": "Citar", + "code": "Código", + "table": "Tabela", + "image": "Imagem", + "divider": "Divisor", + "link": "Link", + "bold": "Negrito", + "italic": "Itálico", + "underline": "Sublinhado", + "strikethrough": "Tachado", + "text-color": "Cor do texto", + "background-color": "Cor de fundo", + "text-align": "Alinhamento de texto" + } } } diff --git a/packages/i18n/src/locales/pt-BR/empty-state.json b/packages/i18n/src/locales/pt-BR/empty-state.json index e9863a4a7d7..c54a2d0a878 100644 --- a/packages/i18n/src/locales/pt-BR/empty-state.json +++ b/packages/i18n/src/locales/pt-BR/empty-state.json @@ -266,5 +266,11 @@ "description": "Selecione os estados pelos quais o item de trabalho progride." } } + }, + "app_not_found": { + "alt": "404 - Página não encontrada", + "title": "Ops! Algo deu errado.", + "description": "A página que você está procurando não foi encontrada. Ela pode ter sido removida, renomeada ou estar temporariamente indisponível.", + "go_to_home": "Ir para o início" } } diff --git a/packages/i18n/src/locales/pt-BR/inbox.json b/packages/i18n/src/locales/pt-BR/inbox.json index 564a733fa0e..3b5ce5c0d38 100644 --- a/packages/i18n/src/locales/pt-BR/inbox.json +++ b/packages/i18n/src/locales/pt-BR/inbox.json @@ -83,5 +83,56 @@ "title": "Selecione um item de trabalho para visualizar seus detalhes." } } + }, + "inbox": { + "duplicate_issues_found": "{count, plural, one {# item de trabalho duplicado encontrado} other {# itens de trabalho duplicados encontrados}}", + "description_versions": { + "intake_form_user": "Usuário do formulário de admissão" + }, + "errors": { + "asset_upload_failed": "Falha no upload do recurso. Por favor, tente novamente mais tarde.", + "asset_duplication_failed": "Falha na duplicação de recursos. Por favor, tente novamente mais tarde.", + "permission_denied": "Permissão negada", + "mark_duplicate_permission": "Somente administradores de projeto podem marcar itens de trabalho como duplicados", + "mark_duplicate_permission_plural": "Somente administradores de projeto podem marcar itens de trabalho como duplicados" + }, + "filters": { + "created_date": "Data de criação", + "updated_date": "Data atualizada", + "last_updated_date": "Data da última atualização", + "status": "Status", + "work_item_status": "Status do item de trabalho", + "view_all": "Ver tudo", + "view_less": "Ver menos", + "date_options": { + "today": "Hoje", + "yesterday": "Ontem", + "last_7_days": "Últimos 7 dias", + "last_30_days": "Últimos 30 dias" + }, + "date_operators": { + "after": "Depois", + "before": "Antes" + } + }, + "navigation": { + "previous_work_item": "Item de trabalho anterior", + "next_work_item": "Próximo item de trabalho" + }, + "properties": { + "duplicate_of": "Duplicado de" + }, + "select_duplicate": { + "select_work_item": "Selecione o item de trabalho" + }, + "sidebar": { + "label_count": "Etiquetas {count}" + }, + "toasts": { + "editor_processing": "O editor ainda está processando as alterações. Aguarde antes de continuar.", + "create_success": "Item de trabalho criado com sucesso.", + "delete_failed": "Falha na exclusão do item de trabalho", + "update_failed": "Falha na atualização do item de trabalho" + } } } diff --git a/packages/i18n/src/locales/pt-BR/page.json b/packages/i18n/src/locales/pt-BR/page.json index d2c827f3543..777912f7b14 100644 --- a/packages/i18n/src/locales/pt-BR/page.json +++ b/packages/i18n/src/locales/pt-BR/page.json @@ -111,5 +111,18 @@ "success_message": "Página removida da coleção.", "error_message": "Não foi possível remover a página da coleção. Tente novamente." } + }, + "page_access": { + "not_found_title": "Página não encontrada", + "not_found_description": "A página que você está tentando acessar não existe ou você não tem permissão para visualizá-la.", + "view_other_pages": "Ver outras Páginas" + }, + "profile_activity": { + "page_title": "Perfil - Atividade" + }, + "space_public": { + "page_not_found_alt": "Página não encontrada", + "page_not_found_description": "A página que você está procurando não existe ou foi movida.", + "something_went_wrong": "Ops! Algo deu errado." } } diff --git a/packages/i18n/src/locales/pt-BR/project.json b/packages/i18n/src/locales/pt-BR/project.json index 2bd097064af..56a039d15a2 100644 --- a/packages/i18n/src/locales/pt-BR/project.json +++ b/packages/i18n/src/locales/pt-BR/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Ainda não há projetos", + "description": "Os projetos são a base do trabalho orientado por objetivos. Eles permitem gerenciar equipes, tarefas e tudo o que você precisa para concluir o trabalho.", + "learn_more": "Saiba mais sobre projetos", + "start_first_project": "Comece seu primeiro projeto" } } diff --git a/packages/i18n/src/locales/pt-BR/work-item.json b/packages/i18n/src/locales/pt-BR/work-item.json index 614a34a21d8..cfdf23d0a16 100644 --- a/packages/i18n/src/locales/pt-BR/work-item.json +++ b/packages/i18n/src/locales/pt-BR/work-item.json @@ -422,5 +422,35 @@ "label": "Título do Épico", "required": "O título do épico é obrigatório." } + }, + "space_public": { + "peek": { + "side": "Visualização lateral", + "modal": "Modal", + "full_screen": "Tela cheia" + }, + "public_board_not_found": "O quadro público não existe. Verifique a URL.", + "no_work_items_found": "Nenhum item de trabalho encontrado", + "bot_name": "Bot {name}", + "commented_time": "comentou {time}", + "and_more": "e mais {count}", + "no_upvotes_yet": "Ainda sem votos positivos", + "no_downvotes_yet": "Ainda sem votos negativos", + "view_less": "Ver menos", + "view_all": "Ver tudo", + "no_matches_found": "Nenhuma correspondência encontrada", + "no_date": "Sem data", + "no_cycle": "Sem ciclo", + "no_modules": "Sem módulos", + "modules_count": "{count, plural, one {# módulo} other {# módulos}}", + "no_assignees": "Sem responsáveis", + "labels_count": "{count, plural, one {# etiqueta} other {# etiquetas}}", + "no_labels": "Sem etiquetas", + "sign_in_to_add_comment": "Entre para adicionar um comentário", + "add_comment": "Adicionar comentário", + "link_copied": "Link copiado!", + "work_item_link_copied": "Link do item de trabalho copiado para a área de transferência.", + "comment_post_error": "Falha ao publicar o comentário. Tente novamente.", + "user": "Usuário" } } diff --git a/packages/i18n/src/locales/pt-BR/workspace.json b/packages/i18n/src/locales/pt-BR/workspace.json index 5570c56dc3a..572ee77079a 100644 --- a/packages/i18n/src/locales/pt-BR/workspace.json +++ b/packages/i18n/src/locales/pt-BR/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Tem certeza de que deseja excluir esta visualização?", "content": "Se você confirmar, todas as opções de classificação, filtro e exibição + o layout que você escolheu para esta visualização serão excluídos permanentemente sem nenhuma maneira de restaurá-los." - } + }, + "page_title": "{workspaceName} - Todas as visualizações" }, "workspace_draft_issues": { "draft_an_issue": "Rascunhar um item de trabalho", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Workspace não encontrado", + "not_found_description": "Nenhum espaço de trabalho foi encontrado para este URL. Ele pode não existir ou você pode não ter permissão para visualizá-lo.", + "visit_profile": "Visitar perfil", + "not_authorized_title": "Não autorizado!", + "not_authorized_description": "Você não é membro deste espaço de trabalho. Entre em contato com o administrador do espaço de trabalho para receber um convite ou verifique seus convites pendentes.", + "check_pending_invites": "Verificar convites pendentes" + }, + "workspace_invitation": { + "invitation_not_found": "Convite não encontrado", + "invited_to_workspace": "Você foi convidado para {workspaceName}", + "description": "Seu espaço de trabalho é onde você criará projetos, colaborará em seus itens de trabalho e organizará diferentes fluxos de trabalho em sua conta Plane.", + "accept": "Aceitar", + "ignore": "Ignorar", + "already_member": "Você já é membro do {workspaceName}", + "continue_to_home": "Continuar para o início", + "inactive_title": "Este link de convite não está mais ativo.", + "empty_project_link": "Ou comece com um projeto vazio", + "sign_in_to_continue": "Faça login para continuar", + "star_on_github": "Marque-nos no GitHub", + "join_community": "Junte-se à nossa comunidade de criadores ativos" + }, + "onboarding": { + "create_profile_title": "Crie seu perfil.", + "create_profile_description": "É assim que você aparecerá no Plane.", + "change_image": "Alterar imagem", + "upload_image": "Carregar imagem", + "name": "Nome", + "name_required": "O nome é obrigatório", + "name_within_50": "O nome deve ter até 50 caracteres.", + "enter_full_name": "Digite seu nome completo", + "set_password": "Defina uma senha", + "optional": "Opcional", + "passwords_do_not_match": "As senhas não coincidem", + "passwords_match": "Correspondência de senhas", + "continue": "Continuar", + "invite_team_title": "Convide seus companheiros de equipe", + "invite_team_description": "O trabalho no Plane acontece melhor com sua equipe. Convide-os agora a usar o Plane em todo o seu potencial.", + "invalid_email": "Isso não se parece com um endereço de e-mail.", + "success": "Sucesso!", + "invitations_sent": "Convites enviados com sucesso.", + "error": "Erro!", + "add_another": "Adicionar outro", + "do_later": "Eu farei isso mais tarde", + "join_invites_title": "Participe de convites ou crie um espaço de trabalho", + "unified_description": "Todo o seu trabalho — unificado.", + "create_new_workspace": "Criar novo espaço de trabalho", + "no_invitations_found": "Nenhum convite encontrado", + "you_are_invited": "Você está convidado!", + "accept_invites": "Aceite os convites para colaborar com sua equipe.", + "continue_to_workspace": "Continuar para o espaço de trabalho", + "or": "ou", + "create_own_workspace": "Crie seu próprio espaço de trabalho", + "workspace_creation_disabled": "Parece que você não tem nenhum convite para um espaço de trabalho e o administrador da sua instância restringiu a criação de novos espaços de trabalho. Peça a um proprietário ou administrador do espaço de trabalho para convidá-lo primeiro para um espaço de trabalho e volte a esta tela para ingressar.", + "create_workspace_title": "Crie seu espaço de trabalho", + "enter_workspace_name": "Insira o nome do espaço de trabalho", + "join_existing_workspace": "Junte-se ao espaço de trabalho existente", + "profile_setup_completed": "Configuração do perfil concluída.", + "profile_setup_failed": "Falha na configuração do perfil.", + "usecase_title": "Como você planeja usar o Plane?", + "usecase_description": "Selecione uma ou mais opções para que possamos personalizar sua experiência.", + "select_one_or_more": "Selecione um ou mais", + "select_at_least_one": "Selecione pelo menos uma opção.", + "skip": "Pular" } } diff --git a/packages/i18n/src/locales/ro/auth.json b/packages/i18n/src/locales/ro/auth.json index 960c5fa7bc6..9096af75fd5 100644 --- a/packages/i18n/src/locales/ro/auth.json +++ b/packages/i18n/src/locales/ro/auth.json @@ -364,5 +364,45 @@ "sub_header": "Introduceți datele de autentificare {ldapProviderName}" } } + }, + "space_auth": { + "email": "E-mail", + "email_invalid": "E-mailul este nevalid", + "clear_email": "Ștergeți e-mailul", + "password": "Parolă", + "set_password": "Setați o parolă", + "enter_password": "Introduceți parola", + "confirm_password": "Confirmați parola", + "passwords_dont_match": "Parolele nu se potrivesc", + "continue": "Continua", + "go_to_workspace": "Accesați spațiul de lucru", + "sign_in_with_unique_code": "Conectați-vă cu codul unic", + "create_account": "Creează cont", + "unique_code": "Cod unic", + "paste_code_sent": "Lipiți codul trimis pe e-mailul dvs", + "resend_in": "Retrimiteți în {seconds}s", + "requesting_new_code": "Se solicită cod nou", + "resend": "Retrimiteți", + "sending_code": "Se trimite cod" + }, + "space_public": { + "by_creating_account": "Prin crearea unui cont", + "by_signing_in": "Prin autentificare", + "you_agree_to_our": "sunteți de acord cu", + "terms_of_service": "Termenii serviciului", + "and": "și", + "privacy_policy": "Politica de confidențialitate", + "sign_up": "Înregistrare", + "oauth_with_provider": "{action} cu {provider}", + "user_already_logged_in": "Utilizatorul este deja autentificat", + "logged_in_title": "Perfect! Încă un pas.", + "logged_in_hint": "Introduceți în bara de adrese a browserului URL-ul public partajat sau linkul vizualizării ori Paginii pe care doriți să o vedeți.", + "sign_in": "Autentificare", + "auth": { + "sign_in_header": "Autentificați-vă pentru a vota sau comenta", + "sign_in_subheader": "Ajutați la promovarea funcționalităților pe care doriți să le vedeți construite.", + "sign_up_header": "Vizualizați, comentați și faceți mai mult", + "sign_up_subheader": "Înregistrați-vă sau autentificați-vă pentru a lucra cu elemente de lucru și Pagini Plane." + } } } diff --git a/packages/i18n/src/locales/ro/common.json b/packages/i18n/src/locales/ro/common.json index e2b44ce87ec..6560a501e0d 100644 --- a/packages/i18n/src/locales/ro/common.json +++ b/packages/i18n/src/locales/ro/common.json @@ -867,5 +867,20 @@ "description": "Exportă activitățile într-un fișier JSON.", "short_description": "Exportă ca JSON" } + }, + "space_public": { + "error_description_prefix": "Plane s-a blocat. Inginerii noștri au fost anunțați. Dacă aveți mai multe detalii, scrieți la", + "error_description_middle": "sau pe", + "not_found_hint": "Verificați URL-ul din bara de adrese a browserului și încercați din nou.", + "instance_failure_image_alt": "Nu se pot obține detaliile instanței", + "instance_failure_title": "Nu se pot obține detaliile instanței.", + "instance_failure_description": "Nu am putut încărca detaliile instanței dvs.", + "instance_failure_hint": "Verificați conexiunea și încercați din nou.", + "powered_by": "Propulsat de", + "error_title": "Ups! Nu arată bine.", + "refresh": "Reîmprospătează", + "forum": "Forum", + "not_found_title": "Nu a funcționat", + "retry": "Reîncearcă" } } diff --git a/packages/i18n/src/locales/ro/editor.json b/packages/i18n/src/locales/ro/editor.json index 09a1f4bd6fb..8f25f4b2531 100644 --- a/packages/i18n/src/locales/ro/editor.json +++ b/packages/i18n/src/locales/ro/editor.json @@ -61,5 +61,79 @@ "use_this": "Folosește aceasta", "refine": "Rafinează" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Introduceți sau inserați adresa URL", + "text": "Text", + "enter_text_to_display": "Introduceți textul de afișat", + "remove_link": "Eliminați linkul", + "edit_link": "Editați linkul", + "color": "Culoare", + "text_colors": "Culorile textului", + "background_colors": "Culori de fundal", + "link": "Link", + "enter_or_paste_link": "Introduceți sau inserați linkul", + "please_enter_valid_url": "Vă rugăm să introduceți un URL valid", + "delete": "Şterge", + "duplicate": "Duplicat", + "multiple": "Multiplu", + "loading": "Încărcare", + "no_results": "Niciun rezultat", + "copy_code": "Copiați codul", + "add_an_image": "Adăugați o imagine", + "error_loading_image": "Eroare la încărcarea imaginii", + "uploading": "Încărcare", + "drop_image_here": "Pune imaginea aici", + "retry_duplication": "Reîncercați duplicarea", + "retry": "Reîncercați", + "no_emojis_found": "Nu s-au găsit emoji", + "fullscreen_image_viewer": "Vizualizator de imagini pe ecran complet", + "close_image_viewer": "Închideți vizualizatorul de imagini", + "zoom_out": "Micșorați", + "zoom_in": "Măriți", + "download_image": "Descărcați imaginea", + "open_image_in_new_tab": "Deschide imaginea într-o filă nouă", + "view_in_full_screen": "Vizualizați pe ecran complet", + "view_image_in_full_screen": "Vizualizați imaginea pe tot ecranul", + "align": "Alinia", + "download": "Descărcați", + "clear_contents": "Șterge conținutul", + "insert_above": "Introduceți mai sus", + "insert_below": "Inserați mai jos", + "insert_left": "Inserați stânga", + "insert_right": "Inserați dreapta", + "header_row": "Rând antet", + "header_column": "Coloana antet", + "alignment": { + "left": "Stânga", + "center": "Centru", + "right": "Dreapta" + }, + "menu_items": { + "text": "Text", + "h1": "Titlul 1", + "h2": "Titlul 2", + "h3": "Titlul 3", + "h4": "Titlul 4", + "h5": "Titlul 5", + "h6": "Titlul 6", + "bulleted-list": "Lista cu marcatori", + "numbered-list": "Lista numerotata", + "to-do-list": "Lista de lucruri de făcut", + "quote": "Citat", + "code": "Cod", + "table": "Tabel", + "image": "Imagine", + "divider": "Divizor", + "link": "Link", + "bold": "Aldin", + "italic": "Cursiv", + "underline": "Subliniat", + "strikethrough": "Striat", + "text-color": "Culoarea textului", + "background-color": "Culoare de fundal", + "text-align": "Alinierea textului" + } } } diff --git a/packages/i18n/src/locales/ro/empty-state.json b/packages/i18n/src/locales/ro/empty-state.json index a613a68286b..fd07ee69fdf 100644 --- a/packages/i18n/src/locales/ro/empty-state.json +++ b/packages/i18n/src/locales/ro/empty-state.json @@ -266,5 +266,11 @@ "description": "Selectează stările prin care progresează elementul de lucru." } } + }, + "app_not_found": { + "alt": "404 - Pagina nu a fost găsită", + "title": "Ups! Ceva nu a mers bine.", + "description": "Ne pare rău, pagina pe care o cauți nu a fost găsită. Este posibil să fi fost eliminată, redenumită sau să fie temporar indisponibilă.", + "go_to_home": "Mergi la pagina principală" } } diff --git a/packages/i18n/src/locales/ro/inbox.json b/packages/i18n/src/locales/ro/inbox.json index 4d24a4b5243..d3fea3dc70e 100644 --- a/packages/i18n/src/locales/ro/inbox.json +++ b/packages/i18n/src/locales/ro/inbox.json @@ -83,5 +83,56 @@ "title": "Selectează o cerere pentru a-i vedea detaliile." } } + }, + "inbox": { + "duplicate_issues_found": "{count} elemente de lucru duplicate găsite", + "description_versions": { + "intake_form_user": "Utilizator formular de colectare" + }, + "errors": { + "asset_upload_failed": "Încărcarea materialelor nu a reușit. Vă rugăm să încercați din nou mai târziu.", + "asset_duplication_failed": "Dublarea materialelor nu a reușit. Vă rugăm să încercați din nou mai târziu.", + "permission_denied": "Acces refuzat", + "mark_duplicate_permission": "Numai administratorii de proiect pot marca elementul de lucru ca duplicat", + "mark_duplicate_permission_plural": "Numai administratorii de proiect pot marca elementele de lucru ca duplicate" + }, + "filters": { + "created_date": "Data creată", + "updated_date": "Data actualizată", + "last_updated_date": "Data ultimei actualizări", + "status": "Stare", + "work_item_status": "Starea elementului de lucru", + "view_all": "Vezi toate", + "view_less": "Vedeți mai puțin", + "date_options": { + "today": "Astăzi", + "yesterday": "Ieri", + "last_7_days": "Ultimele 7 zile", + "last_30_days": "Ultimele 30 de zile" + }, + "date_operators": { + "after": "După", + "before": "Înainte" + } + }, + "navigation": { + "previous_work_item": "Element de lucru anterior", + "next_work_item": "Următorul articol de lucru" + }, + "properties": { + "duplicate_of": "Duplicat de" + }, + "select_duplicate": { + "select_work_item": "Selectați elementul de lucru" + }, + "sidebar": { + "label_count": "{count} etichete" + }, + "toasts": { + "editor_processing": "Editorul încă procesează modificări. Vă rugăm să așteptați înainte de a continua.", + "create_success": "Element de lucru creat cu succes.", + "delete_failed": "Ștergerea elementului de lucru nu a reușit", + "update_failed": "Actualizarea articolului de lucru nu a reușit" + } } } diff --git a/packages/i18n/src/locales/ro/page.json b/packages/i18n/src/locales/ro/page.json index d8f1602a27f..78303322398 100644 --- a/packages/i18n/src/locales/ro/page.json +++ b/packages/i18n/src/locales/ro/page.json @@ -111,5 +111,18 @@ "success_message": "Pagina a fost eliminată din colecție.", "error_message": "Pagina nu a putut fi eliminată din colecție. Te rugăm să încerci din nou." } + }, + "page_access": { + "not_found_title": "Pagina nu a fost găsită", + "not_found_description": "Pagina pe care încerci să o accesezi nu există sau nu ai permisiunea să o vizualizezi.", + "view_other_pages": "Vezi alte pagini" + }, + "profile_activity": { + "page_title": "Profil - Activitate" + }, + "space_public": { + "page_not_found_alt": "Pagina nu a fost găsită", + "page_not_found_description": "Pagina pe care o căutați nu există sau a fost mutată.", + "something_went_wrong": "Ups! Ceva nu a mers bine." } } diff --git a/packages/i18n/src/locales/ro/project.json b/packages/i18n/src/locales/ro/project.json index b50982c6adf..19b2309011d 100644 --- a/packages/i18n/src/locales/ro/project.json +++ b/packages/i18n/src/locales/ro/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Încă nu există proiecte", + "description": "Proiectele sunt baza muncii orientate spre obiective. Te ajută să gestionezi echipe, sarcini și tot ce ai nevoie pentru a duce lucrurile la bun sfârșit.", + "learn_more": "Află mai multe despre proiecte", + "start_first_project": "Începe primul proiect" } } diff --git a/packages/i18n/src/locales/ro/work-item.json b/packages/i18n/src/locales/ro/work-item.json index a989e537093..c80a2d0a2ea 100644 --- a/packages/i18n/src/locales/ro/work-item.json +++ b/packages/i18n/src/locales/ro/work-item.json @@ -422,5 +422,35 @@ "label": "Titlu sarcină majoră", "required": "Titlul sarcinii majore este obligatoriu." } + }, + "space_public": { + "peek": { + "side": "Previzualizare laterală", + "modal": "Modal", + "full_screen": "Ecran complet" + }, + "public_board_not_found": "Panoul public nu există. Verificați URL-ul.", + "no_work_items_found": "Nu s-au găsit elemente de lucru", + "bot_name": "Bot {name}", + "commented_time": "a comentat {time}", + "and_more": "și încă {count}", + "no_upvotes_yet": "Încă nu există voturi pozitive", + "no_downvotes_yet": "Încă nu există voturi negative", + "view_less": "Vezi mai puțin", + "view_all": "Vezi tot", + "no_matches_found": "Nu s-au găsit potriviri", + "no_date": "Fără dată", + "no_cycle": "Fără ciclu", + "no_modules": "Fără module", + "modules_count": "{count} module", + "no_assignees": "Fără responsabili", + "labels_count": "{count} etichete", + "no_labels": "Fără etichete", + "sign_in_to_add_comment": "Autentificați-vă pentru a adăuga un comentariu", + "add_comment": "Adăugați comentariu", + "link_copied": "Link copiat!", + "work_item_link_copied": "Linkul elementului de lucru a fost copiat în clipboard.", + "comment_post_error": "Comentariul nu a putut fi publicat. Încercați din nou.", + "user": "Utilizator" } } diff --git a/packages/i18n/src/locales/ro/workspace.json b/packages/i18n/src/locales/ro/workspace.json index abdc8cbba93..ee704550e43 100644 --- a/packages/i18n/src/locales/ro/workspace.json +++ b/packages/i18n/src/locales/ro/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Sunteți sigur că doriți să ștergeți această vizualizare?", "content": "Dacă confirmați, toate opțiunile de sortare, filtrare și afișare + aspectul pe care l-ați ales pentru această vizualizare vor fi șterse permanent fără nicio modalitate de a le restaura." - } + }, + "page_title": "{workspaceName} - Toate vizualizările" }, "workspace_draft_issues": { "draft_an_issue": "Salvează o activitate ca schiță", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Spațiul de lucru nu a fost găsit", + "not_found_description": "Nu a fost găsit niciun spațiu de lucru pentru acest URL. Este posibil să nu existe sau să nu ai permisiunea să îl vizualizezi.", + "visit_profile": "Vizitează profilul", + "not_authorized_title": "Neautorizat!", + "not_authorized_description": "Nu ești membru al acestui spațiu de lucru. Contactează administratorul spațiului de lucru pentru o invitație sau verifică invitațiile în așteptare.", + "check_pending_invites": "Verifică invitațiile în așteptare" + }, + "workspace_invitation": { + "invitation_not_found": "Invitația nu a fost găsită", + "invited_to_workspace": "Ai fost invitat la {workspaceName}", + "description": "Spațiul tău de lucru este locul în care vei crea proiecte, vei colabora la elementele tale de lucru și vei organiza diferite fluxuri de lucru în contul tău Plane.", + "accept": "Accepta", + "ignore": "Ignora", + "already_member": "Sunteți deja membru {workspaceName}", + "continue_to_home": "Continuați la pagina principală", + "inactive_title": "Acest link de invitație nu mai este activ.", + "empty_project_link": "Sau începeți de la un proiect gol", + "sign_in_to_continue": "Conectați-vă pentru a continua", + "star_on_github": "Afișează-ne pe GitHub", + "join_community": "Alăturați-vă comunității noastre de creatori activi" + }, + "onboarding": { + "create_profile_title": "Creează-ți profilul.", + "create_profile_description": "Așa vei apărea în Plane.", + "change_image": "Schimbați imaginea", + "upload_image": "Încărcați imaginea", + "name": "Nume", + "name_required": "Numele este obligatoriu", + "name_within_50": "Numele trebuie să aibă maximum 50 de caractere.", + "enter_full_name": "Introduceți numele dvs. complet", + "set_password": "Setați o parolă", + "optional": "Opțional", + "passwords_do_not_match": "Parolele nu se potrivesc", + "passwords_match": "Parolele se potrivesc", + "continue": "Continua", + "invite_team_title": "Invită-ți colegii de echipă", + "invite_team_description": "Lucrul în Plane se întâmplă cel mai bine cu echipa ta. Invitați-i acum să folosească Plane la potențialul său.", + "invalid_email": "Nu arată ca o adresă de e-mail.", + "success": "Succes!", + "invitations_sent": "Invitațiile trimise cu succes.", + "error": "Eroare!", + "add_another": "Adăugați altul", + "do_later": "O voi face mai târziu", + "join_invites_title": "Alăturați-vă invitațiilor sau creați un spațiu de lucru", + "unified_description": "Toată munca ta — unificată.", + "create_new_workspace": "Creați un spațiu de lucru nou", + "no_invitations_found": "Nu au fost găsite invitații", + "you_are_invited": "Esti invitat!", + "accept_invites": "Acceptă invitațiile de a colabora cu echipa ta.", + "continue_to_workspace": "Continuați spre spațiul de lucru", + "or": "sau", + "create_own_workspace": "Creează-ți propriul spațiu de lucru", + "workspace_creation_disabled": "Se pare că nu aveți nicio invitație la un spațiu de lucru și administratorul instanței dvs. a restricționat crearea de noi spații de lucru. Vă rugăm să cereți unui proprietar sau unui administrator de spațiu de lucru să vă invite mai întâi într-un spațiu de lucru și să reveniți la acest ecran pentru a vă alătura.", + "create_workspace_title": "Creează-ți spațiul de lucru", + "enter_workspace_name": "Introduceți numele spațiului de lucru", + "join_existing_workspace": "Alăturați-vă spațiului de lucru existent", + "profile_setup_completed": "Configurarea profilului a fost finalizată.", + "profile_setup_failed": "Configurarea profilului a eșuat.", + "usecase_title": "Cum plănuiți să utilizați Plane?", + "usecase_description": "Selectați una sau mai multe opțiuni pentru a vă putea personaliza experiența.", + "select_one_or_more": "Selectați unul sau mai multe", + "select_at_least_one": "Selectați cel puțin o opțiune.", + "skip": "Sari peste" } } diff --git a/packages/i18n/src/locales/ru/auth.json b/packages/i18n/src/locales/ru/auth.json index 3757c971fa8..44b3b45231e 100644 --- a/packages/i18n/src/locales/ru/auth.json +++ b/packages/i18n/src/locales/ru/auth.json @@ -364,5 +364,45 @@ "sub_header": "Введите ваши учетные данные {ldapProviderName}" } } + }, + "space_auth": { + "email": "Электронная почта", + "email_invalid": "Электронная почта недействительна", + "clear_email": "Очистить электронную почту", + "password": "Пароль", + "set_password": "Установить пароль", + "enter_password": "Введите пароль", + "confirm_password": "Подтвердите пароль", + "passwords_dont_match": "Пароли не совпадают", + "continue": "Продолжить", + "go_to_workspace": "Перейти в рабочую область", + "sign_in_with_unique_code": "Войдите с помощью уникального кода", + "create_account": "Зарегистрироваться", + "unique_code": "Уникальный код", + "paste_code_sent": "Вставьте код, отправленный на вашу электронную почту", + "resend_in": "Отправить повторно через {seconds}s", + "requesting_new_code": "Запрос нового кода", + "resend": "Отправить повторно", + "sending_code": "Отправка кода" + }, + "space_public": { + "by_creating_account": "Создавая учетную запись", + "by_signing_in": "Входя в систему", + "you_agree_to_our": "вы соглашаетесь с нашими", + "terms_of_service": "Условиями обслуживания", + "and": "и", + "privacy_policy": "Политикой конфиденциальности", + "sign_up": "Зарегистрироваться", + "oauth_with_provider": "{action} через {provider}", + "user_already_logged_in": "Пользователь уже вошел", + "logged_in_title": "Отлично! Остался еще один шаг.", + "logged_in_hint": "Введите в адресной строке браузера публичный URL или ссылку на представление либо страницу, которую хотите открыть.", + "sign_in": "Войти", + "auth": { + "sign_in_header": "Войдите, чтобы голосовать или комментировать", + "sign_in_subheader": "Помогите продвинуть функции, которые вы хотите увидеть реализованными.", + "sign_up_header": "Просматривайте, комментируйте и делайте больше", + "sign_up_subheader": "Зарегистрируйтесь или войдите, чтобы работать с рабочими элементами и страницами Plane." + } } } diff --git a/packages/i18n/src/locales/ru/common.json b/packages/i18n/src/locales/ru/common.json index c2881e55f8a..e6059fdc006 100644 --- a/packages/i18n/src/locales/ru/common.json +++ b/packages/i18n/src/locales/ru/common.json @@ -867,5 +867,20 @@ "description": "Экспорт рабочих элементов в JSON-файл.", "short_description": "Экспорт в json" } + }, + "space_public": { + "error_description_prefix": "Plane аварийно завершил работу. Наши инженеры уже уведомлены. Если у вас есть дополнительные сведения, напишите на", + "error_description_middle": "или в нашем", + "not_found_hint": "Проверьте URL в адресной строке браузера и попробуйте еще раз.", + "instance_failure_image_alt": "Не удалось получить сведения об инстансе", + "instance_failure_title": "Не удалось получить сведения об инстансе.", + "instance_failure_description": "Не удалось загрузить сведения о вашем инстансе.", + "instance_failure_hint": "Проверьте подключение и попробуйте еще раз.", + "powered_by": "Работает на", + "error_title": "Упс! Что-то пошло не так.", + "refresh": "Обновить", + "forum": "Форум", + "not_found_title": "Не получилось", + "retry": "Повторить" } } diff --git a/packages/i18n/src/locales/ru/editor.json b/packages/i18n/src/locales/ru/editor.json index 0e0cabdd671..d25aa199b73 100644 --- a/packages/i18n/src/locales/ru/editor.json +++ b/packages/i18n/src/locales/ru/editor.json @@ -61,5 +61,79 @@ "use_this": "Использовать это", "refine": "Уточнить" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Введите или вставьте URL-адрес", + "text": "Текст", + "enter_text_to_display": "Введите текст для отображения", + "remove_link": "Удалить ссылку", + "edit_link": "Изменить ссылку", + "color": "Цвет", + "text_colors": "Цвета текста", + "background_colors": "Цвета фона", + "link": "Ссылка", + "enter_or_paste_link": "Введите или вставьте ссылку", + "please_enter_valid_url": "Пожалуйста, введите действительный URL", + "delete": "Удалить", + "duplicate": "Дублировать", + "multiple": "Несколько", + "loading": "Загрузка", + "no_results": "Нет результатов", + "copy_code": "Скопировать код", + "add_an_image": "Добавить изображение", + "error_loading_image": "Ошибка загрузки изображения.", + "uploading": "Загрузка", + "drop_image_here": "Перетащите изображение сюда", + "retry_duplication": "Повторить попытку дублирования", + "retry": "Повторить попытку", + "no_emojis_found": "Смайлики не найдены", + "fullscreen_image_viewer": "Полноэкранный просмотр изображений", + "close_image_viewer": "Закрыть просмотрщик изображений", + "zoom_out": "Уменьшить масштаб", + "zoom_in": "Увеличить масштаб", + "download_image": "Скачать изображение", + "open_image_in_new_tab": "Открыть изображение в новой вкладке", + "view_in_full_screen": "Посмотреть в полноэкранном режиме", + "view_image_in_full_screen": "Посмотреть изображение в полноэкранном режиме", + "align": "Выровнять", + "download": "Скачать", + "clear_contents": "Очистить содержимое", + "insert_above": "Вставьте выше", + "insert_below": "Вставьте ниже", + "insert_left": "Вставить слева", + "insert_right": "Вставить вправо", + "header_row": "Строка заголовка", + "header_column": "Столбец заголовка", + "alignment": { + "left": "Слева", + "center": "Центр", + "right": "Справа" + }, + "menu_items": { + "text": "Текст", + "h1": "Заголовок 1", + "h2": "Заголовок 2", + "h3": "Заголовок 3", + "h4": "Заголовок 4", + "h5": "Заголовок 5", + "h6": "Заголовок 6", + "bulleted-list": "Маркированный список", + "numbered-list": "Нумерованный список", + "to-do-list": "Список дел", + "quote": "Цитировать", + "code": "Код", + "table": "Таблица", + "image": "Изображение", + "divider": "Разделитель", + "link": "Ссылка", + "bold": "Жирный", + "italic": "Курсив", + "underline": "Подчеркнуть", + "strikethrough": "Зачеркивание", + "text-color": "Цвет текста", + "background-color": "Цвет фона", + "text-align": "Выравнивание текста" + } } } diff --git a/packages/i18n/src/locales/ru/empty-state.json b/packages/i18n/src/locales/ru/empty-state.json index e322a5ec1ef..932c4d14df8 100644 --- a/packages/i18n/src/locales/ru/empty-state.json +++ b/packages/i18n/src/locales/ru/empty-state.json @@ -266,5 +266,11 @@ "description": "Выберите состояния, через которые проходит рабочий элемент." } } + }, + "app_not_found": { + "alt": "404 - Страница не найдена", + "title": "Упс! Что-то пошло не так.", + "description": "Страница, которую вы ищете, не найдена. Возможно, она была удалена, переименована или временно недоступна.", + "go_to_home": "На главную" } } diff --git a/packages/i18n/src/locales/ru/inbox.json b/packages/i18n/src/locales/ru/inbox.json index 434d226dd63..270076aa1c6 100644 --- a/packages/i18n/src/locales/ru/inbox.json +++ b/packages/i18n/src/locales/ru/inbox.json @@ -83,5 +83,56 @@ "title": "Выберите рабочий элемент для просмотра деталей." } } + }, + "inbox": { + "duplicate_issues_found": "Найдено дублирующихся рабочих элементов: {count}", + "description_versions": { + "intake_form_user": "Пользователь формы сбора" + }, + "errors": { + "asset_upload_failed": "Не удалось загрузить актив. Пожалуйста, повторите попытку позже.", + "asset_duplication_failed": "Дублирование активов не удалось. Пожалуйста, повторите попытку позже.", + "permission_denied": "Доступ запрещен", + "mark_duplicate_permission": "Только администраторы проекта могут пометить рабочий элемент как дубликат.", + "mark_duplicate_permission_plural": "Только администраторы проекта могут отмечать рабочие элементы как повторяющиеся." + }, + "filters": { + "created_date": "Дата создания", + "updated_date": "Дата обновления", + "last_updated_date": "Дата последнего обновления", + "status": "Статус", + "work_item_status": "Статус рабочего элемента", + "view_all": "Посмотреть все", + "view_less": "Посмотреть меньше", + "date_options": { + "today": "Сегодня", + "yesterday": "Вчера", + "last_7_days": "Последние 7 дней", + "last_30_days": "Последние 30 дней" + }, + "date_operators": { + "after": "После", + "before": "До" + } + }, + "navigation": { + "previous_work_item": "Предыдущий рабочий элемент", + "next_work_item": "Следующий рабочий элемент" + }, + "properties": { + "duplicate_of": "Дубликат элемента" + }, + "select_duplicate": { + "select_work_item": "Выберите рабочий элемент" + }, + "sidebar": { + "label_count": "Этикетки {count}" + }, + "toasts": { + "editor_processing": "Редактор все еще обрабатывает изменения. Пожалуйста, подождите, прежде чем продолжить.", + "create_success": "Рабочий элемент успешно создан.", + "delete_failed": "Удаление рабочего элемента не удалось", + "update_failed": "Обновление рабочего элемента не удалось" + } } } diff --git a/packages/i18n/src/locales/ru/page.json b/packages/i18n/src/locales/ru/page.json index fa4e0db84a4..eef3a41ac4a 100644 --- a/packages/i18n/src/locales/ru/page.json +++ b/packages/i18n/src/locales/ru/page.json @@ -111,5 +111,18 @@ "success_message": "Страница удалена из коллекции.", "error_message": "Не удалось удалить страницу из коллекции. Повторите попытку." } + }, + "page_access": { + "not_found_title": "Страница не найдена", + "not_found_description": "Страница, к которой вы пытаетесь получить доступ, не существует или у вас нет разрешения на ее просмотр.", + "view_other_pages": "Посмотреть другие страницы" + }, + "profile_activity": { + "page_title": "Профиль - Активность" + }, + "space_public": { + "page_not_found_alt": "Страница не найдена", + "page_not_found_description": "Страница, которую вы ищете, не существует или была перемещена.", + "something_went_wrong": "Упс! Что-то пошло не так." } } diff --git a/packages/i18n/src/locales/ru/project.json b/packages/i18n/src/locales/ru/project.json index 78fab1eccb5..d12224c110b 100644 --- a/packages/i18n/src/locales/ru/project.json +++ b/packages/i18n/src/locales/ru/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Проектов пока нет", + "description": "Проекты служат основой работы, ориентированной на цели. Они помогают управлять командами, задачами и всем, что нужно для выполнения работы.", + "learn_more": "Подробнее о проектах", + "start_first_project": "Начать первый проект" } } diff --git a/packages/i18n/src/locales/ru/work-item.json b/packages/i18n/src/locales/ru/work-item.json index df676a95bd1..21da1795bd6 100644 --- a/packages/i18n/src/locales/ru/work-item.json +++ b/packages/i18n/src/locales/ru/work-item.json @@ -422,5 +422,35 @@ "label": "Название эпика", "required": "Название эпика обязательно" } + }, + "space_public": { + "peek": { + "side": "Боковой просмотр", + "modal": "Модальное окно", + "full_screen": "Полный экран" + }, + "public_board_not_found": "Публичная доска не существует. Проверьте URL.", + "no_work_items_found": "Рабочие элементы не найдены", + "bot_name": "Бот {name}", + "commented_time": "прокомментировал {time}", + "and_more": "и еще {count}", + "no_upvotes_yet": "Пока нет голосов за", + "no_downvotes_yet": "Пока нет голосов против", + "view_less": "Показать меньше", + "view_all": "Показать все", + "no_matches_found": "Совпадений не найдено", + "no_date": "Без даты", + "no_cycle": "Без цикла", + "no_modules": "Без модулей", + "modules_count": "{count} модулей", + "no_assignees": "Без исполнителей", + "labels_count": "{count} меток", + "no_labels": "Без меток", + "sign_in_to_add_comment": "Войдите, чтобы добавить комментарий", + "add_comment": "Добавить комментарий", + "link_copied": "Ссылка скопирована!", + "work_item_link_copied": "Ссылка на рабочий элемент скопирована в буфер обмена.", + "comment_post_error": "Не удалось опубликовать комментарий. Попробуйте еще раз.", + "user": "Пользователь" } } diff --git a/packages/i18n/src/locales/ru/workspace.json b/packages/i18n/src/locales/ru/workspace.json index 1bcd7202166..17609bece44 100644 --- a/packages/i18n/src/locales/ru/workspace.json +++ b/packages/i18n/src/locales/ru/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Вы уверены, что хотите удалить это представление?", "content": "При подтверждении все параметры сортировки, фильтрации и отображения + макет, выбранный для этого представления, будут безвозвратно удалены без возможности восстановления." - } + }, + "page_title": "{workspaceName} - Все представления" }, "workspace_draft_issues": { "draft_an_issue": "Создать черновик рабочего элемента", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Рабочая область не найдена", + "not_found_description": "Для этого URL рабочая область не найдена. Возможно, она не существует или у вас нет разрешения на ее просмотр.", + "visit_profile": "Открыть профиль", + "not_authorized_title": "Нет доступа!", + "not_authorized_description": "Вы не являетесь участником этой рабочей области. Обратитесь к администратору рабочей области за приглашением или проверьте ожидающие приглашения.", + "check_pending_invites": "Проверить ожидающие приглашения" + }, + "workspace_invitation": { + "invitation_not_found": "Приглашение не найдено", + "invited_to_workspace": "Вас пригласили в {workspaceName}.", + "description": "Ваше рабочее пространство — это место, где вы будете создавать проекты, совместно работать над рабочими элементами и организовывать различные потоки работы в своей учетной записи Plane.", + "accept": "Принять", + "ignore": "Игнорировать", + "already_member": "Вы уже являетесь участником {workspaceName}.", + "continue_to_home": "Перейти на главную", + "inactive_title": "Эта ссылка-приглашение больше не активна.", + "empty_project_link": "Или начать с пустого проекта", + "sign_in_to_continue": "Войдите, чтобы продолжить", + "star_on_github": "Поставьте нам звезду на GitHub", + "join_community": "Присоединяйтесь к нашему сообществу активных авторов" + }, + "onboarding": { + "create_profile_title": "Создайте свой профиль.", + "create_profile_description": "Вот как вы будете выглядеть в Plane.", + "change_image": "Изменить изображение", + "upload_image": "Загрузить изображение", + "name": "Имя", + "name_required": "Требуется имя", + "name_within_50": "Имя должно быть не более 50 символов.", + "enter_full_name": "Введите свое полное имя", + "set_password": "Установить пароль", + "optional": "Необязательный", + "passwords_do_not_match": "Пароли не совпадают", + "passwords_match": "Пароли совпадают", + "continue": "Продолжить", + "invite_team_title": "Пригласите своих товарищей по команде", + "invite_team_description": "Работать в Plane лучше всего вместе с вашей командой. Предложите им сейчас использовать Plane в полной мере.", + "invalid_email": "Это не похоже на адрес электронной почты.", + "success": "Успех!", + "invitations_sent": "Приглашения успешно отправлены.", + "error": "Ошибка!", + "add_another": "Добавить еще", + "do_later": "я сделаю это позже", + "join_invites_title": "Присоединяйтесь к приглашениям или создайте рабочее пространство", + "unified_description": "Вся ваша работа — едина.", + "create_new_workspace": "Создать новое рабочее пространство", + "no_invitations_found": "Приглашения не найдены", + "you_are_invited": "Вы приглашены!", + "accept_invites": "Примите приглашения к сотрудничеству с вашей командой.", + "continue_to_workspace": "Перейти в рабочую область", + "or": "или", + "create_own_workspace": "Создайте свое собственное рабочее пространство", + "workspace_creation_disabled": "Похоже, у вас нет приглашений в рабочую область, а администратор вашего экземпляра ограничил создание новых рабочих областей. Попросите владельца или администратора рабочей области сначала пригласить вас в рабочую область, а затем вернитесь на этот экран, чтобы присоединиться.", + "create_workspace_title": "Создайте свое рабочее пространство", + "enter_workspace_name": "Введите имя рабочей области", + "join_existing_workspace": "Присоединиться к существующей рабочей области", + "profile_setup_completed": "Настройка профиля завершена.", + "profile_setup_failed": "Настройка профиля не удалась.", + "usecase_title": "Как вы планируете использовать Plane?", + "usecase_description": "Выберите один или несколько вариантов, чтобы мы могли персонализировать ваш опыт.", + "select_one_or_more": "Выберите один или несколько", + "select_at_least_one": "Выберите хотя бы один вариант.", + "skip": "Пропускать" } } diff --git a/packages/i18n/src/locales/sk/auth.json b/packages/i18n/src/locales/sk/auth.json index 703e269e2ce..c7fdfd57311 100644 --- a/packages/i18n/src/locales/sk/auth.json +++ b/packages/i18n/src/locales/sk/auth.json @@ -364,5 +364,45 @@ "sub_header": "Zadajte svoje prihlasovacie údaje {ldapProviderName}" } } + }, + "space_auth": { + "email": "Email", + "email_invalid": "E-mail je neplatný", + "clear_email": "Vymazať e-mail", + "password": "heslo", + "set_password": "Nastavte heslo", + "enter_password": "Zadajte heslo", + "confirm_password": "Potvrďte heslo", + "passwords_dont_match": "Heslá sa nezhodujú", + "continue": "Pokračovať", + "go_to_workspace": "Prejdite do pracovného priestoru", + "sign_in_with_unique_code": "Prihláste sa pomocou jedinečného kódu", + "create_account": "Vytvoriť účet", + "unique_code": "Jedinečný kód", + "paste_code_sent": "Prilepte kód odoslaný na váš e-mail", + "resend_in": "Znova odoslať v {seconds}s", + "requesting_new_code": "Požaduje sa nový kód", + "resend": "Znova odoslať", + "sending_code": "Odosiela sa kód" + }, + "space_public": { + "by_creating_account": "Vytvorením účtu", + "by_signing_in": "Prihlásením", + "you_agree_to_our": "súhlasíte s našimi", + "terms_of_service": "Podmienkami služby", + "and": "a", + "privacy_policy": "Zásadami ochrany osobných údajov", + "sign_up": "Zaregistrovať sa", + "oauth_with_provider": "{action} cez {provider}", + "user_already_logged_in": "Používateľ je už prihlásený", + "logged_in_title": "Výborne! Ešte jeden krok.", + "logged_in_hint": "Do panela s adresou prehliadača zadajte verejnú zdieľanú URL alebo odkaz na zobrazenie či stránku, ktorú chcete vidieť.", + "sign_in": "Prihlásiť sa", + "auth": { + "sign_in_header": "Prihláste sa, aby ste mohli hlasovať alebo komentovať", + "sign_in_subheader": "Pomôžte posunúť funkcie, ktoré chcete mať vytvorené.", + "sign_up_header": "Zobrazujte, komentujte a robte viac", + "sign_up_subheader": "Zaregistrujte sa alebo sa prihláste, aby ste mohli pracovať s pracovnými položkami a Stránkami Plane." + } } } diff --git a/packages/i18n/src/locales/sk/common.json b/packages/i18n/src/locales/sk/common.json index 4fc339cece6..8a6f75c6836 100644 --- a/packages/i18n/src/locales/sk/common.json +++ b/packages/i18n/src/locales/sk/common.json @@ -867,5 +867,20 @@ "description": "Exportujte položky do JSON.", "short_description": "Exportovať ako JSON" } + }, + "space_public": { + "error_description_prefix": "Plane zlyhal. Naši inžinieri boli upozornení. Ak máte ďalšie podrobnosti, napíšte na", + "error_description_middle": "alebo na našom", + "not_found_hint": "Skontrolujte URL v paneli s adresou prehliadača a skúste to znova.", + "instance_failure_image_alt": "Nie je možné načítať podrobnosti inštancie", + "instance_failure_title": "Nie je možné načítať podrobnosti inštancie.", + "instance_failure_description": "Nepodarilo sa načítať podrobnosti vašej inštancie.", + "instance_failure_hint": "Skontrolujte pripojenie a skúste to znova.", + "powered_by": "Používa", + "error_title": "Ups! Toto nevyzerá dobre.", + "refresh": "Obnoviť", + "forum": "Fórum", + "not_found_title": "Toto nefungovalo", + "retry": "Skúsiť znova" } } diff --git a/packages/i18n/src/locales/sk/editor.json b/packages/i18n/src/locales/sk/editor.json index 80593079aaf..326a5895428 100644 --- a/packages/i18n/src/locales/sk/editor.json +++ b/packages/i18n/src/locales/sk/editor.json @@ -61,5 +61,79 @@ "use_this": "Použiť toto", "refine": "Upraviť" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Zadajte alebo prilepte adresu URL", + "text": "Text", + "enter_text_to_display": "Zadajte text, ktorý sa má zobraziť", + "remove_link": "Odstrániť odkaz", + "edit_link": "Upraviť odkaz", + "color": "Farba", + "text_colors": "Farby textu", + "background_colors": "Farby pozadia", + "link": "Odkaz", + "enter_or_paste_link": "Zadajte alebo prilepte odkaz", + "please_enter_valid_url": "Zadajte platný URL", + "delete": "Odstrániť", + "duplicate": "Duplikovať", + "multiple": "Viacnásobné", + "loading": "Načítava sa", + "no_results": "Žiadne výsledky", + "copy_code": "Kopírovať kód", + "add_an_image": "Pridajte obrázok", + "error_loading_image": "Chyba pri načítavaní obrázka", + "uploading": "Nahráva sa", + "drop_image_here": "Sem presuňte obrázok", + "retry_duplication": "Opakovať duplikáciu", + "retry": "Skúste to znova", + "no_emojis_found": "Nenašli sa žiadne emotikony", + "fullscreen_image_viewer": "Prehliadač obrázkov na celú obrazovku", + "close_image_viewer": "Zatvorte prehliadač obrázkov", + "zoom_out": "Oddialiť", + "zoom_in": "Priblížiť", + "download_image": "Stiahnite si obrázok", + "open_image_in_new_tab": "Otvoriť obrázok na novej karte", + "view_in_full_screen": "Zobraziť na celej obrazovke", + "view_image_in_full_screen": "Zobraziť obrázok na celej obrazovke", + "align": "Zarovnať", + "download": "Stiahnuť", + "clear_contents": "Vymazať obsah", + "insert_above": "Vložte vyššie", + "insert_below": "Vložte nižšie", + "insert_left": "Vložte vľavo", + "insert_right": "Vložte vpravo", + "header_row": "Riadok hlavičky", + "header_column": "Hlavička stĺpca", + "alignment": { + "left": "Vľavo", + "center": "Stred", + "right": "Vpravo" + }, + "menu_items": { + "text": "Text", + "h1": "Nadpis 1", + "h2": "Nadpis 2", + "h3": "Nadpis 3", + "h4": "Nadpis 4", + "h5": "Nadpis 5", + "h6": "Nadpis 6", + "bulleted-list": "Zoznam s odrážkami", + "numbered-list": "Číslovaný zoznam", + "to-do-list": "Zoznam úloh", + "quote": "Citovať", + "code": "Kód", + "table": "Tabuľka", + "image": "Obrázok", + "divider": "Rozdeľovač", + "link": "Odkaz", + "bold": "Tučné", + "italic": "Kurzíva", + "underline": "Podčiarknuté", + "strikethrough": "Prečiarknuté", + "text-color": "Farba textu", + "background-color": "Farba pozadia", + "text-align": "Zarovnanie textu" + } } } diff --git a/packages/i18n/src/locales/sk/empty-state.json b/packages/i18n/src/locales/sk/empty-state.json index 15bc7d2127e..1ce9638a07b 100644 --- a/packages/i18n/src/locales/sk/empty-state.json +++ b/packages/i18n/src/locales/sk/empty-state.json @@ -266,5 +266,11 @@ "description": "Vyberte stavy, cez ktoré pracovná položka prechádza." } } + }, + "app_not_found": { + "alt": "404 - Stránka sa nenašla", + "title": "Ups! Niečo sa pokazilo.", + "description": "Stránku, ktorú hľadáte, sa nepodarilo nájsť. Mohla byť odstránená, premenovaná alebo je dočasne nedostupná.", + "go_to_home": "Prejsť domov" } } diff --git a/packages/i18n/src/locales/sk/inbox.json b/packages/i18n/src/locales/sk/inbox.json index 4be3787e3f1..95be2c8458a 100644 --- a/packages/i18n/src/locales/sk/inbox.json +++ b/packages/i18n/src/locales/sk/inbox.json @@ -83,5 +83,56 @@ "title": "Vyberte pracovnú položku pre zobrazenie detailov." } } + }, + "inbox": { + "duplicate_issues_found": "Našlo sa {count} duplicitných pracovných položiek", + "description_versions": { + "intake_form_user": "Používateľ zberného formulára" + }, + "errors": { + "asset_upload_failed": "Nahranie diela zlyhalo. Skúste to znova neskôr.", + "asset_duplication_failed": "Duplikácia aktív zlyhala. Skúste to znova neskôr.", + "permission_denied": "Povolenie zamietnuté", + "mark_duplicate_permission": "Iba správcovia projektu môžu označiť pracovnú položku ako duplikát", + "mark_duplicate_permission_plural": "Iba správcovia projektu môžu označiť pracovné položky ako duplicitné" + }, + "filters": { + "created_date": "Dátum vytvorenia", + "updated_date": "Aktualizovaný dátum", + "last_updated_date": "Dátum poslednej aktualizácie", + "status": "Stav", + "work_item_status": "Stav pracovnej položky", + "view_all": "Zobraziť všetky", + "view_less": "Zobraziť menej", + "date_options": { + "today": "Dnes", + "yesterday": "včera", + "last_7_days": "Posledných 7 dní", + "last_30_days": "Posledných 30 dní" + }, + "date_operators": { + "after": "Po", + "before": "Predtým" + } + }, + "navigation": { + "previous_work_item": "Predchádzajúca pracovná položka", + "next_work_item": "Ďalšia pracovná položka" + }, + "properties": { + "duplicate_of": "Duplikát položky" + }, + "select_duplicate": { + "select_work_item": "Vyberte pracovnú položku" + }, + "sidebar": { + "label_count": "{count} štítky" + }, + "toasts": { + "editor_processing": "Editor stále spracováva zmeny. Pred pokračovaním počkajte.", + "create_success": "Pracovná položka bola úspešne vytvorená.", + "delete_failed": "Odstránenie pracovnej položky zlyhalo", + "update_failed": "Aktualizácia pracovnej položky zlyhala" + } } } diff --git a/packages/i18n/src/locales/sk/page.json b/packages/i18n/src/locales/sk/page.json index 7b5f029cf9b..b17426e6a97 100644 --- a/packages/i18n/src/locales/sk/page.json +++ b/packages/i18n/src/locales/sk/page.json @@ -111,5 +111,18 @@ "success_message": "Stránka bola odstránená z kolekcie.", "error_message": "Stránku sa nepodarilo odstrániť z kolekcie. Skúste to prosím znova." } + }, + "page_access": { + "not_found_title": "Stránka sa nenašla", + "not_found_description": "Stránka, ku ktorej sa pokúšate pristúpiť, neexistuje alebo na jej zobrazenie nemáte oprávnenie.", + "view_other_pages": "Zobraziť ďalšie stránky" + }, + "profile_activity": { + "page_title": "Profil - Aktivita" + }, + "space_public": { + "page_not_found_alt": "Stránka sa nenašla", + "page_not_found_description": "Stránka, ktorú hľadáte, neexistuje alebo bola presunutá.", + "something_went_wrong": "Ups! Niečo sa pokazilo." } } diff --git a/packages/i18n/src/locales/sk/project.json b/packages/i18n/src/locales/sk/project.json index 7a4e6ee571d..25005ff7f1a 100644 --- a/packages/i18n/src/locales/sk/project.json +++ b/packages/i18n/src/locales/sk/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Zatiaľ žiadne projekty", + "description": "Projekty sú základom práce riadenej cieľmi. Pomáhajú spravovať tímy, úlohy a všetko potrebné na dokončenie práce.", + "learn_more": "Zistiť viac o projektoch", + "start_first_project": "Začať prvý projekt" } } diff --git a/packages/i18n/src/locales/sk/work-item.json b/packages/i18n/src/locales/sk/work-item.json index f015c780f38..aa5220977e0 100644 --- a/packages/i18n/src/locales/sk/work-item.json +++ b/packages/i18n/src/locales/sk/work-item.json @@ -422,5 +422,35 @@ "label": "Názov epiky", "required": "Názov epiky je povinný." } + }, + "space_public": { + "peek": { + "side": "Bočný náhľad", + "modal": "Modálne okno", + "full_screen": "Celá obrazovka" + }, + "public_board_not_found": "Verejná nástenka neexistuje. Skontrolujte URL.", + "no_work_items_found": "Nenašli sa žiadne pracovné položky", + "bot_name": "Bot {name}", + "commented_time": "komentoval {time}", + "and_more": "a ďalších {count}", + "no_upvotes_yet": "Zatiaľ žiadne hlasy za", + "no_downvotes_yet": "Zatiaľ žiadne hlasy proti", + "view_less": "Zobraziť menej", + "view_all": "Zobraziť všetko", + "no_matches_found": "Nenašli sa žiadne zhody", + "no_date": "Bez dátumu", + "no_cycle": "Bez cyklu", + "no_modules": "Bez modulov", + "modules_count": "{count} modulov", + "no_assignees": "Bez priradených osôb", + "labels_count": "{count} štítkov", + "no_labels": "Žiadne štítky", + "sign_in_to_add_comment": "Prihláste sa a pridajte komentár", + "add_comment": "Pridať komentár", + "link_copied": "Odkaz skopírovaný!", + "work_item_link_copied": "Odkaz na pracovnú položku bol skopírovaný do schránky.", + "comment_post_error": "Komentár sa nepodarilo uverejniť. Skúste to znova.", + "user": "Používateľ" } } diff --git a/packages/i18n/src/locales/sk/workspace.json b/packages/i18n/src/locales/sk/workspace.json index 55a77e6ac89..10258fd976c 100644 --- a/packages/i18n/src/locales/sk/workspace.json +++ b/packages/i18n/src/locales/sk/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Ste si istí, že chcete vymazať toto zobrazenie?", "content": "Ak potvrdíte, všetky možnosti triedenia, filtrovania a zobrazenia + rozloženie, ktoré ste vybrali pre toto zobrazenie, budú natrvalo vymazané bez možnosti obnovenia." - } + }, + "page_title": "{workspaceName} - Všetky zobrazenia" }, "workspace_draft_issues": { "draft_an_issue": "Vytvoriť koncept položky", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Pracovný priestor sa nenašiel", + "not_found_description": "Pre túto URL adresu sa nenašiel žiadny pracovný priestor. Možno neexistuje alebo na jeho zobrazenie nemáte oprávnenie.", + "visit_profile": "Navštíviť profil", + "not_authorized_title": "Bez oprávnenia!", + "not_authorized_description": "Nie ste členom tohto pracovného priestoru. Požiadajte správcu pracovného priestoru o pozvánku alebo skontrolujte čakajúce pozvánky.", + "check_pending_invites": "Skontrolovať čakajúce pozvánky" + }, + "workspace_invitation": { + "invitation_not_found": "Pozvánka sa nenašla", + "invited_to_workspace": "Boli ste pozvaní do {workspaceName}", + "description": "Váš pracovný priestor je miesto, kde budete vytvárať projekty, spolupracovať na svojich pracovných položkách a organizovať rôzne toky práce vo svojom účte Plane.", + "accept": "Prijať", + "ignore": "Ignorovať", + "already_member": "Už ste členom {workspaceName}", + "continue_to_home": "Pokračovať na domovskú stránku", + "inactive_title": "Tento odkaz na pozvánku už nie je aktívny.", + "empty_project_link": "Alebo začnite od prázdneho projektu", + "sign_in_to_continue": "Ak chcete pokračovať, prihláste sa", + "star_on_github": "Zahviezdite nás na GitHub", + "join_community": "Pridajte sa k našej komunite aktívnych tvorcov" + }, + "onboarding": { + "create_profile_title": "Vytvorte si profil.", + "create_profile_description": "Takto sa objavíte v Plane.", + "change_image": "Zmeniť obrázok", + "upload_image": "Nahrajte obrázok", + "name": "Meno", + "name_required": "Meno je povinné", + "name_within_50": "Názov musí mať maximálne 50 znakov.", + "enter_full_name": "Zadajte svoje celé meno", + "set_password": "Nastavte heslo", + "optional": "Voliteľné", + "passwords_do_not_match": "Heslá sa nezhodujú", + "passwords_match": "Heslá sa zhodujú", + "continue": "Pokračovať", + "invite_team_title": "Pozvite svojich spoluhráčov", + "invite_team_description": "Práca v Plane prebieha najlepšie s vaším tímom. Pozvite ich, aby využili potenciál Plane.", + "invalid_email": "To nevyzerá ako e-mailová adresa.", + "success": "Úspech!", + "invitations_sent": "Pozvánky boli úspešne odoslané.", + "error": "Chyba!", + "add_another": "Pridajte ďalší", + "do_later": "Urobím to neskôr", + "join_invites_title": "Pripojte sa k pozvánkam alebo vytvorte pracovný priestor", + "unified_description": "Celá vaša práca – jednotná.", + "create_new_workspace": "Vytvorte nový pracovný priestor", + "no_invitations_found": "Nenašli sa žiadne pozvánky", + "you_are_invited": "Ste pozvaní!", + "accept_invites": "Prijmite pozvánky na spoluprácu so svojím tímom.", + "continue_to_workspace": "Pokračujte do pracovného priestoru", + "or": "alebo", + "create_own_workspace": "Vytvorte si vlastný pracovný priestor", + "workspace_creation_disabled": "Zdá sa, že nemáte žiadne pozvánky do pracovného priestoru a váš správca inštancie obmedzil vytváranie nových pracovných priestorov. Požiadajte vlastníka alebo správcu pracovného priestoru, aby vás najprv pozval do pracovného priestoru a vráťte sa na túto obrazovku a pripojte sa.", + "create_workspace_title": "Vytvorte si pracovný priestor", + "enter_workspace_name": "Zadajte názov pracovného priestoru", + "join_existing_workspace": "Pripojte sa k existujúcemu pracovnému priestoru", + "profile_setup_completed": "Nastavenie profilu je dokončené.", + "profile_setup_failed": "Nastavenie profilu zlyhalo.", + "usecase_title": "Ako plánujete používať Plane?", + "usecase_description": "Vyberte jednu alebo viac možností, aby sme vám mohli prispôsobiť váš zážitok.", + "select_one_or_more": "Vyberte jednu alebo viac", + "select_at_least_one": "Vyberte aspoň jednu možnosť.", + "skip": "Preskočiť" } } diff --git a/packages/i18n/src/locales/tr-TR/auth.json b/packages/i18n/src/locales/tr-TR/auth.json index 041a7292670..8164a6d1bad 100644 --- a/packages/i18n/src/locales/tr-TR/auth.json +++ b/packages/i18n/src/locales/tr-TR/auth.json @@ -364,5 +364,45 @@ "sub_header": "{ldapProviderName} kimlik bilgilerinizi girin" } } + }, + "space_auth": { + "email": "E-posta", + "email_invalid": "E-posta geçersiz", + "clear_email": "E-postayı temizle", + "password": "Şifre", + "set_password": "Bir şifre belirleyin", + "enter_password": "Şifreyi girin", + "confirm_password": "Şifreyi onayla", + "passwords_dont_match": "Şifreler eşleşmiyor", + "continue": "Devam et", + "go_to_workspace": "Çalışma alanına git", + "sign_in_with_unique_code": "Benzersiz kodla oturum açın", + "create_account": "Hesap oluşturmak", + "unique_code": "Benzersiz kod", + "paste_code_sent": "E-postanıza gönderilen kodu yapıştırın", + "resend_in": "{seconds}s içinde tekrar gönder", + "requesting_new_code": "Yeni kod isteniyor", + "resend": "Yeniden gönder", + "sending_code": "Kod gönderiliyor" + }, + "space_public": { + "by_creating_account": "Hesap oluşturarak", + "by_signing_in": "Oturum açarak", + "you_agree_to_our": "şunları kabul etmiş olursunuz", + "terms_of_service": "Hizmet Şartları", + "and": "ve", + "privacy_policy": "Gizlilik Politikası", + "sign_up": "Kaydol", + "oauth_with_provider": "{provider} ile {action}", + "user_already_logged_in": "Kullanıcı zaten oturum açmış", + "logged_in_title": "Güzel! Sadece bir adım kaldı.", + "logged_in_hint": "Görmek istediğiniz görünümün veya Sayfanın herkese açık paylaşım URL'sini ya da bağlantısını tarayıcı adres çubuğuna girin.", + "sign_in": "Oturum aç", + "auth": { + "sign_in_header": "Oy vermek veya yorum yapmak için oturum açın", + "sign_in_subheader": "Yapılmasını istediğiniz özelliklerin ilerlemesine katkıda bulunun.", + "sign_up_header": "Görüntüleyin, yorum yapın ve daha fazlasını yapın", + "sign_up_subheader": "Plane iş öğeleri ve Sayfaları ile çalışmak için kaydolun veya oturum açın." + } } } diff --git a/packages/i18n/src/locales/tr-TR/common.json b/packages/i18n/src/locales/tr-TR/common.json index 74bd5cbf9b3..fbc4a842106 100644 --- a/packages/i18n/src/locales/tr-TR/common.json +++ b/packages/i18n/src/locales/tr-TR/common.json @@ -867,5 +867,20 @@ "description": "İş öğelerini JSON dosyasına aktarın.", "short_description": "JSON olarak aktar" } + }, + "space_public": { + "error_description_prefix": "Plane çöktü. Mühendislerimiz bilgilendirildi. Daha fazla ayrıntınız varsa lütfen şuraya yazın", + "error_description_middle": "veya bizim", + "not_found_hint": "Tarayıcı adres çubuğundaki URL'yi kontrol edip tekrar deneyin.", + "instance_failure_image_alt": "Örnek ayrıntıları alınamadı", + "instance_failure_title": "Örnek ayrıntıları alınamadı.", + "instance_failure_description": "Örnek ayrıntılarınız yüklenemedi.", + "instance_failure_hint": "Bağlantınızı kontrol edip tekrar deneyin.", + "powered_by": "Destekleyen", + "error_title": "Eyvah! Bu iyi görünmüyor.", + "refresh": "Yenile", + "forum": "Forum", + "not_found_title": "Bu işe yaramadı", + "retry": "Tekrar dene" } } diff --git a/packages/i18n/src/locales/tr-TR/editor.json b/packages/i18n/src/locales/tr-TR/editor.json index d9715e992a1..a7eea632e2a 100644 --- a/packages/i18n/src/locales/tr-TR/editor.json +++ b/packages/i18n/src/locales/tr-TR/editor.json @@ -61,5 +61,79 @@ "use_this": "Bunu kullan", "refine": "İyileştir" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "URL'yi girin veya yapıştırın", + "text": "Metin", + "enter_text_to_display": "Görüntülenecek metni girin", + "remove_link": "Bağlantıyı kaldır", + "edit_link": "Bağlantıyı düzenle", + "color": "Renk", + "text_colors": "Metin renkleri", + "background_colors": "Arka plan renkleri", + "link": "Bağlantı", + "enter_or_paste_link": "Bağlantıyı girin veya yapıştırın", + "please_enter_valid_url": "Lütfen geçerli bir URL girin", + "delete": "Silmek", + "duplicate": "Çoğalt", + "multiple": "Çoklu", + "loading": "Yükleniyor", + "no_results": "Sonuç yok", + "copy_code": "Kodu kopyala", + "add_an_image": "Resim ekle", + "error_loading_image": "Resim yüklenirken hata oluştu", + "uploading": "Yükleniyor", + "drop_image_here": "Resmi buraya bırakın", + "retry_duplication": "Çoğaltmayı yeniden dene", + "retry": "Yeniden dene", + "no_emojis_found": "Hiçbir emoji bulunamadı", + "fullscreen_image_viewer": "Tam ekran resim görüntüleyici", + "close_image_viewer": "Resim görüntüleyiciyi kapat", + "zoom_out": "Uzaklaştır", + "zoom_in": "Yakınlaştır", + "download_image": "Resmi indir", + "open_image_in_new_tab": "Resmi yeni sekmede aç", + "view_in_full_screen": "Tam ekranda görüntüle", + "view_image_in_full_screen": "Resmi tam ekranda görüntüle", + "align": "Hizala", + "download": "İndir", + "clear_contents": "İçeriği temizle", + "insert_above": "Yukarıya ekle", + "insert_below": "Aşağıya ekle", + "insert_left": "Sola ekle", + "insert_right": "Sağa ekle", + "header_row": "Başlık satırı", + "header_column": "Başlık sütunu", + "alignment": { + "left": "Sol", + "center": "Merkez", + "right": "Sağ" + }, + "menu_items": { + "text": "Metin", + "h1": "Başlık 1", + "h2": "Başlık 2", + "h3": "Başlık 3", + "h4": "Başlık 4", + "h5": "Başlık 5", + "h6": "Başlık 6", + "bulleted-list": "Madde işaretli liste", + "numbered-list": "Numaralı liste", + "to-do-list": "Yapılacaklar listesi", + "quote": "Alıntı", + "code": "Kod", + "table": "Tablo", + "image": "Resim", + "divider": "Bölücü", + "link": "Bağlantı", + "bold": "Kalın", + "italic": "İtalik", + "underline": "Altı çizili", + "strikethrough": "Üstü çizili", + "text-color": "Metin rengi", + "background-color": "Arka plan rengi", + "text-align": "Metin hizalama" + } } } diff --git a/packages/i18n/src/locales/tr-TR/empty-state.json b/packages/i18n/src/locales/tr-TR/empty-state.json index c326cea2bff..2877129d3c1 100644 --- a/packages/i18n/src/locales/tr-TR/empty-state.json +++ b/packages/i18n/src/locales/tr-TR/empty-state.json @@ -266,5 +266,11 @@ "description": "İş öğesinin ilerlediği durumları seçin." } } + }, + "app_not_found": { + "alt": "404 - Sayfa bulunamadı", + "title": "Hata! Bir şeyler ters gitti.", + "description": "Aradığınız sayfa bulunamadı. Kaldırılmış, yeniden adlandırılmış veya geçici olarak kullanılamıyor olabilir.", + "go_to_home": "Ana sayfaya git" } } diff --git a/packages/i18n/src/locales/tr-TR/inbox.json b/packages/i18n/src/locales/tr-TR/inbox.json index 7ac329e0400..f9495a4f7af 100644 --- a/packages/i18n/src/locales/tr-TR/inbox.json +++ b/packages/i18n/src/locales/tr-TR/inbox.json @@ -83,5 +83,56 @@ "title": "Detaylarını görüntülemek için bir iş öğesi seçin." } } + }, + "inbox": { + "duplicate_issues_found": "{count} yinelenen iş öğesi bulundu", + "description_versions": { + "intake_form_user": "Başvuru Formu kullanıcısı" + }, + "errors": { + "asset_upload_failed": "Öğe yükleme başarısız oldu. Lütfen daha sonra tekrar deneyin.", + "asset_duplication_failed": "Varlık çoğaltması başarısız oldu. Lütfen daha sonra tekrar deneyin.", + "permission_denied": "İzin reddedildi", + "mark_duplicate_permission": "Yalnızca proje yöneticileri iş öğesini kopya olarak işaretleyebilir", + "mark_duplicate_permission_plural": "Yalnızca proje yöneticileri iş öğelerini kopya olarak işaretleyebilir" + }, + "filters": { + "created_date": "Oluşturulma tarihi", + "updated_date": "Güncellenme tarihi", + "last_updated_date": "Son güncelleme tarihi", + "status": "Durum", + "work_item_status": "İş öğesi durumu", + "view_all": "Tümünü görüntüle", + "view_less": "Daha az görüntüle", + "date_options": { + "today": "Bugün", + "yesterday": "Dün", + "last_7_days": "Son 7 gün", + "last_30_days": "Son 30 gün" + }, + "date_operators": { + "after": "Sonrasında", + "before": "Önce" + } + }, + "navigation": { + "previous_work_item": "Önceki iş öğesi", + "next_work_item": "Sonraki iş öğesi" + }, + "properties": { + "duplicate_of": "Şunun yineleneni" + }, + "select_duplicate": { + "select_work_item": "İş öğesini seçin" + }, + "sidebar": { + "label_count": "{count} etiketleri" + }, + "toasts": { + "editor_processing": "Düzenleyici hâlâ değişiklikleri işliyor. Devam etmeden önce lütfen bekleyin.", + "create_success": "İş öğesi başarıyla oluşturuldu.", + "delete_failed": "İş öğesi silinemedi", + "update_failed": "İş öğesi güncellemesi başarısız oldu" + } } } diff --git a/packages/i18n/src/locales/tr-TR/page.json b/packages/i18n/src/locales/tr-TR/page.json index 8ab72c06bd4..a40ce7c8d66 100644 --- a/packages/i18n/src/locales/tr-TR/page.json +++ b/packages/i18n/src/locales/tr-TR/page.json @@ -111,5 +111,18 @@ "success_message": "Sayfa koleksiyondan kaldırıldı.", "error_message": "Sayfa koleksiyondan kaldırılamadı. Lütfen tekrar deneyin." } + }, + "page_access": { + "not_found_title": "Sayfa bulunamadı", + "not_found_description": "Erişmeye çalıştığınız sayfa mevcut değil veya görüntüleme izniniz yok.", + "view_other_pages": "Diğer sayfaları görüntüle" + }, + "profile_activity": { + "page_title": "Profil - Etkinlik" + }, + "space_public": { + "page_not_found_alt": "Sayfa bulunamadı", + "page_not_found_description": "Aradığınız sayfa yok veya taşınmış.", + "something_went_wrong": "Hata! Bir şeyler ters gitti." } } diff --git a/packages/i18n/src/locales/tr-TR/project.json b/packages/i18n/src/locales/tr-TR/project.json index 3731849a49b..6cfd3f1944f 100644 --- a/packages/i18n/src/locales/tr-TR/project.json +++ b/packages/i18n/src/locales/tr-TR/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Henüz proje yok", + "description": "Projeler, hedef odaklı çalışmanın temelidir. Ekipleri, görevleri ve işi tamamlamak için gereken her şeyi yönetmenizi sağlar.", + "learn_more": "Projeler hakkında daha fazla bilgi edinin", + "start_first_project": "İlk projenizi başlatın" } } diff --git a/packages/i18n/src/locales/tr-TR/work-item.json b/packages/i18n/src/locales/tr-TR/work-item.json index 0cf70387523..982108057b3 100644 --- a/packages/i18n/src/locales/tr-TR/work-item.json +++ b/packages/i18n/src/locales/tr-TR/work-item.json @@ -422,5 +422,35 @@ "label": "Epik Başlığı", "required": "Epik başlığı gereklidir." } + }, + "space_public": { + "peek": { + "side": "Yan Önizleme", + "modal": "Modal", + "full_screen": "Tam Ekran" + }, + "public_board_not_found": "Herkese açık pano mevcut değil. Lütfen URL'yi kontrol edin.", + "no_work_items_found": "İş öğesi bulunamadı", + "bot_name": "{name} Botu", + "commented_time": "{time} yorum yaptı", + "and_more": "ve {count} kişi daha", + "no_upvotes_yet": "Henüz olumlu oy yok", + "no_downvotes_yet": "Henüz olumsuz oy yok", + "view_less": "Daha az göster", + "view_all": "Tümünü göster", + "no_matches_found": "Eşleşme bulunamadı", + "no_date": "Tarih yok", + "no_cycle": "Döngü yok", + "no_modules": "Modül yok", + "modules_count": "{count} Modül", + "no_assignees": "Atanan yok", + "labels_count": "{count} Etiket", + "no_labels": "Etiket yok", + "sign_in_to_add_comment": "Yorum eklemek için oturum açın", + "add_comment": "Yorum ekle", + "link_copied": "Bağlantı kopyalandı!", + "work_item_link_copied": "İş öğesi bağlantısı panoya kopyalandı.", + "comment_post_error": "Yorum gönderilemedi. Lütfen tekrar deneyin.", + "user": "Kullanıcı" } } diff --git a/packages/i18n/src/locales/tr-TR/workspace.json b/packages/i18n/src/locales/tr-TR/workspace.json index 19f64e7c48e..c1efd241d02 100644 --- a/packages/i18n/src/locales/tr-TR/workspace.json +++ b/packages/i18n/src/locales/tr-TR/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Bu görünümü silmek istediğinizden emin misiniz?", "content": "Onaylarsanız, bu görünüm için seçtiğiniz tüm sıralama, filtreleme ve görüntüleme seçenekleri + düzen kalıcı olarak silinecek ve geri yükleme imkanı olmayacaktır." - } + }, + "page_title": "{workspaceName} - Tüm Görünümler" }, "workspace_draft_issues": { "draft_an_issue": "Taslak iş öğesi oluştur", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Çalışma alanı bulunamadı", + "not_found_description": "Bu URL için çalışma alanı bulunamadı. Mevcut olmayabilir veya görüntüleme izniniz olmayabilir.", + "visit_profile": "Profili ziyaret et", + "not_authorized_title": "Yetkili değilsiniz!", + "not_authorized_description": "Bu çalışma alanının üyesi değilsiniz. Davet almak için çalışma alanı yöneticisiyle iletişime geçin veya bekleyen davetlerinizi kontrol edin.", + "check_pending_invites": "Bekleyen davetleri kontrol et" + }, + "workspace_invitation": { + "invitation_not_found": "Davetiye bulunamadı", + "invited_to_workspace": "{workspaceName}'e davet edildiniz", + "description": "Çalışma alanınız, Plane hesabınızda projeler oluşturacağınız, çalışma öğeleriniz üzerinde işbirliği yapacağınız ve farklı iş akışlarını organize edeceğiniz yerdir.", + "accept": "Kabul et", + "ignore": "Yok say", + "already_member": "Zaten {workspaceName} üyesisiniz", + "continue_to_home": "Ana sayfaya devam et", + "inactive_title": "Bu davet bağlantısı artık aktif değil.", + "empty_project_link": "Veya boş bir projeden başlayın", + "sign_in_to_continue": "Devam etmek için oturum açın", + "star_on_github": "GitHub'da bize yıldız verin", + "join_community": "Aktif yaratıcılardan oluşan topluluğumuza katılın" + }, + "onboarding": { + "create_profile_title": "Profilinizi oluşturun.", + "create_profile_description": "Plane'de bu şekilde görüneceksiniz.", + "change_image": "Resmi değiştir", + "upload_image": "Resim yükle", + "name": "İsim", + "name_required": "Ad gerekli", + "name_within_50": "Ad 50 karakterden oluşmalıdır.", + "enter_full_name": "Tam adınızı girin", + "set_password": "Bir şifre belirleyin", + "optional": "İsteğe bağlı", + "passwords_do_not_match": "Şifreler eşleşmiyor", + "passwords_match": "Şifreler eşleşiyor", + "continue": "Devam et", + "invite_team_title": "Takım arkadaşlarınızı davet edin", + "invite_team_description": "Plane'de çalışmak ekibinizle en iyi şekilde gerçekleşir. Onları şimdi Plane'in potansiyelini sonuna kadar kullanmaya davet edin.", + "invalid_email": "Bu bir e-posta adresine benzemiyor.", + "success": "Başarı!", + "invitations_sent": "Davetiyeler başarıyla gönderildi.", + "error": "Hata!", + "add_another": "Başka ekle", + "do_later": "Daha sonra yapacağım", + "join_invites_title": "Davetlere katılın veya bir çalışma alanı oluşturun", + "unified_description": "Tüm çalışmalarınız — birleştirilmiş.", + "create_new_workspace": "Yeni çalışma alanı oluştur", + "no_invitations_found": "Hiçbir davetiye bulunamadı", + "you_are_invited": "Davetlisiniz!", + "accept_invites": "Ekibinizle işbirliği yapma davetlerini kabul edin.", + "continue_to_workspace": "Çalışma alanına devam et", + "or": "veya", + "create_own_workspace": "Kendi çalışma alanınızı yaratın", + "workspace_creation_disabled": "Bir çalışma alanına davetiniz yok gibi görünüyor ve örnek yöneticiniz yeni çalışma alanlarının oluşturulmasını kısıtladı. Lütfen bir çalışma alanı sahibinden veya yöneticisinden önce sizi bir çalışma alanına davet etmesini ve katılmak için bu ekrana geri dönmesini isteyin.", + "create_workspace_title": "Çalışma alanınızı yaratın", + "enter_workspace_name": "Çalışma alanı adını girin", + "join_existing_workspace": "Mevcut çalışma alanına katılın", + "profile_setup_completed": "Profil kurulumu tamamlandı.", + "profile_setup_failed": "Profil kurulumu başarısız oldu.", + "usecase_title": "Plane'i nasıl kullanmayı planlıyorsunuz?", + "usecase_description": "Deneyiminizi kişiselleştirebilmemiz için bir veya daha fazla seçeneği seçin.", + "select_one_or_more": "Bir veya daha fazlasını seçin", + "select_at_least_one": "En az bir seçeneği seçin.", + "skip": "Atlamak" } } diff --git a/packages/i18n/src/locales/ua/auth.json b/packages/i18n/src/locales/ua/auth.json index 93198c72341..b98030bed76 100644 --- a/packages/i18n/src/locales/ua/auth.json +++ b/packages/i18n/src/locales/ua/auth.json @@ -364,5 +364,45 @@ "sub_header": "Введіть ваші облікові дані {ldapProviderName}" } } + }, + "space_auth": { + "email": "Електронна пошта", + "email_invalid": "Електронна адреса недійсна", + "clear_email": "Очистити електронну пошту", + "password": "Пароль", + "set_password": "Встановіть пароль", + "enter_password": "Введіть пароль", + "confirm_password": "Підтвердьте пароль", + "passwords_dont_match": "Паролі не збігаються", + "continue": "Продовжити", + "go_to_workspace": "Перейдіть до робочої області", + "sign_in_with_unique_code": "Увійдіть за допомогою унікального коду", + "create_account": "Створити акаунт", + "unique_code": "Унікальний код", + "paste_code_sent": "Вставте код, надісланий на вашу електронну пошту", + "resend_in": "Повторно надішліть через {seconds}s", + "requesting_new_code": "Запит на новий код", + "resend": "Надіслати повторно", + "sending_code": "Надсилання коду" + }, + "space_public": { + "by_creating_account": "Створюючи обліковий запис", + "by_signing_in": "Входячи", + "you_agree_to_our": "ви погоджуєтеся з нашими", + "terms_of_service": "Умовами надання послуг", + "and": "і", + "privacy_policy": "Політикою конфіденційності", + "sign_up": "Зареєструватися", + "oauth_with_provider": "{action} через {provider}", + "user_already_logged_in": "Користувач уже ввійшов", + "logged_in_title": "Чудово! Залишився ще один крок.", + "logged_in_hint": "Введіть в адресному рядку браузера публічну URL-адресу спільного доступу або посилання на подання чи сторінку, яку хочете переглянути.", + "sign_in": "Увійти", + "auth": { + "sign_in_header": "Увійдіть, щоб голосувати або коментувати", + "sign_in_subheader": "Допоможіть просувати функції, які хочете бачити реалізованими.", + "sign_up_header": "Переглядайте, коментуйте та робіть більше", + "sign_up_subheader": "Зареєструйтеся або увійдіть, щоб працювати з робочими елементами та сторінками Plane." + } } } diff --git a/packages/i18n/src/locales/ua/common.json b/packages/i18n/src/locales/ua/common.json index 89bd906d8fa..bc13821cdb8 100644 --- a/packages/i18n/src/locales/ua/common.json +++ b/packages/i18n/src/locales/ua/common.json @@ -867,5 +867,20 @@ "description": "Експортуйте одиниці у формат JSON.", "short_description": "Експортувати як JSON" } + }, + "space_public": { + "error_description_prefix": "Plane аварійно завершив роботу. Наших інженерів уже повідомлено. Якщо у вас є більше деталей, напишіть на", + "error_description_middle": "або на нашому", + "not_found_hint": "Перевірте URL в адресному рядку браузера та спробуйте ще раз.", + "instance_failure_image_alt": "Не вдалося отримати деталі інстансу", + "instance_failure_title": "Не вдалося отримати деталі інстансу.", + "instance_failure_description": "Не вдалося завантажити деталі вашого інстансу.", + "instance_failure_hint": "Перевірте підключення та спробуйте ще раз.", + "powered_by": "Працює на", + "error_title": "Ой! Це виглядає не дуже добре.", + "refresh": "Оновити", + "forum": "Форум", + "not_found_title": "Це не спрацювало", + "retry": "Повторити" } } diff --git a/packages/i18n/src/locales/ua/editor.json b/packages/i18n/src/locales/ua/editor.json index e688e337966..abceb917e0c 100644 --- a/packages/i18n/src/locales/ua/editor.json +++ b/packages/i18n/src/locales/ua/editor.json @@ -61,5 +61,79 @@ "use_this": "Використати це", "refine": "Уточнити" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Введіть або вставте URL", + "text": "текст", + "enter_text_to_display": "Введіть текст для відображення", + "remove_link": "Видалити посилання", + "edit_link": "Редагувати посилання", + "color": "Колір", + "text_colors": "Кольори тексту", + "background_colors": "Кольори фону", + "link": "Посилання", + "enter_or_paste_link": "Введіть або вставте посилання", + "please_enter_valid_url": "Введіть дійсний URL", + "delete": "Видалити", + "duplicate": "Дублювати", + "multiple": "Кілька", + "loading": "Завантаження", + "no_results": "Результатів немає", + "copy_code": "Скопіюйте код", + "add_an_image": "Додайте зображення", + "error_loading_image": "Помилка завантаження зображення", + "uploading": "Завантаження", + "drop_image_here": "Перетягніть зображення сюди", + "retry_duplication": "Повторіть спробу дублювання", + "retry": "Повторіть спробу", + "no_emojis_found": "Емодзі не знайдено", + "fullscreen_image_viewer": "Переглядач повноекранних зображень", + "close_image_viewer": "Закрити переглядач зображень", + "zoom_out": "Зменшити масштаб", + "zoom_in": "Збільшити", + "download_image": "Завантажити зображення", + "open_image_in_new_tab": "Відкрити зображення в новій вкладці", + "view_in_full_screen": "Переглянути на весь екран", + "view_image_in_full_screen": "Переглянути зображення на весь екран", + "align": "Вирівняти", + "download": "Завантажити", + "clear_contents": "Очистити вміст", + "insert_above": "Вставте вище", + "insert_below": "Вставте нижче", + "insert_left": "Вставте ліворуч", + "insert_right": "Вставте праворуч", + "header_row": "Рядок заголовка", + "header_column": "Стовпець заголовка", + "alignment": { + "left": "Ліворуч", + "center": "По центру", + "right": "Праворуч" + }, + "menu_items": { + "text": "текст", + "h1": "Заголовок 1", + "h2": "Заголовок 2", + "h3": "Заголовок 3", + "h4": "Заголовок 4", + "h5": "Заголовок 5", + "h6": "Заголовок 6", + "bulleted-list": "Маркірований список", + "numbered-list": "Нумерований список", + "to-do-list": "Список справ", + "quote": "Цитата", + "code": "Код", + "table": "Таблиця", + "image": "Зображення", + "divider": "Роздільник", + "link": "Посилання", + "bold": "Жирний", + "italic": "Курсив", + "underline": "Підкреслити", + "strikethrough": "Закреслення", + "text-color": "Колір тексту", + "background-color": "Колір фону", + "text-align": "Вирівнювання тексту" + } } } diff --git a/packages/i18n/src/locales/ua/empty-state.json b/packages/i18n/src/locales/ua/empty-state.json index a1672ce5006..21c458b2b50 100644 --- a/packages/i18n/src/locales/ua/empty-state.json +++ b/packages/i18n/src/locales/ua/empty-state.json @@ -266,5 +266,11 @@ "description": "Виберіть стани, через які проходить робочий елемент." } } + }, + "app_not_found": { + "alt": "404 - Сторінку не знайдено", + "title": "Ой! Щось пішло не так.", + "description": "Сторінку, яку ви шукаєте, не знайдено. Її могли видалити, перейменувати або вона тимчасово недоступна.", + "go_to_home": "На головну" } } diff --git a/packages/i18n/src/locales/ua/inbox.json b/packages/i18n/src/locales/ua/inbox.json index 96264f4531f..9acb6b24c55 100644 --- a/packages/i18n/src/locales/ua/inbox.json +++ b/packages/i18n/src/locales/ua/inbox.json @@ -83,5 +83,56 @@ "title": "Виберіть робочу одиницю для перегляду деталей." } } + }, + "inbox": { + "duplicate_issues_found": "Знайдено {count} дубльованих робочих елементів", + "description_versions": { + "intake_form_user": "Користувач форми збору" + }, + "errors": { + "asset_upload_failed": "Не вдалося завантажити ресурс. Спробуйте пізніше.", + "asset_duplication_failed": "Помилка копіювання ресурсу. Спробуйте пізніше.", + "permission_denied": "У дозволі відмовлено", + "mark_duplicate_permission": "Лише адміністратори проекту можуть позначити робочий елемент як дублікат", + "mark_duplicate_permission_plural": "Лише адміністратори проекту можуть позначати робочі елементи як дублікати" + }, + "filters": { + "created_date": "Дата створення", + "updated_date": "Оновлена ​​дата", + "last_updated_date": "Дата останнього оновлення", + "status": "Статус", + "work_item_status": "Статус робочого елемента", + "view_all": "Переглянути всі", + "view_less": "Переглянути менше", + "date_options": { + "today": "Сьогодні", + "yesterday": "вчора", + "last_7_days": "Останні 7 днів", + "last_30_days": "Останні 30 днів" + }, + "date_operators": { + "after": "після", + "before": "Раніше" + } + }, + "navigation": { + "previous_work_item": "Попередній робочий елемент", + "next_work_item": "Наступний робочий елемент" + }, + "properties": { + "duplicate_of": "Дублікат елемента" + }, + "select_duplicate": { + "select_work_item": "Виберіть робочий елемент" + }, + "sidebar": { + "label_count": "{count} міток" + }, + "toasts": { + "editor_processing": "Редактор ще обробляє зміни. Зачекайте, перш ніж продовжити.", + "create_success": "Робочий елемент створено успішно.", + "delete_failed": "Не вдалося видалити робочий елемент", + "update_failed": "Не вдалося оновити робочий елемент" + } } } diff --git a/packages/i18n/src/locales/ua/page.json b/packages/i18n/src/locales/ua/page.json index 23bc52b13c1..40903d45cfc 100644 --- a/packages/i18n/src/locales/ua/page.json +++ b/packages/i18n/src/locales/ua/page.json @@ -111,5 +111,18 @@ "success_message": "Сторінку видалено з колекції.", "error_message": "Не вдалося видалити сторінку з колекції. Спробуйте ще раз." } + }, + "page_access": { + "not_found_title": "Сторінку не знайдено", + "not_found_description": "Сторінка, до якої ви намагаєтеся отримати доступ, не існує або у вас немає дозволу на її перегляд.", + "view_other_pages": "Переглянути інші сторінки" + }, + "profile_activity": { + "page_title": "Профіль - Активність" + }, + "space_public": { + "page_not_found_alt": "Сторінку не знайдено", + "page_not_found_description": "Сторінка, яку ви шукаєте, не існує або була переміщена.", + "something_went_wrong": "Ой! Щось пішло не так." } } diff --git a/packages/i18n/src/locales/ua/project.json b/packages/i18n/src/locales/ua/project.json index 7cf67135f74..1f2872ebd97 100644 --- a/packages/i18n/src/locales/ua/project.json +++ b/packages/i18n/src/locales/ua/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Проєктів ще немає", + "description": "Проєкти є основою роботи, орієнтованої на цілі. Вони допомагають керувати командами, завданнями та всім необхідним для виконання роботи.", + "learn_more": "Дізнатися більше про проєкти", + "start_first_project": "Почати перший проєкт" } } diff --git a/packages/i18n/src/locales/ua/work-item.json b/packages/i18n/src/locales/ua/work-item.json index 158f41610b0..c29e4e4a86e 100644 --- a/packages/i18n/src/locales/ua/work-item.json +++ b/packages/i18n/src/locales/ua/work-item.json @@ -422,5 +422,35 @@ "label": "Назва епіку", "required": "Назва епіку є обов'язковою." } + }, + "space_public": { + "peek": { + "side": "Бічний перегляд", + "modal": "Модальне вікно", + "full_screen": "Повний екран" + }, + "public_board_not_found": "Публічна дошка не існує. Перевірте URL.", + "no_work_items_found": "Робочих елементів не знайдено", + "bot_name": "Бот {name}", + "commented_time": "прокоментував {time}", + "and_more": "і ще {count}", + "no_upvotes_yet": "Поки що немає голосів за", + "no_downvotes_yet": "Поки що немає голосів проти", + "view_less": "Показати менше", + "view_all": "Показати все", + "no_matches_found": "Збігів не знайдено", + "no_date": "Без дати", + "no_cycle": "Без циклу", + "no_modules": "Без модулів", + "modules_count": "{count} модулів", + "no_assignees": "Без виконавців", + "labels_count": "{count} міток", + "no_labels": "Без міток", + "sign_in_to_add_comment": "Увійдіть, щоб додати коментар", + "add_comment": "Додати коментар", + "link_copied": "Посилання скопійовано!", + "work_item_link_copied": "Посилання на робочий елемент скопійовано в буфер обміну.", + "comment_post_error": "Не вдалося опублікувати коментар. Спробуйте ще раз.", + "user": "Користувач" } } diff --git a/packages/i18n/src/locales/ua/workspace.json b/packages/i18n/src/locales/ua/workspace.json index cb288fd2d89..2c7e0a8c7d3 100644 --- a/packages/i18n/src/locales/ua/workspace.json +++ b/packages/i18n/src/locales/ua/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Ви впевнені, що хочете видалити це подання?", "content": "Якщо ви підтвердите, всі параметри сортування, фільтрації та відображення + макет, який ви обрали для цього подання, будуть безповоротно видалені без можливості відновлення." - } + }, + "page_title": "{workspaceName} - Усі подання" }, "workspace_draft_issues": { "draft_an_issue": "Створити чернетку одиниці", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Робочу область не знайдено", + "not_found_description": "Для цієї URL-адреси робочу область не знайдено. Можливо, вона не існує або у вас немає дозволу на її перегляд.", + "visit_profile": "Відвідати профіль", + "not_authorized_title": "Немає доступу!", + "not_authorized_description": "Ви не є учасником цієї робочої області. Зверніться до адміністратора робочої області, щоб отримати запрошення, або перевірте запрошення, що очікують.", + "check_pending_invites": "Перевірити очікувані запрошення" + }, + "workspace_invitation": { + "invitation_not_found": "Запрошення не знайдено", + "invited_to_workspace": "Вас запросили до {workspaceName}", + "description": "У вашому робочому просторі ви створюватимете проекти, співпрацюватимете над своїми робочими елементами та організовуватимете різні потоки роботи у своєму обліковому записі Plane.", + "accept": "Прийняти", + "ignore": "Ігнорувати", + "already_member": "Ви вже є учасником {workspaceName}", + "continue_to_home": "Перейти на головну", + "inactive_title": "Це посилання для запрошення більше не активне.", + "empty_project_link": "Або почати з порожнього проекту", + "sign_in_to_continue": "Увійдіть, щоб продовжити", + "star_on_github": "Поставте нам зірку на GitHub", + "join_community": "Приєднуйтесь до нашої спільноти активних творців" + }, + "onboarding": { + "create_profile_title": "Створіть свій профіль.", + "create_profile_description": "Ось як ви будете виглядати в Plane.", + "change_image": "Змінити зображення", + "upload_image": "Завантажити зображення", + "name": "Ім'я", + "name_required": "Необхідно вказати ім'я", + "name_within_50": "Назва має містити не більше 50 символів.", + "enter_full_name": "Введіть своє повне ім'я", + "set_password": "Встановіть пароль", + "optional": "Додатково", + "passwords_do_not_match": "Паролі не збігаються", + "passwords_match": "Паролі збігаються", + "continue": "Продовжити", + "invite_team_title": "Запросіть своїх товаришів по команді", + "invite_team_description": "Робота в Plane найкраще відбувається з вашою командою. Запропонуйте їм зараз використати потенціал Plane.", + "invalid_email": "Це не схоже на електронну адресу.", + "success": "Успіх!", + "invitations_sent": "Запрошення успішно надіслано.", + "error": "Помилка!", + "add_another": "Додайте іншу", + "do_later": "Я зроблю це пізніше", + "join_invites_title": "Приєднайтеся до запрошень або створіть робочу область", + "unified_description": "Вся ваша робота — єдина.", + "create_new_workspace": "Створіть новий робочий простір", + "no_invitations_found": "Запрошень не знайдено", + "you_are_invited": "Ви запрошені!", + "accept_invites": "Прийміть запрошення співпрацювати з вашою командою.", + "continue_to_workspace": "Продовжуйте до робочої області", + "or": "або", + "create_own_workspace": "Створіть власний робочий простір", + "workspace_creation_disabled": "Схоже, у вас немає запрошень до робочої області, а адміністратор вашого екземпляра обмежив створення нових робочих областей. Будь ласка, попросіть власника робочої області або адміністратора запросити вас у робочу область і поверніться на цей екран, щоб приєднатися.", + "create_workspace_title": "Створіть свій робочий простір", + "enter_workspace_name": "Введіть назву робочої області", + "join_existing_workspace": "Приєднайтеся до існуючої робочої області", + "profile_setup_completed": "Налаштування профілю завершено.", + "profile_setup_failed": "Помилка налаштування профілю.", + "usecase_title": "Як ви плануєте використовувати Plane?", + "usecase_description": "Виберіть один або кілька варіантів, щоб ми могли персоналізувати ваш досвід.", + "select_one_or_more": "Виберіть один або декілька", + "select_at_least_one": "Виберіть хоча б один варіант.", + "skip": "Пропустити" } } diff --git a/packages/i18n/src/locales/vi-VN/auth.json b/packages/i18n/src/locales/vi-VN/auth.json index 04e00f3aa45..8b92acde74a 100644 --- a/packages/i18n/src/locales/vi-VN/auth.json +++ b/packages/i18n/src/locales/vi-VN/auth.json @@ -364,5 +364,45 @@ "sub_header": "Nhập thông tin đăng nhập {ldapProviderName} của bạn" } } + }, + "space_auth": { + "email": "E-mail", + "email_invalid": "Email không hợp lệ", + "clear_email": "Xóa email", + "password": "Mật khẩu", + "set_password": "Đặt mật khẩu", + "enter_password": "Nhập mật khẩu", + "confirm_password": "Xác nhận mật khẩu", + "passwords_dont_match": "Mật khẩu không khớp", + "continue": "Tiếp tục", + "go_to_workspace": "Đi tới không gian làm việc", + "sign_in_with_unique_code": "Đăng nhập bằng mã duy nhất", + "create_account": "Tạo tài khoản", + "unique_code": "Mã duy nhất", + "paste_code_sent": "Dán mã được gửi tới email của bạn", + "resend_in": "Gửi lại sau {seconds}s", + "requesting_new_code": "Yêu cầu mã mới", + "resend": "Gửi lại", + "sending_code": "Đang gửi mã" + }, + "space_public": { + "by_creating_account": "Bằng cách tạo tài khoản", + "by_signing_in": "Bằng cách đăng nhập", + "you_agree_to_our": "bạn đồng ý với", + "terms_of_service": "Điều khoản dịch vụ", + "and": "và", + "privacy_policy": "Chính sách quyền riêng tư", + "sign_up": "Đăng ký", + "oauth_with_provider": "{action} bằng {provider}", + "user_already_logged_in": "Người dùng đã đăng nhập", + "logged_in_title": "Tốt rồi! Chỉ còn một bước nữa.", + "logged_in_hint": "Nhập URL chia sẻ công khai hoặc liên kết của chế độ xem hay Trang bạn muốn xem vào thanh địa chỉ trình duyệt.", + "sign_in": "Đăng nhập", + "auth": { + "sign_in_header": "Đăng nhập để bình chọn hoặc bình luận", + "sign_in_subheader": "Góp phần thúc đẩy các tính năng bạn muốn được xây dựng.", + "sign_up_header": "Xem, bình luận và làm nhiều việc hơn", + "sign_up_subheader": "Đăng ký hoặc đăng nhập để làm việc với các mục công việc và Trang của Plane." + } } } diff --git a/packages/i18n/src/locales/vi-VN/common.json b/packages/i18n/src/locales/vi-VN/common.json index f9aae43c1b9..1b5d778eecd 100644 --- a/packages/i18n/src/locales/vi-VN/common.json +++ b/packages/i18n/src/locales/vi-VN/common.json @@ -867,5 +867,20 @@ "description": "Xuất mục công việc thành tệp JSON.", "short_description": "Xuất sang JSON" } + }, + "space_public": { + "error_description_prefix": "Plane đã gặp sự cố. Kỹ sư của chúng tôi đã được thông báo. Nếu bạn có thêm chi tiết, vui lòng viết tới", + "error_description_middle": "hoặc trên", + "not_found_hint": "Kiểm tra URL trong thanh địa chỉ trình duyệt rồi thử lại.", + "instance_failure_image_alt": "Không thể lấy chi tiết phiên bản", + "instance_failure_title": "Không thể lấy chi tiết phiên bản.", + "instance_failure_description": "Chúng tôi không thể tải chi tiết phiên bản của bạn.", + "instance_failure_hint": "Vui lòng kiểm tra kết nối rồi thử lại.", + "powered_by": "Được hỗ trợ bởi", + "error_title": "Rất tiếc! Có vẻ không ổn.", + "refresh": "Làm mới", + "forum": "Diễn đàn", + "not_found_title": "Thao tác không thành công", + "retry": "Thử lại" } } diff --git a/packages/i18n/src/locales/vi-VN/editor.json b/packages/i18n/src/locales/vi-VN/editor.json index 24ff7ca2b0b..a615582a18e 100644 --- a/packages/i18n/src/locales/vi-VN/editor.json +++ b/packages/i18n/src/locales/vi-VN/editor.json @@ -61,5 +61,79 @@ "use_this": "Sử dụng cái này", "refine": "Tinh chỉnh" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "Nhập hoặc dán URL", + "text": "Chữ", + "enter_text_to_display": "Nhập văn bản để hiển thị", + "remove_link": "Xóa liên kết", + "edit_link": "Chỉnh sửa liên kết", + "color": "Màu sắc", + "text_colors": "Màu văn bản", + "background_colors": "Màu nền", + "link": "Liên kết", + "enter_or_paste_link": "Nhập hoặc dán liên kết", + "please_enter_valid_url": "Vui lòng nhập URL hợp lệ", + "delete": "Xóa bỏ", + "duplicate": "Nhân bản", + "multiple": "Nhiều", + "loading": "Đang tải", + "no_results": "Không có kết quả", + "copy_code": "Sao chép mã", + "add_an_image": "Thêm một hình ảnh", + "error_loading_image": "Lỗi tải hình ảnh", + "uploading": "Đang tải lên", + "drop_image_here": "Thả hình ảnh ở đây", + "retry_duplication": "Thử lại việc sao chép", + "retry": "Thử lại", + "no_emojis_found": "Không tìm thấy biểu tượng cảm xúc nào", + "fullscreen_image_viewer": "Trình xem ảnh toàn màn hình", + "close_image_viewer": "Đóng trình xem ảnh", + "zoom_out": "Thu nhỏ", + "zoom_in": "Phóng to", + "download_image": "Tải hình ảnh xuống", + "open_image_in_new_tab": "Mở hình ảnh trong tab mới", + "view_in_full_screen": "Xem toàn màn hình", + "view_image_in_full_screen": "Xem hình ảnh toàn màn hình", + "align": "Căn chỉnh", + "download": "Tải xuống", + "clear_contents": "Xóa nội dung", + "insert_above": "Chèn ở trên", + "insert_below": "Chèn bên dưới", + "insert_left": "Chèn trái", + "insert_right": "Chèn bên phải", + "header_row": "Hàng tiêu đề", + "header_column": "Cột tiêu đề", + "alignment": { + "left": "Trái", + "center": "Giữa", + "right": "Phải" + }, + "menu_items": { + "text": "Chữ", + "h1": "Tiêu đề 1", + "h2": "Tiêu đề 2", + "h3": "Tiêu đề 3", + "h4": "Tiêu đề 4", + "h5": "Tiêu đề 5", + "h6": "Tiêu đề 6", + "bulleted-list": "Danh sách có dấu đầu dòng", + "numbered-list": "Danh sách đánh số", + "to-do-list": "Danh sách việc cần làm", + "quote": "Trích dẫn", + "code": "Mã", + "table": "Bảng", + "image": "Hình ảnh", + "divider": "Dải phân cách", + "link": "Liên kết", + "bold": "In đậm", + "italic": "Nghiêng", + "underline": "Gạch chân", + "strikethrough": "Gạch ngang", + "text-color": "Màu văn bản", + "background-color": "Màu nền", + "text-align": "Căn chỉnh văn bản" + } } } diff --git a/packages/i18n/src/locales/vi-VN/empty-state.json b/packages/i18n/src/locales/vi-VN/empty-state.json index 3e6a3be09af..73e76ef4d7b 100644 --- a/packages/i18n/src/locales/vi-VN/empty-state.json +++ b/packages/i18n/src/locales/vi-VN/empty-state.json @@ -266,5 +266,11 @@ "description": "Chọn các trạng thái mà mục công việc sẽ đi qua." } } + }, + "app_not_found": { + "alt": "404 - Không tìm thấy trang", + "title": "Rất tiếc! Đã xảy ra lỗi.", + "description": "Rất tiếc, không tìm thấy trang bạn đang tìm. Trang có thể đã bị xóa, đổi tên hoặc tạm thời không khả dụng.", + "go_to_home": "Về trang chủ" } } diff --git a/packages/i18n/src/locales/vi-VN/inbox.json b/packages/i18n/src/locales/vi-VN/inbox.json index a471acf28f1..a5c27041ad5 100644 --- a/packages/i18n/src/locales/vi-VN/inbox.json +++ b/packages/i18n/src/locales/vi-VN/inbox.json @@ -83,5 +83,56 @@ "title": "Chọn một mục công việc để xem chi tiết." } } + }, + "inbox": { + "duplicate_issues_found": "Đã tìm thấy {count} mục công việc trùng lặp", + "description_versions": { + "intake_form_user": "Người dùng biểu mẫu tiếp nhận" + }, + "errors": { + "asset_upload_failed": "Tải nội dung lên không thành công. Vui lòng thử lại sau.", + "asset_duplication_failed": "Sao chép nội dung không thành công. Vui lòng thử lại sau.", + "permission_denied": "Quyền bị từ chối", + "mark_duplicate_permission": "Chỉ quản trị viên dự án mới có thể đánh dấu mục công việc là trùng lặp", + "mark_duplicate_permission_plural": "Chỉ quản trị viên dự án mới có thể đánh dấu các mục công việc là trùng lặp" + }, + "filters": { + "created_date": "Ngày tạo", + "updated_date": "Ngày cập nhật", + "last_updated_date": "Ngày cập nhật lần cuối", + "status": "Trạng thái", + "work_item_status": "Trạng thái mục công việc", + "view_all": "Xem tất cả", + "view_less": "Xem ít hơn", + "date_options": { + "today": "Hôm nay", + "yesterday": "Hôm qua", + "last_7_days": "7 ngày qua", + "last_30_days": "30 ngày qua" + }, + "date_operators": { + "after": "Sau đó", + "before": "Trước" + } + }, + "navigation": { + "previous_work_item": "Mục công việc trước đó", + "next_work_item": "Mục công việc tiếp theo" + }, + "properties": { + "duplicate_of": "Bản sao của" + }, + "select_duplicate": { + "select_work_item": "Chọn mục công việc" + }, + "sidebar": { + "label_count": "Nhãn {count}" + }, + "toasts": { + "editor_processing": "Trình chỉnh sửa vẫn đang xử lý các thay đổi. Vui lòng đợi trước khi tiếp tục.", + "create_success": "Mục công việc được tạo thành công.", + "delete_failed": "Xóa mục công việc không thành công", + "update_failed": "Cập nhật mục công việc không thành công" + } } } diff --git a/packages/i18n/src/locales/vi-VN/page.json b/packages/i18n/src/locales/vi-VN/page.json index b54340fab29..55c7937df95 100644 --- a/packages/i18n/src/locales/vi-VN/page.json +++ b/packages/i18n/src/locales/vi-VN/page.json @@ -111,5 +111,18 @@ "success_message": "Đã xóa trang khỏi bộ sưu tập.", "error_message": "Không thể xóa trang khỏi bộ sưu tập. Vui lòng thử lại." } + }, + "page_access": { + "not_found_title": "Không tìm thấy trang", + "not_found_description": "Trang bạn đang cố truy cập không tồn tại hoặc bạn không có quyền xem.", + "view_other_pages": "Xem các trang khác" + }, + "profile_activity": { + "page_title": "Hồ sơ - Hoạt động" + }, + "space_public": { + "page_not_found_alt": "Không tìm thấy trang", + "page_not_found_description": "Trang bạn đang tìm không tồn tại hoặc đã được di chuyển.", + "something_went_wrong": "Rất tiếc! Đã xảy ra lỗi." } } diff --git a/packages/i18n/src/locales/vi-VN/project.json b/packages/i18n/src/locales/vi-VN/project.json index 5a0388c7760..fe2230c7975 100644 --- a/packages/i18n/src/locales/vi-VN/project.json +++ b/packages/i18n/src/locales/vi-VN/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Chưa có dự án", + "description": "Dự án là nền tảng cho công việc theo mục tiêu. Dự án giúp bạn quản lý đội nhóm, nhiệm vụ và mọi thứ cần thiết để hoàn thành công việc.", + "learn_more": "Tìm hiểu thêm về dự án", + "start_first_project": "Bắt đầu dự án đầu tiên" } } diff --git a/packages/i18n/src/locales/vi-VN/work-item.json b/packages/i18n/src/locales/vi-VN/work-item.json index 848fd48ae34..ded7f01261e 100644 --- a/packages/i18n/src/locales/vi-VN/work-item.json +++ b/packages/i18n/src/locales/vi-VN/work-item.json @@ -422,5 +422,35 @@ "label": "Tiêu đề sử thi", "required": "Tiêu đề sử thi là bắt buộc" } + }, + "space_public": { + "peek": { + "side": "Xem nhanh bên cạnh", + "modal": "Hộp thoại", + "full_screen": "Toàn màn hình" + }, + "public_board_not_found": "Bảng công khai không tồn tại. Vui lòng kiểm tra URL.", + "no_work_items_found": "Không tìm thấy mục công việc", + "bot_name": "Bot {name}", + "commented_time": "đã bình luận {time}", + "and_more": "và {count} người khác", + "no_upvotes_yet": "Chưa có lượt ủng hộ", + "no_downvotes_yet": "Chưa có lượt phản đối", + "view_less": "Xem ít hơn", + "view_all": "Xem tất cả", + "no_matches_found": "Không tìm thấy kết quả phù hợp", + "no_date": "Không có ngày", + "no_cycle": "Không có chu kỳ", + "no_modules": "Không có mô-đun", + "modules_count": "{count} mô-đun", + "no_assignees": "Không có người phụ trách", + "labels_count": "{count} nhãn", + "no_labels": "Không có nhãn", + "sign_in_to_add_comment": "Đăng nhập để thêm bình luận", + "add_comment": "Thêm bình luận", + "link_copied": "Đã sao chép liên kết!", + "work_item_link_copied": "Đã sao chép liên kết mục công việc vào bảng nhớ tạm.", + "comment_post_error": "Không thể đăng bình luận. Vui lòng thử lại.", + "user": "Người dùng" } } diff --git a/packages/i18n/src/locales/vi-VN/workspace.json b/packages/i18n/src/locales/vi-VN/workspace.json index 4b7418d7d9f..8032603ad3b 100644 --- a/packages/i18n/src/locales/vi-VN/workspace.json +++ b/packages/i18n/src/locales/vi-VN/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "Bạn có chắc chắn muốn xóa chế độ xem này không?", "content": "Nếu bạn xác nhận, tất cả các tùy chọn sắp xếp, lọc và hiển thị + bố cục mà bạn đã chọn cho chế độ xem này sẽ bị xóa vĩnh viễn mà không có cách nào khôi phục." - } + }, + "page_title": "{workspaceName} - Tất cả chế độ xem" }, "workspace_draft_issues": { "draft_an_issue": "Nháp một mục công việc", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "Không tìm thấy workspace", + "not_found_description": "Không tìm thấy không gian làm việc nào cho URL này. Không gian này có thể không tồn tại hoặc bạn không có quyền xem.", + "visit_profile": "Xem hồ sơ", + "not_authorized_title": "Không được phép!", + "not_authorized_description": "Bạn không phải là thành viên của không gian làm việc này. Hãy liên hệ quản trị viên để nhận lời mời hoặc kiểm tra các lời mời đang chờ.", + "check_pending_invites": "Kiểm tra lời mời đang chờ" + }, + "workspace_invitation": { + "invitation_not_found": "Không tìm thấy lời mời", + "invited_to_workspace": "Bạn đã được mời tham gia {workspaceName}", + "description": "Không gian làm việc của bạn là nơi bạn sẽ tạo các dự án, cộng tác trên các mục công việc của mình và sắp xếp các luồng công việc khác nhau trong tài khoản Plane của bạn.", + "accept": "Chấp nhận", + "ignore": "Phớt lờ", + "already_member": "Bạn đã là thành viên của {workspaceName}", + "continue_to_home": "Tiếp tục đến trang chủ", + "inactive_title": "Liên kết lời mời này không còn hoạt động nữa.", + "empty_project_link": "Hoặc bắt đầu từ một dự án trống", + "sign_in_to_continue": "Đăng nhập để tiếp tục", + "star_on_github": "Gắn sao cho chúng tôi trên GitHub", + "join_community": "Tham gia cộng đồng những người sáng tạo tích cực của chúng tôi" + }, + "onboarding": { + "create_profile_title": "Tạo hồ sơ của bạn.", + "create_profile_description": "Đây là cách bạn sẽ xuất hiện trong Plane.", + "change_image": "Thay đổi hình ảnh", + "upload_image": "Tải hình ảnh lên", + "name": "Tên", + "name_required": "Tên là bắt buộc", + "name_within_50": "Tên phải trong vòng 50 ký tự.", + "enter_full_name": "Nhập tên đầy đủ của bạn", + "set_password": "Đặt mật khẩu", + "optional": "Không bắt buộc", + "passwords_do_not_match": "Mật khẩu không khớp", + "passwords_match": "Mật khẩu trùng khớp", + "continue": "Tiếp tục", + "invite_team_title": "Mời đồng đội của bạn", + "invite_team_description": "Làm việc trong Plane hiệu quả nhất khi có đội nhóm của bạn. Hãy mời họ ngay để tận dụng tối đa Plane.", + "invalid_email": "Đó không giống như một địa chỉ email.", + "success": "Thành công!", + "invitations_sent": "Lời mời đã được gửi thành công.", + "error": "Lỗi!", + "add_another": "Thêm cái khác", + "do_later": "tôi sẽ làm nó sau", + "join_invites_title": "Tham gia lời mời hoặc tạo không gian làm việc", + "unified_description": "Tất cả công việc của bạn - thống nhất.", + "create_new_workspace": "Tạo không gian làm việc mới", + "no_invitations_found": "Không tìm thấy lời mời nào", + "you_are_invited": "Bạn được mời!", + "accept_invites": "Chấp nhận lời mời cộng tác với nhóm của bạn.", + "continue_to_workspace": "Tiếp tục đến không gian làm việc", + "or": "hoặc", + "create_own_workspace": "Tạo không gian làm việc của riêng bạn", + "workspace_creation_disabled": "Có vẻ như bạn không nhận được bất kỳ lời mời nào vào không gian làm việc và quản trị viên phiên bản của bạn đã hạn chế việc tạo không gian làm việc mới. Vui lòng yêu cầu chủ sở hữu hoặc quản trị viên không gian làm việc mời bạn đến không gian làm việc trước và quay lại màn hình này để tham gia.", + "create_workspace_title": "Tạo không gian làm việc của bạn", + "enter_workspace_name": "Nhập tên không gian làm việc", + "join_existing_workspace": "Tham gia không gian làm việc hiện có", + "profile_setup_completed": "Thiết lập hồ sơ đã hoàn tất.", + "profile_setup_failed": "Thiết lập hồ sơ không thành công.", + "usecase_title": "Bạn dự định sử dụng ZXPLaneZ như thế nào?", + "usecase_description": "Chọn một hoặc nhiều tùy chọn để chúng tôi có thể cá nhân hóa trải nghiệm của bạn.", + "select_one_or_more": "Chọn một hoặc nhiều", + "select_at_least_one": "Chọn ít nhất một tùy chọn.", + "skip": "Nhảy" } } diff --git a/packages/i18n/src/locales/zh-CN/auth.json b/packages/i18n/src/locales/zh-CN/auth.json index 1fc6f70571f..6844fe1cc0f 100644 --- a/packages/i18n/src/locales/zh-CN/auth.json +++ b/packages/i18n/src/locales/zh-CN/auth.json @@ -364,5 +364,45 @@ "sub_header": "请输入您的 {ldapProviderName} 凭据" } } + }, + "space_auth": { + "email": "邮箱", + "email_invalid": "邮箱格式无效", + "clear_email": "清空邮箱", + "password": "密码", + "set_password": "设置密码", + "enter_password": "输入密码", + "confirm_password": "确认密码", + "passwords_dont_match": "密码不匹配", + "continue": "继续", + "go_to_workspace": "前往工作区", + "sign_in_with_unique_code": "使用验证码登录", + "create_account": "创建账号", + "unique_code": "验证码", + "paste_code_sent": "粘贴发送到你邮箱的验证码", + "resend_in": "{seconds} 秒后重新发送", + "requesting_new_code": "正在请求新验证码", + "resend": "重新发送", + "sending_code": "正在发送验证码" + }, + "space_public": { + "by_creating_account": "创建账户即表示", + "by_signing_in": "登录即表示", + "you_agree_to_our": "你同意我们的", + "terms_of_service": "服务条款", + "and": "和", + "privacy_policy": "隐私政策", + "sign_up": "注册", + "oauth_with_provider": "使用 {provider} {action}", + "user_already_logged_in": "用户已登录", + "logged_in_title": "很好,还差最后一步。", + "logged_in_hint": "请在浏览器地址栏中输入你要查看的公开分享视图或页面 URL。", + "sign_in": "登录", + "auth": { + "sign_in_header": "登录后即可投票或评论", + "sign_in_subheader": "为你希望构建的功能提供反馈。", + "sign_up_header": "查看、评论并执行更多操作", + "sign_up_subheader": "注册或登录后即可处理 Plane 工作项和页面。" + } } } diff --git a/packages/i18n/src/locales/zh-CN/common.json b/packages/i18n/src/locales/zh-CN/common.json index dd67d925a07..137935e34b0 100644 --- a/packages/i18n/src/locales/zh-CN/common.json +++ b/packages/i18n/src/locales/zh-CN/common.json @@ -867,5 +867,20 @@ "description": "将工作项导出为 JSON 文件。", "short_description": "导出为 JSON" } + }, + "space_public": { + "error_title": "糟糕,看起来不太妙。", + "error_description_prefix": "Plane 崩溃了。别担心,我们的工程师已经收到通知。如果你有更多细节,请写信到", + "error_description_middle": "或前往我们的", + "forum": "论坛", + "refresh": "刷新", + "not_found_title": "这个链接无法打开", + "not_found_hint": "请检查浏览器地址栏中的 URL,然后重试。", + "instance_failure_image_alt": "无法获取实例详细信息", + "instance_failure_title": "无法获取实例详细信息。", + "instance_failure_description": "我们无法加载您的实例详细信息。", + "instance_failure_hint": "请检查您的连接并重试。", + "retry": "重试", + "powered_by": "提供支持" } } diff --git a/packages/i18n/src/locales/zh-CN/editor.json b/packages/i18n/src/locales/zh-CN/editor.json index 418274f1708..1fcdaa1f4cf 100644 --- a/packages/i18n/src/locales/zh-CN/editor.json +++ b/packages/i18n/src/locales/zh-CN/editor.json @@ -61,5 +61,79 @@ "use_this": "使用此", "refine": "优化" } + }, + "editor": { + "url": "URL", + "enter_or_paste_url": "输入或粘贴 URL", + "text": "文本", + "enter_text_to_display": "输入要显示的文本", + "remove_link": "移除链接", + "edit_link": "编辑链接", + "color": "颜色", + "text_colors": "文字颜色", + "background_colors": "背景颜色", + "link": "链接", + "enter_or_paste_link": "输入或粘贴链接", + "please_enter_valid_url": "请输入有效的URL", + "delete": "删除", + "duplicate": "复制", + "multiple": "多个", + "loading": "加载中", + "no_results": "没有结果", + "copy_code": "复制代码", + "add_an_image": "添加图像", + "error_loading_image": "加载图像时出错", + "uploading": "上传中", + "drop_image_here": "将图像拖放到此处", + "retry_duplication": "重试复制", + "retry": "重试", + "no_emojis_found": "没有找到表情符号", + "fullscreen_image_viewer": "全屏图像查看器", + "close_image_viewer": "关闭图像查看器", + "zoom_out": "缩小", + "zoom_in": "放大", + "download_image": "下载图片", + "open_image_in_new_tab": "在新选项卡中打开图像", + "view_in_full_screen": "全屏查看", + "view_image_in_full_screen": "全屏查看图像", + "align": "对齐", + "download": "下载", + "clear_contents": "清除内容", + "insert_above": "在上面插入", + "insert_below": "在下面插入", + "insert_left": "向左插入", + "insert_right": "向右插入", + "header_row": "标题行", + "header_column": "标题列", + "alignment": { + "left": "左对齐", + "center": "居中", + "right": "右对齐" + }, + "menu_items": { + "text": "文本", + "h1": "标题 1", + "h2": "标题 2", + "h3": "标题 3", + "h4": "标题 4", + "h5": "标题 5", + "h6": "标题 6", + "bulleted-list": "项目符号列表", + "numbered-list": "编号列表", + "to-do-list": "待办事项清单", + "quote": "引用", + "code": "代码", + "table": "表格", + "image": "图像", + "divider": "分隔线", + "link": "链接", + "bold": "加粗", + "italic": "斜体", + "underline": "下划线", + "strikethrough": "删除线", + "text-color": "文字颜色", + "background-color": "背景颜色", + "text-align": "文本对齐" + } } } diff --git a/packages/i18n/src/locales/zh-CN/empty-state.json b/packages/i18n/src/locales/zh-CN/empty-state.json index 6dd470411e9..a04530eef18 100644 --- a/packages/i18n/src/locales/zh-CN/empty-state.json +++ b/packages/i18n/src/locales/zh-CN/empty-state.json @@ -266,5 +266,11 @@ "description": "选择工作项推进过程中经历的状态。" } } + }, + "app_not_found": { + "alt": "404 - 找不到页面", + "title": "哎呀,出了点问题。", + "description": "抱歉,找不到您要访问的页面。它可能已被移除、重命名,或暂时不可用。", + "go_to_home": "返回首页" } } diff --git a/packages/i18n/src/locales/zh-CN/inbox.json b/packages/i18n/src/locales/zh-CN/inbox.json index 5df39b597ff..d46a5bccae6 100644 --- a/packages/i18n/src/locales/zh-CN/inbox.json +++ b/packages/i18n/src/locales/zh-CN/inbox.json @@ -83,5 +83,56 @@ "title": "选择一个工作项以查看其详细信息。" } } + }, + "inbox": { + "duplicate_issues_found": "发现 {count} 个重复工作项", + "description_versions": { + "intake_form_user": "收集表单用户" + }, + "errors": { + "asset_upload_failed": "资源上传失败。请稍后重试。", + "asset_duplication_failed": "资产复制失败。请稍后重试。", + "permission_denied": "没有权限", + "mark_duplicate_permission": "只有项目管理员可以将工作项标记为重复", + "mark_duplicate_permission_plural": "只有项目管理员可以将工作项标记为重复" + }, + "filters": { + "created_date": "创建日期", + "updated_date": "更新日期", + "last_updated_date": "最后更新日期", + "status": "状态", + "work_item_status": "工作项状态", + "view_all": "查看全部", + "view_less": "查看较少", + "date_options": { + "today": "今天", + "yesterday": "昨天", + "last_7_days": "过去 7 天", + "last_30_days": "过去 30 天" + }, + "date_operators": { + "after": "后", + "before": "前" + } + }, + "navigation": { + "previous_work_item": "上一个工作项", + "next_work_item": "下一个工作项" + }, + "properties": { + "duplicate_of": "重复于" + }, + "select_duplicate": { + "select_work_item": "选择工作项" + }, + "sidebar": { + "label_count": "{count} 标签" + }, + "toasts": { + "editor_processing": "编辑器仍在处理更改。请稍候再继续。", + "create_success": "工作项创建成功。", + "delete_failed": "工作项删除失败", + "update_failed": "工作项更新失败" + } } } diff --git a/packages/i18n/src/locales/zh-CN/page.json b/packages/i18n/src/locales/zh-CN/page.json index aab6a25cd85..f79b176f58f 100644 --- a/packages/i18n/src/locales/zh-CN/page.json +++ b/packages/i18n/src/locales/zh-CN/page.json @@ -111,5 +111,18 @@ "success_message": "页面已从集合中移除。", "error_message": "无法将页面从集合中移除。请重试。" } + }, + "page_access": { + "not_found_title": "找不到页面", + "not_found_description": "你尝试访问的页面不存在,或你没有权限查看。", + "view_other_pages": "查看其他页面" + }, + "profile_activity": { + "page_title": "个人资料 - 活动" + }, + "space_public": { + "page_not_found_alt": "找不到页面", + "page_not_found_description": "您要查找的页面不存在或已被移动。", + "something_went_wrong": "哎呀!出了点问题。" } } diff --git a/packages/i18n/src/locales/zh-CN/project.json b/packages/i18n/src/locales/zh-CN/project.json index 53c1b28ea33..ca116e97892 100644 --- a/packages/i18n/src/locales/zh-CN/project.json +++ b/packages/i18n/src/locales/zh-CN/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "暂无项目", + "description": "项目是目标驱动工作的基础。你可以用项目管理团队、任务以及完成工作所需的一切。", + "learn_more": "了解更多项目内容", + "start_first_project": "开始你的第一个项目" } } diff --git a/packages/i18n/src/locales/zh-CN/work-item.json b/packages/i18n/src/locales/zh-CN/work-item.json index 0617955699e..c254ce0fe33 100644 --- a/packages/i18n/src/locales/zh-CN/work-item.json +++ b/packages/i18n/src/locales/zh-CN/work-item.json @@ -422,5 +422,35 @@ "label": "史诗标题", "required": "史诗标题为必填项" } + }, + "space_public": { + "peek": { + "side": "侧边预览", + "modal": "弹窗", + "full_screen": "全屏" + }, + "public_board_not_found": "公开看板不存在。请检查 URL。", + "no_work_items_found": "未找到工作项", + "bot_name": "{name} 机器人", + "commented_time": "评论于 {time}", + "and_more": "还有 {count} 个", + "no_upvotes_yet": "暂无赞成票", + "no_downvotes_yet": "暂无反对票", + "view_less": "收起", + "view_all": "查看全部", + "no_matches_found": "未找到匹配项", + "no_date": "无日期", + "no_cycle": "无周期", + "no_modules": "无模块", + "modules_count": "{count} 个模块", + "no_assignees": "无负责人", + "labels_count": "{count} 个标签", + "no_labels": "无标签", + "sign_in_to_add_comment": "登录以添加评论", + "add_comment": "添加评论", + "link_copied": "链接已复制!", + "work_item_link_copied": "工作项链接已复制到剪贴板。", + "comment_post_error": "无法发表评论。请再试一次。", + "user": "用户" } } diff --git a/packages/i18n/src/locales/zh-CN/workspace.json b/packages/i18n/src/locales/zh-CN/workspace.json index a4f06dc7cf1..024b8f9e388 100644 --- a/packages/i18n/src/locales/zh-CN/workspace.json +++ b/packages/i18n/src/locales/zh-CN/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "您确定要删除此视图吗?", "content": "如果您确认,您为此视图选择的所有排序、筛选和显示选项 + 布局将被永久删除,无法恢复。" - } + }, + "page_title": "{workspaceName} - 全部视图" }, "workspace_draft_issues": { "draft_an_issue": "起草工作项", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "找不到工作区", + "not_found_description": "此 URL 对应的工作区不存在,或你没有权限查看。", + "visit_profile": "访问个人资料", + "not_authorized_title": "未授权!", + "not_authorized_description": "你不是此工作区的成员。请联系工作区管理员邀请你加入,或检查待处理的邀请。", + "check_pending_invites": "查看待处理邀请" + }, + "workspace_invitation": { + "invitation_not_found": "未找到邀请", + "invited_to_workspace": "你已受邀加入 {workspaceName}", + "description": "工作区用于创建项目、协作处理工作项,并在 Plane 账户中组织不同的工作流。", + "accept": "接受", + "ignore": "忽略", + "already_member": "你已经是 {workspaceName} 的成员", + "continue_to_home": "返回主页", + "inactive_title": "此邀请链接已失效。", + "empty_project_link": "或从空项目开始", + "sign_in_to_continue": "登录以继续", + "star_on_github": "在 GitHub 上给我们加星", + "join_community": "加入我们的创作者社区" + }, + "onboarding": { + "create_profile_title": "创建你的个人资料。", + "create_profile_description": "这是你在 Plane 中显示给他人的信息。", + "change_image": "更换图片", + "upload_image": "上传图片", + "name": "姓名", + "name_required": "姓名为必填项", + "name_within_50": "姓名必须在 50 个字符以内。", + "enter_full_name": "输入你的全名", + "set_password": "设置密码", + "optional": "可选", + "passwords_do_not_match": "密码不匹配", + "passwords_match": "密码匹配", + "continue": "继续", + "invite_team_title": "邀请你的队友", + "invite_team_description": "Plane 最适合团队协作使用。现在邀请团队成员,充分发挥 Plane 的价值。", + "invalid_email": "这看起来不像有效的邮箱地址。", + "success": "成功!", + "invitations_sent": "邀请已成功发送。", + "error": "错误!", + "add_another": "再添加一个", + "do_later": "稍后再说", + "join_invites_title": "加入邀请或创建工作区", + "unified_description": "所有工作,统一管理。", + "create_new_workspace": "创建新工作区", + "no_invitations_found": "未找到邀请", + "you_are_invited": "你收到了邀请!", + "accept_invites": "接受邀请,与团队一起协作。", + "continue_to_workspace": "继续前往工作区", + "or": "或", + "create_own_workspace": "创建自己的工作区", + "workspace_creation_disabled": "你似乎没有任何工作区邀请,且实例管理员已限制创建新工作区。请先让工作区所有者或管理员邀请你加入工作区,然后回到此页面继续。", + "create_workspace_title": "创建你的工作区", + "enter_workspace_name": "输入工作区名称", + "join_existing_workspace": "加入现有工作区", + "profile_setup_completed": "个人资料设置完成。", + "profile_setup_failed": "配置文件设置失败。", + "usecase_title": "您打算如何使用 Plane?", + "usecase_description": "选择一个或多个选项,以便我们为您提供个性化体验。", + "select_one_or_more": "选择一个或多个", + "select_at_least_one": "至少选择一个选项。", + "skip": "跳过" } } diff --git a/packages/i18n/src/locales/zh-TW/auth.json b/packages/i18n/src/locales/zh-TW/auth.json index d7c050487f8..3951bd92f17 100644 --- a/packages/i18n/src/locales/zh-TW/auth.json +++ b/packages/i18n/src/locales/zh-TW/auth.json @@ -364,5 +364,45 @@ "sub_header": "請輸入您的 {ldapProviderName} 憑證" } } + }, + "space_auth": { + "email": "電子郵件", + "email_invalid": "電子郵件無效", + "clear_email": "清除電子郵件", + "password": "密碼", + "set_password": "設定密碼", + "enter_password": "輸入密碼", + "confirm_password": "確認密碼", + "passwords_dont_match": "密碼不匹配", + "continue": "繼續", + "go_to_workspace": "轉到工作區", + "sign_in_with_unique_code": "使用驗證碼登入", + "create_account": "建立帳戶", + "unique_code": "驗證碼", + "paste_code_sent": "貼上發送到您的電子郵件的代碼", + "resend_in": "在 {seconds}s 中重新傳送", + "requesting_new_code": "正在請求新驗證碼", + "resend": "重新發送", + "sending_code": "正在傳送驗證碼" + }, + "space_public": { + "by_creating_account": "建立帳戶即表示", + "by_signing_in": "登入即表示", + "you_agree_to_our": "你同意我們的", + "terms_of_service": "服務條款", + "and": "和", + "privacy_policy": "隱私權政策", + "sign_up": "註冊", + "oauth_with_provider": "使用 {provider} {action}", + "user_already_logged_in": "使用者已登入", + "logged_in_title": "很好,還差最後一步。", + "logged_in_hint": "請在瀏覽器位址列中輸入你要查看的公開分享檢視或頁面 URL。", + "sign_in": "登入", + "auth": { + "sign_in_header": "登入後即可投票或評論", + "sign_in_subheader": "為你希望建置的功能提供回饋。", + "sign_up_header": "查看、評論並執行更多操作", + "sign_up_subheader": "註冊或登入後即可處理 Plane 工作項目和頁面。" + } } } diff --git a/packages/i18n/src/locales/zh-TW/common.json b/packages/i18n/src/locales/zh-TW/common.json index 834a2d922d8..59c06b27d0f 100644 --- a/packages/i18n/src/locales/zh-TW/common.json +++ b/packages/i18n/src/locales/zh-TW/common.json @@ -867,5 +867,20 @@ "description": "將工作事項匯出為 JSON 檔案。", "short_description": "匯出為 JSON" } + }, + "space_public": { + "error_title": "糟糕,看起來不太妙。", + "error_description_prefix": "Plane 當掉了。別擔心,我們的工程師已收到通知。如果你有更多細節,請寫信到", + "error_description_middle": "或前往我們的", + "forum": "論壇", + "refresh": "重新整理", + "not_found_title": "這個連結無法開啟", + "not_found_hint": "請檢查瀏覽器位址列中的 URL,然後再試一次。", + "instance_failure_image_alt": "無法取得執行個體詳細資訊", + "instance_failure_title": "無法取得執行個體詳細資訊。", + "instance_failure_description": "我們無法載入你的執行個體詳細資訊。", + "instance_failure_hint": "請檢查連線並重試。", + "retry": "重試", + "powered_by": "技術支援" } } diff --git a/packages/i18n/src/locales/zh-TW/editor.json b/packages/i18n/src/locales/zh-TW/editor.json index 45d93c25761..fca3df9077a 100644 --- a/packages/i18n/src/locales/zh-TW/editor.json +++ b/packages/i18n/src/locales/zh-TW/editor.json @@ -61,5 +61,79 @@ "use_this": "使用此項", "refine": "精煉" } + }, + "editor": { + "url": "網址", + "enter_or_paste_url": "輸入或貼上網址", + "text": "文字", + "enter_text_to_display": "輸入要顯示的文字", + "remove_link": "刪除連結", + "edit_link": "編輯連結", + "color": "顏色", + "text_colors": "文字顏色", + "background_colors": "背景顏色", + "link": "連結", + "enter_or_paste_link": "輸入或貼上連結", + "please_enter_valid_url": "請輸入有效的URL", + "delete": "刪除", + "duplicate": "複製", + "multiple": "多個", + "loading": "載入中", + "no_results": "沒有結果", + "copy_code": "複製程式碼", + "add_an_image": "新增影像", + "error_loading_image": "載入圖片時出錯", + "uploading": "上傳中", + "drop_image_here": "將圖像拖放到此處", + "retry_duplication": "重試複製", + "retry": "重試", + "no_emojis_found": "沒有找到表情符號", + "fullscreen_image_viewer": "全螢幕影像檢視器", + "close_image_viewer": "關閉影像檢視器", + "zoom_out": "縮小", + "zoom_in": "放大", + "download_image": "下載圖片", + "open_image_in_new_tab": "在新分頁中開啟圖像", + "view_in_full_screen": "全螢幕檢視", + "view_image_in_full_screen": "全螢幕檢視影像", + "align": "對齊", + "download": "下載", + "clear_contents": "清除內容", + "insert_above": "在上面插入", + "insert_below": "在下面插入", + "insert_left": "向左插入", + "insert_right": "向右插入", + "header_row": "標題行", + "header_column": "標題列", + "alignment": { + "left": "左對齊", + "center": "置中", + "right": "右對齊" + }, + "menu_items": { + "text": "文字", + "h1": "標題 1", + "h2": "標題 2", + "h3": "標題 3", + "h4": "標題 4", + "h5": "標題 5", + "h6": "標題 6", + "bulleted-list": "項目符號列表", + "numbered-list": "編號列表", + "to-do-list": "待辦事項清單", + "quote": "引用", + "code": "程式碼", + "table": "表格", + "image": "影像", + "divider": "分隔線", + "link": "連結", + "bold": "粗體", + "italic": "斜體", + "underline": "底線", + "strikethrough": "刪除線", + "text-color": "文字顏色", + "background-color": "背景顏色", + "text-align": "文字對齊" + } } } diff --git a/packages/i18n/src/locales/zh-TW/empty-state.json b/packages/i18n/src/locales/zh-TW/empty-state.json index ebb0ad85fd0..baae621fcf4 100644 --- a/packages/i18n/src/locales/zh-TW/empty-state.json +++ b/packages/i18n/src/locales/zh-TW/empty-state.json @@ -266,5 +266,11 @@ "description": "選擇工作項目經過的狀態。" } } + }, + "app_not_found": { + "alt": "404 - 找不到頁面", + "title": "糟糕,發生了一些問題。", + "description": "抱歉,找不到您要前往的頁面。它可能已被移除、重新命名,或暫時無法使用。", + "go_to_home": "返回首頁" } } diff --git a/packages/i18n/src/locales/zh-TW/inbox.json b/packages/i18n/src/locales/zh-TW/inbox.json index a6bd6a8b4a7..7c0680073b8 100644 --- a/packages/i18n/src/locales/zh-TW/inbox.json +++ b/packages/i18n/src/locales/zh-TW/inbox.json @@ -83,5 +83,56 @@ "title": "選擇工作事項以檢視其詳細資訊。" } } + }, + "inbox": { + "duplicate_issues_found": "發現 {count} 個重複工作項", + "description_versions": { + "intake_form_user": "收集表單使用者" + }, + "errors": { + "asset_upload_failed": "資源上傳失敗。請稍後重試。", + "asset_duplication_failed": "資產複製失敗。請稍後重試。", + "permission_denied": "沒有權限", + "mark_duplicate_permission": "只有專案管理員可以將工作項目標記為重複", + "mark_duplicate_permission_plural": "只有專案管理員可以將工作項目標記為重複" + }, + "filters": { + "created_date": "建立日期", + "updated_date": "更新日期", + "last_updated_date": "最後更新日期", + "status": "狀態", + "work_item_status": "工作項狀態", + "view_all": "看全部", + "view_less": "查看較少", + "date_options": { + "today": "今天", + "yesterday": "昨天", + "last_7_days": "過去 7 天", + "last_30_days": "過去 30 天" + }, + "date_operators": { + "after": "後", + "before": "前" + } + }, + "navigation": { + "previous_work_item": "上一個工作項", + "next_work_item": "下一個工作項" + }, + "properties": { + "duplicate_of": "重複於" + }, + "select_duplicate": { + "select_work_item": "選擇工作項" + }, + "sidebar": { + "label_count": "{count} 標籤" + }, + "toasts": { + "editor_processing": "編輯器仍在處理更改。請稍候再繼續。", + "create_success": "工作項目建立成功。", + "delete_failed": "工作項目刪除失敗", + "update_failed": "工作項目更新失敗" + } } } diff --git a/packages/i18n/src/locales/zh-TW/page.json b/packages/i18n/src/locales/zh-TW/page.json index f0e876a9641..ce59dcc0b17 100644 --- a/packages/i18n/src/locales/zh-TW/page.json +++ b/packages/i18n/src/locales/zh-TW/page.json @@ -111,5 +111,18 @@ "success_message": "頁面已從集合中移除。", "error_message": "無法將頁面從集合中移除。請再試一次。" } + }, + "page_access": { + "not_found_title": "找不到頁面", + "not_found_description": "你嘗試存取的頁面不存在,或你沒有權限檢視。", + "view_other_pages": "檢視其他頁面" + }, + "profile_activity": { + "page_title": "個人資料 - 活動" + }, + "space_public": { + "page_not_found_alt": "找不到頁面", + "page_not_found_description": "你要尋找的頁面不存在或已被移動。", + "something_went_wrong": "糟糕!出了點問題。" } } diff --git a/packages/i18n/src/locales/zh-TW/project.json b/packages/i18n/src/locales/zh-TW/project.json index 08e874ac56f..efbe5078e2f 100644 --- a/packages/i18n/src/locales/zh-TW/project.json +++ b/packages/i18n/src/locales/zh-TW/project.json @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "尚無專案", + "description": "專案是目標導向工作的基礎。你可以用專案管理團隊、任務,以及完成工作所需的一切。", + "learn_more": "了解更多專案內容", + "start_first_project": "開始你的第一個專案" } } diff --git a/packages/i18n/src/locales/zh-TW/work-item.json b/packages/i18n/src/locales/zh-TW/work-item.json index 450b65a1131..a70a8e9b25f 100644 --- a/packages/i18n/src/locales/zh-TW/work-item.json +++ b/packages/i18n/src/locales/zh-TW/work-item.json @@ -422,5 +422,35 @@ "label": "Epic 標題", "required": "Epic 標題為必填。" } + }, + "space_public": { + "peek": { + "side": "側邊預覽", + "modal": "彈窗", + "full_screen": "全螢幕" + }, + "public_board_not_found": "公開看板不存在。請檢查 URL。", + "no_work_items_found": "未找到工作項", + "bot_name": "{name} 機器人", + "commented_time": "評論於 {time}", + "and_more": "還有 {count} 個", + "no_upvotes_yet": "暫無贊成票", + "no_downvotes_yet": "暫無反對票", + "view_less": "收起", + "view_all": "查看全部", + "no_matches_found": "未找到相符項目", + "no_date": "無日期", + "no_cycle": "無週期", + "no_modules": "無模組", + "modules_count": "{count} 個模組", + "no_assignees": "無負責人", + "labels_count": "{count} 個標籤", + "no_labels": "無標籤", + "sign_in_to_add_comment": "登入以新增評論", + "add_comment": "新增評論", + "link_copied": "連結已複製!", + "work_item_link_copied": "工作項目連結已複製到剪貼簿。", + "comment_post_error": "評論發布失敗。請再試一次。", + "user": "使用者" } } diff --git a/packages/i18n/src/locales/zh-TW/workspace.json b/packages/i18n/src/locales/zh-TW/workspace.json index 3f2194ec768..55a43529540 100644 --- a/packages/i18n/src/locales/zh-TW/workspace.json +++ b/packages/i18n/src/locales/zh-TW/workspace.json @@ -261,7 +261,8 @@ "delete_view": { "title": "您確定要刪除此視圖嗎?", "content": "如果您確認,您為此視圖選擇的所有排序、篩選和顯示選項 + 布局將被永久刪除,無法恢復。" - } + }, + "page_title": "{workspaceName} - 全部檢視" }, "workspace_draft_issues": { "draft_an_issue": "建立工作事項草稿", @@ -374,5 +375,70 @@ } } } + }, + "workspace_access": { + "not_found_title": "找不到工作區", + "not_found_description": "此 URL 對應的工作區不存在,或你沒有權限檢視。", + "visit_profile": "前往個人資料", + "not_authorized_title": "未授權!", + "not_authorized_description": "你不是此工作區的成員。請聯絡工作區管理員邀請你加入,或檢查待處理的邀請。", + "check_pending_invites": "查看待處理邀請" + }, + "workspace_invitation": { + "invitation_not_found": "未找到邀請", + "invited_to_workspace": "您已被邀請加入 {workspaceName}", + "description": "您可以在工作區中建立專案、協作處理工作專案以及在 Plane 帳戶中組織不同的工作流程。", + "accept": "接受", + "ignore": "忽略", + "already_member": "您已經是 {workspaceName} 的會員", + "continue_to_home": "前往首頁", + "inactive_title": "此邀請連結不再有效。", + "empty_project_link": "或從一個空項目開始", + "sign_in_to_continue": "登入以繼續", + "star_on_github": "在 GitHub 上給我們加星標", + "join_community": "加入我們的活躍創作者社群" + }, + "onboarding": { + "create_profile_title": "建立您的個人資料。", + "create_profile_description": "這就是您在 Plane 中的顯示方式。", + "change_image": "更改圖像", + "upload_image": "上傳圖片", + "name": "姓名", + "name_required": "姓名為必填項", + "name_within_50": "名稱必須在 50 個字元以內。", + "enter_full_name": "輸入您的全名", + "set_password": "設定密碼", + "optional": "選修的", + "passwords_do_not_match": "密碼不匹配", + "passwords_match": "密碼匹配", + "continue": "繼續", + "invite_team_title": "邀請你的隊友", + "invite_team_description": "在 Plane 的工作最適合您的團隊。現在邀請他們充分發揮 Plane 的潛力。", + "invalid_email": "這看起來不像電子郵件地址。", + "success": "成功!", + "invitations_sent": "邀請已成功發送。", + "error": "錯誤!", + "add_another": "添加另一個", + "do_later": "我稍後會做", + "join_invites_title": "加入邀請或創建工作區", + "unified_description": "您的所有工作 — 統一。", + "create_new_workspace": "建立新工作區", + "no_invitations_found": "未找到邀請", + "you_are_invited": "誠摯邀請您!", + "accept_invites": "接受邀請與您的團隊合作。", + "continue_to_workspace": "繼續工作區", + "or": "或者", + "create_own_workspace": "創建您自己的工作空間", + "workspace_creation_disabled": "您似乎沒有任何工作區邀請,而您的實例管理員限制了新工作區的建立。請讓工作區擁有者或管理員先邀請您加入工作區,然後再回到此畫面加入。", + "create_workspace_title": "創建您的工作空間", + "enter_workspace_name": "輸入工作區名稱", + "join_existing_workspace": "加入現有工作區", + "profile_setup_completed": "個人資料設定完成。", + "profile_setup_failed": "設定檔設定失敗。", + "usecase_title": "您打算如何使用 Plane?", + "usecase_description": "選擇一個或多個選項,以便我們為您提供個人化體驗。", + "select_one_or_more": "選擇一個或多個", + "select_at_least_one": "至少選擇一個選項。", + "skip": "跳過" } } diff --git a/packages/propel/src/banner/banner.tsx b/packages/propel/src/banner/banner.tsx index 6afab1248f3..4227e64fa40 100644 --- a/packages/propel/src/banner/banner.tsx +++ b/packages/propel/src/banner/banner.tsx @@ -32,6 +32,8 @@ export interface BannerProps extends Omit, visible?: boolean; /** Animation duration for show/hide */ animationDuration?: number; + /** Accessible label for the dismiss button */ + dismissLabel?: string; } export const Banner = React.forwardRef(function Banner( @@ -44,6 +46,7 @@ export const Banner = React.forwardRef(function Banner( onDismiss, visible = true, animationDuration = 200, + dismissLabel = "Dismiss banner", className, children, ...props @@ -83,7 +86,7 @@ export const Banner = React.forwardRef(function Banner( if (!dismissible) return null; return ( - + ); })}
    diff --git a/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx b/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx index 2a0f1008fd4..45aaa8659ed 100644 --- a/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx +++ b/apps/web/core/components/onboarding/steps/workspace/join-invites.tsx @@ -81,12 +81,12 @@ export function WorkspaceJoinInvitesStep(props: Props) { invitations.map((invitation) => { const isSelected = invitationsRespond.includes(invitation.id); const invitedWorkspace = invitation.workspace; + const checkboxId = `workspace-join-invite-${invitation.id}`; return ( - + ); })}
    diff --git a/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx b/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx index ea73e31bbbc..37d637e4afc 100644 --- a/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx +++ b/apps/web/core/layouts/auth-layout/workspace-wrapper.tsx @@ -133,8 +133,8 @@ export const WorkspaceAuthWrapper = observer(function WorkspaceAuthWrapper(props await signOut().catch(() => setToast({ type: TOAST_TYPE.ERROR, - title: t("space_auth.sign_out.toast.error.title"), - message: t("space_auth.sign_out.toast.error.message"), + title: t("auth.sign_out.toast.error.title"), + message: t("auth.sign_out.toast.error.message"), }) ); }; From 58e7c3334032457df62b4065016601a7d419295c Mon Sep 17 00:00:00 2001 From: xuhongbo Date: Sat, 16 May 2026 11:26:08 +0800 Subject: [PATCH 06/11] fix(i18n): address review issues in PR #9082 - Replace split-key TermsAndConditions with Trans component so sentence structure stays correct in all 18 supported languages; add composite terms_sign_up / terms_sign_in keys to every auth.json - Export Trans from @plane/i18n for consistent import convention - Restore isMobile guard in InboxIssueFilterSelection useEffect so mobile users are not unexpectedly focused on the search input - Deduplicate PAST_DURATION_FILTER_I18N_KEYS into a shared inbox-filter/constants.ts; both filter and applied-filter date components now import from the single source of truth https://claude.ai/code/session_01CLFmPiRwMYkD6BeSZxhE6B --- .../account/terms-and-conditions.tsx | 37 +++++++++++-------- .../inbox-filter/applied-filters/date.tsx | 8 +--- .../inbox/inbox-filter/constants.ts | 12 ++++++ .../inbox/inbox-filter/filters/date.tsx | 8 +--- .../inbox-filter/filters/filter-selection.tsx | 6 ++- packages/i18n/src/index.ts | 1 + packages/i18n/src/locales/cs/auth.json | 4 +- packages/i18n/src/locales/de/auth.json | 4 +- packages/i18n/src/locales/en/auth.json | 4 +- packages/i18n/src/locales/es/auth.json | 4 +- packages/i18n/src/locales/fr/auth.json | 4 +- packages/i18n/src/locales/id/auth.json | 4 +- packages/i18n/src/locales/it/auth.json | 4 +- packages/i18n/src/locales/ja/auth.json | 4 +- packages/i18n/src/locales/ko/auth.json | 4 +- packages/i18n/src/locales/pl/auth.json | 4 +- packages/i18n/src/locales/pt-BR/auth.json | 4 +- packages/i18n/src/locales/ro/auth.json | 4 +- packages/i18n/src/locales/ru/auth.json | 4 +- packages/i18n/src/locales/sk/auth.json | 4 +- packages/i18n/src/locales/tr-TR/auth.json | 4 +- packages/i18n/src/locales/ua/auth.json | 4 +- packages/i18n/src/locales/vi-VN/auth.json | 4 +- packages/i18n/src/locales/zh-CN/auth.json | 4 +- packages/i18n/src/locales/zh-TW/auth.json | 4 +- 25 files changed, 98 insertions(+), 50 deletions(-) create mode 100644 apps/web/core/components/inbox/inbox-filter/constants.ts diff --git a/apps/space/components/account/terms-and-conditions.tsx b/apps/space/components/account/terms-and-conditions.tsx index 3319ca22441..e6114f66a7a 100644 --- a/apps/space/components/account/terms-and-conditions.tsx +++ b/apps/space/components/account/terms-and-conditions.tsx @@ -4,7 +4,7 @@ * See the LICENSE file for details. */ -import { useTranslation } from "@plane/i18n"; +import { Trans } from "@plane/i18n"; type Props = { isSignUp?: boolean; @@ -12,23 +12,30 @@ type Props = { export function TermsAndConditions(props: Props) { const { isSignUp = false } = props; - const { t } = useTranslation(); return (

    - {isSignUp ? t("space_public.by_creating_account") : t("space_public.by_signing_in")},{" "} - {t("space_public.you_agree_to_our")} - {" \n"} - - - {t("space_public.terms_of_service")} - - {" "} - {t("space_public.and")}{" "} - - {t("space_public.privacy_policy")} - - {"."} + + ), + privacy: ( + + ), + }} + />

    ); diff --git a/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx b/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx index 8ad27a12c7f..660b2db80bb 100644 --- a/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx +++ b/apps/web/core/components/inbox/inbox-filter/applied-filters/date.tsx @@ -13,6 +13,7 @@ import type { TInboxIssueFilterDateKeys } from "@plane/types"; import { Tag } from "@plane/ui"; import { renderFormattedDate } from "@plane/utils"; // constants +import { PAST_DURATION_FILTER_I18N_KEYS } from "../constants"; // hooks import { useProjectInbox } from "@/hooks/store/use-project-inbox"; @@ -21,13 +22,6 @@ type TInboxIssueAppliedFiltersDate = { label: string; }; -const PAST_DURATION_FILTER_I18N_KEYS: Record = { - today: "inbox.filters.date_options.today", - yesterday: "inbox.filters.date_options.yesterday", - last_7_days: "inbox.filters.date_options.last_7_days", - last_30_days: "inbox.filters.date_options.last_30_days", -}; - const CUSTOM_DATE_OPERATOR_I18N_KEYS: Record = { after: "inbox.filters.date_operators.after", before: "inbox.filters.date_operators.before", diff --git a/apps/web/core/components/inbox/inbox-filter/constants.ts b/apps/web/core/components/inbox/inbox-filter/constants.ts new file mode 100644 index 00000000000..13f328870b8 --- /dev/null +++ b/apps/web/core/components/inbox/inbox-filter/constants.ts @@ -0,0 +1,12 @@ +/** + * Copyright (c) 2023-present Plane Software, Inc. and contributors + * SPDX-License-Identifier: AGPL-3.0-only + * See the LICENSE file for details. + */ + +export const PAST_DURATION_FILTER_I18N_KEYS: Record = { + today: "inbox.filters.date_options.today", + yesterday: "inbox.filters.date_options.yesterday", + last_7_days: "inbox.filters.date_options.last_7_days", + last_30_days: "inbox.filters.date_options.last_30_days", +}; diff --git a/apps/web/core/components/inbox/inbox-filter/filters/date.tsx b/apps/web/core/components/inbox/inbox-filter/filters/date.tsx index b255399b734..ca0df90de5e 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/date.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/date.tsx @@ -14,6 +14,7 @@ import type { TInboxIssueFilterDateKeys } from "@plane/types"; import { DateFilterModal } from "@/components/core/filters/date-filter-modal"; import { FilterHeader, FilterOption } from "@/components/issues/issue-layouts/filters"; // constants +import { PAST_DURATION_FILTER_I18N_KEYS } from "../constants"; // hooks import { useProjectInbox } from "@/hooks/store/use-project-inbox"; @@ -28,13 +29,6 @@ const isDate = (date: string) => { return datePattern.test(date); }; -const PAST_DURATION_FILTER_I18N_KEYS: Record = { - today: "inbox.filters.date_options.today", - yesterday: "inbox.filters.date_options.yesterday", - last_7_days: "inbox.filters.date_options.last_7_days", - last_30_days: "inbox.filters.date_options.last_30_days", -}; - export const FilterDate = observer(function FilterDate(props: Props) { const { filterKey, label, searchQuery } = props; // hooks diff --git a/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx b/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx index 3a0f2485766..840369ba77d 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/filter-selection.tsx @@ -11,6 +11,7 @@ import { SearchIcon, CloseIcon } from "@plane/propel/icons"; // hooks import { useLabel } from "@/hooks/store/use-label"; import { useMember } from "@/hooks/store/use-member"; +import { usePlatformOS } from "@/hooks/use-platform-os"; // local imports import { FilterDate } from "./date"; import { FilterLabels } from "./labels"; @@ -21,6 +22,7 @@ import { FilterStatus } from "./status"; export const InboxIssueFilterSelection = observer(function InboxIssueFilterSelection() { // hooks const { t } = useTranslation(); + const { isMobile } = usePlatformOS(); const { project: { projectMemberIds }, } = useMember(); @@ -30,8 +32,8 @@ export const InboxIssueFilterSelection = observer(function InboxIssueFilterSelec const searchInputRef = useRef(null); useEffect(() => { - searchInputRef.current?.focus(); - }, []); + if (!isMobile) searchInputRef.current?.focus(); + }, [isMobile]); return (
    diff --git a/packages/i18n/src/index.ts b/packages/i18n/src/index.ts index e5bdf3df1f0..a4cf5c31c41 100644 --- a/packages/i18n/src/index.ts +++ b/packages/i18n/src/index.ts @@ -6,6 +6,7 @@ // Components export { TranslationProvider } from "./provider"; +export { Trans } from "react-i18next"; // Hooks export { useTranslation } from "./hooks/use-translation"; diff --git a/packages/i18n/src/locales/cs/auth.json b/packages/i18n/src/locales/cs/auth.json index 85eee435cb0..b700192c509 100644 --- a/packages/i18n/src/locales/cs/auth.json +++ b/packages/i18n/src/locales/cs/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Pomozte posunout funkce, které chcete mít vytvořené.", "sign_up_header": "Zobrazujte, komentujte a dělejte víc", "sign_up_subheader": "Zaregistrujte se nebo přihlaste, abyste mohli pracovat s pracovními položkami a stránkami Plane." - } + }, + "terms_sign_up": "Vytvořením účtu souhlasíte s našimi Podmínkami služby a Zásadami ochrany osobních údajů.", + "terms_sign_in": "Přihlášením souhlasíte s našimi Podmínkami služby a Zásadami ochrany osobních údajů." } } diff --git a/packages/i18n/src/locales/de/auth.json b/packages/i18n/src/locales/de/auth.json index 440dab47ddd..e23278d62e9 100644 --- a/packages/i18n/src/locales/de/auth.json +++ b/packages/i18n/src/locales/de/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Helfen Sie dabei, die Funktionen voranzubringen, die Sie umgesetzt sehen möchten.", "sign_up_header": "Ansehen, kommentieren und mehr tun", "sign_up_subheader": "Registrieren Sie sich oder melden Sie sich an, um mit Plane-Arbeitselementen und Seiten zu arbeiten." - } + }, + "terms_sign_up": "Mit dem Erstellen eines Kontos stimmen Sie unseren Nutzungsbedingungen und der Datenschutzrichtlinie zu.", + "terms_sign_in": "Mit der Anmeldung stimmen Sie unseren Nutzungsbedingungen und der Datenschutzrichtlinie zu." } } diff --git a/packages/i18n/src/locales/en/auth.json b/packages/i18n/src/locales/en/auth.json index b6a55e923c9..38449bbb9ac 100644 --- a/packages/i18n/src/locales/en/auth.json +++ b/packages/i18n/src/locales/en/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Contribute in nudging the features you want to get built.", "sign_up_header": "View, comment, and do more", "sign_up_subheader": "Sign up or log in to work with Plane work items and Pages." - } + }, + "terms_sign_up": "By creating an account, you agree to our Terms of Service and Privacy Policy.", + "terms_sign_in": "By signing in, you agree to our Terms of Service and Privacy Policy." } } diff --git a/packages/i18n/src/locales/es/auth.json b/packages/i18n/src/locales/es/auth.json index 0c47b7aa2fe..ae9d88ad61b 100644 --- a/packages/i18n/src/locales/es/auth.json +++ b/packages/i18n/src/locales/es/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Ayuda a impulsar las funciones que quieres que se creen.", "sign_up_header": "Ver, comentar y hacer más", "sign_up_subheader": "Regístrate o inicia sesión para trabajar con elementos de trabajo y páginas de Plane." - } + }, + "terms_sign_up": "Al crear una cuenta, aceptas nuestros Términos de servicio y Política de privacidad.", + "terms_sign_in": "Al iniciar sesión, aceptas nuestros Términos de servicio y Política de privacidad." } } diff --git a/packages/i18n/src/locales/fr/auth.json b/packages/i18n/src/locales/fr/auth.json index 4fb83d9c102..c9e0149bcff 100644 --- a/packages/i18n/src/locales/fr/auth.json +++ b/packages/i18n/src/locales/fr/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Aidez à faire avancer les fonctionnalités que vous souhaitez voir créées.", "sign_up_header": "Consultez, commentez et faites plus", "sign_up_subheader": "Inscrivez-vous ou connectez-vous pour travailler avec les éléments de travail et les pages Plane." - } + }, + "terms_sign_up": "En créant un compte, vous acceptez nos Conditions d'utilisation et Politique de confidentialité.", + "terms_sign_in": "En vous connectant, vous acceptez nos Conditions d'utilisation et Politique de confidentialité." } } diff --git a/packages/i18n/src/locales/id/auth.json b/packages/i18n/src/locales/id/auth.json index b1871f767db..b01b03592b4 100644 --- a/packages/i18n/src/locales/id/auth.json +++ b/packages/i18n/src/locales/id/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Bantu mendorong fitur yang ingin Anda lihat dibangun.", "sign_up_header": "Lihat, komentari, dan lakukan lebih banyak", "sign_up_subheader": "Daftar atau masuk untuk bekerja dengan item kerja dan Halaman Plane." - } + }, + "terms_sign_up": "Dengan membuat akun, Anda menyetujui Ketentuan Layanan dan Kebijakan Privasi kami.", + "terms_sign_in": "Dengan masuk, Anda menyetujui Ketentuan Layanan dan Kebijakan Privasi kami." } } diff --git a/packages/i18n/src/locales/it/auth.json b/packages/i18n/src/locales/it/auth.json index 0d5f46c90f9..0f4fb2d8a87 100644 --- a/packages/i18n/src/locales/it/auth.json +++ b/packages/i18n/src/locales/it/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Aiuta a spingere le funzionalità che vuoi vedere realizzate.", "sign_up_header": "Visualizza, commenta e fai di più", "sign_up_subheader": "Registrati o accedi per lavorare con gli elementi di lavoro e le Pagine di Plane." - } + }, + "terms_sign_up": "Creando un account, accetti i nostri Termini di servizio e Informativa sulla privacy.", + "terms_sign_in": "Accedendo, accetti i nostri Termini di servizio e Informativa sulla privacy." } } diff --git a/packages/i18n/src/locales/ja/auth.json b/packages/i18n/src/locales/ja/auth.json index 341ec4ecac0..1a8a4f8b6ce 100644 --- a/packages/i18n/src/locales/ja/auth.json +++ b/packages/i18n/src/locales/ja/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "実装してほしい機能を後押ししましょう。", "sign_up_header": "閲覧、コメント、その他の操作", "sign_up_subheader": "Plane の作業項目とページを扱うには、登録またはサインインしてください。" - } + }, + "terms_sign_up": "アカウントを作成すると、利用規約およびプライバシーポリシーに同意したことになります。", + "terms_sign_in": "サインインすると、利用規約およびプライバシーポリシーに同意したことになります。" } } diff --git a/packages/i18n/src/locales/ko/auth.json b/packages/i18n/src/locales/ko/auth.json index f81f66556df..c2b6a6c4a28 100644 --- a/packages/i18n/src/locales/ko/auth.json +++ b/packages/i18n/src/locales/ko/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "원하는 기능이 만들어지도록 의견을 보태세요.", "sign_up_header": "보고, 댓글을 달고, 더 많은 작업을 수행하세요", "sign_up_subheader": "Plane 작업 항목과 페이지를 사용하려면 가입하거나 로그인하세요." - } + }, + "terms_sign_up": "계정을 만들면 서비스 약관개인정보 처리방침에 동의하게 됩니다.", + "terms_sign_in": "로그인하면 서비스 약관개인정보 처리방침에 동의하게 됩니다." } } diff --git a/packages/i18n/src/locales/pl/auth.json b/packages/i18n/src/locales/pl/auth.json index cb578fdd432..b5d6c35c484 100644 --- a/packages/i18n/src/locales/pl/auth.json +++ b/packages/i18n/src/locales/pl/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Pomóż przesuwać do przodu funkcje, które chcesz zobaczyć.", "sign_up_header": "Przeglądaj, komentuj i rób więcej", "sign_up_subheader": "Zarejestruj się lub zaloguj, aby pracować z elementami pracy i stronami Plane." - } + }, + "terms_sign_up": "Tworząc konto, akceptujesz nasze Warunki korzystania oraz Politykę prywatności.", + "terms_sign_in": "Logując się, akceptujesz nasze Warunki korzystania oraz Politykę prywatności." } } diff --git a/packages/i18n/src/locales/pt-BR/auth.json b/packages/i18n/src/locales/pt-BR/auth.json index 76edf5808eb..e5781575a13 100644 --- a/packages/i18n/src/locales/pt-BR/auth.json +++ b/packages/i18n/src/locales/pt-BR/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Ajude a impulsionar as funcionalidades que você quer ver criadas.", "sign_up_header": "Veja, comente e faça mais", "sign_up_subheader": "Cadastre-se ou entre para trabalhar com itens de trabalho e Páginas do Plane." - } + }, + "terms_sign_up": "Ao criar uma conta, você concorda com nossos Termos de Serviço e Política de Privacidade.", + "terms_sign_in": "Ao entrar, você concorda com nossos Termos de Serviço e Política de Privacidade." } } diff --git a/packages/i18n/src/locales/ro/auth.json b/packages/i18n/src/locales/ro/auth.json index 9096af75fd5..d96351885b3 100644 --- a/packages/i18n/src/locales/ro/auth.json +++ b/packages/i18n/src/locales/ro/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Ajutați la promovarea funcționalităților pe care doriți să le vedeți construite.", "sign_up_header": "Vizualizați, comentați și faceți mai mult", "sign_up_subheader": "Înregistrați-vă sau autentificați-vă pentru a lucra cu elemente de lucru și Pagini Plane." - } + }, + "terms_sign_up": "Prin crearea unui cont, sunteți de acord cu Termenii serviciului și Politica de confidențialitate.", + "terms_sign_in": "Prin autentificare, sunteți de acord cu Termenii serviciului și Politica de confidențialitate." } } diff --git a/packages/i18n/src/locales/ru/auth.json b/packages/i18n/src/locales/ru/auth.json index 44b3b45231e..aa8f7c6a272 100644 --- a/packages/i18n/src/locales/ru/auth.json +++ b/packages/i18n/src/locales/ru/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Помогите продвинуть функции, которые вы хотите увидеть реализованными.", "sign_up_header": "Просматривайте, комментируйте и делайте больше", "sign_up_subheader": "Зарегистрируйтесь или войдите, чтобы работать с рабочими элементами и страницами Plane." - } + }, + "terms_sign_up": "Создавая учетную запись, вы соглашаетесь с нашими Условиями обслуживания и Политикой конфиденциальности.", + "terms_sign_in": "Входя в систему, вы соглашаетесь с нашими Условиями обслуживания и Политикой конфиденциальности." } } diff --git a/packages/i18n/src/locales/sk/auth.json b/packages/i18n/src/locales/sk/auth.json index c7fdfd57311..d9be20380e4 100644 --- a/packages/i18n/src/locales/sk/auth.json +++ b/packages/i18n/src/locales/sk/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Pomôžte posunúť funkcie, ktoré chcete mať vytvorené.", "sign_up_header": "Zobrazujte, komentujte a robte viac", "sign_up_subheader": "Zaregistrujte sa alebo sa prihláste, aby ste mohli pracovať s pracovnými položkami a Stránkami Plane." - } + }, + "terms_sign_up": "Vytvorením účtu súhlasíte s našimi Podmienkami služby a Zásadami ochrany osobných údajov.", + "terms_sign_in": "Prihlásením súhlasíte s našimi Podmienkami služby a Zásadami ochrany osobných údajov." } } diff --git a/packages/i18n/src/locales/tr-TR/auth.json b/packages/i18n/src/locales/tr-TR/auth.json index 8164a6d1bad..9d4de2e845b 100644 --- a/packages/i18n/src/locales/tr-TR/auth.json +++ b/packages/i18n/src/locales/tr-TR/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Yapılmasını istediğiniz özelliklerin ilerlemesine katkıda bulunun.", "sign_up_header": "Görüntüleyin, yorum yapın ve daha fazlasını yapın", "sign_up_subheader": "Plane iş öğeleri ve Sayfaları ile çalışmak için kaydolun veya oturum açın." - } + }, + "terms_sign_up": "Hesap oluşturarak Hizmet Şartlarını ve Gizlilik Politikasını kabul etmiş olursunuz.", + "terms_sign_in": "Oturum açarak Hizmet Şartlarını ve Gizlilik Politikasını kabul etmiş olursunuz." } } diff --git a/packages/i18n/src/locales/ua/auth.json b/packages/i18n/src/locales/ua/auth.json index b98030bed76..0b87c0e2b16 100644 --- a/packages/i18n/src/locales/ua/auth.json +++ b/packages/i18n/src/locales/ua/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Допоможіть просувати функції, які хочете бачити реалізованими.", "sign_up_header": "Переглядайте, коментуйте та робіть більше", "sign_up_subheader": "Зареєструйтеся або увійдіть, щоб працювати з робочими елементами та сторінками Plane." - } + }, + "terms_sign_up": "Створюючи обліковий запис, ви погоджуєтеся з нашими Умовами надання послуг і Політикою конфіденційності.", + "terms_sign_in": "Входячи, ви погоджуєтеся з нашими Умовами надання послуг і Політикою конфіденційності." } } diff --git a/packages/i18n/src/locales/vi-VN/auth.json b/packages/i18n/src/locales/vi-VN/auth.json index 8b92acde74a..c23f9eb20d1 100644 --- a/packages/i18n/src/locales/vi-VN/auth.json +++ b/packages/i18n/src/locales/vi-VN/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "Góp phần thúc đẩy các tính năng bạn muốn được xây dựng.", "sign_up_header": "Xem, bình luận và làm nhiều việc hơn", "sign_up_subheader": "Đăng ký hoặc đăng nhập để làm việc với các mục công việc và Trang của Plane." - } + }, + "terms_sign_up": "Bằng cách tạo tài khoản, bạn đồng ý với Điều khoản dịch vụChính sách quyền riêng tư.", + "terms_sign_in": "Bằng cách đăng nhập, bạn đồng ý với Điều khoản dịch vụChính sách quyền riêng tư." } } diff --git a/packages/i18n/src/locales/zh-CN/auth.json b/packages/i18n/src/locales/zh-CN/auth.json index 6844fe1cc0f..d28d0322c36 100644 --- a/packages/i18n/src/locales/zh-CN/auth.json +++ b/packages/i18n/src/locales/zh-CN/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "为你希望构建的功能提供反馈。", "sign_up_header": "查看、评论并执行更多操作", "sign_up_subheader": "注册或登录后即可处理 Plane 工作项和页面。" - } + }, + "terms_sign_up": "创建账户即表示你同意我们的服务条款隐私政策。", + "terms_sign_in": "登录即表示你同意我们的服务条款隐私政策。" } } diff --git a/packages/i18n/src/locales/zh-TW/auth.json b/packages/i18n/src/locales/zh-TW/auth.json index 663a09921cd..340969a9dac 100644 --- a/packages/i18n/src/locales/zh-TW/auth.json +++ b/packages/i18n/src/locales/zh-TW/auth.json @@ -403,6 +403,8 @@ "sign_in_subheader": "為你希望建置的功能提供回饋。", "sign_up_header": "查看、評論並執行更多操作", "sign_up_subheader": "註冊或登入後即可處理 Plane 工作項目和頁面。" - } + }, + "terms_sign_up": "建立帳戶即表示你同意我們的服務條款隱私權政策。", + "terms_sign_in": "登入即表示你同意我們的服務條款隱私權政策。" } } From 3af7f0fd3cdf4acf2e12639e6f2564dd4ea684f7 Mon Sep 17 00:00:00 2001 From: xuhongbo Date: Sat, 16 May 2026 11:26:09 +0800 Subject: [PATCH 07/11] fix(i18n): comprehensive translation quality fixes across 18 languages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply 信达雅 (faithfulness/expressiveness/elegance) review findings from multi-agent professional translation audit: **Critical fixes (high severity):** - zh-CN/zh-TW: Fix "good"+"morning" concatenation bug ("早上早上"/"早安早上" → "早上好"/"早安") by emptying `good` and moving full greeting to time keys - zh-CN/zh-TW: Fix "Intake Trends" mistranslated as "入学趋势" (enrollment trends) → "需求收集趋势/趨勢" (intake/requirements trends) - zh-CN: Fix `onboarding.profile_setup_failed` "配置文件设置失败" → "个人资料设置失败" ("config file" vs "profile") - zh-CN: Fix snooze "暂停" (pause) → "延后" (defer/postpone) - ja: Fix severe phonetic transliterations back to Japanese ("クリエイテッド アット"→"作成日時", "セービング"→"保存中", etc.) - ru: Fix "Пейдж" (wrong transliteration) → "Страница" for `common.page` - ru: Fix gender agreement "Новое пароль" → "Новый пароль" - ru: Fix spelling "высококонтрастностная" → "высококонтрастная" - de: Fix typo "Däschbords" → "Dashboards" - sk: Fix verbal aspect error "Prepínať" (imperfective) → "Prepnúť" - sk: Fix "Nahranie diela" (artwork upload) → "Nahranie súboru" (file upload) - pl: Fix grammar "Zanim" (conjunction) → "Przed" (preposition) for date filter - tr-TR/es: Fix placeholder "alır-atar-uçar"/"obtiene-establece-vuela" → "123456" - fr/it/ua/tr-TR: Fix ' HTML entities in JSON strings (72 instances total) - zh-TW: Fix "文件" (document) → "檔案" (file) in file_upload, fix "字段"→"欄位" - zh-TW: Fix "技術支援" (tech support) → "Powered by" for space_public.powered_by - zh-TW: Fix "選修的" (elective course) → "選填" (optional field) **Structural fixes:** - All 18 languages: Translate 6 untranslated keys that remained as English (completed_on, your_profile, developer, work_structure, execution, administration) - All 18 languages: Fix `common.order_by.manual` removing spurious "- Ранг/ランク" additions not present in English source - All 18 languages: Fix `pi_chat` from "AI Chat" variants → "Plane AI" (brand name) - All 18 languages: Fix `attachmentComponent.uploader.drag_and_drop` - restore missing "or click to upload" option (was truncated to drag-only in 14 languages) - All 18 languages: Remove hardcoded `\n` from `issue.archive.description` **Plural/grammar fixes:** - ru/cs/pl/sk: Fix `inbox.sidebar.label_count` with proper ICU plural rules - ru: Fix `inbox_issue.snoozed.description` missing "few" plural category - ru: Fix `space_auth.resend_in` trailing English "s" → Russian "с" - ua: Fix `space_auth.resend_in` and `go_to_workspace` form consistency - ua: Fix `space_auth.go_to_workspace` imperative → infinitive **Consistency fixes:** - zh-TW workspace.json: Replace "創建"→"建立", "工作空間"→"工作區" throughout - cs/editor.json: Fix "Centrum"→"Střed" for alignment label, fix italic case - pl/editor.json: Unify alignment labels (left/center/right), fix insert_left - ru/editor.json: Fix `editor.menu_items.quote` verb→noun form - ru/work-item.json: Fix `issue.sibling.label` "related"→"sibling" semantics - ro/auth.json: Fix missing diacritics (Continua→Continuă) - it/inbox.json: Fix snooze action label - ko: Fix greetings to natural Korean (안녕하세요 pattern) - ja/auth.json: Fix resend_in "{seconds}s" → "{seconds}秒後に再送信" - ko/auth.json: Fix resend_in "{seconds}s" → "{seconds}초 후에 재전송" https://claude.ai/code/session_01CLFmPiRwMYkD6BeSZxhE6B --- packages/i18n/src/locales/cs/common.json | 12 ++-- packages/i18n/src/locales/cs/editor.json | 6 +- packages/i18n/src/locales/cs/inbox.json | 2 +- packages/i18n/src/locales/cs/work-item.json | 2 +- packages/i18n/src/locales/de/common.json | 18 +++--- packages/i18n/src/locales/es/auth.json | 2 +- packages/i18n/src/locales/es/common.json | 12 ++-- packages/i18n/src/locales/es/editor.json | 2 +- packages/i18n/src/locales/es/work-item.json | 2 +- packages/i18n/src/locales/fr/auth.json | 40 ++++++------ packages/i18n/src/locales/fr/common.json | 12 ++-- packages/i18n/src/locales/fr/editor.json | 2 +- packages/i18n/src/locales/fr/work-item.json | 2 +- packages/i18n/src/locales/id/common.json | 14 ++--- packages/i18n/src/locales/id/editor.json | 2 +- packages/i18n/src/locales/id/work-item.json | 2 +- packages/i18n/src/locales/it/auth.json | 12 ++-- packages/i18n/src/locales/it/common.json | 12 ++-- packages/i18n/src/locales/it/editor.json | 2 +- packages/i18n/src/locales/it/inbox.json | 2 +- packages/i18n/src/locales/ja/auth.json | 2 +- packages/i18n/src/locales/ja/common.json | 32 +++++----- packages/i18n/src/locales/ja/editor.json | 2 +- packages/i18n/src/locales/ja/work-item.json | 2 +- packages/i18n/src/locales/ko/auth.json | 2 +- packages/i18n/src/locales/ko/common.json | 24 +++---- packages/i18n/src/locales/ko/editor.json | 2 +- packages/i18n/src/locales/pl/common.json | 12 ++-- packages/i18n/src/locales/pl/editor.json | 10 +-- packages/i18n/src/locales/pl/inbox.json | 4 +- packages/i18n/src/locales/pt-BR/common.json | 14 ++--- packages/i18n/src/locales/pt-BR/editor.json | 2 +- .../i18n/src/locales/pt-BR/work-item.json | 2 +- packages/i18n/src/locales/ro/auth.json | 2 +- packages/i18n/src/locales/ro/common.json | 12 ++-- packages/i18n/src/locales/ro/editor.json | 2 +- packages/i18n/src/locales/ro/work-item.json | 2 +- packages/i18n/src/locales/ru/auth.json | 2 +- packages/i18n/src/locales/ru/common.json | 22 +++---- packages/i18n/src/locales/ru/editor.json | 4 +- packages/i18n/src/locales/ru/inbox.json | 2 +- packages/i18n/src/locales/ru/work-item.json | 4 +- packages/i18n/src/locales/sk/auth.json | 2 +- packages/i18n/src/locales/sk/common.json | 12 ++-- packages/i18n/src/locales/sk/editor.json | 2 +- packages/i18n/src/locales/sk/inbox.json | 4 +- packages/i18n/src/locales/sk/work-item.json | 2 +- packages/i18n/src/locales/tr-TR/auth.json | 62 +++++++++---------- packages/i18n/src/locales/tr-TR/common.json | 14 ++--- packages/i18n/src/locales/tr-TR/editor.json | 2 +- .../i18n/src/locales/tr-TR/work-item.json | 2 +- .../i18n/src/locales/tr-TR/workspace.json | 2 +- packages/i18n/src/locales/ua/auth.json | 6 +- packages/i18n/src/locales/ua/common.json | 14 ++--- packages/i18n/src/locales/ua/editor.json | 2 +- packages/i18n/src/locales/ua/work-item.json | 2 +- packages/i18n/src/locales/vi-VN/common.json | 12 ++-- packages/i18n/src/locales/vi-VN/editor.json | 2 +- .../i18n/src/locales/vi-VN/work-item.json | 2 +- packages/i18n/src/locales/zh-CN/common.json | 24 +++---- packages/i18n/src/locales/zh-CN/editor.json | 2 +- packages/i18n/src/locales/zh-CN/inbox.json | 10 +-- .../i18n/src/locales/zh-CN/work-item.json | 2 +- .../i18n/src/locales/zh-CN/workspace.json | 4 +- packages/i18n/src/locales/zh-TW/common.json | 32 +++++----- packages/i18n/src/locales/zh-TW/editor.json | 2 +- .../i18n/src/locales/zh-TW/work-item.json | 2 +- .../i18n/src/locales/zh-TW/workspace.json | 20 +++--- 68 files changed, 282 insertions(+), 282 deletions(-) diff --git a/packages/i18n/src/locales/cs/common.json b/packages/i18n/src/locales/cs/common.json index 2a2a2cf93b5..4eba876e56a 100644 --- a/packages/i18n/src/locales/cs/common.json +++ b/packages/i18n/src/locales/cs/common.json @@ -486,7 +486,7 @@ "project_timezone": "Časové pásmo projektu", "created_on": "Vytvořeno dne", "updated_on": "Aktualizováno", - "completed_on": "Completed on", + "completed_on": "Datum dokončení", "update_project": "Aktualizovat projekt", "identifier_already_exists": "Identifikátor již existuje", "add_more": "Přidat více", @@ -713,11 +713,11 @@ "details": "Podrobnosti", "project_structure": "Struktura projektu", "custom_properties": "Vlastní vlastnosti", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Váš profil", + "developer": "Vývojář", + "work_structure": "Struktura práce", + "execution": "Provádění", + "administration": "Správa" }, "chart": { "x_axis": "Osa X", diff --git a/packages/i18n/src/locales/cs/editor.json b/packages/i18n/src/locales/cs/editor.json index 5e720818013..337eba7f1e0 100644 --- a/packages/i18n/src/locales/cs/editor.json +++ b/packages/i18n/src/locales/cs/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Přetáhněte soubory pro nahrání externích souborů" + "drag_and_drop": "Přetáhněte soubory sem nebo klikněte pro nahrání" }, "errors": { "file_too_large": { @@ -107,7 +107,7 @@ "header_column": "Sloupec záhlaví", "alignment": { "left": "Vlevo", - "center": "Centrum", + "center": "Střed", "right": "Vpravo" }, "menu_items": { @@ -128,7 +128,7 @@ "divider": "Oddělovač", "link": "Odkaz", "bold": "Tučné", - "italic": "kurzíva", + "italic": "Kurzíva", "underline": "Podtržení", "strikethrough": "Přeškrtnutí", "text-color": "Barva textu", diff --git a/packages/i18n/src/locales/cs/inbox.json b/packages/i18n/src/locales/cs/inbox.json index 685ca3d5918..521fcb27e00 100644 --- a/packages/i18n/src/locales/cs/inbox.json +++ b/packages/i18n/src/locales/cs/inbox.json @@ -126,7 +126,7 @@ "select_work_item": "Vyberte pracovní položku" }, "sidebar": { - "label_count": "{count} štítky" + "label_count": "{count, plural, one{# štítek} few{# štítky} other{# štítků}}" }, "toasts": { "editor_processing": "Editor stále zpracovává změny. Před pokračováním prosím počkejte.", diff --git a/packages/i18n/src/locales/cs/work-item.json b/packages/i18n/src/locales/cs/work-item.json index 60193def053..f1d0edd7678 100644 --- a/packages/i18n/src/locales/cs/work-item.json +++ b/packages/i18n/src/locales/cs/work-item.json @@ -163,7 +163,7 @@ "label": "Související pracovní položky" }, "archive": { - "description": "Lze archivovat pouze dokončené nebo zrušené\npracovní položky", + "description": "Lze archivovat pouze dokončené nebo zrušené pracovní položky", "label": "Archivovat pracovní položku", "confirm_message": "Opravdu chcete archivovat tuto pracovní položku? Všechny archivované položky lze později obnovit.", "success": { diff --git a/packages/i18n/src/locales/de/common.json b/packages/i18n/src/locales/de/common.json index 14f88f49272..e751642e49f 100644 --- a/packages/i18n/src/locales/de/common.json +++ b/packages/i18n/src/locales/de/common.json @@ -486,7 +486,7 @@ "project_timezone": "Projektzeitzone", "created_on": "Erstellt am", "updated_on": "Aktualisiert am", - "completed_on": "Completed on", + "completed_on": "Abgeschlossen am", "update_project": "Projekt aktualisieren", "identifier_already_exists": "Der Bezeichner existiert bereits", "add_more": "Mehr hinzufügen", @@ -512,7 +512,7 @@ "workspace_level": "Arbeitsbereichsebene", "order_by": { "label": "Sortieren nach", - "manual": "Manuell - Rang", + "manual": "Manuell", "last_created": "Zuletzt erstellt", "last_updated": "Zuletzt aktualisiert", "start_date": "Startdatum", @@ -713,11 +713,11 @@ "details": "Details", "project_structure": "Projektstruktur", "custom_properties": "Benutzerdefinierte Eigenschaften", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Ihr Profil", + "developer": "Entwickler", + "work_structure": "Arbeitsstruktur", + "execution": "Ausführung", + "administration": "Verwaltung" }, "chart": { "x_axis": "X-Achse", @@ -831,8 +831,8 @@ "enter_number_of_projects": "Anzahl der Projekte eingeben", "pin": "Anheften", "unpin": "Lösen", - "workspace_dashboards": "Däschbords", - "pi_chat": "AI Tschät", + "workspace_dashboards": "Dashboards", + "pi_chat": "Plane AI", "in_app": "In-App", "forms": "Forms", "milestones": "Meilensteine", diff --git a/packages/i18n/src/locales/es/auth.json b/packages/i18n/src/locales/es/auth.json index ae9d88ad61b..1b6912ae9f3 100644 --- a/packages/i18n/src/locales/es/auth.json +++ b/packages/i18n/src/locales/es/auth.json @@ -262,7 +262,7 @@ }, "unique_code": { "label": "Código único", - "placeholder": "obtiene-establece-vuela", + "placeholder": "123456", "paste_code": "Pega el código enviado a tu correo electrónico", "requesting_new_code": "Solicitando nuevo código", "sending_code": "Enviando código" diff --git a/packages/i18n/src/locales/es/common.json b/packages/i18n/src/locales/es/common.json index e484d1f45d4..7141c014305 100644 --- a/packages/i18n/src/locales/es/common.json +++ b/packages/i18n/src/locales/es/common.json @@ -486,7 +486,7 @@ "project_timezone": "Zona horaria del proyecto", "created_on": "Creado el", "updated_on": "Actualizado el", - "completed_on": "Completed on", + "completed_on": "Completado el", "update_project": "Actualizar proyecto", "identifier_already_exists": "El identificador ya existe", "add_more": "Agregar más", @@ -713,11 +713,11 @@ "details": "Detalles", "project_structure": "Estructura del proyecto", "custom_properties": "Propiedades personalizadas", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Tu perfil", + "developer": "Desarrollador", + "work_structure": "Estructura de trabajo", + "execution": "Ejecución", + "administration": "Administración" }, "chart": { "x_axis": "Eje X", diff --git a/packages/i18n/src/locales/es/editor.json b/packages/i18n/src/locales/es/editor.json index 04e820d52e4..5307b9d080a 100644 --- a/packages/i18n/src/locales/es/editor.json +++ b/packages/i18n/src/locales/es/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Arrastra y suelta para subir archivos externos" + "drag_and_drop": "Suelta archivos aquí o haz clic para subir" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/es/work-item.json b/packages/i18n/src/locales/es/work-item.json index 8a3be82cef8..75215d1392b 100644 --- a/packages/i18n/src/locales/es/work-item.json +++ b/packages/i18n/src/locales/es/work-item.json @@ -163,7 +163,7 @@ "label": "Elementos de trabajo hermanos" }, "archive": { - "description": "Solo los elementos de trabajo completados\no cancelados pueden ser archivados", + "description": "Solo los elementos de trabajo completados o cancelados pueden ser archivados", "label": "Archivar elemento de trabajo", "confirm_message": "¿Estás seguro de que quieres archivar el elemento de trabajo? Todos tus elementos archivados pueden ser restaurados más tarde.", "success": { diff --git a/packages/i18n/src/locales/fr/auth.json b/packages/i18n/src/locales/fr/auth.json index c9e0149bcff..3e3ef41b37d 100644 --- a/packages/i18n/src/locales/fr/auth.json +++ b/packages/i18n/src/locales/fr/auth.json @@ -1,12 +1,12 @@ { "sso": { "header": "Identité", - "description": "Configurez votre domaine pour accéder aux fonctionnalités de sécurité, y compris l'authentification unique.", + "description": "Configurez votre domaine pour accéder aux fonctionnalités de sécurité, y compris l'authentification unique.", "domain_management": { "header": "Gestion des domaines", "verified_domains": { "header": "Domaines vérifiés", - "description": "Vérifiez la propriété d'un domaine e-mail pour activer l'authentification unique.", + "description": "Vérifiez la propriété d'un domaine e-mail pour activer l'authentification unique.", "button_text": "Ajouter un domaine", "list": { "domain_name": "Nom du domaine", @@ -28,8 +28,8 @@ "primary_button_loading_text": "Ajout en cours", "toast": { "success_title": "Succès !", - "success_message": "Domaine ajouté avec succès. Veuillez le vérifier en ajoutant l'enregistrement DNS TXT.", - "error_message": "Échec de l'ajout du domaine. Veuillez réessayer." + "success_message": "Domaine ajouté avec succès. Veuillez le vérifier en ajoutant l'enregistrement DNS TXT.", + "error_message": "Échec de l'ajout du domaine. Veuillez réessayer." } }, "verify_domain": { @@ -41,12 +41,12 @@ "step_2": { "part_1": "Créez un", "part_2": "enregistrement TXT", - "part_3": "et collez la valeur complète de l'enregistrement fournie ci-dessous." + "part_3": "et collez la valeur complète de l'enregistrement fournie ci-dessous." }, - "step_3": "Cette mise à jour prend généralement quelques minutes mais peut prendre jusqu'à 72 heures.", + "step_3": "Cette mise à jour prend généralement quelques minutes mais peut prendre jusqu'à 72 heures.", "step_4": "Cliquez sur \"Vérifier le domaine\" pour confirmer une fois votre enregistrement DNS mis à jour." }, - "verification_code_label": "Valeur de l'enregistrement TXT", + "verification_code_label": "Valeur de l'enregistrement TXT", "verification_code_description": "Ajoutez cet enregistrement à vos paramètres DNS", "domain_label": "Domaine", "primary_button_text": "Vérifier le domaine", @@ -84,7 +84,7 @@ }, "switch_alert_modal": { "title": "Passer à la méthode SSO {newProviderShortName} ?", - "content": "Vous êtes sur le point d'activer {newProviderLongName} ({newProviderShortName}). Cette action désactivera automatiquement {activeProviderLongName} ({activeProviderShortName}). Les utilisateurs tentant de se connecter via {activeProviderShortName} ne pourront plus accéder à la plateforme jusqu'à ce qu'ils passent à la nouvelle méthode. Êtes-vous sûr de vouloir continuer ?", + "content": "Vous êtes sur le point d'activer {newProviderLongName} ({newProviderShortName}). Cette action désactivera automatiquement {activeProviderLongName} ({activeProviderShortName}). Les utilisateurs tentant de se connecter via {activeProviderShortName} ne pourront plus accéder à la plateforme jusqu'à ce qu'ils passent à la nouvelle méthode. Êtes-vous sûr de vouloir continuer ?", "primary_button_text": "Changer", "primary_button_text_loading": "Changement en cours", "secondary_button_text": "Annuler" @@ -105,27 +105,27 @@ }, "saml": { "header": "Activer SAML", - "description": "Configurez votre fournisseur d'identité SAML pour activer l'authentification unique.", + "description": "Configurez votre fournisseur d'identité SAML pour activer l'authentification unique.", "configure": { "title": "Activer SAML", - "description": "Vérifiez la propriété d'un domaine e-mail pour accéder aux fonctionnalités de sécurité, y compris l'authentification unique.", + "description": "Vérifiez la propriété d'un domaine e-mail pour accéder aux fonctionnalités de sécurité, y compris l'authentification unique.", "toast": { "success_title": "Succès !", "create_success_message": "Fournisseur SAML créé avec succès.", "update_success_message": "Fournisseur SAML mis à jour avec succès.", "error_title": "Erreur !", - "error_message": "Échec de l'enregistrement du fournisseur SAML. Veuillez réessayer." + "error_message": "Échec de l'enregistrement du fournisseur SAML. Veuillez réessayer." } }, "setup_modal": { "web_details": { "header": "Détails web", "entity_id": { - "label": "ID d'entité | Audience | Informations de métadonnées", + "label": "ID d'entité | Audience | Informations de métadonnées", "description": "Nous générerons cette partie des métadonnées qui identifie cette application Plane comme un service autorisé sur votre IdP." }, "callback_url": { - "label": "URL d'authentification unique", + "label": "URL d'authentification unique", "description": "Nous générerons cela pour vous. Ajoutez cela dans le champ URL de redirection de connexion de votre IdP." }, "logout_url": { @@ -136,11 +136,11 @@ "mobile_details": { "header": "Détails mobiles", "entity_id": { - "label": "ID d'entité | Audience | Informations de métadonnées", + "label": "ID d'entité | Audience | Informations de métadonnées", "description": "Nous générerons cette partie des métadonnées qui identifie cette application Plane comme un service autorisé sur votre IdP." }, "callback_url": { - "label": "URL d'authentification unique", + "label": "URL d'authentification unique", "description": "Nous générerons cela pour vous. Ajoutez cela dans le champ URL de redirection de connexion de votre IdP." }, "logout_url": { @@ -159,23 +159,23 @@ }, "oidc": { "header": "Activer OIDC", - "description": "Configurez votre fournisseur d'identité OIDC pour activer l'authentification unique.", + "description": "Configurez votre fournisseur d'identité OIDC pour activer l'authentification unique.", "configure": { "title": "Activer OIDC", - "description": "Vérifiez la propriété d'un domaine e-mail pour accéder aux fonctionnalités de sécurité, y compris l'authentification unique.", + "description": "Vérifiez la propriété d'un domaine e-mail pour accéder aux fonctionnalités de sécurité, y compris l'authentification unique.", "toast": { "success_title": "Succès !", "create_success_message": "Fournisseur OIDC créé avec succès.", "update_success_message": "Fournisseur OIDC mis à jour avec succès.", "error_title": "Erreur !", - "error_message": "Échec de l'enregistrement du fournisseur OIDC. Veuillez réessayer." + "error_message": "Échec de l'enregistrement du fournisseur OIDC. Veuillez réessayer." } }, "setup_modal": { "web_details": { "header": "Détails web", "origin_url": { - "label": "URL d'origine", + "label": "URL d'origine", "description": "Nous générerons cela pour cette application Plane. Ajoutez cela comme origine de confiance dans le champ correspondant de votre IdP." }, "callback_url": { @@ -190,7 +190,7 @@ "mobile_details": { "header": "Détails mobiles", "origin_url": { - "label": "URL d'origine", + "label": "URL d'origine", "description": "Nous générerons cela pour cette application Plane. Ajoutez cela comme origine de confiance dans le champ correspondant de votre IdP." }, "callback_url": { diff --git a/packages/i18n/src/locales/fr/common.json b/packages/i18n/src/locales/fr/common.json index f17b52567db..d4461eda8dd 100644 --- a/packages/i18n/src/locales/fr/common.json +++ b/packages/i18n/src/locales/fr/common.json @@ -1,6 +1,6 @@ { "cloud_maintenance_message": { - "we_are_working_on_this_if_you_need_immediate_assistance": "Nous travaillons là-dessus. Si vous avez besoin d'aide immédiate,", + "we_are_working_on_this_if_you_need_immediate_assistance": "Nous travaillons là-dessus. Si vous avez besoin d'aide immédiate,", "reach_out_to_us": "contactez-nous", "otherwise_try_refreshing_the_page_occasionally_or_visit_our": "Sinon, essayez de rafraîchir la page de temps en temps ou visitez notre", "status_page": "page de statut" @@ -486,7 +486,7 @@ "project_timezone": "Fuseau horaire du projet", "created_on": "Créé le", "updated_on": "Mis à jour le", - "completed_on": "Completed on", + "completed_on": "Terminé le", "update_project": "Mettre à jour le projet", "identifier_already_exists": "L’identifiant existe déjà", "add_more": "Ajouter plus", @@ -713,10 +713,10 @@ "details": "Détails", "project_structure": "Structure du projet", "custom_properties": "Propriétés personnalisées", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", + "your_profile": "Votre profil", + "developer": "Développeur", + "work_structure": "Structure de travail", + "execution": "Exécution", "administration": "Administration" }, "chart": { diff --git a/packages/i18n/src/locales/fr/editor.json b/packages/i18n/src/locales/fr/editor.json index cd473d98f16..f6b7717d711 100644 --- a/packages/i18n/src/locales/fr/editor.json +++ b/packages/i18n/src/locales/fr/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Glissez-déposez pour télécharger des fichiers externes" + "drag_and_drop": "Déposez les fichiers ici ou cliquez pour télécharger" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/fr/work-item.json b/packages/i18n/src/locales/fr/work-item.json index f7f5f5189e6..de55f0f5854 100644 --- a/packages/i18n/src/locales/fr/work-item.json +++ b/packages/i18n/src/locales/fr/work-item.json @@ -163,7 +163,7 @@ "label": "Éléments de travail frères" }, "archive": { - "description": "Seuls les éléments de travail\nterminés ou annulés peuvent être archivés", + "description": "Seuls les éléments de travail terminés ou annulés peuvent être archivés", "label": "Archiver l’élément de travail", "confirm_message": "Êtes-vous sûr de vouloir archiver l’élément de travail ? Tous vos éléments archivés peuvent être restaurés ultérieurement.", "success": { diff --git a/packages/i18n/src/locales/id/common.json b/packages/i18n/src/locales/id/common.json index 694bf6d2fcf..069d1ffca41 100644 --- a/packages/i18n/src/locales/id/common.json +++ b/packages/i18n/src/locales/id/common.json @@ -486,7 +486,7 @@ "project_timezone": "Zona waktu proyek", "created_on": "Dibuat pada", "updated_on": "Diperbarui pada", - "completed_on": "Completed on", + "completed_on": "Diselesaikan pada", "update_project": "Perbarui proyek", "identifier_already_exists": "Pengidentifikasi sudah ada", "add_more": "Tambah lebih banyak", @@ -713,11 +713,11 @@ "details": "Detail", "project_structure": "Struktur proyek", "custom_properties": "Properti kustom", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Profil Anda", + "developer": "Pengembang", + "work_structure": "Struktur pekerjaan", + "execution": "Pelaksanaan", + "administration": "Administrasi" }, "chart": { "x_axis": "Sumbu-X", @@ -832,7 +832,7 @@ "pin": "Sematkan", "unpin": "Lepas sematan", "workspace_dashboards": "Dasbor", - "pi_chat": "Obrolan AI", + "pi_chat": "Plane AI", "in_app": "Dalam Aplikasi", "forms": "Formulir", "milestones": "Tonggak", diff --git a/packages/i18n/src/locales/id/editor.json b/packages/i18n/src/locales/id/editor.json index 39291c57615..5c3485c6789 100644 --- a/packages/i18n/src/locales/id/editor.json +++ b/packages/i18n/src/locales/id/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Seret dan lepas untuk mengunggah file eksternal" + "drag_and_drop": "Jatuhkan file di sini atau klik untuk mengunggah" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/id/work-item.json b/packages/i18n/src/locales/id/work-item.json index 9c9ff51b4ca..c056ee9aa27 100644 --- a/packages/i18n/src/locales/id/work-item.json +++ b/packages/i18n/src/locales/id/work-item.json @@ -163,7 +163,7 @@ "label": "Item kerja sejawat" }, "archive": { - "description": "Hanya item kerja yang selesai atau dibatalkan\n yang dapat diarsipkan", + "description": "Hanya item kerja yang selesai atau dibatalkan yang dapat diarsipkan", "label": "Arsip Item kerja", "confirm_message": "Apakah Anda yakin ingin mengarsipkan item kerja ini? Semua item kerja yang diarsipkan dapat dipulihkan nanti.", "success": { diff --git a/packages/i18n/src/locales/it/auth.json b/packages/i18n/src/locales/it/auth.json index 0f4fb2d8a87..77633ce4879 100644 --- a/packages/i18n/src/locales/it/auth.json +++ b/packages/i18n/src/locales/it/auth.json @@ -1,12 +1,12 @@ { "sso": { "header": "Identità", - "description": "Configura il tuo dominio per accedere alle funzionalità di sicurezza inclusa l'autenticazione singola.", + "description": "Configura il tuo dominio per accedere alle funzionalità di sicurezza inclusa l'autenticazione singola.", "domain_management": { "header": "Gestione domini", "verified_domains": { "header": "Domini verificati", - "description": "Verifica la proprietà di un dominio email per abilitare l'autenticazione singola.", + "description": "Verifica la proprietà di un dominio email per abilitare l'autenticazione singola.", "button_text": "Aggiungi dominio", "list": { "domain_name": "Nome dominio", @@ -105,10 +105,10 @@ }, "saml": { "header": "Abilita SAML", - "description": "Configura il tuo provider di identità SAML per abilitare l'autenticazione singola.", + "description": "Configura il tuo provider di identità SAML per abilitare l'autenticazione singola.", "configure": { "title": "Abilita SAML", - "description": "Verifica la proprietà di un dominio email per accedere alle funzionalità di sicurezza inclusa l'autenticazione singola.", + "description": "Verifica la proprietà di un dominio email per accedere alle funzionalità di sicurezza inclusa l'autenticazione singola.", "toast": { "success_title": "Successo!", "create_success_message": "Provider SAML creato con successo.", @@ -159,10 +159,10 @@ }, "oidc": { "header": "Abilita OIDC", - "description": "Configura il tuo provider di identità OIDC per abilitare l'autenticazione singola.", + "description": "Configura il tuo provider di identità OIDC per abilitare l'autenticazione singola.", "configure": { "title": "Abilita OIDC", - "description": "Verifica la proprietà di un dominio email per accedere alle funzionalità di sicurezza inclusa l'autenticazione singola.", + "description": "Verifica la proprietà di un dominio email per accedere alle funzionalità di sicurezza inclusa l'autenticazione singola.", "toast": { "success_title": "Successo!", "create_success_message": "Provider OIDC creato con successo.", diff --git a/packages/i18n/src/locales/it/common.json b/packages/i18n/src/locales/it/common.json index 42de260e055..baf07f8f375 100644 --- a/packages/i18n/src/locales/it/common.json +++ b/packages/i18n/src/locales/it/common.json @@ -486,7 +486,7 @@ "project_timezone": "Fuso orario del progetto", "created_on": "Creato il", "updated_on": "Aggiornato il", - "completed_on": "Completed on", + "completed_on": "Completato il", "update_project": "Aggiorna progetto", "identifier_already_exists": "L'identificatore esiste già", "add_more": "Aggiungi altro", @@ -713,11 +713,11 @@ "details": "Dettagli", "project_structure": "Struttura del progetto", "custom_properties": "Proprietà personalizzate", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Il tuo profilo", + "developer": "Sviluppatore", + "work_structure": "Struttura del lavoro", + "execution": "Esecuzione", + "administration": "Amministrazione" }, "chart": { "x_axis": "Asse X", diff --git a/packages/i18n/src/locales/it/editor.json b/packages/i18n/src/locales/it/editor.json index 7508d6a64a8..ef7f77f36ad 100644 --- a/packages/i18n/src/locales/it/editor.json +++ b/packages/i18n/src/locales/it/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Trascina e rilascia per caricare file esterni" + "drag_and_drop": "Trascina qui i file o clicca per caricarli" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/it/inbox.json b/packages/i18n/src/locales/it/inbox.json index ed5d28069da..28f7e32d004 100644 --- a/packages/i18n/src/locales/it/inbox.json +++ b/packages/i18n/src/locales/it/inbox.json @@ -42,7 +42,7 @@ "accept": "Accetta", "decline": "Rifiuta", "snooze": "Snoozed", - "unsnooze": "Annulla snooze", + "unsnooze": "Annulla posticipazione", "copy": "Copia link dell'elemento di lavoro", "delete": "Elimina", "open": "Apri elemento di lavoro", diff --git a/packages/i18n/src/locales/ja/auth.json b/packages/i18n/src/locales/ja/auth.json index 1a8a4f8b6ce..584b97027f9 100644 --- a/packages/i18n/src/locales/ja/auth.json +++ b/packages/i18n/src/locales/ja/auth.json @@ -380,7 +380,7 @@ "create_account": "アカウントを作成する", "unique_code": "認証コード", "paste_code_sent": "メールに送信された認証コードを貼り付けてください", - "resend_in": "{seconds}sで再送信", + "resend_in": "{seconds}秒後に再送信", "requesting_new_code": "新しいコードをリクエスト中", "resend": "再送信", "sending_code": "コードを送信中" diff --git a/packages/i18n/src/locales/ja/common.json b/packages/i18n/src/locales/ja/common.json index 3b02b3e5afb..51fad4765c6 100644 --- a/packages/i18n/src/locales/ja/common.json +++ b/packages/i18n/src/locales/ja/common.json @@ -324,8 +324,8 @@ "deleting": "削除中", "make_a_copy": "コピーを作成", "move_to_project": "プロジェクトに移動", - "good": "おはよう", - "morning": "ございます", + "good": "", + "morning": "おはようございます", "afternoon": "こんにちは", "evening": "こんばんは", "show_all": "すべて表示", @@ -443,7 +443,7 @@ "link": "リンク", "estimates": "見積もり", "estimate": "見積もり", - "created_at": "クリエイテッド アット", + "created_at": "作成日時", "updated_at": "更新日時", "completed_at": "コンプリーテッド アット", "layout": "レイアウト", @@ -486,7 +486,7 @@ "project_timezone": "プロジェクトのタイムゾーン", "created_on": "作成日", "updated_on": "更新日", - "completed_on": "Completed on", + "completed_on": "完了日", "update_project": "プロジェクトを更新", "identifier_already_exists": "識別子は既に存在します", "add_more": "さらに追加", @@ -512,7 +512,7 @@ "workspace_level": "ワークスペースレベル", "order_by": { "label": "並び順", - "manual": "手動 - ランク", + "manual": "手動", "last_created": "最終作成日", "last_updated": "最終更新日", "start_date": "開始日", @@ -683,11 +683,11 @@ "you": "あなた", "upgrade_cta": { "higher_subscription": "高いサブスクリプションにアップグレード", - "talk_to_sales": "トーク トゥ セールス" + "talk_to_sales": "営業担当者に相談" }, "category": "カテゴリー", - "categories": "カテゴリーズ", - "saving": "セービング", + "categories": "カテゴリー", + "saving": "保存中", "save_changes": "セーブ チェンジズ", "delete": "デリート", "deleting": "デリーティング", @@ -713,15 +713,15 @@ "details": "詳細", "project_structure": "プロジェクト構造", "custom_properties": "カスタムプロパティ", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "あなたのプロフィール", + "developer": "デベロッパー", + "work_structure": "作業構造", + "execution": "実行", + "administration": "管理" }, "chart": { - "x_axis": "エックス アクシス", - "y_axis": "ワイ アクシス", + "x_axis": "X軸", + "y_axis": "Y軸", "metric": "メトリック" }, "form": { @@ -832,7 +832,7 @@ "pin": "ピン留め", "unpin": "ピン留めを解除", "workspace_dashboards": "ダッシュボード", - "pi_chat": "AIチャット", + "pi_chat": "Plane AI", "in_app": "アプリ内", "forms": "フォーム", "milestones": "マイルストーン", diff --git a/packages/i18n/src/locales/ja/editor.json b/packages/i18n/src/locales/ja/editor.json index 08928853dee..84a26d1739e 100644 --- a/packages/i18n/src/locales/ja/editor.json +++ b/packages/i18n/src/locales/ja/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "外部ファイルをアップロードするにはドラッグ&ドロップしてください" + "drag_and_drop": "ファイルをここにドロップ、またはクリックしてアップロード" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/ja/work-item.json b/packages/i18n/src/locales/ja/work-item.json index c943edca19b..e1a8d4b4e5c 100644 --- a/packages/i18n/src/locales/ja/work-item.json +++ b/packages/i18n/src/locales/ja/work-item.json @@ -163,7 +163,7 @@ "label": "兄弟作業項目" }, "archive": { - "description": "完了またはキャンセルされた\n作業項目のみアーカイブできます", + "description": "完了またはキャンセルされた 作業項目のみアーカイブできます", "label": "作業項目をアーカイブ", "confirm_message": "作業項目をアーカイブしてもよろしいですか?アーカイブされた作業項目は後で復元できます。", "success": { diff --git a/packages/i18n/src/locales/ko/auth.json b/packages/i18n/src/locales/ko/auth.json index c2b6a6c4a28..77d5b0c3d7d 100644 --- a/packages/i18n/src/locales/ko/auth.json +++ b/packages/i18n/src/locales/ko/auth.json @@ -380,7 +380,7 @@ "create_account": "계정 만들기", "unique_code": "고유 코드", "paste_code_sent": "이메일로 전송된 코드를 붙여넣으세요.", - "resend_in": "{seconds}s 후에 재전송", + "resend_in": "{seconds}초 후에 재전송", "requesting_new_code": "새 코드 요청 중", "resend": "재전송", "sending_code": "코드 전송 중" diff --git a/packages/i18n/src/locales/ko/common.json b/packages/i18n/src/locales/ko/common.json index 72c65365c8a..0942d30b9a8 100644 --- a/packages/i18n/src/locales/ko/common.json +++ b/packages/i18n/src/locales/ko/common.json @@ -324,10 +324,10 @@ "deleting": "삭제 중", "make_a_copy": "복사본 만들기", "move_to_project": "프로젝트로 이동", - "good": "좋은", - "morning": "아침", - "afternoon": "오후", - "evening": "저녁", + "good": "", + "morning": "안녕하세요", + "afternoon": "안녕하세요", + "evening": "안녕하세요", "show_all": "모두 보기", "show_less": "간략히 보기", "no_data_yet": "아직 데이터 없음", @@ -486,7 +486,7 @@ "project_timezone": "프로젝트 시간대", "created_on": "생성일", "updated_on": "업데이트됨", - "completed_on": "Completed on", + "completed_on": "완료일", "update_project": "프로젝트 업데이트", "identifier_already_exists": "식별자가 이미 존재합니다", "add_more": "더 추가", @@ -512,7 +512,7 @@ "workspace_level": "작업 공간 수준", "order_by": { "label": "정렬 기준", - "manual": "수동 - 순위", + "manual": "수동", "last_created": "마지막 생성", "last_updated": "마지막 업데이트", "start_date": "시작 날짜", @@ -713,11 +713,11 @@ "details": "세부 정보", "project_structure": "프로젝트 구조", "custom_properties": "사용자 정의 속성", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "내 프로필", + "developer": "개발자", + "work_structure": "작업 구조", + "execution": "실행", + "administration": "관리" }, "chart": { "x_axis": "X축", @@ -832,7 +832,7 @@ "pin": "고정", "unpin": "고정 해제", "workspace_dashboards": "대시보드", - "pi_chat": "인공지능 챗", + "pi_chat": "Plane AI", "in_app": "인앱", "forms": "폼스", "milestones": "마일스톤", diff --git a/packages/i18n/src/locales/ko/editor.json b/packages/i18n/src/locales/ko/editor.json index cf18695016a..15c96342416 100644 --- a/packages/i18n/src/locales/ko/editor.json +++ b/packages/i18n/src/locales/ko/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "외부 파일을 업로드하려면 드래그 앤 드롭하세요" + "drag_and_drop": "파일을 여기에 놓거나 클릭하여 업로드" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/pl/common.json b/packages/i18n/src/locales/pl/common.json index d7eecfe8088..ecc15ee49ed 100644 --- a/packages/i18n/src/locales/pl/common.json +++ b/packages/i18n/src/locales/pl/common.json @@ -486,7 +486,7 @@ "project_timezone": "Strefa czasowa projektu", "created_on": "Utworzono dnia", "updated_on": "Zaktualizowano", - "completed_on": "Completed on", + "completed_on": "Data ukończenia", "update_project": "Zaktualizuj projekt", "identifier_already_exists": "Identyfikator już istnieje", "add_more": "Dodaj więcej", @@ -713,11 +713,11 @@ "details": "Szczegóły", "project_structure": "Struktura projektu", "custom_properties": "Właściwości niestandardowe", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Twój profil", + "developer": "Deweloper", + "work_structure": "Struktura pracy", + "execution": "Wykonanie", + "administration": "Administracja" }, "chart": { "x_axis": "Oś X", diff --git a/packages/i18n/src/locales/pl/editor.json b/packages/i18n/src/locales/pl/editor.json index 346771f407a..6e97c933296 100644 --- a/packages/i18n/src/locales/pl/editor.json +++ b/packages/i18n/src/locales/pl/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Przeciągnij i upuść, aby przesłać pliki zewnętrzne" + "drag_and_drop": "Upuść pliki tutaj lub kliknij, aby przesłać" }, "errors": { "file_too_large": { @@ -101,13 +101,13 @@ "clear_contents": "Wyczyść zawartość", "insert_above": "Wstaw powyżej", "insert_below": "Wstaw poniżej", - "insert_left": "Wstaw lewy", - "insert_right": "Wstaw po prawej", + "insert_left": "Wstaw w lewo", + "insert_right": "Wstaw w prawo", "header_row": "Wiersz nagłówka", "header_column": "Kolumna nagłówka", "alignment": { - "left": "Lewy", - "center": "Centrum", + "left": "Do lewej", + "center": "Środek", "right": "Do prawej" }, "menu_items": { diff --git a/packages/i18n/src/locales/pl/inbox.json b/packages/i18n/src/locales/pl/inbox.json index 3ae7a50825c..78826da1dac 100644 --- a/packages/i18n/src/locales/pl/inbox.json +++ b/packages/i18n/src/locales/pl/inbox.json @@ -112,7 +112,7 @@ }, "date_operators": { "after": "Po", - "before": "Zanim" + "before": "Przed" } }, "navigation": { @@ -126,7 +126,7 @@ "select_work_item": "Wybierz element pracy" }, "sidebar": { - "label_count": "Etykiety {count}" + "label_count": "{count, plural, one{# etykieta} few{# etykiety} other{# etykiet}}" }, "toasts": { "editor_processing": "Edytor nadal przetwarza zmiany. Proszę poczekać przed kontynuowaniem.", diff --git a/packages/i18n/src/locales/pt-BR/common.json b/packages/i18n/src/locales/pt-BR/common.json index c47493a984c..d2348887edd 100644 --- a/packages/i18n/src/locales/pt-BR/common.json +++ b/packages/i18n/src/locales/pt-BR/common.json @@ -486,7 +486,7 @@ "project_timezone": "Fuso horário do projeto", "created_on": "Criado em", "updated_on": "Atualizado em", - "completed_on": "Completed on", + "completed_on": "Concluído em", "update_project": "Atualizar projeto", "identifier_already_exists": "O identificador já existe", "add_more": "Adicionar mais", @@ -713,11 +713,11 @@ "details": "Detalhes", "project_structure": "Estrutura do projeto", "custom_properties": "Propriedades personalizadas", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Seu perfil", + "developer": "Desenvolvedor", + "work_structure": "Estrutura de trabalho", + "execution": "Execução", + "administration": "Administração" }, "chart": { "x_axis": "Eixo X", @@ -832,7 +832,7 @@ "pin": "Fixar", "unpin": "Desafixar", "workspace_dashboards": "Dashboards", - "pi_chat": "Chat AI", + "pi_chat": "Plane AI", "in_app": "No aplicativo", "forms": "Formulários", "milestones": "Marcos", diff --git a/packages/i18n/src/locales/pt-BR/editor.json b/packages/i18n/src/locales/pt-BR/editor.json index b54a10a4da7..3a662fe3b21 100644 --- a/packages/i18n/src/locales/pt-BR/editor.json +++ b/packages/i18n/src/locales/pt-BR/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Arraste e solte para fazer upload de arquivos externos" + "drag_and_drop": "Solte arquivos aqui ou clique para fazer upload" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/pt-BR/work-item.json b/packages/i18n/src/locales/pt-BR/work-item.json index cfdf23d0a16..91ecea6e0ca 100644 --- a/packages/i18n/src/locales/pt-BR/work-item.json +++ b/packages/i18n/src/locales/pt-BR/work-item.json @@ -163,7 +163,7 @@ "label": "Itens de trabalho irmãos" }, "archive": { - "description": "Apenas itens de trabalho concluídos ou cancelados\npodem ser arquivados", + "description": "Apenas itens de trabalho concluídos ou cancelados podem ser arquivados", "label": "Arquivar Item de Trabalho", "confirm_message": "Tem certeza de que deseja arquivar o item de trabalho? Todos os seus itens de trabalho arquivados podem ser restaurados posteriormente.", "success": { diff --git a/packages/i18n/src/locales/ro/auth.json b/packages/i18n/src/locales/ro/auth.json index d96351885b3..538fb1870b9 100644 --- a/packages/i18n/src/locales/ro/auth.json +++ b/packages/i18n/src/locales/ro/auth.json @@ -374,7 +374,7 @@ "enter_password": "Introduceți parola", "confirm_password": "Confirmați parola", "passwords_dont_match": "Parolele nu se potrivesc", - "continue": "Continua", + "continue": "Continuă", "go_to_workspace": "Accesați spațiul de lucru", "sign_in_with_unique_code": "Conectați-vă cu codul unic", "create_account": "Creează cont", diff --git a/packages/i18n/src/locales/ro/common.json b/packages/i18n/src/locales/ro/common.json index 6560a501e0d..b0392f08c85 100644 --- a/packages/i18n/src/locales/ro/common.json +++ b/packages/i18n/src/locales/ro/common.json @@ -486,7 +486,7 @@ "project_timezone": "Fus orar proiect", "created_on": "Creat la", "updated_on": "Actualizat la", - "completed_on": "Completed on", + "completed_on": "Finalizat la", "update_project": "Actualizează proiectul", "identifier_already_exists": "Identificatorul există deja", "add_more": "Adaugă mai mult", @@ -713,11 +713,11 @@ "details": "Detalii", "project_structure": "Structura proiectului", "custom_properties": "Proprietăți personalizate", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Profilul tău", + "developer": "Dezvoltator", + "work_structure": "Structura muncii", + "execution": "Execuție", + "administration": "Administrare" }, "chart": { "x_axis": "axa-X", diff --git a/packages/i18n/src/locales/ro/editor.json b/packages/i18n/src/locales/ro/editor.json index fa6b96b4bc0..3f560bd5fad 100644 --- a/packages/i18n/src/locales/ro/editor.json +++ b/packages/i18n/src/locales/ro/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Trageți și plasați pentru a încărca fișiere externe" + "drag_and_drop": "Plasați fișierele aici sau faceți clic pentru a le încărca" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/ro/work-item.json b/packages/i18n/src/locales/ro/work-item.json index c80a2d0a2ea..ac584ca0d8c 100644 --- a/packages/i18n/src/locales/ro/work-item.json +++ b/packages/i18n/src/locales/ro/work-item.json @@ -163,7 +163,7 @@ "label": "Activități înrudite" }, "archive": { - "description": "Doar activitățile finalizate sau anulate\npot fi arhivate", + "description": "Doar activitățile finalizate sau anulate pot fi arhivate", "label": "Arhivează activitatea", "confirm_message": "Ești sigur că vrei să arhivezi această activitate? Toate activitățile arhivate pot fi restaurate ulterior.", "success": { diff --git a/packages/i18n/src/locales/ru/auth.json b/packages/i18n/src/locales/ru/auth.json index aa8f7c6a272..949c27b476e 100644 --- a/packages/i18n/src/locales/ru/auth.json +++ b/packages/i18n/src/locales/ru/auth.json @@ -380,7 +380,7 @@ "create_account": "Зарегистрироваться", "unique_code": "Уникальный код", "paste_code_sent": "Вставьте код, отправленный на вашу электронную почту", - "resend_in": "Отправить повторно через {seconds}s", + "resend_in": "Повторная отправка через {seconds} с", "requesting_new_code": "Запрос нового кода", "resend": "Отправить повторно", "sending_code": "Отправка кода" diff --git a/packages/i18n/src/locales/ru/common.json b/packages/i18n/src/locales/ru/common.json index e6059fdc006..75d23a5d010 100644 --- a/packages/i18n/src/locales/ru/common.json +++ b/packages/i18n/src/locales/ru/common.json @@ -82,7 +82,7 @@ "light": "Светлая", "dark": "Темная", "light_contrast": "Светлая высококонтрастная", - "dark_contrast": "Темная высококонтрастностная", + "dark_contrast": "Тёмная высококонтрастная", "custom": "Пользовательская тема", "select_your_theme": "Выберите тему", "customize_your_theme": "Настройте свою тему", @@ -362,7 +362,7 @@ "re_generate_key": "Перегенерировать ключ", "export": "Экспорт", "member": "{count, plural, one{# участник} few{# участника} other{# участников}}", - "new_password_must_be_different_from_old_password": "Новое пароль должен отличаться от старого пароля", + "new_password_must_be_different_from_old_password": "Новый пароль должен отличаться от старого", "edited": "Редактировано", "bot": "Бот", "settings_description": "Управляйте настройками аккаунта, рабочего пространства и проектов в одном месте. Переключайтесь между вкладками для удобной настройки.", @@ -486,7 +486,7 @@ "project_timezone": "Часовой пояс проекта", "created_on": "Создано", "updated_on": "Обновлено", - "completed_on": "Completed on", + "completed_on": "Дата завершения", "update_project": "Обновить проект", "identifier_already_exists": "Идентификатор уже существует", "add_more": "Добавить еще", @@ -498,7 +498,7 @@ "property": "Свойство", "properties": "Свойства", "parent": "Родительский", - "page": "Пейдж", + "page": "Страница", "remove": "Удалить", "archiving": "Архивация", "archive": "Архивировать", @@ -512,7 +512,7 @@ "workspace_level": "Уровень рабочего пространства", "order_by": { "label": "Сортировать по", - "manual": "Вручную — Ранг", + "manual": "Вручную", "last_created": "Последние созданные", "last_updated": "Последние обновленные", "start_date": "Дата начала", @@ -558,7 +558,7 @@ "entity_required": "{entity} обязательно", "restricted_entity": "{entity} ограничен" }, - "update_link": "обновить ссылку", + "update_link": "Обновить ссылку", "attach": "Прикрепить", "create_new": "Создать новый", "add_existing": "Добавить существующий", @@ -713,11 +713,11 @@ "details": "Подробности", "project_structure": "Структура проекта", "custom_properties": "Пользовательские свойства", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Ваш профиль", + "developer": "Разработчик", + "work_structure": "Структура работы", + "execution": "Выполнение", + "administration": "Администрирование" }, "chart": { "x_axis": "Ось X", diff --git a/packages/i18n/src/locales/ru/editor.json b/packages/i18n/src/locales/ru/editor.json index d25aa199b73..7e927ddc493 100644 --- a/packages/i18n/src/locales/ru/editor.json +++ b/packages/i18n/src/locales/ru/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Перетащите для загрузки внешних файлов" + "drag_and_drop": "Перетащите файлы сюда или нажмите для загрузки" }, "errors": { "file_too_large": { @@ -121,7 +121,7 @@ "bulleted-list": "Маркированный список", "numbered-list": "Нумерованный список", "to-do-list": "Список дел", - "quote": "Цитировать", + "quote": "Цитата", "code": "Код", "table": "Таблица", "image": "Изображение", diff --git a/packages/i18n/src/locales/ru/inbox.json b/packages/i18n/src/locales/ru/inbox.json index 270076aa1c6..2831432a229 100644 --- a/packages/i18n/src/locales/ru/inbox.json +++ b/packages/i18n/src/locales/ru/inbox.json @@ -126,7 +126,7 @@ "select_work_item": "Выберите рабочий элемент" }, "sidebar": { - "label_count": "Этикетки {count}" + "label_count": "{count, plural, one{# метка} few{# метки} other{# меток}}" }, "toasts": { "editor_processing": "Редактор все еще обрабатывает изменения. Пожалуйста, подождите, прежде чем продолжить.", diff --git a/packages/i18n/src/locales/ru/work-item.json b/packages/i18n/src/locales/ru/work-item.json index 21da1795bd6..56b55197d3e 100644 --- a/packages/i18n/src/locales/ru/work-item.json +++ b/packages/i18n/src/locales/ru/work-item.json @@ -160,10 +160,10 @@ } }, "sibling": { - "label": "Связанные рабочие элементы" + "label": "Одноуровневые рабочие элементы" }, "archive": { - "description": "Только завершённые или отменённые\nрабочие элементы можно архивировать", + "description": "Только завершённые или отменённые рабочие элементы можно архивировать", "label": "Архивировать рабочий элемент", "confirm_message": "Вы уверены что хотите архивировать рабочий элемент? Архивы можно восстановить позже.", "success": { diff --git a/packages/i18n/src/locales/sk/auth.json b/packages/i18n/src/locales/sk/auth.json index d9be20380e4..47f2c03d97f 100644 --- a/packages/i18n/src/locales/sk/auth.json +++ b/packages/i18n/src/locales/sk/auth.json @@ -85,7 +85,7 @@ "switch_alert_modal": { "title": "Prepínať metódu SSO na {newProviderShortName}?", "content": "Chystáte sa povoliť {newProviderLongName} ({newProviderShortName}). Táto akcia automaticky zakáže {activeProviderLongName} ({activeProviderShortName}). Používatelia, ktorí sa pokúšajú prihlásiť cez {activeProviderShortName}, už nebudú môcť pristupovať k platforme, kým neprepnu na novú metódu. Naozaj chcete pokračovať?", - "primary_button_text": "Prepínať", + "primary_button_text": "Prepnúť", "primary_button_text_loading": "Prepína sa", "secondary_button_text": "Zrušiť" }, diff --git a/packages/i18n/src/locales/sk/common.json b/packages/i18n/src/locales/sk/common.json index 8a6f75c6836..b374d7082fd 100644 --- a/packages/i18n/src/locales/sk/common.json +++ b/packages/i18n/src/locales/sk/common.json @@ -486,7 +486,7 @@ "project_timezone": "Časové pásmo projektu", "created_on": "Vytvorené dňa", "updated_on": "Aktualizované", - "completed_on": "Completed on", + "completed_on": "Dátum dokončenia", "update_project": "Aktualizovať projekt", "identifier_already_exists": "Identifikátor už existuje", "add_more": "Pridať viac", @@ -713,11 +713,11 @@ "details": "Podrobnosti", "project_structure": "Štruktúra projektu", "custom_properties": "Vlastné vlastnosti", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Váš profil", + "developer": "Vývojár", + "work_structure": "Štruktúra práce", + "execution": "Vykonávanie", + "administration": "Správa" }, "chart": { "x_axis": "Os X", diff --git a/packages/i18n/src/locales/sk/editor.json b/packages/i18n/src/locales/sk/editor.json index 326a5895428..9eb0db3eb9b 100644 --- a/packages/i18n/src/locales/sk/editor.json +++ b/packages/i18n/src/locales/sk/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Pretiahni a pusť pre nahranie externých súborov" + "drag_and_drop": "Presuňte súbory sem alebo kliknite pre nahranie" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/sk/inbox.json b/packages/i18n/src/locales/sk/inbox.json index 95be2c8458a..cf218a05ae2 100644 --- a/packages/i18n/src/locales/sk/inbox.json +++ b/packages/i18n/src/locales/sk/inbox.json @@ -90,7 +90,7 @@ "intake_form_user": "Používateľ zberného formulára" }, "errors": { - "asset_upload_failed": "Nahranie diela zlyhalo. Skúste to znova neskôr.", + "asset_upload_failed": "Nahranie súboru zlyhalo. Skúste to znova neskôr.", "asset_duplication_failed": "Duplikácia aktív zlyhala. Skúste to znova neskôr.", "permission_denied": "Povolenie zamietnuté", "mark_duplicate_permission": "Iba správcovia projektu môžu označiť pracovnú položku ako duplikát", @@ -126,7 +126,7 @@ "select_work_item": "Vyberte pracovnú položku" }, "sidebar": { - "label_count": "{count} štítky" + "label_count": "{count, plural, one{# štítok} few{# štítky} other{# štítkov}}" }, "toasts": { "editor_processing": "Editor stále spracováva zmeny. Pred pokračovaním počkajte.", diff --git a/packages/i18n/src/locales/sk/work-item.json b/packages/i18n/src/locales/sk/work-item.json index aa5220977e0..ddee5c8bb1a 100644 --- a/packages/i18n/src/locales/sk/work-item.json +++ b/packages/i18n/src/locales/sk/work-item.json @@ -163,7 +163,7 @@ "label": "Súvisiace pracovné položky" }, "archive": { - "description": "Archivovať je možné iba dokončené alebo zrušené\npracovné položky", + "description": "Archivovať je možné iba dokončené alebo zrušené pracovné položky", "label": "Archivovať pracovnú položku", "confirm_message": "Naozaj chcete archivovať túto pracovnú položku? Všetky archivované položky je možné neskôr obnoviť.", "success": { diff --git a/packages/i18n/src/locales/tr-TR/auth.json b/packages/i18n/src/locales/tr-TR/auth.json index 9d4de2e845b..ca3fba84560 100644 --- a/packages/i18n/src/locales/tr-TR/auth.json +++ b/packages/i18n/src/locales/tr-TR/auth.json @@ -17,7 +17,7 @@ }, "add_domain": { "title": "Etki alanı ekle", - "description": "SSO'yu yapılandırmak ve doğrulamak için etki alanınızı ekleyin.", + "description": "SSO'yu yapılandırmak ve doğrulamak için etki alanınızı ekleyin.", "form": { "domain_label": "Etki alanı", "domain_placeholder": "plane.so", @@ -77,14 +77,14 @@ }, "providers": { "header": "Tek oturum açma", - "disabled_message": "SSO'yu yapılandırmak için doğrulanmış bir etki alanı ekleyin", + "disabled_message": "SSO'yu yapılandırmak için doğrulanmış bir etki alanı ekleyin", "configure": { "create": "Yapılandır", "update": "Düzenle" }, "switch_alert_modal": { - "title": "SSO yöntemini {newProviderShortName}'a geçir?", - "content": "{newProviderLongName} ({newProviderShortName})'ı etkinleştirmek üzeresiniz. Bu işlem {activeProviderLongName} ({activeProviderShortName})'ı otomatik olarak devre dışı bırakacaktır. {activeProviderShortName} üzerinden giriş yapmaya çalışan kullanıcılar yeni yönteme geçene kadar platforma erişemeyeceklerdir. Devam etmek istediğinizden emin misiniz?", + "title": "SSO yöntemini {newProviderShortName}'a geçir?", + "content": "{newProviderLongName} ({newProviderShortName})'ı etkinleştirmek üzeresiniz. Bu işlem {activeProviderLongName} ({activeProviderShortName})'ı otomatik olarak devre dışı bırakacaktır. {activeProviderShortName} üzerinden giriş yapmaya çalışan kullanıcılar yeni yönteme geçene kadar platforma erişemeyeceklerdir. Devam etmek istediğinizden emin misiniz?", "primary_button_text": "Geçir", "primary_button_text_loading": "Geçiriliyor", "secondary_button_text": "İptal" @@ -100,14 +100,14 @@ "default": "Kaydet" }, "setup_details_section": { - "title": "{workspaceName} IdP'niz için sağlanan ayrıntılar", + "title": "{workspaceName} IdP'niz için sağlanan ayrıntılar", "button_text": "Kurulum ayrıntılarını al" }, "saml": { - "header": "SAML'i etkinleştir", + "header": "SAML'i etkinleştir", "description": "Tek oturum açmayı etkinleştirmek için SAML kimlik sağlayıcınızı yapılandırın.", "configure": { - "title": "SAML'i etkinleştir", + "title": "SAML'i etkinleştir", "description": "Tek oturum açma dahil güvenlik özelliklerine erişmek için bir e-posta etki alanının sahipliğini doğrulayın.", "toast": { "success_title": "Başarılı!", @@ -122,30 +122,30 @@ "header": "Web ayrıntıları", "entity_id": { "label": "Varlık Kimliği | Hedef Kitle | Meta veri bilgileri", - "description": "Bu Plane uygulamasını IdP'nizde yetkili bir hizmet olarak tanımlayan meta verilerin bu bölümünü oluşturacağız." + "description": "Bu Plane uygulamasını IdP'nizde yetkili bir hizmet olarak tanımlayan meta verilerin bu bölümünü oluşturacağız." }, "callback_url": { - "label": "Tek oturum açma URL'si", - "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum açma yönlendirme URL'si alanına ekleyin." + "label": "Tek oturum açma URL'si", + "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum açma yönlendirme URL'si alanına ekleyin." }, "logout_url": { - "label": "Tek oturum kapatma URL'si", - "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin tek oturum kapatma yönlendirme URL'si alanına ekleyin." + "label": "Tek oturum kapatma URL'si", + "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin tek oturum kapatma yönlendirme URL'si alanına ekleyin." } }, "mobile_details": { "header": "Mobil ayrıntılar", "entity_id": { "label": "Varlık Kimliği | Hedef Kitle | Meta veri bilgileri", - "description": "Bu Plane uygulamasını IdP'nizde yetkili bir hizmet olarak tanımlayan meta verilerin bu bölümünü oluşturacağız." + "description": "Bu Plane uygulamasını IdP'nizde yetkili bir hizmet olarak tanımlayan meta verilerin bu bölümünü oluşturacağız." }, "callback_url": { - "label": "Tek oturum açma URL'si", - "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum açma yönlendirme URL'si alanına ekleyin." + "label": "Tek oturum açma URL'si", + "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum açma yönlendirme URL'si alanına ekleyin." }, "logout_url": { - "label": "Tek oturum kapatma URL'si", - "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum kapatma yönlendirme URL'si alanına ekleyin." + "label": "Tek oturum kapatma URL'si", + "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum kapatma yönlendirme URL'si alanına ekleyin." } }, "mapping_table": { @@ -158,10 +158,10 @@ } }, "oidc": { - "header": "OIDC'yi etkinleştir", + "header": "OIDC'yi etkinleştir", "description": "Tek oturum açmayı etkinleştirmek için OIDC kimlik sağlayıcınızı yapılandırın.", "configure": { - "title": "OIDC'yi etkinleştir", + "title": "OIDC'yi etkinleştir", "description": "Tek oturum açma dahil güvenlik özelliklerine erişmek için bir e-posta etki alanının sahipliğini doğrulayın.", "toast": { "success_title": "Başarılı!", @@ -176,30 +176,30 @@ "header": "Web ayrıntıları", "origin_url": { "label": "Kaynak URL", - "description": "Bunu bu Plane uygulaması için oluşturacağız. Bunu IdP'nizin ilgili alanına güvenilir bir kaynak olarak ekleyin." + "description": "Bunu bu Plane uygulaması için oluşturacağız. Bunu IdP'nizin ilgili alanına güvenilir bir kaynak olarak ekleyin." }, "callback_url": { - "label": "Yönlendirme URL'si", - "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum açma yönlendirme URL'si alanına ekleyin." + "label": "Yönlendirme URL'si", + "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum açma yönlendirme URL'si alanına ekleyin." }, "logout_url": { - "label": "Oturum kapatma URL'si", - "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum kapatma yönlendirme URL'si alanına ekleyin." + "label": "Oturum kapatma URL'si", + "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum kapatma yönlendirme URL'si alanına ekleyin." } }, "mobile_details": { "header": "Mobil ayrıntılar", "origin_url": { "label": "Kaynak URL", - "description": "Bunu bu Plane uygulaması için oluşturacağız. Bunu IdP'nizin ilgili alanına güvenilir bir kaynak olarak ekleyin." + "description": "Bunu bu Plane uygulaması için oluşturacağız. Bunu IdP'nizin ilgili alanına güvenilir bir kaynak olarak ekleyin." }, "callback_url": { - "label": "Yönlendirme URL'si", - "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum açma yönlendirme URL'si alanına ekleyin." + "label": "Yönlendirme URL'si", + "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum açma yönlendirme URL'si alanına ekleyin." }, "logout_url": { - "label": "Oturum kapatma URL'si", - "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum kapatma yönlendirme URL'si alanına ekleyin." + "label": "Oturum kapatma URL'si", + "description": "Bunu sizin için oluşturacağız. Bunu IdP'nizin oturum kapatma yönlendirme URL'si alanına ekleyin." } } } @@ -262,7 +262,7 @@ }, "unique_code": { "label": "Benzersiz kod", - "placeholder": "alır-atar-uçar", + "placeholder": "123456", "paste_code": "E-postanıza gönderilen kodu yapıştırın", "requesting_new_code": "Yeni kod isteniyor", "sending_code": "Kod gönderiliyor" @@ -377,7 +377,7 @@ "continue": "Devam et", "go_to_workspace": "Çalışma alanına git", "sign_in_with_unique_code": "Benzersiz kodla oturum açın", - "create_account": "Hesap oluşturmak", + "create_account": "Hesap oluştur", "unique_code": "Benzersiz kod", "paste_code_sent": "E-postanıza gönderilen kodu yapıştırın", "resend_in": "{seconds}s içinde tekrar gönder", diff --git a/packages/i18n/src/locales/tr-TR/common.json b/packages/i18n/src/locales/tr-TR/common.json index fbc4a842106..4104cc53662 100644 --- a/packages/i18n/src/locales/tr-TR/common.json +++ b/packages/i18n/src/locales/tr-TR/common.json @@ -486,7 +486,7 @@ "project_timezone": "Proje Saat Dilimi", "created_on": "Oluşturulma tarihi", "updated_on": "Güncellenme tarihi", - "completed_on": "Completed on", + "completed_on": "Tamamlanma tarihi", "update_project": "Projeyi güncelle", "identifier_already_exists": "Tanımlayıcı zaten var", "add_more": "Daha fazla ekle", @@ -713,11 +713,11 @@ "details": "Ayrıntılar", "project_structure": "Proje yapısı", "custom_properties": "Özel özellikler", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Profiliniz", + "developer": "Geliştirici", + "work_structure": "Çalışma yapısı", + "execution": "Yürütme", + "administration": "Yönetim" }, "chart": { "x_axis": "X ekseni", @@ -821,7 +821,7 @@ }, "self_hosted_maintenance_message": { "plane_didnt_start_up_this_could_be_because_one_or_more_plane_services_failed_to_start": "Plane başlatılamadı. Bu, bir veya daha fazla Plane servisinin başlatılamaması nedeniyle olabilir.", - "choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Emin olmak için setup.sh ve Docker loglarından View Logs'u seçin." + "choose_view_logs_from_setup_sh_and_docker_logs_to_be_sure": "Emin olmak için setup.sh ve Docker loglarından View Logs'u seçin." }, "customize_navigation": "Gezinmeyi özelleştir", "personal": "Kişisel", diff --git a/packages/i18n/src/locales/tr-TR/editor.json b/packages/i18n/src/locales/tr-TR/editor.json index a7eea632e2a..63e7d893de4 100644 --- a/packages/i18n/src/locales/tr-TR/editor.json +++ b/packages/i18n/src/locales/tr-TR/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Harici dosyaları yüklemek için sürükle ve bırak" + "drag_and_drop": "Dosyaları buraya bırakın veya yüklemek için tıklayın" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/tr-TR/work-item.json b/packages/i18n/src/locales/tr-TR/work-item.json index 982108057b3..e669dcf41e1 100644 --- a/packages/i18n/src/locales/tr-TR/work-item.json +++ b/packages/i18n/src/locales/tr-TR/work-item.json @@ -163,7 +163,7 @@ "label": "Kardeş iş öğeleri" }, "archive": { - "description": "Yalnızca tamamlanmış veya iptal edilmiş\niş öğeleri arşivlenebilir", + "description": "Yalnızca tamamlanmış veya iptal edilmiş iş öğeleri arşivlenebilir", "label": "İş Öğesini Arşivle", "confirm_message": "Bu iş öğesini arşivlemek istediğinizden emin misiniz? Arşivlenen tüm iş öğelerinizi daha sonra geri yükleyebilirsiniz.", "success": { diff --git a/packages/i18n/src/locales/tr-TR/workspace.json b/packages/i18n/src/locales/tr-TR/workspace.json index c1efd241d02..3a4d336cb11 100644 --- a/packages/i18n/src/locales/tr-TR/workspace.json +++ b/packages/i18n/src/locales/tr-TR/workspace.json @@ -439,6 +439,6 @@ "usecase_description": "Deneyiminizi kişiselleştirebilmemiz için bir veya daha fazla seçeneği seçin.", "select_one_or_more": "Bir veya daha fazlasını seçin", "select_at_least_one": "En az bir seçeneği seçin.", - "skip": "Atlamak" + "skip": "Atla" } } diff --git a/packages/i18n/src/locales/ua/auth.json b/packages/i18n/src/locales/ua/auth.json index 0b87c0e2b16..5dd3a93f80f 100644 --- a/packages/i18n/src/locales/ua/auth.json +++ b/packages/i18n/src/locales/ua/auth.json @@ -21,7 +21,7 @@ "form": { "domain_label": "Домен", "domain_placeholder": "plane.so", - "domain_required": "Домен обов'язковий", + "domain_required": "Домен обов'язковий", "domain_invalid": "Введіть дійсну назву домену (напр. plane.so)" }, "primary_button_text": "Додати домен", @@ -375,12 +375,12 @@ "confirm_password": "Підтвердьте пароль", "passwords_dont_match": "Паролі не збігаються", "continue": "Продовжити", - "go_to_workspace": "Перейдіть до робочої області", + "go_to_workspace": "Перейти до робочого простору", "sign_in_with_unique_code": "Увійдіть за допомогою унікального коду", "create_account": "Створити акаунт", "unique_code": "Унікальний код", "paste_code_sent": "Вставте код, надісланий на вашу електронну пошту", - "resend_in": "Повторно надішліть через {seconds}s", + "resend_in": "Повторна відправка через {seconds} с", "requesting_new_code": "Запит на новий код", "resend": "Надіслати повторно", "sending_code": "Надсилання коду" diff --git a/packages/i18n/src/locales/ua/common.json b/packages/i18n/src/locales/ua/common.json index bc13821cdb8..15f0ada2319 100644 --- a/packages/i18n/src/locales/ua/common.json +++ b/packages/i18n/src/locales/ua/common.json @@ -1,7 +1,7 @@ { "cloud_maintenance_message": { "we_are_working_on_this_if_you_need_immediate_assistance": "Ми працюємо над цим. Якщо вам потрібна негайна допомога,", - "reach_out_to_us": "зв'яжіться з нами", + "reach_out_to_us": "зв'яжіться з нами", "otherwise_try_refreshing_the_page_occasionally_or_visit_our": "Інакше спробуйте періодично оновлювати сторінку або відвідайте нашу", "status_page": "сторінку статусу" }, @@ -486,7 +486,7 @@ "project_timezone": "Часовий пояс проєкту", "created_on": "Створено", "updated_on": "Оновлено", - "completed_on": "Completed on", + "completed_on": "Дата завершення", "update_project": "Оновити проєкт", "identifier_already_exists": "Такий ідентифікатор уже існує", "add_more": "Додати ще", @@ -713,11 +713,11 @@ "details": "Деталі", "project_structure": "Структура проєкту", "custom_properties": "Користувацькі властивості", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Ваш профіль", + "developer": "Розробник", + "work_structure": "Структура роботи", + "execution": "Виконання", + "administration": "Адміністрування" }, "chart": { "x_axis": "Вісь X", diff --git a/packages/i18n/src/locales/ua/editor.json b/packages/i18n/src/locales/ua/editor.json index abceb917e0c..90af6c2db60 100644 --- a/packages/i18n/src/locales/ua/editor.json +++ b/packages/i18n/src/locales/ua/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Перетягніть для завантаження зовнішніх файлів" + "drag_and_drop": "Перетягніть файли сюди або натисніть для завантаження" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/ua/work-item.json b/packages/i18n/src/locales/ua/work-item.json index c29e4e4a86e..fc1938612ec 100644 --- a/packages/i18n/src/locales/ua/work-item.json +++ b/packages/i18n/src/locales/ua/work-item.json @@ -163,7 +163,7 @@ "label": "Пов'язані робочі одиниці" }, "archive": { - "description": "Архівувати можна лише завершені або скасовані\nробочі одиниці", + "description": "Архівувати можна лише завершені або скасовані робочі одиниці", "label": "Заархівувати робочу одиницю", "confirm_message": "Справді заархівувати цю робочу одиницю? Усі заархівовані одиниці можна пізніше відновити.", "success": { diff --git a/packages/i18n/src/locales/vi-VN/common.json b/packages/i18n/src/locales/vi-VN/common.json index 1b5d778eecd..32592e1fe24 100644 --- a/packages/i18n/src/locales/vi-VN/common.json +++ b/packages/i18n/src/locales/vi-VN/common.json @@ -486,7 +486,7 @@ "project_timezone": "Múi giờ dự án", "created_on": "Được tạo vào", "updated_on": "Cập nhật vào", - "completed_on": "Completed on", + "completed_on": "Hoàn thành lúc", "update_project": "Cập nhật dự án", "identifier_already_exists": "Định danh đã tồn tại", "add_more": "Thêm nữa", @@ -713,11 +713,11 @@ "details": "Chi tiết", "project_structure": "Cấu trúc dự án", "custom_properties": "Thuộc tính tùy chỉnh", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "Hồ sơ của bạn", + "developer": "Nhà phát triển", + "work_structure": "Cấu trúc công việc", + "execution": "Thực thi", + "administration": "Quản trị" }, "chart": { "x_axis": "Trục X", diff --git a/packages/i18n/src/locales/vi-VN/editor.json b/packages/i18n/src/locales/vi-VN/editor.json index a615582a18e..bfb1529ef24 100644 --- a/packages/i18n/src/locales/vi-VN/editor.json +++ b/packages/i18n/src/locales/vi-VN/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "Kéo và thả để tải lên tệp bên ngoài" + "drag_and_drop": "Kéo thả tệp vào đây hoặc nhấp để tải lên" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/vi-VN/work-item.json b/packages/i18n/src/locales/vi-VN/work-item.json index ded7f01261e..58692550736 100644 --- a/packages/i18n/src/locales/vi-VN/work-item.json +++ b/packages/i18n/src/locales/vi-VN/work-item.json @@ -163,7 +163,7 @@ "label": "Mục công việc cùng cấp" }, "archive": { - "description": "Chỉ những mục công việc đã hoàn thành hoặc đã hủy\ncó thể được lưu trữ", + "description": "Chỉ những mục công việc đã hoàn thành hoặc đã hủy có thể được lưu trữ", "label": "Lưu trữ mục công việc", "confirm_message": "Bạn có chắc chắn muốn lưu trữ mục công việc này không? Tất cả mục công việc đã lưu trữ có thể được khôi phục sau.", "success": { diff --git a/packages/i18n/src/locales/zh-CN/common.json b/packages/i18n/src/locales/zh-CN/common.json index 137935e34b0..7b559b490f2 100644 --- a/packages/i18n/src/locales/zh-CN/common.json +++ b/packages/i18n/src/locales/zh-CN/common.json @@ -324,10 +324,10 @@ "deleting": "删除中", "make_a_copy": "创建副本", "move_to_project": "移动到项目", - "good": "早上", - "morning": "早上", - "afternoon": "下午", - "evening": "晚上", + "good": "", + "morning": "早上好", + "afternoon": "下午好", + "evening": "晚上好", "show_all": "显示全部", "show_less": "显示更少", "no_data_yet": "暂无数据", @@ -486,7 +486,7 @@ "project_timezone": "项目时区", "created_on": "创建于", "updated_on": "更新于", - "completed_on": "Completed on", + "completed_on": "完成于", "update_project": "更新项目", "identifier_already_exists": "标识符已存在", "add_more": "添加更多", @@ -512,7 +512,7 @@ "workspace_level": "工作区级别", "order_by": { "label": "排序方式", - "manual": "手动 - 排名", + "manual": "手动", "last_created": "最近创建", "last_updated": "最近更新", "start_date": "开始日期", @@ -713,11 +713,11 @@ "details": "详情", "project_structure": "项目结构", "custom_properties": "自定义属性", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "您的个人资料", + "developer": "开发者", + "work_structure": "工作结构", + "execution": "执行", + "administration": "管理" }, "chart": { "x_axis": "X轴", @@ -832,7 +832,7 @@ "pin": "置顶", "unpin": "取消置顶", "workspace_dashboards": "仪表板", - "pi_chat": "AI 聊天", + "pi_chat": "Plane AI", "in_app": "应用内", "forms": "表单", "milestones": "里程碑", diff --git a/packages/i18n/src/locales/zh-CN/editor.json b/packages/i18n/src/locales/zh-CN/editor.json index 1fcdaa1f4cf..101f0fb34f5 100644 --- a/packages/i18n/src/locales/zh-CN/editor.json +++ b/packages/i18n/src/locales/zh-CN/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "拖拽上传外部文件" + "drag_and_drop": "将文件拖放到此处或点击上传" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/zh-CN/inbox.json b/packages/i18n/src/locales/zh-CN/inbox.json index d46a5bccae6..e46827f7467 100644 --- a/packages/i18n/src/locales/zh-CN/inbox.json +++ b/packages/i18n/src/locales/zh-CN/inbox.json @@ -10,7 +10,7 @@ "description": "已拒绝" }, "snoozed": { - "title": "已暂停", + "title": "已延后", "description": "还剩{days, plural, one{# 天} other{# 天}}" }, "accepted": { @@ -34,15 +34,15 @@ } }, "errors": { - "snooze_permission": "只有项目管理员可以暂停/取消暂停工作项", + "snooze_permission": "只有项目管理员可以延后/取消延后工作项", "accept_permission": "只有项目管理员可以接受工作项", "decline_permission": "只有项目管理员可以拒绝工作项" }, "actions": { "accept": "接受", "decline": "拒绝", - "snooze": "暂停", - "unsnooze": "取消暂停", + "snooze": "延后", + "unsnooze": "取消延后", "copy": "复制工作项链接", "delete": "删除", "open": "打开工作项", @@ -103,7 +103,7 @@ "status": "状态", "work_item_status": "工作项状态", "view_all": "查看全部", - "view_less": "查看较少", + "view_less": "收起", "date_options": { "today": "今天", "yesterday": "昨天", diff --git a/packages/i18n/src/locales/zh-CN/work-item.json b/packages/i18n/src/locales/zh-CN/work-item.json index c254ce0fe33..08fab2b1932 100644 --- a/packages/i18n/src/locales/zh-CN/work-item.json +++ b/packages/i18n/src/locales/zh-CN/work-item.json @@ -163,7 +163,7 @@ "label": "同级工作项" }, "archive": { - "description": "只有已完成或已取消的\n工作项可以归档", + "description": "只有已完成或已取消的工作项可以归档", "label": "归档工作项", "confirm_message": "您确定要归档此工作项吗?所有已归档的工作项稍后可以恢复。", "success": { diff --git a/packages/i18n/src/locales/zh-CN/workspace.json b/packages/i18n/src/locales/zh-CN/workspace.json index 024b8f9e388..67f49c9f868 100644 --- a/packages/i18n/src/locales/zh-CN/workspace.json +++ b/packages/i18n/src/locales/zh-CN/workspace.json @@ -148,7 +148,7 @@ "workitem_resolved_vs_pending": "已解决 vs 待处理的工作项", "projects_by_status": "按状态分类的项目", "active_users": "活跃用户", - "intake_trends": "入学趋势" + "intake_trends": "需求收集趋势" }, "workspace_projects": { "label": "{count, plural, one {项目} other {项目}}", @@ -434,7 +434,7 @@ "enter_workspace_name": "输入工作区名称", "join_existing_workspace": "加入现有工作区", "profile_setup_completed": "个人资料设置完成。", - "profile_setup_failed": "配置文件设置失败。", + "profile_setup_failed": "个人资料设置失败。", "usecase_title": "您打算如何使用 Plane?", "usecase_description": "选择一个或多个选项,以便我们为您提供个性化体验。", "select_one_or_more": "选择一个或多个", diff --git a/packages/i18n/src/locales/zh-TW/common.json b/packages/i18n/src/locales/zh-TW/common.json index 59c06b27d0f..33939b745cc 100644 --- a/packages/i18n/src/locales/zh-TW/common.json +++ b/packages/i18n/src/locales/zh-TW/common.json @@ -324,10 +324,10 @@ "deleting": "刪除中", "make_a_copy": "複製一份", "move_to_project": "移至專案", - "good": "早安", - "morning": "早上", - "afternoon": "下午", - "evening": "晚上", + "good": "", + "morning": "早安", + "afternoon": "午安", + "evening": "晚安", "show_all": "顯示全部", "show_less": "顯示較少", "no_data_yet": "尚無資料", @@ -486,7 +486,7 @@ "project_timezone": "專案時區", "created_on": "建立於", "updated_on": "更新於", - "completed_on": "Completed on", + "completed_on": "完成於", "update_project": "更新專案", "identifier_already_exists": "識別碼已存在", "add_more": "新增更多", @@ -512,7 +512,7 @@ "workspace_level": "工作區層級", "order_by": { "label": "排序依據", - "manual": "手動 - 排名", + "manual": "手動", "last_created": "最後建立", "last_updated": "最後更新", "start_date": "開始日期", @@ -713,11 +713,11 @@ "details": "詳情", "project_structure": "專案結構", "custom_properties": "自訂屬性", - "your_profile": "Your profile", - "developer": "Developer", - "work_structure": "Work structure", - "execution": "Execution", - "administration": "Administration" + "your_profile": "您的個人資料", + "developer": "開發人員", + "work_structure": "工作結構", + "execution": "執行", + "administration": "管理" }, "chart": { "x_axis": "X 軸", @@ -832,17 +832,17 @@ "pin": "釘選", "unpin": "取消釘選", "workspace_dashboards": "儀表板", - "pi_chat": "AI 聊天", + "pi_chat": "Plane AI", "in_app": "應用內", "forms": "表單", "milestones": "里程碑", "milestones_description": "里程碑提供了一個層級,讓工作事項對齊共同的完成日期。", "file_upload": { - "upload_text": "點擊此處上傳文件", + "upload_text": "點擊此處上傳檔案", "drag_drop_text": "拖放", "processing": "處理中", - "invalid_file_type": "無效的文件類型", - "missing_fields": "缺少字段", + "invalid_file_type": "無效的檔案類型", + "missing_fields": "缺少欄位", "success": "{fileName} 已上傳!" }, "date": "日期", @@ -881,6 +881,6 @@ "instance_failure_description": "我們無法載入你的執行個體詳細資訊。", "instance_failure_hint": "請檢查連線並重試。", "retry": "重試", - "powered_by": "技術支援" + "powered_by": "Powered by" } } diff --git a/packages/i18n/src/locales/zh-TW/editor.json b/packages/i18n/src/locales/zh-TW/editor.json index fca3df9077a..a458137ea70 100644 --- a/packages/i18n/src/locales/zh-TW/editor.json +++ b/packages/i18n/src/locales/zh-TW/editor.json @@ -1,7 +1,7 @@ { "attachmentComponent": { "uploader": { - "drag_and_drop": "拖拽上傳外部檔案" + "drag_and_drop": "將檔案拖放至此或點擊上傳" }, "errors": { "file_too_large": { diff --git a/packages/i18n/src/locales/zh-TW/work-item.json b/packages/i18n/src/locales/zh-TW/work-item.json index a70a8e9b25f..9f5f9e7018b 100644 --- a/packages/i18n/src/locales/zh-TW/work-item.json +++ b/packages/i18n/src/locales/zh-TW/work-item.json @@ -163,7 +163,7 @@ "label": "同層級工作事項" }, "archive": { - "description": "只有已完成或取消的\n工作事項可以封存", + "description": "只有已完成或取消的工作事項可以封存", "label": "封存工作事項", "confirm_message": "您確定要封存工作事項嗎?所有已封存的工作事項稍後都可以還原。", "success": { diff --git a/packages/i18n/src/locales/zh-TW/workspace.json b/packages/i18n/src/locales/zh-TW/workspace.json index 08dc687b508..07b46a2b113 100644 --- a/packages/i18n/src/locales/zh-TW/workspace.json +++ b/packages/i18n/src/locales/zh-TW/workspace.json @@ -148,7 +148,7 @@ "workitem_resolved_vs_pending": "已解決 vs 待處理的工作項目", "projects_by_status": "按狀態分類的專案", "active_users": "活躍使用者", - "intake_trends": "入學趨勢" + "intake_trends": "需求收集趨勢" }, "workspace_projects": { "label": "{count, plural, one {專案} other {專案}}", @@ -293,21 +293,21 @@ "title": "寫一個筆記、文檔或完整的知識庫。讓 Galileo,Plane 的 AI 助手,幫助您開始", "description": "頁面是 Plane 中的思想沉澱空間。記下會議筆記,輕鬆格式化,嵌入工作項目,使用組件庫佈局,並將它們全部保存在您的專案上下文中。要快速完成任何文檔,使用快捷方式或點擊按鈕來調用 Galileo,Plane 的 AI。", "primary_button": { - "text": "創建您的第一個頁面" + "text": "建立您的第一個頁面" } }, "private": { "title": "還沒有私人頁面", "description": "在這裡保留您的私人想法。當您準備好分享時,團隊只需點擊一下即可。", "primary_button": { - "text": "創建您的第一個頁面" + "text": "建立您的第一個頁面" } }, "public": { - "title": "還沒有工作空間頁面", - "description": "在這裡查看與工作空間中的每個人共享的頁面。", + "title": "還沒有工作區頁面", + "description": "在這裡查看與工作區中的每個人共享的頁面。", "primary_button": { - "text": "創建您的第一個頁面" + "text": "建立您的第一個頁面" } }, "archived": { @@ -408,7 +408,7 @@ "name_within_50": "名稱必須在 50 個字元以內。", "enter_full_name": "輸入您的全名", "set_password": "設定密碼", - "optional": "選修的", + "optional": "選填", "passwords_do_not_match": "密碼不匹配", "passwords_match": "密碼匹配", "continue": "繼續", @@ -420,7 +420,7 @@ "error": "錯誤!", "add_another": "添加另一個", "do_later": "我稍後會做", - "join_invites_title": "加入邀請或創建工作區", + "join_invites_title": "加入邀請或建立工作區", "unified_description": "您的所有工作 — 統一。", "create_new_workspace": "建立新工作區", "no_invitations_found": "未找到邀請", @@ -428,9 +428,9 @@ "accept_invites": "接受邀請與您的團隊合作。", "continue_to_workspace": "繼續工作區", "or": "或者", - "create_own_workspace": "創建您自己的工作空間", + "create_own_workspace": "建立您自己的工作區", "workspace_creation_disabled": "您似乎沒有任何工作區邀請,而您的實例管理員限制了新工作區的建立。請讓工作區擁有者或管理員先邀請您加入工作區,然後再回到此畫面加入。", - "create_workspace_title": "創建您的工作空間", + "create_workspace_title": "建立您的工作區", "enter_workspace_name": "輸入工作區名稱", "join_existing_workspace": "加入現有工作區", "profile_setup_completed": "個人資料設定完成。", From 1e9dbc8382916d5b8957077a762b4e27dc671e5f Mon Sep 17 00:00:00 2001 From: xuhongbo Date: Sat, 16 May 2026 12:49:19 +0800 Subject: [PATCH 08/11] fix(i18n): refine locale translations Co-authored-by: Codex --- .../inbox/modals/create-modal/create-root.tsx | 11 +++-------- packages/i18n/src/locales/cs/auth.json | 4 ++-- packages/i18n/src/locales/cs/inbox.json | 2 +- packages/i18n/src/locales/cs/workspace.json | 2 +- packages/i18n/src/locales/de/auth.json | 4 ++-- packages/i18n/src/locales/de/workspace.json | 2 +- packages/i18n/src/locales/es/auth.json | 4 ++-- packages/i18n/src/locales/es/workspace.json | 4 ++-- packages/i18n/src/locales/fr/auth.json | 4 ++-- packages/i18n/src/locales/fr/workspace.json | 2 +- packages/i18n/src/locales/id/auth.json | 4 ++-- packages/i18n/src/locales/id/editor.json | 4 ++-- packages/i18n/src/locales/id/inbox.json | 8 ++++---- packages/i18n/src/locales/it/auth.json | 4 ++-- packages/i18n/src/locales/it/workspace.json | 2 +- packages/i18n/src/locales/ja/common.json | 2 +- packages/i18n/src/locales/ja/inbox.json | 2 +- packages/i18n/src/locales/ja/workspace.json | 10 +++++----- packages/i18n/src/locales/ko/auth.json | 4 ++-- packages/i18n/src/locales/ko/common.json | 2 +- packages/i18n/src/locales/ko/workspace.json | 14 +++++++------- packages/i18n/src/locales/pl/auth.json | 4 ++-- packages/i18n/src/locales/pl/inbox.json | 2 +- packages/i18n/src/locales/pt-BR/auth.json | 4 ++-- packages/i18n/src/locales/pt-BR/inbox.json | 2 +- packages/i18n/src/locales/pt-BR/work-item.json | 4 ++-- packages/i18n/src/locales/ro/auth.json | 4 ++-- packages/i18n/src/locales/ro/inbox.json | 4 ++-- packages/i18n/src/locales/ro/workspace.json | 12 ++++++------ packages/i18n/src/locales/ru/auth.json | 4 ++-- packages/i18n/src/locales/ru/inbox.json | 4 ++-- packages/i18n/src/locales/sk/auth.json | 4 ++-- packages/i18n/src/locales/sk/inbox.json | 2 +- packages/i18n/src/locales/sk/workspace.json | 4 ++-- packages/i18n/src/locales/tr-TR/auth.json | 4 ++-- packages/i18n/src/locales/tr-TR/common.json | 2 +- packages/i18n/src/locales/tr-TR/workspace.json | 4 ++-- packages/i18n/src/locales/ua/auth.json | 4 ++-- packages/i18n/src/locales/ua/inbox.json | 2 +- packages/i18n/src/locales/ua/workspace.json | 2 +- packages/i18n/src/locales/vi-VN/auth.json | 4 ++-- packages/i18n/src/locales/vi-VN/workspace.json | 2 +- packages/i18n/src/locales/zh-CN/workspace.json | 4 ++-- packages/i18n/src/locales/zh-TW/common.json | 2 +- packages/i18n/src/locales/zh-TW/inbox.json | 10 +++++----- packages/i18n/src/locales/zh-TW/work-item.json | 2 +- packages/i18n/src/locales/zh-TW/workspace.json | 4 ++-- 47 files changed, 95 insertions(+), 100 deletions(-) diff --git a/apps/web/core/components/inbox/modals/create-modal/create-root.tsx b/apps/web/core/components/inbox/modals/create-modal/create-root.tsx index d5bc861cc60..f7f35cf4484 100644 --- a/apps/web/core/components/inbox/modals/create-modal/create-root.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/create-root.tsx @@ -232,15 +232,10 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props
    - +