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..e6114f66a7a 100644 --- a/apps/space/components/account/terms-and-conditions.tsx +++ b/apps/space/components/account/terms-and-conditions.tsx @@ -4,6 +4,8 @@ * See the LICENSE file for details. */ +import { Trans } from "@plane/i18n"; + type Props = { isSignUp?: boolean; }; @@ -13,15 +15,27 @@ export function TermsAndConditions(props: Props) { return (

- {isSignUp ? "By creating an account" : "By signing in"}, you agree to our{" \n"} - - Terms of Service - {" "} - and{" "} - - Privacy Policy - - {"."} + + ), + privacy: ( + + ), + }} + />

); 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 (
- + (null); const isFilterEnabled = (filter: keyof IIssueFilterOptions) => layoutDisplayFiltersOptions.includes(filter); + useEffect(() => { + searchInputRef.current?.focus(); + }, []); + 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..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 @@ -6,34 +6,47 @@ 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 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"; -type InboxIssueAppliedFiltersDate = { +type TInboxIssueAppliedFiltersDate = { filterKey: TInboxIssueFilterDateKeys; label: string; }; +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 +66,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/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 51fbbe6d495..ca0df90de5e 100644 --- a/apps/web/core/components/inbox/inbox-filter/filters/date.tsx +++ b/apps/web/core/components/inbox/inbox-filter/filters/date.tsx @@ -8,11 +8,13 @@ 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"; 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"; @@ -30,6 +32,7 @@ const isDate = (date: string) => { 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 +41,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 +67,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 +82,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..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 @@ -4,8 +4,9 @@ * See the LICENSE file for details. */ -import { useState } from "react"; +import { useEffect, useRef, 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"; @@ -20,6 +21,7 @@ import { FilterStatus } from "./status"; export const InboxIssueFilterSelection = observer(function InboxIssueFilterSelection() { // hooks + const { t } = useTranslation(); const { isMobile } = usePlatformOS(); const { project: { projectMemberIds }, @@ -27,6 +29,11 @@ export const InboxIssueFilterSelection = observer(function InboxIssueFilterSelec const { projectLabels } = useLabel(); // states const [filtersSearchQuery, setFiltersSearchQuery] = useState(""); + const searchInputRef = useRef(null); + + useEffect(() => { + if (!isMobile) searchInputRef.current?.focus(); + }, [isMobile]); return (
@@ -34,12 +41,12 @@ 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..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 @@ -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,13 +232,8 @@ export const InboxIssueCreateRoot = observer(function InboxIssueCreateRoot(props
-
setCreateMore((prevData) => !prevData)} - role="button" - tabIndex={getIndex("create_more")} - > - {}} size="sm" /> +
+ {t("create_more")}
@@ -253,8 +247,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"), }); } }} diff --git a/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx index ce3961b0892..98ca168daad 100644 --- a/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/issue-description.tsx @@ -103,7 +103,7 @@ export const InboxIssueDescription = observer(function InboxIssueDescription(pro return asset_id; } catch (error) { console.log("Error in uploading work item asset:", error); - throw new Error("Asset upload failed. Please try again later."); + throw new Error(t("inbox.errors.asset_upload_failed"), { cause: error }); } }} duplicateFile={async (assetId: string) => { @@ -117,7 +117,7 @@ export const InboxIssueDescription = observer(function InboxIssueDescription(pro onAssetUpload?.(asset_id); return asset_id; } catch { - throw new Error("Asset duplication failed. Please try again later."); + throw new Error(t("inbox.errors.asset_duplication_failed")); } }} /> diff --git a/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx b/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx index 6d6c80e937c..2366f415db8 100644 --- a/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx +++ b/apps/web/core/components/inbox/modals/create-modal/issue-properties.tsx @@ -7,6 +7,7 @@ import { useState } from "react"; import { observer } from "mobx-react"; import { ETabIndices } from "@plane/constants"; +import { useTranslation } from "@plane/i18n"; import { ParentPropertyIcon } from "@plane/propel/icons"; import type { ISearchIssueResponse, TIssue } from "@plane/types"; import { CustomMenu } from "@plane/ui"; @@ -36,6 +37,7 @@ type TInboxIssueProperties = { export const InboxIssueProperties = observer(function InboxIssueProperties(props: TInboxIssueProperties) { const { projectId, data, handleData, isVisible = false } = props; // hooks + const { t } = useTranslation(); const { areEstimateEnabledByProjectId } = useProjectEstimates(); const { isMobile } = usePlatformOS(); // states @@ -85,7 +87,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props onChange={(assigneeIds) => handleData("assignee_ids", assigneeIds)} buttonVariant={(data?.assignee_ids || [])?.length > 0 ? "transparent-without-text" : "border-with-text"} buttonClassName={(data?.assignee_ids || [])?.length > 0 ? "hover:bg-transparent" : ""} - placeholder="Assignees" + placeholder={t("assignees")} multiple tabIndex={getIndex("assignee_ids")} /> @@ -109,7 +111,7 @@ export const InboxIssueProperties = observer(function InboxIssueProperties(props onChange={(date) => handleData("start_date", date ? renderFormattedPayloadDate(date) : "")} buttonVariant="border-with-text" minDate={minDate ?? undefined} - placeholder="Start date" + placeholder={t("start_date")} tabIndex={getIndex("start_date")} />
@@ -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..bee5f589636 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 && @@ -73,11 +77,12 @@ export function Invitations(props: Props) { invitations.map((invitation) => { const isSelected = invitationsRespond.includes(invitation.id); const invitedWorkspace = invitation.workspace; + const checkboxId = `workspace-invitation-${invitation.id}`; return ( -
    handleInvitation(invitation, isSelected ? "withdraw" : "accepted")} + className={`flex w-full cursor-pointer items-center gap-2 rounded-sm border border-subtle p-3.5 text-left hover:bg-surface-2`} >
    {ROLE[invitation.role]}

    - + handleInvitation(invitation, isSelected ? "withdraw" : "accepted")} + /> -
    + ); })}
    @@ -104,11 +113,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..0017b0e0227 100644 --- a/apps/web/core/components/onboarding/invite-members.tsx +++ b/apps/web/core/components/onboarding/invite-members.tsx @@ -149,7 +149,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 } }) => ( @@ -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..45aaa8659ed 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,18 +71,22 @@ export function WorkspaceJoinInvitesStep(props: Props) { return invitations && invitations.length > 0 ? (
    - +
    {invitations && invitations.length > 0 && invitations.map((invitation) => { const isSelected = invitationsRespond.includes(invitation.id); const invitedWorkspace = invitation.workspace; + const checkboxId = `workspace-join-invite-${invitation.id}`; return ( -
    handleInvitation(invitation, isSelected ? "withdraw" : "accepted")} + className={`flex w-full cursor-pointer items-center gap-2 rounded-lg border border-subtle px-3 py-2 text-left hover:bg-surface-2`} >
    {ROLE[invitation.role]}

    - + handleInvitation(invitation, isSelected ? "withdraw" : "accepted")} + /> -
    + ); })}
    @@ -106,7 +118,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 && (
    setToast({ type: TOAST_TYPE.ERROR, - title: "Error!", - message: "Failed to sign out. Please try again.", + title: t("auth.sign_out.toast.error.title"), + message: t("auth.sign_out.toast.error.message"), }) ); }; @@ -159,38 +161,38 @@ export const WorkspaceAuthWrapper = observer(function WorkspaceAuthWrapper(props
    {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..a4b8a0045fe 100644 --- a/packages/editor/src/core/components/links/link-edit-view.tsx +++ b/packages/editor/src/core/components/links/link-edit-view.tsx @@ -6,7 +6,9 @@ import type { Node } from "@tiptap/pm/model"; import { Link2Off } from "lucide-react"; +import type { Ref } from "react"; import { useCallback, useEffect, useRef, useState } from "react"; +import { useTranslation } from "@plane/i18n"; // components import type { LinkViewProps, LinkViews } from "@/components/links"; // helpers @@ -17,20 +19,20 @@ type InputViewProps = { value: string; placeholder: string; onChange: (value: string) => void; - autoFocus?: boolean; + inputRef?: Ref; }; -function InputView({ label, value, placeholder, onChange, autoFocus }: InputViewProps) { +function InputView({ label, value, placeholder, onChange, inputRef }: InputViewProps) { return (
    e.stopPropagation()} 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 +45,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 }); @@ -50,6 +53,7 @@ export function LinkEditView({ viewProps }: LinkEditViewProps) { const [localText, setLocalText] = useState(initialText ?? ""); const [linkRemoved, setLinkRemoved] = useState(false); const hasSubmitted = useRef(false); + const urlInputRef = useRef(null); const removeLink = useCallback(() => { editor.view.dispatch(editor.state.tr.removeMark(from, to, editor.schema.marks.link)); @@ -82,6 +86,10 @@ export function LinkEditView({ viewProps }: LinkEditViewProps) { if (initialText) setLocalText(initialText); }, [initialText]); + useEffect(() => { + urlInputRef.current?.focus(); + }, []); + // Handlers const handleTextChange = useCallback((value: string) => { if (value.trim() !== "") setLocalText(value); @@ -139,18 +147,31 @@ export function LinkEditView({ viewProps }: LinkEditViewProps) {
    - - + +
    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 e6e2f46c9d9..f790ffe18e6 100644 --- a/packages/i18n/src/locales/cs/auth.json +++ b/packages/i18n/src/locales/cs/auth.json @@ -364,5 +364,47 @@ "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í ověřovacího kódu", + "create_account": "Vytvořit účet", + "unique_code": "Ověřovací kód", + "paste_code_sent": "Vložte kód zaslaný na váš e-mail", + "resend_in": "Znovu odeslat za {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ínky služby", + "and": "a", + "privacy_policy": "Zásady 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." + }, + "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/cs/common.json b/packages/i18n/src/locales/cs/common.json index c1e9372c24e..ea475968dca 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", @@ -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": "Běží na" } } diff --git a/packages/i18n/src/locales/cs/editor.json b/packages/i18n/src/locales/cs/editor.json index 17b29db18f6..89010b2f2d0 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": { @@ -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žit nad", + "insert_below": "Vložit pod", + "insert_left": "Vložit vlevo", + "insert_right": "Vložit vpravo", + "header_row": "Řádek záhlaví", + "header_column": "Sloupec záhlaví", + "alignment": { + "left": "Vlevo", + "center": "Střed", + "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": "Citace", + "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..7dbdb2c3692 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 podkladů se nezdařila. Zkuste to znovu později.", + "permission_denied": "Přístup odepřen", + "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": "Datum aktualizace", + "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ítků" + }, + "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..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": { @@ -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..19c151aec07 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é kolegy", + "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řidat 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řit 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čovat 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 poté se vraťte 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..ccbfa698b8c 100644 --- a/packages/i18n/src/locales/de/auth.json +++ b/packages/i18n/src/locales/de/auth.json @@ -364,5 +364,47 @@ "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": "Zum Arbeitsbereich", + "sign_in_with_unique_code": "Mit Bestätigungscode anmelden", + "create_account": "Benutzerkonto erstellen", + "unique_code": "Bestätigungscode", + "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." + }, + "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/de/common.json b/packages/i18n/src/locales/de/common.json index 1e18d4ee26e..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", @@ -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..0256261c472 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": "URL eingeben oder einfügen", + "text": "Text", + "enter_text_to_display": "Anzuzeigenden Text eingeben", + "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": "Bild hinzufügen", + "error_loading_image": "Fehler beim Laden des Bildes", + "uploading": "Hochladen", + "drop_image_here": "Bild hier ablegen", + "retry_duplication": "Duplizieren wiederholen", + "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": "Inhalt löschen", + "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..8a7e6aa95c5 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} Labels" + }, + "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..62508464bb3 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": "Weitere hinzufügen", + "do_later": "Später erledigen", + "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 Inhaber oder Administrator eines Arbeitsbereichs, Sie zunächst zu einem Arbeitsbereich einzuladen, und kehren Sie dann zu diesem Bildschirm zurück, 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..38449bbb9ac 100644 --- a/packages/i18n/src/locales/en/auth.json +++ b/packages/i18n/src/locales/en/auth.json @@ -364,5 +364,47 @@ "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." + }, + "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/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..0ecdbc0ea61 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" @@ -364,5 +364,47 @@ "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 de verificación", + "create_account": "Crear una cuenta", + "unique_code": "Código de verificación", + "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." + }, + "terms_sign_up": "Al crear una cuenta, aceptas nuestros Términos de servicio y nuestra Política de privacidad.", + "terms_sign_in": "Al iniciar sesión, aceptas nuestros Términos de servicio y nuestra Política de privacidad." } } diff --git a/packages/i18n/src/locales/es/common.json b/packages/i18n/src/locales/es/common.json index 64440c9c653..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", @@ -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..9c9c400c8ba 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": { @@ -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": "Introduce 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, introduce una URL válida", + "delete": "Borrar", + "duplicate": "Duplicar", + "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": "Cursiva", + "underline": "Subrayado", + "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..057b8357789 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 de actualización", + "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": "{count} etiquetas" + }, + "toasts": { + "editor_processing": "El editor todavía está procesando cambios. Espera 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..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": { @@ -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..7f3de351567 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": "Tu espacio de trabajo es donde crearás proyectos, colaborarás en tus elementos de trabajo y organizarás diferentes flujos de trabajo en tu 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": "Únete a invitaciones o crea 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 tienes ninguna invitación a un espacio de trabajo y el administrador de tu instancia ha restringido la creación de nuevos espacios de trabajo. Pide al propietario o administrador del espacio de trabajo que te invite primero a un espacio de trabajo y vuelve a esta pantalla para unirte.", + "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": "Selecciona una o más opciones para que podamos personalizar tu experiencia.", + "select_one_or_more": "Seleccione uno o más", + "select_at_least_one": "Seleccione al menos una opción.", + "skip": "Omitir" } } diff --git a/packages/i18n/src/locales/fr/auth.json b/packages/i18n/src/locales/fr/auth.json index 031cffea656..87d93f823b0 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": { @@ -364,5 +364,47 @@ "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 de vérification", + "create_account": "Créer un compte", + "unique_code": "Code de vérification", + "paste_code_sent": "Collez le code envoyé sur votre email", + "resend_in": "Renvoyer dans {seconds}s", + "requesting_new_code": "Demande d'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." + }, + "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/fr/common.json b/packages/i18n/src/locales/fr/common.json index a94ab8aba2d..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": { @@ -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..d20aa6928ab 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 importer" }, "errors": { "file_too_large": { @@ -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": "Importation", + "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": "Titre 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..97f1b7e9be6 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 de l'importation 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 de 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..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": { @@ -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..3fbd61f8f08 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": "Importer 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 avoir aucune invitation à un espace de travail et l'administrateur de votre instance a restreint la création de nouveaux espaces de travail. Demandez d'abord à un propriétaire ou à un administrateur d'espace de travail de vous inviter, puis revenez 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": "Passer" } } diff --git a/packages/i18n/src/locales/id/auth.json b/packages/i18n/src/locales/id/auth.json index 4fa5a310a4f..4e2ee21534f 100644 --- a/packages/i18n/src/locales/id/auth.json +++ b/packages/i18n/src/locales/id/auth.json @@ -364,5 +364,47 @@ "sub_header": "Masukkan kredensial {ldapProviderName} Anda" } } + }, + "space_auth": { + "email": "Email", + "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": "Buka ruang kerja", + "sign_in_with_unique_code": "Masuk dengan kode verifikasi", + "create_account": "Buat akun", + "unique_code": "Kode verifikasi", + "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." + }, + "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/id/common.json b/packages/i18n/src/locales/id/common.json index 7d266850dc4..f7c1b555b03 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", @@ -540,7 +540,7 @@ "no_links_added_yet": "Belum ada tautan yang ditambahkan", "add_link": "Tambah tautan", "links": "Tautan", - "go_to_workspace": "Pergi ke ruang kerja", + "go_to_workspace": "Buka ruang kerja", "progress": "Kemajuan", "optional": "Opsional", "join": "Bergabung", @@ -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", @@ -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..ce01b573a18 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": { @@ -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": "Tautan", + "enter_or_paste_link": "Masukkan atau tempel tautan", + "please_enter_valid_url": "Silakan masukkan URL yang valid", + "delete": "Hapus", + "duplicate": "Buat duplikat", + "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": "Coba lagi", + "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": "Perataan", + "download": "Unduh", + "clear_contents": "Hapus isi", + "insert_above": "Sisipkan di atas", + "insert_below": "Sisipkan di bawah", + "insert_left": "Sisipkan ke kiri", + "insert_right": "Sisipkan 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": "Judul 3", + "h4": "Judul 4", + "h5": "Judul 5", + "h6": "Judul 6", + "bulleted-list": "Daftar berpoin", + "numbered-list": "Daftar bernomor", + "to-do-list": "Daftar tugas", + "quote": "Kutipan", + "code": "Kode", + "table": "Tabel", + "image": "Gambar", + "divider": "Pembagi", + "link": "Tautan", + "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..06f803a7d6d 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 kerja", + "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 kerja sebelumnya", + "next_work_item": "Item kerja berikutnya" + }, + "properties": { + "duplicate_of": "Duplikat dari" + }, + "select_duplicate": { + "select_work_item": "Pilih item kerja" + }, + "sidebar": { + "label_count": "{count} label" + }, + "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..c9770832960 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": { @@ -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..e13439d16e9 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": "Berhasil!", + "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": "Buat 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": "Lewati" } } diff --git a/packages/i18n/src/locales/it/auth.json b/packages/i18n/src/locales/it/auth.json index 7b051cbf829..e0aa29af231 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.", @@ -364,5 +364,47 @@ "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 di verifica", + "create_account": "Crea un account", + "unique_code": "Codice di verifica", + "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." + }, + "terms_sign_up": "Creando un account, accetti i nostri Termini di servizio e la nostra Informativa sulla privacy.", + "terms_sign_in": "Accedendo, accetti i nostri Termini di servizio e la nostra Informativa sulla privacy." } } diff --git a/packages/i18n/src/locales/it/common.json b/packages/i18n/src/locales/it/common.json index 6fda1b04957..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", @@ -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..a3966eb04ea 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": { @@ -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": "Elimina", + "duplicate": "Duplica", + "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": "Riprova 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": "Allinea", + "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": "Titolo 1", + "h2": "Titolo 2", + "h3": "Titolo 3", + "h4": "Titolo 4", + "h5": "Titolo 5", + "h6": "Titolo 6", + "bulleted-list": "Elenco puntato", + "numbered-list": "Elenco numerato", + "to-do-list": "Elenco attività", + "quote": "Citazione", + "code": "Codice", + "table": "Tabella", + "image": "Immagine", + "divider": "Separatore", + "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..35868231a91 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", @@ -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 di aggiornamento", + "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": "{count} etichette" + }, + "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..b8f3ebd3093 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": "Spazio di lavoro 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 membri del tuo team", + "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": "Accetta gli 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 abbia limitato la creazione di nuove aree di lavoro. Chiedi prima al proprietario o all'amministratore di un'area di lavoro di invitarti, quindi torna a questa schermata per partecipare.", + "create_workspace_title": "Crea il tuo spazio di lavoro", + "enter_workspace_name": "Inserisci il nome dello spazio 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": "Salta" } } diff --git a/packages/i18n/src/locales/ja/auth.json b/packages/i18n/src/locales/ja/auth.json index d3dd8d37a9e..fe9b96b92e6 100644 --- a/packages/i18n/src/locales/ja/auth.json +++ b/packages/i18n/src/locales/ja/auth.json @@ -364,5 +364,47 @@ "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": "あと 1 ステップです。", + "logged_in_hint": "表示したいビューまたはページの公開共有 URL もしくはリンクをブラウザーのアドレスバーに入力してください。", + "sign_in": "サインイン", + "auth": { + "sign_in_header": "投票またはコメントするにはサインインしてください", + "sign_in_subheader": "実装してほしい機能を後押ししましょう。", + "sign_up_header": "閲覧、コメント、その他の操作", + "sign_up_subheader": "Plane の作業項目とページを扱うには、登録またはサインインしてください。" + }, + "terms_sign_up": "アカウントを作成すると、利用規約およびプライバシーポリシーに同意したことになります。", + "terms_sign_in": "サインインすると、利用規約およびプライバシーポリシーに同意したことになります。" } } diff --git a/packages/i18n/src/locales/ja/common.json b/packages/i18n/src/locales/ja/common.json index 4899411b615..542b1e841e4 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": "マイルストーン", @@ -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..b7ad83b523d 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": { @@ -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..15185e627ba 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..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": { @@ -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..0e5b955064c 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..8998ce8f84c 100644 --- a/packages/i18n/src/locales/ko/auth.json +++ b/packages/i18n/src/locales/ko/auth.json @@ -364,5 +364,47 @@ "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 작업 항목과 페이지를 사용하려면 가입하거나 로그인하세요." + }, + "terms_sign_up": "계정을 만들면 서비스 약관개인정보 처리방침에 동의하게 됩니다.", + "terms_sign_in": "로그인하면 서비스 약관개인정보 처리방침에 동의하게 됩니다." } } diff --git a/packages/i18n/src/locales/ko/common.json b/packages/i18n/src/locales/ko/common.json index 73eea6b1c25..580f219bdf3 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": "마일스톤", @@ -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..812816e6de8 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": { @@ -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..24a0d4e03f7 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..c63647af8d0 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..85fbd7b6199 100644 --- a/packages/i18n/src/locales/pl/auth.json +++ b/packages/i18n/src/locales/pl/auth.json @@ -364,5 +364,47 @@ "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ą kodu weryfikacyjnego", + "create_account": "Utwórz konto", + "unique_code": "Kod weryfikacyjny", + "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": "Polityka 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óż w rozwoju funkcji, których potrzebujesz.", + "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/pl/common.json b/packages/i18n/src/locales/pl/common.json index 4c4850cbf66..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", @@ -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..bf93a76c92a 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": { @@ -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 w lewo", + "insert_right": "Wstaw w prawo", + "header_row": "Wiersz nagłówka", + "header_column": "Kolumna nagłówka", + "alignment": { + "left": "Do lewej", + "center": "Wyśrodkuj", + "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": "Separator", + "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..d31a1246e2b 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 dostępu", + "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": "Data aktualizacji", + "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": "Przed" + } + }, + "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": "{count} etykiet" + }, + "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 pracy", + "update_failed": "Aktualizacja elementu pracy 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..bd111fcd733 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ś członków zespołu", + "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": "Masz zaproszenie!", + "accept_invites": "Zaakceptuj zaproszenia do współpracy ze swoim zespołem.", + "continue_to_workspace": "Przejdź do obszaru roboczego", + "or": "Lub", + "create_own_workspace": "Utwórz własny obszar roboczy", + "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": "Utwórz swój obszar roboczy", + "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": "Pomiń" } } diff --git a/packages/i18n/src/locales/pt-BR/auth.json b/packages/i18n/src/locales/pt-BR/auth.json index eff421c1be0..9b23e410c9a 100644 --- a/packages/i18n/src/locales/pt-BR/auth.json +++ b/packages/i18n/src/locales/pt-BR/auth.json @@ -364,5 +364,47 @@ "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 de verificação", + "create_account": "Criar uma conta", + "unique_code": "Código de verificação", + "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." + }, + "terms_sign_up": "Ao criar uma conta, você concorda com nossos Termos de Serviço e nossa Política de Privacidade.", + "terms_sign_in": "Ao entrar, você concorda com nossos Termos de Serviço e nossa Política de Privacidade." } } diff --git a/packages/i18n/src/locales/pt-BR/common.json b/packages/i18n/src/locales/pt-BR/common.json index 565e85d8739..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", @@ -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..7af91198855 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": { @@ -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": "Duplicar", + "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": "Centralizar", + "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": "Citação", + "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..4960ff1e909 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} 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 o item de trabalho como duplicado", + "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 de atualização", + "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": "{count} etiquetas" + }, + "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..55b09393ce9 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": { @@ -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} módulos", + "no_assignees": "Sem responsáveis", + "labels_count": "{count} 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..162793b7e7e 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": "Espaço de trabalho 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": "Deixe uma estrela 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": "As senhas coincidem", + "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..fafdf4be605 100644 --- a/packages/i18n/src/locales/ro/auth.json +++ b/packages/i18n/src/locales/ro/auth.json @@ -364,5 +364,47 @@ "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": "Continuă", + "go_to_workspace": "Accesați spațiul de lucru", + "sign_in_with_unique_code": "Conectați-vă cu codul de verificare", + "create_account": "Creează cont", + "unique_code": "Cod de verificare", + "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." + }, + "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/ro/common.json b/packages/i18n/src/locales/ro/common.json index e2b44ce87ec..b4701d94c1d 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", @@ -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": "Oferit 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..14dc08462c6 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": { @@ -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": "Duplică", + "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": "Aliniere", + "download": "Descărcați", + "clear_contents": "Șterge conținutul", + "insert_above": "Inseraț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": "Titlu 1", + "h2": "Titlul 2", + "h3": "Titlul 3", + "h4": "Titlul 4", + "h5": "Titlul 5", + "h6": "Titlul 6", + "bulleted-list": "Listă cu marcatori", + "numbered-list": "Listă numerotată", + "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": "Tăiat", + "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..a746589d076 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 al formularului 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": "Duplicarea 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 creării", + "updated_date": "Data actualizării", + "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 element de lucru" + }, + "properties": { + "duplicate_of": "Duplicat al" + }, + "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 elementului 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..fcb4f0525d7 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 elementele de lucru 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": { @@ -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..8733e09c07f 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": "Ați primit o invitație la {workspaceName}", + "description": "Spațiul dvs. de lucru este locul în care veți crea proiecte, veți colabora la elementele dvs. de lucru și veți organiza diferite fluxuri de lucru în contul dvs. Plane.", + "accept": "Acceptă", + "ignore": "Ignoră", + "already_member": "Sunteți deja membru al {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": "Dați-ne o stea 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": "Continuă", + "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 au fost 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": "Ești 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/accessibility.json b/packages/i18n/src/locales/ru/accessibility.json index dd4dde76b14..4d9f585b37f 100644 --- a/packages/i18n/src/locales/ru/accessibility.json +++ b/packages/i18n/src/locales/ru/accessibility.json @@ -1,8 +1,8 @@ { "aria_labels": { "projects_sidebar": { - "workspace_logo": "Логотип рабочей области", - "open_workspace_switcher": "Открыть переключатель рабочей области", + "workspace_logo": "Логотип рабочего пространства", + "open_workspace_switcher": "Открыть переключатель рабочего пространства", "open_user_menu": "Открыть пользовательское меню", "open_command_palette": "Открыть палитру команд", "open_extended_sidebar": "Открыть расширенную боковую панель", diff --git a/packages/i18n/src/locales/ru/auth.json b/packages/i18n/src/locales/ru/auth.json index 3757c971fa8..cd07033866a 100644 --- a/packages/i18n/src/locales/ru/auth.json +++ b/packages/i18n/src/locales/ru/auth.json @@ -364,5 +364,47 @@ "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": "{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." + }, + "terms_sign_up": "Создавая учетную запись, вы соглашаетесь с нашими Условиями обслуживания и Политикой конфиденциальности.", + "terms_sign_in": "Входя в систему, вы соглашаетесь с нашими Условиями обслуживания и Политикой конфиденциальности." } } diff --git a/packages/i18n/src/locales/ru/common.json b/packages/i18n/src/locales/ru/common.json index c2881e55f8a..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", @@ -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..ae6abf4a309 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": { @@ -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..e2609c8b259 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..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": { @@ -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..c971ff48319 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..31b63cccfe9 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ť" }, @@ -364,5 +364,47 @@ "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 overovacieho kódu", + "create_account": "Vytvoriť účet", + "unique_code": "Overovací kód", + "paste_code_sent": "Prilepte kód odoslaný na váš e-mail", + "resend_in": "Znova odoslať o {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": "Podmienky služby", + "and": "a", + "privacy_policy": "Zásady 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." + }, + "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/sk/common.json b/packages/i18n/src/locales/sk/common.json index 4fc339cece6..284f13f3e98 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", @@ -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": "Poháňané", + "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..ec186a79a8a 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": { @@ -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žiť nad", + "insert_below": "Vložiť pod", + "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": "Citát", + "code": "Kód", + "table": "Tabuľka", + "image": "Obrázok", + "divider": "Oddeľ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..b1a37fc18b3 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 súboru zlyhalo. Skúste to znova neskôr.", + "asset_duplication_failed": "Duplikácia súborov zlyhala. Skúste to znova neskôr.", + "permission_denied": "Prístup odmietnutý", + "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": "Dátum aktualizácie", + "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": "Pred" + } + }, + "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ítkov" + }, + "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..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": { @@ -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..b1b528f7a59 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": "Dajte nám hviezdu 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 členov svojho tímu", + "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 potom sa vráťte 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..c2a118f60c2 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": "IdP'niz için {workspaceName} tarafından 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" @@ -364,5 +364,47 @@ "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": "Doğrulama koduyla oturum açın", + "create_account": "Hesap oluştur", + "unique_code": "Doğrulama kodu", + "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." + }, + "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/tr-TR/common.json b/packages/i18n/src/locales/tr-TR/common.json index 74bd5cbf9b3..1ee7fcfacf3 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", @@ -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", + "not_found_hint": "Tarayıcı adres çubuğundaki URL'yi kontrol edip tekrar deneyin.", + "instance_failure_image_alt": "Sunucu ayrıntıları alınamadı", + "instance_failure_title": "Sunucu ayrıntıları alınamadı.", + "instance_failure_description": "Sunucu 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..3bc6ea8811e 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": { @@ -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": "Sil", + "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..e09047eea05 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} etiket" + }, + "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/integration.json b/packages/i18n/src/locales/tr-TR/integration.json index 0d9074fc754..a142d0aa6ae 100644 --- a/packages/i18n/src/locales/tr-TR/integration.json +++ b/packages/i18n/src/locales/tr-TR/integration.json @@ -4,10 +4,10 @@ "loading": "Yükleniyor", "unauthorized": "Bu sayfayı görüntüleme yetkiniz yok.", "configure": "Yapılandır", - "not_enabled": "{name} bu workspace için etkinleştirilmemiş.", + "not_enabled": "{name} bu çalışma alanı için etkinleştirilmemiş.", "not_configured": "Yapılandırılmamış", "disconnect_personal_account": "Kişisel {providerName} hesabını bağlantıdan kes", - "not_configured_message_admin": "{name} entegrasyonu yapılandırılmamış. Lütfen yapılandırmak için instance admininizle iletişime geçin.", + "not_configured_message_admin": "{name} entegrasyonu yapılandırılmamış. Lütfen yapılandırmak için sistem yöneticinizle iletişime geçin.", "not_configured_message_support": "{name} entegrasyonu yapılandırılmamış. Lütfen yapılandırmak için destekle iletişime geçin.", "external_api_unreachable": "Harici API'ye erişilemiyor. Lütfen daha sonra tekrar deneyin.", "error_fetching_supported_integrations": "Desteklenen entegrasyonlar getirilemedi. Lütfen daha sonra tekrar deneyin.", @@ -306,7 +306,7 @@ "generic_error": "İsteğiniz işlenirken beklenmeyen bir hata oluştu", "connection_not_found": "İstenilen bağlantı bulunamadı", "multiple_connections_found": "Yalnızca bir tane beklenirken birden fazla bağlantı bulundu", - "cannot_create_multiple_connections": "Organizasyonunuzu zaten bir workspeysle konnekt ettiniz. Lütfen yeni bir konnekşın yapmadan önce mevcut konnekşını diskonnekt edin.", + "cannot_create_multiple_connections": "Organizasyonunuzu zaten bir çalışma alanına bağladınız. Lütfen yeni bir bağlantı kurmadan önce mevcut bağlantıyı kesin.", "installation_not_found": "İstenilen kurulum bulunamadı", "user_not_found": "İstenilen kullanıcı bulunamadı", "error_fetching_token": "Kimlik doğrulama tokeni alınamadı", diff --git a/packages/i18n/src/locales/tr-TR/navigation.json b/packages/i18n/src/locales/tr-TR/navigation.json index f347e01b0fd..b407c70ab7c 100644 --- a/packages/i18n/src/locales/tr-TR/navigation.json +++ b/packages/i18n/src/locales/tr-TR/navigation.json @@ -28,7 +28,7 @@ "pi_chat": "AI Çet", "epics": "Epiks", "upgrade_plan": "Apgreyd plen", - "plane_pro": "Pleyn Pro", + "plane_pro": "Plane Pro", "business": "Biznis" } } 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..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": { @@ -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-settings.json b/packages/i18n/src/locales/tr-TR/workspace-settings.json index c9eb5c0ad03..733c9b7c14a 100644 --- a/packages/i18n/src/locales/tr-TR/workspace-settings.json +++ b/packages/i18n/src/locales/tr-TR/workspace-settings.json @@ -285,25 +285,25 @@ "dismiss": "Kapat", "cancel": "Denemeyi iptal et", "cancel_success_title": "Deneme iptal edildi.", - "cancel_success_message": "Artık workspeysi silebilirsiniz.", + "cancel_success_message": "Artık çalışma alanını silebilirsiniz.", "cancel_error_title": "Bu işlem başarısız oldu.", "cancel_error_message": "Lütfen tekrar deneyin." }, "applications": { "internal": "Dahili", - "title": "Aplikasyonlar", - "applicationId_copied": "Aplikasyon ID panoya kopyalandı", - "clientId_copied": "Klayınt ID panoya kopyalandı", - "clientSecret_copied": "Klayınt Sikrıt panoya kopyalandı", - "third_party_apps": "Üçüncü parti aplikasyonlar", - "your_apps": "Aplikasyonlarınız", + "title": "Uygulamalar", + "applicationId_copied": "Uygulama ID'si panoya kopyalandı", + "clientId_copied": "İstemci ID'si panoya kopyalandı", + "clientSecret_copied": "İstemci gizli anahtarı panoya kopyalandı", + "third_party_apps": "Üçüncü taraf uygulamalar", + "your_apps": "Uygulamalarınız", "connect": "Bağlan", "connected": "Bağlandı", "disconnect": "Bağlantıyı kes", "install": "Yükle", "installed": "Yüklendi", "configure": "Yapılandır", - "app_available": "Bu aplikasyonu bir Pleyn workspeysi ile kullanılabilir hale getirdiniz", + "app_available": "Bu uygulamayı bir Plane çalışma alanıyla kullanılabilir hale getirdiniz", "app_credentials_regenrated": { "title": "Uygulama kimlik bilgileri başarıyla yeniden oluşturuldu", "description": "İstemci sırrını kullanıldığı her yerde değiştirin. Önceki sır artık geçerli değil." @@ -315,7 +315,7 @@ "installed_apps": "Yüklü uygulamalar", "all_apps": "Tüm uygulamalar", "internal_apps": "Dahili uygulamalar", - "app_name_title": "Bu aplikasyonu ne olarak adlandıracaksınız", + "app_name_title": "Bu uygulamayı ne olarak adlandıracaksınız", "app_description_title": { "label": "Uzun açıklama", "placeholder": "Pazar yeri için uzun bir açıklama yazın. Komutlar için '/' tuşuna basın." @@ -333,7 +333,7 @@ "title": "Uygulama Yapıcı", "description": "Uygulamayı oluşturan kişi veya kuruluş." }, - "app_maker_error": "Aplikasyon meykır gerekli", + "app_maker_error": "Uygulama üreticisi gerekli", "setup_url": { "label": "Kurulum URL'si", "description": "Kullanıcılar uygulamayı yüklediklerinde bu URL'ye yönlendirilecektir.", @@ -354,23 +354,23 @@ "description": "Kullanıcılar Plane ile kimlik doğrulaması yaptıktan sonra bu yola yönlendirilecektir.", "placeholder": "https://example.com https://example.com/" }, - "app_available_description": "Kullanmaya başlamak için bir Pleyn workspeysi bağlayın", - "client_id_and_secret": "Klayınt ID ve Sikrıt", - "client_id_and_secret_description": "Bu sikrıt anahtarı Peycislere kopyalayıp kaydedin. Kapat'a bastıktan sonra bu anahtarı tekrar göremezsiniz.", + "app_available_description": "Kullanmaya başlamak için bir Plane çalışma alanı bağlayın", + "client_id_and_secret": "İstemci ID'si ve gizli anahtar", + "client_id_and_secret_description": "Bu gizli anahtarı Pages'e kopyalayıp kaydedin. Kapat'a bastıktan sonra bu anahtarı tekrar göremezsiniz.", "client_id_and_secret_download": "Anahtarı buradan CSV olarak indirebilirsiniz.", - "application_id": "Aplikasyon ID", - "client_id": "Klayınt ID", - "client_secret": "Klayınt Sikrıt", + "application_id": "Uygulama ID'si", + "client_id": "İstemci ID'si", + "client_secret": "İstemci gizli anahtarı", "export_as_csv": "CSV olarak dışa aktar", "slug_already_exists": "Slag zaten mevcut", - "failed_to_create_application": "Aplikasyon oluşturulamadı", + "failed_to_create_application": "Uygulama oluşturulamadı", "upload_logo": "Logo yükle", - "app_name_error": "Aplikasyon adı gerekli", - "app_short_description_title": "Bu aplikasyona kısa bir açıklama verin", - "app_short_description_error": "Aplikasyon kısa açıklaması gerekli", - "app_description_error": "Aplikasyon açıklaması gerekli", - "app_slug_title": "Aplikasyon slag", - "app_slug_error": "Aplikasyon slag gerekli", + "app_name_error": "Uygulama adı gerekli", + "app_short_description_title": "Bu uygulamaya kısa bir açıklama verin", + "app_short_description_error": "Uygulama kısa açıklaması gerekli", + "app_description_error": "Uygulama açıklaması gerekli", + "app_slug_title": "Uygulama slug'ı", + "app_slug_error": "Uygulama slug'ı gerekli", "invalid_website_error": "Geçersiz web sitesi", "webhook_url_title": "Webhuk URL", "webhook_url_error": "Webhuk URL gerekli", @@ -378,42 +378,42 @@ "redirect_uris_title": "Ridayrekt URIları", "redirect_uris_error": "Ridayrekt URIları gerekli", "invalid_redirect_uris_error": "Geçersiz ridayrekt URIları", - "redirect_uris_description": "Aplikasyonun kullanıcıdan sonra yönlendirileceği boşlukla ayrılmış URIları girin örn. https://example.com https://example.com/", + "redirect_uris_description": "Kullanıcı doğrulamadan sonra uygulamanın yönlendireceği boşlukla ayrılmış URI'ları girin, örn. https://example.com https://example.com/", "authorized_javascript_origins_title": "Yetkilendirilmiş Cavaskrip Orijinleri", "authorized_javascript_origins_error": "Yetkilendirilmiş Cavaskrip Orijinleri gerekli", "invalid_authorized_javascript_origins_error": "Geçersiz yetkilendirilmiş Cavaskrip Orijinleri", - "authorized_javascript_origins_description": "Aplikasyonun istek yapmasına izin verilecek boşlukla ayrılmış orijinleri girin örn. app.com example.com", - "create_app": "Aplikasyon oluştur", - "update_app": "Aplikasyonu güncelle", + "authorized_javascript_origins_description": "Uygulamanın istek yapmasına izin verilecek boşlukla ayrılmış kaynakları girin, örn. app.com example.com", + "create_app": "Uygulama oluştur", + "update_app": "Uygulamayı güncelle", "build_your_own_app": "Kendi uygulamanızı oluşturun", "edit_app_details": "Uygulama ayrıntılarını düzenle", - "regenerate_client_secret_description": "Klayınt sikrıtı yeniden oluştur. Sikrıtı yeniden oluşturursanız, anahtarı kopyalayabilir veya hemen sonra bir CSV dosyasına indirebilirsiniz.", - "regenerate_client_secret": "Klayınt sikrıtı yeniden oluştur", - "regenerate_client_secret_confirm_title": "Klayınt sikrıtı yeniden oluşturmak istediğinizden emin misiniz?", - "regenerate_client_secret_confirm_description": "Bu sikrıtı kullanan aplikasyon çalışmayı durduracak. Sikrıtı aplikasyonda güncellemeniz gerekecek.", + "regenerate_client_secret_description": "İstemci gizli anahtarını yeniden oluşturun. Gizli anahtarı yeniden oluşturursanız, anahtarı hemen kopyalayabilir veya CSV dosyası olarak indirebilirsiniz.", + "regenerate_client_secret": "İstemci gizli anahtarını yeniden oluştur", + "regenerate_client_secret_confirm_title": "İstemci gizli anahtarını yeniden oluşturmak istediğinizden emin misiniz?", + "regenerate_client_secret_confirm_description": "Bu gizli anahtarı kullanan uygulama çalışmayı durduracak. Gizli anahtarı uygulamada güncellemeniz gerekecek.", "regenerate_client_secret_confirm_cancel": "İptal", "regenerate_client_secret_confirm_regenerate": "Yeniden oluştur", - "read_only_access_to_workspace": "Workspeysinize salt okunur erişim", - "write_access_to_workspace": "Workspeysinize yazma erişimi", + "read_only_access_to_workspace": "Çalışma alanınıza salt okunur erişim", + "write_access_to_workspace": "Çalışma alanınıza yazma erişimi", "read_only_access_to_user_profile": "Kullanıcı profilinize salt okunur erişim", "write_access_to_user_profile": "Kullanıcı profilinize yazma erişimi", - "connect_app_to_workspace": "{app} aplikasyonunu {workspace} workspeysinize bağlayın", - "user_permissions": "Kullanıcı permişınları", - "user_permissions_description": "Kullanıcı permişınları, kullanıcının profiline erişim vermek için kullanılır.", - "workspace_permissions": "Workspeysı permişınları", - "workspace_permissions_description": "Workspeysı permişınları, workspeyse erişim vermek için kullanılır.", - "with_the_permissions": "permişınlarla birlikte", - "app_consent_title": "{app} Pleyn workspeysinize ve profilinize erişim talep ediyor.", - "choose_workspace_to_connect_app_with": "Aplikasyonu bağlamak için bir workspeysı seçin", + "connect_app_to_workspace": "{app} uygulamasını {workspace} çalışma alanınıza bağlayın", + "user_permissions": "Kullanıcı izinleri", + "user_permissions_description": "Kullanıcı izinleri, kullanıcının profiline erişim vermek için kullanılır.", + "workspace_permissions": "Çalışma alanı izinleri", + "workspace_permissions_description": "Çalışma alanı izinleri, çalışma alanına erişim vermek için kullanılır.", + "with_the_permissions": "izinlerle birlikte", + "app_consent_title": "{app}, Plane çalışma alanınıza ve profilinize erişim talep ediyor.", + "choose_workspace_to_connect_app_with": "Uygulamayı bağlamak için bir çalışma alanı seçin", "app_consent_workspace_permissions_title": "{app} şunları yapmak istiyor", - "app_consent_user_permissions_title": "{app} ayrıca bir kullanıcının aşağıdaki kaynaklara erişim permişınını talep edebilir. Bu permişınlar yalnızca bir kullanıcı tarafından talep edilecek ve yetkilendirilecektir.", + "app_consent_user_permissions_title": "{app} ayrıca bir kullanıcının aşağıdaki kaynaklara erişim iznini talep edebilir. Bu izinler yalnızca bir kullanıcı tarafından talep edilecek ve yetkilendirilecektir.", "app_consent_accept_title": "Kabul ederek", - "app_consent_accept_1": "Aplikasyona Pleyn içinde veya dışında kullanabileceğiniz her yerde Pleyn verilerinize erişim izni verirsiniz", + "app_consent_accept_1": "Uygulamaya Plane içinde veya dışında kullanabileceğiniz her yerde Plane verilerinize erişim izni verirsiniz", "app_consent_accept_2": "{app}'in Gizlilik Politikası ve Kullanım Koşullarını kabul edersiniz", "accepting": "Kabul ediliyor...", "accept": "Kabul et", "categories": "Kategoriler", - "select_app_categories": "Aplikasyon kategorilerini seçin", + "select_app_categories": "Uygulama kategorilerini seçin", "categories_title": "Kategoriler", "categories_error": "Kategoriler gerekli", "invalid_categories_error": "Geçersiz kategoriler", @@ -438,9 +438,9 @@ "configuration_url_title": "Yapılandırma URL", "configuration_url_error": "Yapılandırma URL gerekli", "invalid_configuration_url_error": "Geçersiz yapılandırma URL", - "contact_email_title": "İletişim Email", - "contact_email_error": "İletişim Email gerekli", - "invalid_contact_email_error": "Geçersiz iletişim email", + "contact_email_title": "İletişim e-postası", + "contact_email_error": "İletişim e-postası gerekli", + "invalid_contact_email_error": "Geçersiz iletişim e-postası", "upload_attachments": "Ekleri yükle", "uploading_images": "{count, plural, one {Yükleniyor {count} görsel} other {Yükleniyor {count} görsel}}", "drop_images_here": "Görselleri buraya bırakın", @@ -449,7 +449,7 @@ "uploading": "Yükleniyor...", "upload_and_save": "Yükle ve kaydet", "app_consent_no_access_title": "Yükleme talebi", - "app_consent_no_access_description": "Bu uygulama yalnızca bir workspace yöneticisi tarafından kurulduktan sonra yüklenebilir. Devam etmek için workspace yöneticinizle iletişime geçin.", + "app_consent_no_access_description": "Bu uygulama yalnızca bir çalışma alanı yöneticisi tarafından kurulduktan sonra yüklenebilir. Devam etmek için çalışma alanı yöneticinizle iletişime geçin.", "app_consent_unapproved_title": "Bu uygulama henüz Plane tarafından incelenmedi veya onaylanmadı.", "app_consent_unapproved_description": "Bu uygulamayı çalışma alanınıza bağlamadan önce güvendiğinizden emin olun.", "go_to_app": "Uygulamaya git", diff --git a/packages/i18n/src/locales/tr-TR/workspace.json b/packages/i18n/src/locales/tr-TR/workspace.json index 19f64e7c48e..2b4503b505c 100644 --- a/packages/i18n/src/locales/tr-TR/workspace.json +++ b/packages/i18n/src/locales/tr-TR/workspace.json @@ -19,9 +19,9 @@ }, "errors": { "creation_disabled": { - "title": "Yalnızca örnek yöneticiniz çalışma alanları oluşturabilir", - "description": "Örnek yöneticinizin e-posta adresini biliyorsanız, iletişime geçmek için aşağıdaki düğmeye tıklayın.", - "request_button": "Örnek yönetici iste" + "title": "Yalnızca sistem yöneticiniz çalışma alanları oluşturabilir", + "description": "Sistem yöneticinizin e-posta adresini biliyorsanız, iletişime geçmek için aşağıdaki düğmeye tıklayın.", + "request_button": "Sistem yöneticisine istek gönder" }, "validation": { "name_alphanumeric": "Çalışma alanı adları yalnızca (' '), ('-'), ('_') ve alfasayısal karakterler içerebilir.", @@ -33,7 +33,7 @@ }, "request_email": { "subject": "Yeni çalışma alanı isteği", - "body": "Merhaba örnek yönetici(ler),\n\nLütfen [çalışma-alanı-adı] URL'si ile [çalışma alanı oluşturma amacı] için yeni bir çalışma alanı oluşturun.\n\nTeşekkürler,\n{firstName} {lastName}\n{email}" + "body": "Merhaba sistem yöneticisi,\n\nLütfen [çalışma-alanı-adı] URL'si ile [çalışma alanı oluşturma amacı] için yeni bir çalışma alanı oluşturun.\n\nTeşekkürler,\n{firstName} {lastName}\n{email}" }, "button": { "default": "Çalışma alanı oluştur", @@ -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, iş öğ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 en fazla 50 karakter olmalı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 sistem 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 isteyin, ardından katılmak için bu ekrana geri dönün.", + "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": "Atla" } } diff --git a/packages/i18n/src/locales/ua/accessibility.json b/packages/i18n/src/locales/ua/accessibility.json index 42766731214..49c94a726e7 100644 --- a/packages/i18n/src/locales/ua/accessibility.json +++ b/packages/i18n/src/locales/ua/accessibility.json @@ -13,12 +13,12 @@ "open_favorites_menu": "Відкрити меню улюблених", "close_favorites_menu": "Закрити меню улюблених", "enter_folder_name": "Введіть назву папки", - "create_new_project": "Створити новий проект", - "open_projects_menu": "Відкрити меню проектів", - "close_projects_menu": "Закрити меню проектів", + "create_new_project": "Створити новий проєкт", + "open_projects_menu": "Відкрити меню проєктів", + "close_projects_menu": "Закрити меню проєктів", "toggle_quick_actions_menu": "Перемкнути меню швидких дій", - "open_project_menu": "Відкрити меню проекту", - "close_project_menu": "Закрити меню проекту", + "open_project_menu": "Відкрити меню проєкту", + "close_project_menu": "Закрити меню проєкту", "collapse_sidebar": "Згорнути бічну панель", "expand_sidebar": "Розгорнути бічну панель", "edition_badge": "Відкрити модал платних планів" diff --git a/packages/i18n/src/locales/ua/auth.json b/packages/i18n/src/locales/ua/auth.json index 93198c72341..d445b25d6d0 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": "Додати домен", @@ -364,5 +364,47 @@ "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": "{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." + }, + "terms_sign_up": "Створюючи обліковий запис, ви погоджуєтеся з нашими Умовами надання послуг і Політикою конфіденційності.", + "terms_sign_in": "Входячи, ви погоджуєтеся з нашими Умовами надання послуг і Політикою конфіденційності." } } diff --git a/packages/i18n/src/locales/ua/automation.json b/packages/i18n/src/locales/ua/automation.json index 25a1f98a8f7..c5f5788bf08 100644 --- a/packages/i18n/src/locales/ua/automation.json +++ b/packages/i18n/src/locales/ua/automation.json @@ -123,7 +123,7 @@ "table": { "title": "Назва автоматизації", "scope": "Область", - "projects": "Проекти", + "projects": "Проєкти", "last_run_on": "Останній запуск", "created_on": "Створено", "last_updated_on": "Останнє оновлення", @@ -207,7 +207,7 @@ "delete": { "success": { "title": "Автоматизація видалена", - "message": "{name}, автоматизація, тепер видалена з вашого проекту." + "message": "{name}, автоматизація, тепер видалена з вашого проєкту." }, "error": { "title": "Не вдалося видалити цю автоматизацію цього разу.", @@ -236,21 +236,21 @@ }, "upgrade": { "title": "Автоматизації", - "description": "Автоматизації - це спосіб автоматизувати завдання у вашому проекті.", + "description": "Автоматизації - це спосіб автоматизувати завдання у вашому проєкті.", "sub_description": "Поверніть 80% свого адміністративного часу, коли використовуєте автоматизації." } }, "global_automations": { "project_select": { - "label": "Виберіть проекти для запуску цієї автоматизації", + "label": "Виберіть проєкти для запуску цієї автоматизації", "all_projects": { - "label": "Усі проекти", - "description": "Автоматизація буде запущена для всіх проектів у робочому просторі." + "label": "Усі проєкти", + "description": "Автоматизація буде запущена для всіх проєктів у робочому просторі." }, "select_projects": { - "label": "Вибрати проекти", - "description": "Автоматизація буде запущена для вибраних проектів у робочому просторі.", - "placeholder": "Вибрати проекти" + "label": "Вибрати проєкти", + "description": "Автоматизація буде запущена для вибраних проєктів у робочому просторі.", + "placeholder": "Вибрати проєкти" } }, "settings": { @@ -262,7 +262,7 @@ "scope": { "global": "Глобальна", "project": { - "label": "Проект", + "label": "Проєкт", "multiple": "Декілька", "all": "Усі" } diff --git a/packages/i18n/src/locales/ua/common.json b/packages/i18n/src/locales/ua/common.json index 89bd906d8fa..05fbdff129f 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": "сторінку статусу" }, @@ -102,18 +102,18 @@ "theme_updated_successfully": "Тему успішно оновлено", "failed_to_update_the_theme": "Не вдалося оновити тему", "email_notifications": "Сповіщення електронною поштою", - "stay_in_the_loop_on_issues_you_are_subscribed_to_enable_this_to_get_notified": "Будьте в курсі робочих одиниць, на які ви підписані. Увімкніть це, щоб отримувати сповіщення.", + "stay_in_the_loop_on_issues_you_are_subscribed_to_enable_this_to_get_notified": "Будьте в курсі робочих елементів, на які ви підписані. Увімкніть це, щоб отримувати сповіщення.", "email_notification_setting_updated_successfully": "Налаштування сповіщень електронною поштою успішно оновлено", "failed_to_update_email_notification_setting": "Не вдалося оновити налаштування сповіщень електронною поштою", "notify_me_when": "Повідомляти мене, коли", "property_changes": "Зміни властивостей", - "property_changes_description": "Повідомляти, коли змінюються властивості робочих одиниць, такі як призначення, пріоритет, оцінки чи інші.", + "property_changes_description": "Повідомляти, коли змінюються властивості робочих елементів, такі як призначення, пріоритет, оцінки чи інші.", "state_change": "Зміна стану", - "state_change_description": "Повідомляти, коли робоча одиниця переходить в інший стан", - "issue_completed": "Робоча одиниця завершена", - "issue_completed_description": "Повідомляти лише коли робоча одиниця завершена", + "state_change_description": "Повідомляти, коли робочий елемент переходить в інший стан", + "issue_completed": "Робочий елемент завершена", + "issue_completed_description": "Повідомляти лише коли робочий елемент завершена", "comments": "Коментарі", - "comments_description": "Повідомляти, коли хтось додає коментар до робочої одиниці", + "comments_description": "Повідомляти, коли хтось додає коментар до робочого елемента", "mentions": "Згадки", "mentions_description": "Повідомляти лише коли хтось згадає мене у коментарі чи описі", "old_password": "Старий пароль", @@ -121,7 +121,7 @@ "sign_out": "Вийти", "signing_out": "Вихід", "active_cycles": "Активні цикли", - "active_cycles_description": "Відстежуйте цикли між проєктами, слідкуйте за пріоритетними робочими одиницями та звертайте увагу на цикли, які потребують втручання.", + "active_cycles_description": "Відстежуйте цикли між проєктами, слідкуйте за пріоритетними робочими елементами та звертайте увагу на цикли, які потребують втручання.", "on_demand_snapshots_of_all_your_cycles": "Знімки всіх ваших циклів на вимогу", "upgrade": "Підвищити", "10000_feet_view": "Огляд з висоти 10 000 футів для всіх активних циклів.", @@ -130,8 +130,8 @@ "get_snapshot_of_each_active_cycle_description": "Відстежуйте ключові метрики для всіх активних циклів, переглядайте їхній прогрес і порівнюйте обсяг із крайніми строками.", "compare_burndowns": "Порівнюйте burndown-графіки.", "compare_burndowns_description": "Контролюйте ефективність команд за допомогою огляду burndown-звітів кожного циклу.", - "quickly_see_make_or_break_issues": "Швидко визначайте критичні робочі одиниці.", - "quickly_see_make_or_break_issues_description": "Переглядайте найпріоритетніші робочі одиниці для кожного циклу з урахуванням термінів. Усе за один клік.", + "quickly_see_make_or_break_issues": "Швидко визначайте критичні робочі елементи.", + "quickly_see_make_or_break_issues_description": "Переглядайте найпріоритетніші робочі елементи для кожного циклу з урахуванням термінів. Усе за один клік.", "zoom_into_cycles_that_need_attention": "Зосередьтеся на циклах, що потребують уваги.", "zoom_into_cycles_that_need_attention_description": "Одним кліком вивчайте стан будь-якого циклу, який не відповідає очікуванням.", "stay_ahead_of_blockers": "Вчасно виявляйте перешкоди.", @@ -140,7 +140,7 @@ "workspace_invites": "Запрошення до робочого простору", "enter_god_mode": "Увійти в режим Бога", "workspace_logo": "Логотип робочого простору", - "new_issue": "Нова робоча одиниця", + "new_issue": "Нова робочий елемент", "your_work": "Ваша робота", "drafts": "Чернетки", "projects": "Проєкти", @@ -167,10 +167,10 @@ "create_project": "Створити проєкт", "failed_to_remove_project_from_favorites": "Не вдалося видалити проєкт із вибраного. Спробуйте ще раз.", "project_created_successfully": "Проєкт успішно створено", - "project_created_successfully_description": "Проєкт успішно створений. Тепер ви можете почати додавати робочі одиниці.", - "project_name_already_taken": "Назва проекту вже використовується.", + "project_created_successfully_description": "Проєкт успішно створений. Тепер ви можете почати додавати робочі елементи.", + "project_name_already_taken": "Назва проєкту вже використовується.", "project_name_cannot_contain_special_characters": "Назва проєкту не може містити спеціальні символи.", - "project_identifier_already_taken": "Ідентифікатор проекту вже використовується.", + "project_identifier_already_taken": "Ідентифікатор проєкту вже використовується.", "project_cover_image_alt": "Обкладинка проєкту", "name_is_required": "Назва є обов'язковою", "title_should_be_less_than_255_characters": "Назва має бути коротшою за 255 символів", @@ -178,7 +178,7 @@ "project_id_must_be_at_least_1_character": "Ідентифікатор проєкту має містити принаймні 1 символ", "project_id_must_be_at_most_5_characters": "Ідентифікатор проєкту може містити максимум 5 символів", "project_id": "ID проєкту", - "project_id_tooltip_content": "Допомагає унікально ідентифікувати робочі одиниці в проєкті. Макс. 50 символів.", + "project_id_tooltip_content": "Допомагає унікально ідентифікувати робочі елементи в проєкті. Макс. 50 символів.", "description_placeholder": "Опис", "only_alphanumeric_non_latin_characters_allowed": "Дозволені лише алфанумеричні та нелатинські символи.", "project_id_is_required": "ID проєкту є обов'язковим", @@ -211,7 +211,7 @@ "drag_to_rearrange": "Перетягніть для впорядкування", "congrats": "Вітаємо!", "open_project": "Відкрити проєкт", - "issues": "Робочі одиниці", + "issues": "Робочі елементи", "cycles": "Цикли", "modules": "Модулі", "pages": "Сторінки", @@ -220,14 +220,14 @@ "preview": "Попередній перегляд", "time_tracking": "Відстеження часу", "work_management": "Управління роботою", - "projects_and_issues": "Проєкти та робочі одиниці", + "projects_and_issues": "Проєкти та робочі елементи", "projects_and_issues_description": "Увімкніть або вимкніть ці функції в проєкті.", "cycles_description": "Обмежуйте роботу в часі для кожного проєкту та за потреби коригуйте період. Один цикл може тривати 2 тижні, наступний — 1 тиждень.", "modules_description": "Організуйте роботу в підпроєкти з окремими керівниками та виконавцями.", "views_description": "Зберігайте власні сортування, фільтри та варіанти відображення або діліться ними з командою.", "pages_description": "Створюйте та редагуйте довільний вміст: нотатки, документи, що завгодно.", "intake_description": "Дозвольте неучасникам ділитися помилками, відгуками й пропозиціями без порушення робочого процесу.", - "time_tracking_description": "Фіксуйте час, витрачений на робочі одиниці та проєкти.", + "time_tracking_description": "Фіксуйте час, витрачений на робочі елементи та проєкти.", "work_management_description": "Зручно керуйте своєю роботою та проєктами.", "documentation": "Документація", "message_support": "Звернутися в підтримку", @@ -258,30 +258,30 @@ "back_to_home": "Повернутися на головну", "workspace_name": "назва-робочого-простору", "deactivate_your_account": "Деактивувати ваш обліковий запис", - "deactivate_your_account_description": "Після деактивації вас не можна буде призначати на робочі одиниці, і з вас не стягуватиметься плата за робочий простір. Щоб знову активувати обліковий запис, потрібно отримати запрошення на цей e-mail.", + "deactivate_your_account_description": "Після деактивації вас не можна буде призначати на робочі елементи, і з вас не стягуватиметься плата за робочий простір. Щоб знову активувати обліковий запис, потрібно отримати запрошення на цей e-mail.", "deactivating": "Деактивація", "confirm": "Підтвердити", "confirming": "Підтвердження", "draft_created": "Чернетку створено", - "issue_created_successfully": "Робочу одиницю успішно створено", + "issue_created_successfully": "Робочий елемент успішно створено", "draft_creation_failed": "Не вдалося створити чернетку", - "issue_creation_failed": "Не вдалося створити робочу одиницю", - "draft_issue": "Чернетка робочої одиниці", - "issue_updated_successfully": "Робочу одиницю успішно оновлено", - "issue_could_not_be_updated": "Не вдалося оновити робочу одиницю", + "issue_creation_failed": "Не вдалося створити робочий елемент", + "draft_issue": "Чернетка робочого елемента", + "issue_updated_successfully": "Робочий елемент успішно оновлено", + "issue_could_not_be_updated": "Не вдалося оновити робочий елемент", "create_a_draft": "Створити чернетку", "save_to_drafts": "Зберегти до чернеток", "save": "Зберегти", "update": "Оновити", "updating": "Оновлення", - "create_new_issue": "Створити нову робочу одиницю", + "create_new_issue": "Створити нову робочий елемент", "editor_is_not_ready_to_discard_changes": "Редактор ще не готовий скасувати зміни", - "failed_to_move_issue_to_project": "Не вдалося перемістити робочу одиницю до проєкту", + "failed_to_move_issue_to_project": "Не вдалося перемістити робочий елемент до проєкту", "create_more": "Створити ще", "add_to_project": "Додати до проєкту", "discard": "Скасувати", - "duplicate_issue_found": "Знайдено дублікат робочої одиниці", - "duplicate_issues_found": "Знайдено дублікати робочих одиниць", + "duplicate_issue_found": "Знайдено дублікат робочого елемента", + "duplicate_issues_found": "Знайдено дублікати робочих елементів", "no_matching_results": "Немає відповідних результатів", "title_is_required": "Назва є обов'язковою", "title": "Назва", @@ -308,8 +308,8 @@ "due_date": "Крайній термін", "target_date": "Цільова дата", "estimate": "Оцінка", - "change_parent_issue": "Змінити батьківську робочу одиницю", - "remove_parent_issue": "Вилучити батьківську робочу одиницю", + "change_parent_issue": "Змінити батьківську робочий елемент", + "remove_parent_issue": "Вилучити батьківську робочий елемент", "add_parent": "Додати батьківську", "loading_members": "Завантаження учасників", "view_link_copied_to_clipboard": "Посилання на подання скопійовано до буфера обміну.", @@ -332,15 +332,15 @@ "show_less": "Показати менше", "no_data_yet": "Поки що немає даних", "syncing": "Синхронізація", - "add_work_item": "Додати робочу одиницю", + "add_work_item": "Додати робочий елемент", "advanced_description_placeholder": "Натисніть '/' для команд", - "create_work_item": "Створити робочу одиницю", + "create_work_item": "Створити робочий елемент", "attachments": "Вкладення", "declining": "Відхилення", "declined": "Відхилено", "decline": "Відхилити", "unassigned": "Не призначено", - "work_items": "Робочі одиниці", + "work_items": "Робочі елементи", "add_link": "Додати посилання", "points": "Бали", "no_assignee": "Без призначення", @@ -462,9 +462,9 @@ "group_by": "Групувати за", "epic": "Епік", "epics": "Епіки", - "work_item": "Робоча одиниця", - "work_items": "Робочі одиниці", - "sub_work_item": "Похідна робоча одиниця", + "work_item": "Робочий елемент", + "work_items": "Робочі елементи", + "sub_work_item": "Похідна робочий елемент", "views": "Подання", "pages": "Сторінки", "add": "Додати", @@ -486,7 +486,7 @@ "project_timezone": "Часовий пояс проєкту", "created_on": "Створено", "updated_on": "Оновлено", - "completed_on": "Completed on", + "completed_on": "Дата завершення", "update_project": "Оновити проєкт", "identifier_already_exists": "Такий ідентифікатор уже існує", "add_more": "Додати ще", @@ -507,7 +507,7 @@ "private": "Приватний" }, "done": "Готово", - "sub_work_items": "Похідні робочі одиниці", + "sub_work_items": "Похідні робочі елементи", "comment": "Коментар", "workspace_level": "Рівень робочого простору", "order_by": { @@ -534,9 +534,9 @@ "copied": "Скопійовано!", "link_copied": "Посилання скопійовано!", "link_copied_to_clipboard": "Посилання скопійовано до буфера обміну", - "copied_to_clipboard": "Посилання на робочу одиницю скопійовано до буфера", + "copied_to_clipboard": "Посилання на робочий елемент скопійовано до буфера", "branch_name_copied_to_clipboard": "Назву гілки скопійовано до буфера", - "is_copied_to_clipboard": "Робочу одиницю скопійовано до буфера", + "is_copied_to_clipboard": "Робочий елемент скопійовано до буфера", "no_links_added_yet": "Поки що немає доданих посилань", "add_link": "Додати посилання", "links": "Посилання", @@ -707,17 +707,17 @@ "templates": "Темплейти", "business": "Бізнес", "members_and_teamspaces": "Члени та командних просторів", - "recurring_work_items": "Повторювані робочі одиниці", + "recurring_work_items": "Повторювані робочі елементи", "milestones": "Віхи", "open_in_full_screen": "Відкрити {page} на повний екран", "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", @@ -836,7 +836,7 @@ "in_app": "В-апп", "forms": "Форми", "milestones": "Віхи", - "milestones_description": "Віхи забезпечують шар для узгодження робочих одиниць до спільних дат завершення.", + "milestones_description": "Віхи забезпечують шар для узгодження робочих елементів до спільних дат завершення.", "file_upload": { "upload_text": "Натисніть тут, щоб завантажити файл", "drag_drop_text": "Перетягніть", @@ -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/cycle.json b/packages/i18n/src/locales/ua/cycle.json index 20379051d4b..5e93c5b48e8 100644 --- a/packages/i18n/src/locales/ua/cycle.json +++ b/packages/i18n/src/locales/ua/cycle.json @@ -8,10 +8,10 @@ "title": "Додайте одиниці, щоб побачити burndown-графік." }, "priority_issue": { - "title": "Тут з’являться найпріоритетніші робочі одиниці." + "title": "Тут з’являться найпріоритетніші робочі елементи." }, "assignee": { - "title": "Призначте робочі одиниці, щоб побачити розподіл." + "title": "Призначте робочі елементи, щоб побачити розподіл." }, "label": { "title": "Додайте мітки, щоб аналізувати за мітками." diff --git a/packages/i18n/src/locales/ua/editor.json b/packages/i18n/src/locales/ua/editor.json index e688e337966..c05ea0fe34b 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": { @@ -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/home.json b/packages/i18n/src/locales/ua/home.json index 0a1b496ac21..2a4e77cc512 100644 --- a/packages/i18n/src/locales/ua/home.json +++ b/packages/i18n/src/locales/ua/home.json @@ -42,14 +42,14 @@ "empty": { "project": "Ваші нещодавні проєкти з'являться тут після перегляду.", "page": "Ваші нещодавні сторінки з'являться тут після перегляду.", - "issue": "Ваші нещодавні робочі одиниці з'являться тут після перегляду.", + "issue": "Ваші нещодавні робочі елементи з'являться тут після перегляду.", "default": "Поки у вас немає нещодавніх елементів." }, "filters": { "all": "Усі", "projects": "Проєкти", "pages": "Сторінки", - "issues": "Робочі одиниці" + "issues": "Робочі елементи" } }, "new_at_plane": { diff --git a/packages/i18n/src/locales/ua/inbox.json b/packages/i18n/src/locales/ua/inbox.json index 96264f4531f..20c86fe3f6c 100644 --- a/packages/i18n/src/locales/ua/inbox.json +++ b/packages/i18n/src/locales/ua/inbox.json @@ -24,30 +24,30 @@ }, "modals": { "decline": { - "title": "Відхилити робочу одиницю", - "content": "Справді відхилити робочу одиницю {value}?" + "title": "Відхилити робочий елемент", + "content": "Справді відхилити робочий елемент {value}?" }, "delete": { - "title": "Видалити робочу одиницю", - "content": "Справді видалити робочу одиницю {value}?", - "success": "Робочу одиницю успішно видалено" + "title": "Видалити робочий елемент", + "content": "Справді видалити робочий елемент {value}?", + "success": "Робочий елемент успішно видалено" } }, "errors": { - "snooze_permission": "Лише адміністратори проєкту можуть відкладати/повертати відкладені робочі одиниці", - "accept_permission": "Лише адміністратори проєкту можуть приймати робочі одиниці", - "decline_permission": "Лише адміністратори проєкту можуть відхилити робочі одиниці" + "snooze_permission": "Лише адміністратори проєкту можуть відкладати/повертати відкладені робочі елементи", + "accept_permission": "Лише адміністратори проєкту можуть приймати робочі елементи", + "decline_permission": "Лише адміністратори проєкту можуть відхилити робочі елементи" }, "actions": { "accept": "Прийняти", "decline": "Відхилити", "snooze": "Відкласти", "unsnooze": "Повернути з відкладених", - "copy": "Скопіювати посилання на робочу одиницю", + "copy": "Скопіювати посилання на робочий елемент", "delete": "Видалити", - "open": "Відкрити робочу одиницю", + "open": "Відкрити робочий елемент", "mark_as_duplicate": "Позначити як дублікат", - "move": "Перемістити {value} до робочих одиниць проєкту" + "move": "Перемістити {value} до робочих елементів проєкту" }, "source": { "in-app": "в застосунку" @@ -60,7 +60,7 @@ "label": "Надходження", "page_label": "{workspace} - Надходження", "modal": { - "title": "Створити прийняту робочу одиницю" + "title": "Створити прийняту робочий елемент" }, "tabs": { "open": "Відкриті", @@ -68,20 +68,71 @@ }, "empty_state": { "sidebar_open_tab": { - "title": "Немає відкритих робочих одиниць", - "description": "Тут будуть відкриті робочі одиниці. Створіть нову." + "title": "Немає відкритих робочих елементів", + "description": "Тут будуть відкриті робочі елементи. Створіть нову." }, "sidebar_closed_tab": { - "title": "Немає закритих робочих одиниць", - "description": "Усі прийняті або відхилені робочі одиниці будуть тут." + "title": "Немає закритих робочих елементів", + "description": "Усі прийняті або відхилені робочі елементи будуть тут." }, "sidebar_filter": { - "title": "Немає робочих одиниць за фільтром", + "title": "Немає робочих елементів за фільтром", "description": "Немає одиниць, що відповідають фільтру у надходженнях. Створіть нову." }, "detail": { - "title": "Виберіть робочу одиницю для перегляду деталей." + "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/integration.json b/packages/i18n/src/locales/ua/integration.json index df88777e3a8..2c4067f237a 100644 --- a/packages/i18n/src/locales/ua/integration.json +++ b/packages/i18n/src/locales/ua/integration.json @@ -182,15 +182,15 @@ "disconnect_workspace": "Відключити робочий простір {name}", "state_mapping": { "title": "Відображення станів", - "description": "Відображіть стани інцидентів Sentry до станів вашого проекту. Налаштуйте, які стани використовувати, коли інцидент Sentry вирішено або не вирішено.", + "description": "Відображіть стани інцидентів Sentry до станів вашого проєкту. Налаштуйте, які стани використовувати, коли інцидент Sentry вирішено або не вирішено.", "add_new_state_mapping": "Додати нове відображення стану", - "empty_state": "Відображення станів не налаштовано. Створіть перше відображення для синхронізації станів інцидентів Sentry зі станами вашого проекту.", + "empty_state": "Відображення станів не налаштовано. Створіть перше відображення для синхронізації станів інцидентів Sentry зі станами вашого проєкту.", "failed_loading_state_mappings": "Не вдалося завантажити ваші відображення станів. Це може бути пов'язано з проблемою мережі або проблемою з інтеграцією.", - "loading_project_states": "Завантаження станів проекту...", + "loading_project_states": "Завантаження станів проєкту...", "error_loading_states": "Помилка завантаження станів", "no_states_available": "Стани недоступні", - "no_permission_states": "У вас немає дозволу на доступ до станів для цього проекту", - "states_not_found": "Стани проекту не знайдено", + "no_permission_states": "У вас немає дозволу на доступ до станів для цього проєкту", + "states_not_found": "Стани проєкту не знайдено", "server_error_states": "Помилка сервера при завантаженні станів" } }, diff --git a/packages/i18n/src/locales/ua/navigation.json b/packages/i18n/src/locales/ua/navigation.json index 742ef12d7e7..f885ed5c101 100644 --- a/packages/i18n/src/locales/ua/navigation.json +++ b/packages/i18n/src/locales/ua/navigation.json @@ -11,13 +11,13 @@ "your_work": "Ваша робота", "projects": "Проєкти", "pages": "Сторінки", - "new_work_item": "Нова робоча одиниця", + "new_work_item": "Нова робочий елемент", "home": "Головна", "inbox": "Вхідні", "workspace": "Робочий простір", "views": "Подання", "analytics": "Аналітика", - "work_items": "Робочі одиниці", + "work_items": "Робочі елементи", "cycles": "Цикли", "modules": "Модулі", "intake": "Надходження", 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/power-k.json b/packages/i18n/src/locales/ua/power-k.json index 5e4630fc664..bc56dd95349 100644 --- a/packages/i18n/src/locales/ua/power-k.json +++ b/packages/i18n/src/locales/ua/power-k.json @@ -1,12 +1,12 @@ { "power_k": { "actions_commands": { - "bulk_delete_work_items": "Масове видалення робочих одиниць" + "bulk_delete_work_items": "Масове видалення робочих елементів" }, "contextual_actions": { "work_item": { - "title": "Дії робочої одиниці", - "indicator": "Робоча одиниця", + "title": "Дії робочого елемента", + "indicator": "Робочий елемент", "change_state": "Змінити стан", "change_priority": "Змінити пріоритет", "change_assignees": "Призначити", @@ -20,14 +20,14 @@ "unsubscribe": "Скасувати підписку на сповіщення", "delete": "Видалити", "copy_id": "Скопіювати ID", - "copy_id_toast_success": "ID робочої одиниці скопійовано в буфер обміну.", - "copy_id_toast_error": "Під час копіювання ID робочої одиниці в буфер обміну сталася помилка.", + "copy_id_toast_success": "ID робочого елемента скопійовано в буфер обміну.", + "copy_id_toast_error": "Під час копіювання ID робочого елемента в буфер обміну сталася помилка.", "copy_title": "Скопіювати назву", - "copy_title_toast_success": "Назву робочої одиниці скопійовано в буфер обміну.", - "copy_title_toast_error": "Під час копіювання назви робочої одиниці в буфер обміну сталася помилка.", + "copy_title_toast_success": "Назву робочого елемента скопійовано в буфер обміну.", + "copy_title_toast_error": "Під час копіювання назви робочого елемента в буфер обміну сталася помилка.", "copy_url": "Скопіювати URL", - "copy_url_toast_success": "URL робочої одиниці скопійовано в буфер обміну.", - "copy_url_toast_error": "Під час копіювання URL робочої одиниці в буфер обміну сталася помилка." + "copy_url_toast_success": "URL робочого елемента скопійовано в буфер обміну.", + "copy_url_toast_error": "Під час копіювання URL робочого елемента в буфер обміну сталася помилка." }, "cycle": { "title": "Дії циклу", @@ -66,7 +66,7 @@ } }, "creation_actions": { - "create_work_item": "Нова робоча одиниця", + "create_work_item": "Нова робочий елемент", "create_page": "Нова сторінка", "create_view": "Нове подання", "create_cycle": "Новий цикл", @@ -83,16 +83,16 @@ "nav_account_settings": "Перейти до налаштувань облікового запису", "open_project": "Відкрити проєкт", "nav_projects_list": "Перейти до списку проєктів", - "nav_all_workspace_work_items": "Перейти до всіх робочих одиниць", - "nav_assigned_workspace_work_items": "Перейти до призначених робочих одиниць", - "nav_created_workspace_work_items": "Перейти до створених робочих одиниць", - "nav_subscribed_workspace_work_items": "Перейти до підписаних робочих одиниць", + "nav_all_workspace_work_items": "Перейти до всіх робочих елементів", + "nav_assigned_workspace_work_items": "Перейти до призначених робочих елементів", + "nav_created_workspace_work_items": "Перейти до створених робочих елементів", + "nav_subscribed_workspace_work_items": "Перейти до підписаних робочих елементів", "nav_workspace_analytics": "Перейти до аналітики робочого простору", "nav_workspace_drafts": "Перейти до чернеток робочого простору", "nav_workspace_archives": "Перейти до архівів робочого простору", "open_workspace_setting": "Відкрити налаштування робочого простору", "nav_workspace_settings": "Перейти до налаштувань робочого простору", - "nav_project_work_items": "Перейти до робочих одиниць", + "nav_project_work_items": "Перейти до робочих елементів", "open_project_cycle": "Відкрити цикл", "nav_project_cycles": "Перейти до циклів", "open_project_module": "Відкрити модуль", diff --git a/packages/i18n/src/locales/ua/project-settings.json b/packages/i18n/src/locales/ua/project-settings.json index 987be6fa7f7..7d4b028b310 100644 --- a/packages/i18n/src/locales/ua/project-settings.json +++ b/packages/i18n/src/locales/ua/project-settings.json @@ -38,7 +38,7 @@ }, "states": { "heading": "Стани", - "description": "Визначайте та налаштовуйте стани робочого процесу для відстеження прогресу ваших робочих одиниць.", + "description": "Визначайте та налаштовуйте стани робочого процесу для відстеження прогресу ваших робочих елементів.", "describe_this_state_for_your_members": "Опишіть цей стан для учасників.", "empty_state": { "title": "Немає станів у групі {groupKey}", @@ -47,7 +47,7 @@ }, "labels": { "heading": "Мітки", - "description": "Створюйте користувацькі мітки для категоризації та організації ваших робочих одиниць", + "description": "Створюйте користувацькі мітки для категоризації та організації ваших робочих елементів", "label_title": "Назва мітки", "label_title_is_required": "Назва мітки є обов'язковою", "label_max_char": "Назва мітки не може перевищувати 255 символів", @@ -200,7 +200,7 @@ "empty_state": { "labels": { "title": "Немає міток", - "description": "Створіть мітки для організації робочих одиниць." + "description": "Створіть мітки для організації робочих елементів." }, "estimates": { "title": "Немає систем оцінок", @@ -215,10 +215,10 @@ "workflows": { "toggle": { "title": "Увімкнути воркфлоу", - "description": "Налаштуйте воркфлоу для керування рухом робочих одиниць", + "description": "Налаштуйте воркфлоу для керування рухом робочих елементів", "no_states_tooltip": "Стани не додано до воркфлоу.", - "no_work_item_types_tooltip": "Типи робочих одиниць не додано до воркфлоу.", - "no_states_or_work_item_types_tooltip": "Стани або типи робочих одиниць не додано до воркфлоу.", + "no_work_item_types_tooltip": "Типи робочих елементів не додано до воркфлоу.", + "no_states_or_work_item_types_tooltip": "Стани або типи робочих елементів не додано до воркфлоу.", "toast": { "loading": { "enabling": "Увімкнення воркфлоу", @@ -235,7 +235,7 @@ } }, "heading": "Воркфлоу", - "description": "Автоматизуйте переходи робочих одиниць і встановлюйте правила, які визначають, як завдання рухаються у конвеєрі вашого проєкту.", + "description": "Автоматизуйте переходи робочих елементів і встановлюйте правила, які визначають, як завдання рухаються у конвеєрі вашого проєкту.", "add_button": "Додати новий воркфлоу", "search": "Шукати воркфлоу", "detail": { @@ -243,10 +243,10 @@ "add_states": "Додати стани", "unmapped_states": { "title": "Виявлено незіставлені стани", - "description": "Деякі робочі одиниці вибраних типів наразі перебувають у станах, яких немає в цьому воркфлоу.", + "description": "Деякі робочі елементи вибраних типів наразі перебувають у станах, яких немає в цьому воркфлоу.", "note": "Якщо ви увімкнете цей воркфлоу, такі елементи автоматично перейдуть у початковий стан цього воркфлоу.", "label": "Відсутні стани", - "tooltip": "Деякі робочі одиниці перебувають у станах, які не зіставлені з цим воркфлоу. Відкрийте воркфлоу для перегляду." + "tooltip": "Деякі робочі елементи перебувають у станах, які не зіставлені з цим воркфлоу. Відкрийте воркфлоу для перегляду." } }, "select_states": { @@ -256,7 +256,7 @@ } }, "default_footer": { - "fallback_message": "Цей воркфлоу застосовується до будь-якого типу робочої одиниці, який не прив'язаний до воркфлоу." + "fallback_message": "Цей воркфлоу застосовується до будь-якого типу робочого елемента, який не прив'язаний до воркфлоу." }, "create": { "heading": "Створити новий воркфлоу", @@ -275,7 +275,7 @@ } }, "work_item_type": { - "label": "Тип робочої одиниці" + "label": "Тип робочого елемента" }, "success": { "title": "Успіх!", @@ -319,37 +319,37 @@ } }, "work_item_types": { - "heading": "Типи робочих одиниць", - "description": "Створюйте та налаштовуйте різні типи робочих одиниць з унікальними властивостями" + "heading": "Типи робочих елементів", + "description": "Створюйте та налаштовуйте різні типи робочих елементів з унікальними властивостями" }, "features": { "cycles": { "title": "Цикли", "short_title": "Цикли", - "description": "Плануйте роботу в гнучких періодах, які адаптуються до унікального ритму та темпу цього проекту.", + "description": "Плануйте роботу в гнучких періодах, які адаптуються до унікального ритму та темпу цього проєкту.", "toggle_title": "Увімкнути цикли", "toggle_description": "Плануйте роботу в цілеспрямовані періоди часу." }, "modules": { "title": "Модулі", "short_title": "Модулі", - "description": "Організуйте роботу в підпроекти з виділеними керівниками та виконавцями.", + "description": "Організуйте роботу в підпроєкти з виділеними керівниками та виконавцями.", "toggle_title": "Увімкнути модулі", - "toggle_description": "Учасники проекту зможуть створювати та редагувати модулі." + "toggle_description": "Учасники проєкту зможуть створювати та редагувати модулі." }, "views": { "title": "Перегляди", "short_title": "Перегляди", "description": "Зберігайте користувацькі сортування, фільтри та параметри відображення або діліться ними з командою.", "toggle_title": "Увімкнути перегляди", - "toggle_description": "Учасники проекту зможуть створювати та редагувати перегляди." + "toggle_description": "Учасники проєкту зможуть створювати та редагувати перегляди." }, "pages": { "title": "Сторінки", "short_title": "Сторінки", "description": "Створюйте та редагуйте вільний контент: нотатки, документи, що завгодно.", "toggle_title": "Увімкнути сторінки", - "toggle_description": "Учасники проекту зможуть створювати та редагувати сторінки." + "toggle_description": "Учасники проєкту зможуть створювати та редагувати сторінки." }, "intake": { "intake_responsibility": "Відповідальність за прийом", @@ -358,9 +358,9 @@ "short_title": "Прийом", "description": "Дозвольте не-учасникам ділитися помилками, відгуками та пропозиціями; не порушуючи ваш робочий процес.", "toggle_title": "Увімкнути прийом", - "toggle_description": "Дозволити учасникам проекту створювати запити на прийом в додатку.", - "toggle_tooltip_on": "Попросіть адміністратора проекту увімкнути.", - "toggle_tooltip_off": "Попросіть адміністратора проекту вимкнути.", + "toggle_description": "Дозволити учасникам проєкту створювати запити на прийом в додатку.", + "toggle_tooltip_on": "Попросіть адміністратора проєкту увімкнути.", + "toggle_tooltip_off": "Попросіть адміністратора проєкту вимкнути.", "notify_assignee": { "title": "Сповістити призначених", "description": "Для нового запиту на прийом призначені за замовчуванням будуть сповіщені через сповіщення" @@ -413,9 +413,9 @@ "time_tracking": { "title": "Відстеження часу", "short_title": "Відстеження часу", - "description": "Записуйте час, витрачений на робочі елементи та проекти.", + "description": "Записуйте час, витрачений на робочі елементи та проєкти.", "toggle_title": "Увімкнути відстеження часу", - "toggle_description": "Учасники проекту зможуть записувати відпрацьований час." + "toggle_description": "Учасники проєкту зможуть записувати відпрацьований час." }, "milestones": { "title": "Віхи", @@ -436,7 +436,7 @@ }, "templates": { "heading": "Шаблони", - "description": "Заощаджуйте 80% часу, витраченого на створення проєктів, робочих одиниць і сторінок, коли ви використовуєте шаблони." + "description": "Заощаджуйте 80% часу, витраченого на створення проєктів, робочих елементів і сторінок, коли ви використовуєте шаблони." }, "cycles": { "auto_schedule": { diff --git a/packages/i18n/src/locales/ua/project.json b/packages/i18n/src/locales/ua/project.json index 7cf67135f74..c282227c317 100644 --- a/packages/i18n/src/locales/ua/project.json +++ b/packages/i18n/src/locales/ua/project.json @@ -19,7 +19,7 @@ "start_date": "Дата початку", "end_date": "Дата завершення", "in_your_timezone": "У вашому часовому поясі", - "transfer_work_items": "Перенести {count} робочих одиниць", + "transfer_work_items": "Перенести {count} робочих елементів", "transfer": { "no_cycles_available": "Немає інших циклів для переміщення робочих елементів." }, @@ -31,7 +31,7 @@ "chart": "Burndown-графік", "priority_issue": "Найпріоритетніші одиниці", "assignees": "Призначені", - "issue_burndown": "Burndown робочих одиниць", + "issue_burndown": "Burndown робочих елементів", "ideal": "Ідеальний", "current": "Поточний", "labels": "Мітки", @@ -113,7 +113,7 @@ } }, "no_issues": { - "title": "У циклі немає робочих одиниць", + "title": "У циклі немає робочих елементів", "description": "Додайте ті одиниці, які хочете відстежувати.", "primary_button": { "text": "Створити одиницю" @@ -123,7 +123,7 @@ } }, "completed_no_issues": { - "title": "У циклі немає робочих одиниць", + "title": "У циклі немає робочих елементів", "description": "Одиниці переміщено або приховано. Щоб побачити їх, змініть властивості." }, "active": { @@ -154,14 +154,14 @@ } }, "no_archived_issues": { - "title": "Поки що немає заархівованих робочих одиниць", - "description": "Вручну або через автоматизацію ви можете архівувати робочі одиниці, які завершено або скасовано. Знайдіть їх тут після архівування.", + "title": "Поки що немає заархівованих робочих елементів", + "description": "Вручну або через автоматизацію ви можете архівувати робочі елементи, які завершено або скасовано. Знайдіть їх тут після архівування.", "primary_button": { "text": "Налаштувати автоматизацію" } }, "issues_empty_filter": { - "title": "Не знайдено робочих одиниць за застосованими фільтрами", + "title": "Не знайдено робочих елементів за застосованими фільтрами", "secondary_button": { "text": "Очистити всі фільтри" } @@ -190,12 +190,12 @@ "project_issues": { "empty_state": { "no_issues": { - "title": "Створіть і призначте робочу одиницю", - "description": "Робочі одиниці — це завдання, які ви призначаєте собі чи команді. Відстежуйте їхній прогрес.", + "title": "Створіть і призначте робочий елемент", + "description": "Робочі елементи — це завдання, які ви призначаєте собі чи команді. Відстежуйте їхній прогрес.", "primary_button": { "text": "Створити першу одиницю", "comic": { - "title": "Робочі одиниці — будівельні блоки", + "title": "Робочі елементи — будівельні блоки", "description": "Наприклад: редизайн інтерфейсу, ребрендинг, нова система." } } @@ -272,7 +272,7 @@ "empty_state": { "general": { "title": "Пишіть нотатки, документи або базу знань із допомогою AI Galileo.", - "description": "Сторінки — це простір для ідей. Пишіть, форматуйте, вбудовуйте робочі одиниці та використовуйте компоненти.", + "description": "Сторінки — це простір для ідей. Пишіть, форматуйте, вбудовуйте робочі елементи та використовуйте компоненти.", "primary_button": { "text": "Створити першу сторінку" } @@ -414,5 +414,11 @@ } } } + }, + "projects_empty_state": { + "no_projects_yet": "Проєктів ще немає", + "description": "Проєкти є основою роботи, орієнтованої на цілі. Вони допомагають керувати командами, завданнями та всім необхідним для виконання роботи.", + "learn_more": "Дізнатися більше про проєкти", + "start_first_project": "Почати перший проєкт" } } diff --git a/packages/i18n/src/locales/ua/settings.json b/packages/i18n/src/locales/ua/settings.json index 313da74f6bc..1e99d3b0a74 100644 --- a/packages/i18n/src/locales/ua/settings.json +++ b/packages/i18n/src/locales/ua/settings.json @@ -45,7 +45,7 @@ }, "notifications": { "heading": "Сповіщення електронною поштою", - "description": "Будьте в курсі робочих одиниць, на які ви підписані. Увімкніть, щоб отримувати сповіщення.", + "description": "Будьте в курсі робочих елементів, на які ви підписані. Увімкніть, щоб отримувати сповіщення.", "select_default_view": "Вибрати подання за замовчуванням", "compact": "Компактний", "full": "Повний екран" @@ -59,7 +59,7 @@ }, "activity": { "heading": "Активність", - "description": "Відстежуйте свої нещодавні дії та зміни в усіх проєктах і робочих одиницях." + "description": "Відстежуйте свої нещодавні дії та зміни в усіх проєктах і робочих елементах." }, "connections": { "title": "Коннекшнс", @@ -115,18 +115,18 @@ "empty_state": { "activity": { "title": "Немає активності", - "description": "Створіть робочу одиницю, щоб почати." + "description": "Створіть робочий елемент, щоб почати." }, "assigned": { - "title": "Немає призначених робочих одиниць", + "title": "Немає призначених робочих елементів", "description": "Тут будуть відображатися одиниці, призначені вам." }, "created": { - "title": "Немає створених робочих одиниць", + "title": "Немає створених робочих елементів", "description": "Тут будуть відображатися одиниці, які ви створили." }, "subscribed": { - "title": "Немає підписаних робочих одиниць", + "title": "Немає підписаних робочих елементів", "description": "Підпишіться на потрібні одиниці, й вони з'являться тут." } } diff --git a/packages/i18n/src/locales/ua/template.json b/packages/i18n/src/locales/ua/template.json index bea8fa6bd25..c06ddef9a26 100644 --- a/packages/i18n/src/locales/ua/template.json +++ b/packages/i18n/src/locales/ua/template.json @@ -4,7 +4,7 @@ "title": "Темплейти", "description": "Заощаджуйте 80% часу, витраченого на створення проджектів, робочих елементів та пейджів, коли використовуєте темплейти.", "new_project_template": "Новий темплейт проєкту", - "new_work_item_template": "Новий темплейт робочої одиниці", + "new_work_item_template": "Новий темплейт робочого елемента", "new_page_template": "Новий темплейт сторінки", "options": { "project": { @@ -318,7 +318,7 @@ "project": "Додати новий шаблон" }, "label": { - "project": "Вибрати шаблон проекту", + "project": "Вибрати шаблон проєкту", "page": "Вибрати шаблон" }, "tooltip": { diff --git a/packages/i18n/src/locales/ua/tour.json b/packages/i18n/src/locales/ua/tour.json index 7dbec4359cb..4266f56452b 100644 --- a/packages/i18n/src/locales/ua/tour.json +++ b/packages/i18n/src/locales/ua/tour.json @@ -3,59 +3,59 @@ "workitems": { "step_zero": { "title": "Ласкаво просимо до вашого робочого простору", - "description": "Щоб допомогти вам почати, ми створили Демо-проект для вас. Додаймо вашу першу робочу задачу." + "description": "Щоб допомогти вам почати, ми створили Демо-проєкт для вас. Додаймо вашу першу робочий елемент." }, "step_one": { - "title": "Натисніть \"+ Додати робочу задачу\"", - "description": "Почніть з натискання кнопки \"+ Нова робоча задача\". Ви можете створювати завдання, помилки або власний тип, який відповідає вашим потребам." + "title": "Натисніть \"+ Додати робочий елемент\"", + "description": "Почніть з натискання кнопки \"+ Нова робочий елемент\". Ви можете створювати завдання, помилки або власний тип, який відповідає вашим потребам." }, "step_two": { - "title": "Фільтруйте свої робочі задачі", + "title": "Фільтруйте свої робочі елементи", "description": "Використовуйте фільтри, щоб швидко звузити свій список. Ви можете фільтрувати за статусом, пріоритетом або членами команди. " }, "step_three": { - "title": "Переглядайте, групуйте та сортуйте робочі задачі за потребою.", - "description": "Подивіться необхідні властивості та згрупуйте або відсортуйте робочі задачі відповідно до ваших потреб." + "title": "Переглядайте, групуйте та сортуйте робочі елементи за потребою.", + "description": "Подивіться необхідні властивості та згрупуйте або відсортуйте робочі елементи відповідно до ваших потреб." }, "step_four": { "title": "Візуалізуйте як хочете", - "description": "Виберіть, які властивості ви хочете бачити в списку. Ви також можете групувати та сортувати робочі задачі по-своєму." + "description": "Виберіть, які властивості ви хочете бачити в списку. Ви також можете групувати та сортувати робочі елементи по-своєму." } }, "cycle": { "step_zero": { "title": "Досягайте прогресу з Циклами", - "description": "Натисніть Q, щоб створити Цикл. Назвіть його та встановіть дати—лише один цикл на проект." + "description": "Натисніть Q, щоб створити Цикл. Назвіть його та встановіть дати—лише один цикл на проєкт." }, "step_one": { "title": "Створити новий цикл", - "description": "Натисніть Q, щоб створити Цикл. Назвіть його та встановіть дати—лише один цикл на проект." + "description": "Натисніть Q, щоб створити Цикл. Назвіть його та встановіть дати—лише один цикл на проєкт." }, "step_two": { "title": "Натисніть \"+\"", - "description": "Почніть з натискання кнопки \"+\". Додайте нові або існуючі робочі задачі прямо зі сторінки Циклу." + "description": "Почніть з натискання кнопки \"+\". Додайте нові або існуючі робочі елементи прямо зі сторінки Циклу." }, "step_three": { "title": "Зведення циклу", "description": "Відстежуйте прогрес циклу, продуктивність команди та пріоритети—та досліджуйте, якщо щось відстає." }, "step_four": { - "title": "Перенести робочі задачі", + "title": "Перенести робочі елементи", "description": "Після терміну цикл автоматично завершується. Перемістіть незавершену роботу в інший цикл." } }, "module": { "step_zero": { - "title": "Розділіть свій проект на Модулі", - "description": "Модулі—це менші, сфокусовані проекти, які допомагають користувачам групувати та організовувати робочі задачі в межах певних часових рамок." + "title": "Розділіть свій проєкт на Модулі", + "description": "Модулі—це менші, сфокусовані проєкти, які допомагають користувачам групувати та організовувати робочі елементи в межах певних часових рамок." }, "step_one": { "title": "Створити Модуль", - "description": "Модулі—це менші, сфокусовані проекти, які допомагають користувачам групувати та організовувати робочі задачі в межах певних часових рамок." + "description": "Модулі—це менші, сфокусовані проєкти, які допомагають користувачам групувати та організовувати робочі елементи в межах певних часових рамок." }, "step_two": { "title": "Натисніть \"+\"", - "description": "Почніть з натискання кнопки \"+\". Додайте нові або існуючі робочі задачі прямо зі сторінки Модуля." + "description": "Почніть з натискання кнопки \"+\". Додайте нові або існуючі робочі елементи прямо зі сторінки Модуля." }, "step_three": { "title": "Стани модуля", @@ -69,7 +69,7 @@ "page": { "step_zero": { "title": "Документуйте за допомогою Сторінок на основі ШІ", - "description": "Сторінки в Plane дозволяють вам захоплювати, організовувати та співпрацювати над інформацією про проект—без зовнішніх інструментів." + "description": "Сторінки в Plane дозволяють вам захоплювати, організовувати та співпрацювати над інформацією про проєкт—без зовнішніх інструментів." }, "step_one": { "title": "Зробити сторінку Публічною або Приватною", @@ -95,7 +95,7 @@ "intake": { "step_zero": { "title": "Оптимізуйте запити з прийомом", - "description": "Функція лише для Plane, яка дозволяє Гостям створювати робочі задачі для помилок, запитів або тикетів." + "description": "Функція лише для Plane, яка дозволяє Гостям створювати робочі елементи для помилок, запитів або тикетів." }, "step_one": { "title": "Відкриті/закриті запити на прийом", @@ -103,11 +103,11 @@ }, "step_two": { "title": "Прийняти/відхилити очікуючий запит", - "description": "Прийміть, щоб відредагувати та перемістити робочу задачу у ваш проект, або відхиліть, щоб позначити її як Скасовану." + "description": "Прийміть, щоб відредагувати та перемістити робочий елемент у ваш проєкт, або відхиліть, щоб позначити її як Скасовану." }, "step_three": { "title": "Відкласти на потім", - "description": "Робочу задачу можна відкласти, щоб переглянути її пізніше. Вона буде переміщена в кінець вашого списку відкритих запитів." + "description": "Робочий елемент можна відкласти, щоб переглянути її пізніше. Вона буде переміщена в кінець вашого списку відкритих запитів." } }, "mcp_connectors": { @@ -127,7 +127,7 @@ }, "step_zero": { "title": "Знайдіть що завгодно миттєво", - "description": "Використовуйте універсальний пошук, щоб перейти до завдань, проектів, сторінок та людей—не виходячи зі свого потоку." + "description": "Використовуйте універсальний пошук, щоб перейти до завдань, проєктів, сторінок та людей—не виходячи зі свого потоку." }, "step_one": { "title": "Зберігайте контроль над оновленнями", @@ -148,8 +148,8 @@ "got_it": "Зрозуміло" }, "seed_data": { - "title": "Ось ваш демо-проект", - "description": "Проекти дозволяють вам керувати вашими командами, завданнями та всім, що вам потрібно для виконання роботи у вашому робочому просторі." + "title": "Ось ваш демо-проєкт", + "description": "Проєкти дозволяють вам керувати вашими командами, завданнями та всім, що вам потрібно для виконання роботи у вашому робочому просторі." } }, "get_started": { @@ -160,10 +160,10 @@ "description": "Почніть налаштування та побачите, як ваші ідеї втілюються в життя швидше.", "checklist_items": { "item_1": { - "title": "Створити проект" + "title": "Створити проєкт" }, "item_2": { - "title": "Створити робочу задачу" + "title": "Створити робочий елемент" }, "item_3": { "title": "Запросити учасників команди" diff --git a/packages/i18n/src/locales/ua/work-item-type.json b/packages/i18n/src/locales/ua/work-item-type.json index 6e037feace1..b9153b5ee56 100644 --- a/packages/i18n/src/locales/ua/work-item-type.json +++ b/packages/i18n/src/locales/ua/work-item-type.json @@ -9,7 +9,7 @@ "cant_set_default_inactive_message": "Активуйте цей тип перед встановленням за замовчуванням", "set_default_confirmation": { "title": "Встановити як тип робочого елемента за замовчуванням", - "description": "Встановлення {name} за замовчуванням імпортує його в усі проекти цього робочого простору. Усі нові робочі елементи використовуватимуть цей тип за замовчуванням.", + "description": "Встановлення {name} за замовчуванням імпортує його в усі проєкти цього робочого простору. Усі нові робочі елементи використовуватимуть цей тип за замовчуванням.", "confirm_button": "Встановити за замовчуванням" }, "properties": { @@ -233,7 +233,7 @@ }, "types": { "title": "Типи", - "description": "Створюйте та налаштовуйте типи робочих одиниць із властивостями.", + "description": "Створюйте та налаштовуйте типи робочих елементів із властивостями.", "sort_options": { "project_count": "Кількість проєктів" }, @@ -247,8 +247,8 @@ "import_from_workspace": "Імпортувати з робочого простору" }, "banner": { - "with_access": "Увімкніть типи робочих одиниць, щоб імпортувати типи з рівня робочого простору", - "without_access": "Типи робочих одиниць вимкнено. Зверніться до адміністратора робочого простору, щоб увімкнути їх у налаштуваннях робочого простору." + "with_access": "Увімкніть типи робочих елементів, щоб імпортувати типи з рівня робочого простору", + "without_access": "Типи робочих елементів вимкнено. Зверніться до адміністратора робочого простору, щоб увімкнути їх у налаштуваннях робочого простору." } } }, @@ -264,7 +264,7 @@ }, "unlink_confirmation": { "title": "Від'єднати властивість", - "description": "Від'єднання цієї властивості назавжди видалить усі її значення для кожної робочої одиниці, яка використовує цей тип. Цю дію неможливо скасувати.", + "description": "Від'єднання цієї властивості назавжди видалить усі її значення для кожної робочого елемента, яка використовує цей тип. Цю дію неможливо скасувати.", "input_label": "Введіть", "input_label_suffix": "для продовження:", "confirm": "Від'єднати властивість", diff --git a/packages/i18n/src/locales/ua/work-item.json b/packages/i18n/src/locales/ua/work-item.json index 158f41610b0..59053191fb9 100644 --- a/packages/i18n/src/locales/ua/work-item.json +++ b/packages/i18n/src/locales/ua/work-item.json @@ -1,50 +1,50 @@ { "issue": { - "label": "{count, plural, one {Робоча одиниця} few {Робочі одиниці} other {Робочих одиниць}}", - "all": "Усі робочі одиниці", - "edit": "Редагувати робочу одиницю", + "label": "{count, plural, one {Робочий елемент} few {Робочі елементи} other {Робочих елементів}}", + "all": "Усі робочі елементи", + "edit": "Редагувати робочий елемент", "title": { - "label": "Назва робочої одиниці", - "required": "Назва робочої одиниці є обов'язковою." + "label": "Назва робочого елемента", + "required": "Назва робочого елемента є обов'язковою." }, "add": { - "press_enter": "Натисніть 'Enter', щоб додати ще одну робочу одиницю", - "label": "Додати робочу одиницю", + "press_enter": "Натисніть 'Enter', щоб додати ще одну робочий елемент", + "label": "Додати робочий елемент", "cycle": { - "failed": "Не вдалося додати робочу одиницю в цикл. Спробуйте ще раз.", - "success": "{count, plural, one {Робоча одиниця} few {Робочі одиниці} other {Робочих одиниць}} додано до циклу.", - "loading": "Додавання {count, plural, one {робочої одиниці} few {робочих одиниць} other {робочих одиниць}} до циклу" + "failed": "Не вдалося додати робочий елемент в цикл. Спробуйте ще раз.", + "success": "{count, plural, one {Робочий елемент} few {Робочі елементи} other {Робочих елементів}} додано до циклу.", + "loading": "Додавання {count, plural, one {робочого елемента} few {робочих елементів} other {робочих елементів}} до циклу" }, "assignee": "Додати призначеного", "start_date": "Додати дату початку", "due_date": "Додати крайній термін", - "parent": "Додати батьківську робочу одиницю", - "sub_issue": "Додати похідну робочу одиницю", + "parent": "Додати батьківський робочий елемент", + "sub_issue": "Додати похідний робочий елемент", "dependency": "Додати залежність", "relation": "Додати зв'язок", "link": "Додати посилання", - "existing": "Додати наявну робочу одиницю" + "existing": "Додати наявний робочий елемент" }, "remove": { - "label": "Видалити робочу одиницю", + "label": "Видалити робочий елемент", "cycle": { - "loading": "Вилучення робочої одиниці з циклу", - "success": "Робочу одиницю вилучено з циклу.", - "failed": "Не вдалося вилучити робочу одиницю з циклу. Спробуйте ще раз." + "loading": "Вилучення робочого елемента з циклу", + "success": "Робочий елемент вилучено з циклу.", + "failed": "Не вдалося вилучити робочий елемент з циклу. Спробуйте ще раз." }, "module": { - "loading": "Вилучення робочої одиниці з модуля", - "success": "Робочу одиницю вилучено з модуля.", - "failed": "Не вдалося вилучити робочу одиницю з модуля. Спробуйте ще раз." + "loading": "Вилучення робочого елемента з модуля", + "success": "Робочий елемент вилучено з модуля.", + "failed": "Не вдалося вилучити робочий елемент з модуля. Спробуйте ще раз." }, "parent": { - "label": "Вилучити батьківську робочу одиницю" + "label": "Вилучити батьківський робочий елемент" } }, - "new": "Нова робоча одиниця", - "adding": "Додавання робочої одиниці", + "new": "Нова робочий елемент", + "adding": "Додавання робочого елемента", "create": { - "success": "Робочу одиницю успішно створено" + "success": "Робочий елемент успішно створено" }, "priority": { "urgent": "Терміновий", @@ -56,15 +56,15 @@ "properties": { "label": "Відображувані властивості", "id": "ID", - "issue_type": "Тип робочої одиниці", + "issue_type": "Тип робочого елемента", "sub_issue_count": "Кількість похідних", "attachment_count": "Кількість вкладень", "created_on": "Створено", "sub_issue": "Похідна одиниця", - "work_item_count": "Кількість робочих одиниць" + "work_item_count": "Кількість робочих елементів" }, "extra": { - "show_sub_issues": "Показати похідні робочі одиниці", + "show_sub_issues": "Показати похідні робочі елементи", "show_empty_groups": "Показати порожні групи" } }, @@ -152,35 +152,35 @@ }, "empty_state": { "issue_detail": { - "title": "Робоча одиниця не існує", - "description": "Шукана робоча одиниця не існує, була заархівована або видалена.", + "title": "Робочий елемент не існує", + "description": "Шукана робочий елемент не існує, була заархівована або видалена.", "primary_button": { - "text": "Переглянути інші робочі одиниці" + "text": "Переглянути інші робочі елементи" } } }, "sibling": { - "label": "Пов'язані робочі одиниці" + "label": "Пов'язані робочі елементи" }, "archive": { - "description": "Архівувати можна лише завершені або скасовані\nробочі одиниці", - "label": "Заархівувати робочу одиницю", - "confirm_message": "Справді заархівувати цю робочу одиницю? Усі заархівовані одиниці можна пізніше відновити.", + "description": "Архівувати можна лише завершені або скасовані робочі елементи", + "label": "Заархівувати робочий елемент", + "confirm_message": "Справді заархівувати цей робочий елемент? Усі заархівовані елементи можна пізніше відновити.", "success": { "label": "Успішно заархівовано", "message": "Ваші архіви можна знайти в архівах проєкту." }, "failed": { - "message": "Не вдалося заархівувати робочу одиницю. Спробуйте ще раз." + "message": "Не вдалося заархівувати робочий елемент. Спробуйте ще раз." } }, "restore": { "success": { "title": "Успішне відновлення", - "message": "Ваша робоча одиниця тепер доступна серед робочих одиниць проєкту." + "message": "Ваша робочий елемент тепер доступна серед робочих елементів проєкту." }, "failed": { - "message": "Не вдалося відновити робочу одиницю. Спробуйте ще раз." + "message": "Не вдалося відновити робочий елемент. Спробуйте ще раз." } }, "relation": { @@ -195,29 +195,29 @@ "implements": "Реалізує", "implemented_by": "Реалізовано" }, - "copy_link": "Скопіювати посилання на робочу одиницю", + "copy_link": "Скопіювати посилання на робочий елемент", "delete": { - "label": "Видалити робочу одиницю", - "error": "Помилка під час видалення робочої одиниці" + "label": "Видалити робочий елемент", + "error": "Помилка під час видалення робочого елемента" }, "subscription": { "actions": { - "subscribed": "Ви підписалися на оновлення робочої одиниці", - "unsubscribed": "Ви скасували підписку на оновлення робочої одиниці" + "subscribed": "Ви підписалися на оновлення робочого елемента", + "unsubscribed": "Ви скасували підписку на оновлення робочого елемента" } }, "select": { - "error": "Виберіть принаймні одну робочу одиницю", - "empty": "Не вибрано жодної робочої одиниці", - "add_selected": "Додати вибрані робочі одиниці", + "error": "Виберіть принаймні одну робочий елемент", + "empty": "Не вибрано жодної робочого елемента", + "add_selected": "Додати вибрані робочі елементи", "select_all": "Вибрати всі", "deselect_all": "Скасувати вибір усіх" }, - "open_in_full_screen": "Відкрити робочу одиницю на повний екран", + "open_in_full_screen": "Відкрити робочий елемент на повний екран", "duplicate": { "modal": { "title": "Зробити копію в іншому проєкті", - "description1": "Це створить копію робочої одиниці.", + "description1": "Це створить копію робочого елемента.", "description2": "Усі дані властивостей будуть видалені під час дублювання.", "placeholder": "Виберіть проєкт" } @@ -225,10 +225,10 @@ "toast": { "duplicate": { "success": { - "message": "Робочу одиницю успішно дубльовано" + "message": "Робочий елемент успішно дубльовано" }, "error": { - "message": "Не вдалося дублювати робочу одиницю" + "message": "Не вдалося дублювати робочий елемент" } } }, @@ -270,22 +270,22 @@ }, "sub_work_item": { "update": { - "success": "Похідну робочу одиницю успішно оновлено", - "error": "Помилка під час оновлення похідної одиниці" + "success": "Похідну робочий елемент успішно оновлено", + "error": "Помилка під час оновлення похідного робочого елемента" }, "remove": { - "success": "Похідну робочу одиницю успішно вилучено", - "error": "Помилка під час вилучення похідної одиниці" + "success": "Похідну робочий елемент успішно вилучено", + "error": "Помилка під час вилучення похідного робочого елемента" }, "empty_state": { "sub_list_filters": { - "title": "Ви не маєте похідних робочих одиниць, які відповідають застосованим фільтрам.", - "description": "Щоб побачити всі похідні робочі одиниці, очистіть всі застосовані фільтри.", + "title": "Ви не маєте похідних робочих елементів, які відповідають застосованим фільтрам.", + "description": "Щоб побачити всі похідні робочі елементи, очистіть всі застосовані фільтри.", "action": "Очистити фільтри" }, "list_filters": { - "title": "Ви не маєте робочих одиниць, які відповідають застосованим фільтрам.", - "description": "Щоб побачити всі робочі одиниці, очистіть всі застосовані фільтри.", + "title": "Ви не маєте робочих елементів, які відповідають застосованим фільтрам.", + "description": "Щоб побачити всі робочі елементи, очистіть всі застосовані фільтри.", "action": "Очистити фільтри" } } @@ -332,8 +332,8 @@ "settings": { "heading": "Повторювані робочі елементи", "description": "Налаштуйте повторювані робочі елементи один раз, і ми займемося повтореннями. Ви побачите все тут, коли настане час.", - "new_recurring_work_item": "Нова повторювана робоча задача", - "update_recurring_work_item": "Оновити повторювану робочу задачу", + "new_recurring_work_item": "Нова повторювана робочий елемент", + "update_recurring_work_item": "Оновити повторювану робочий елемент", "form": { "interval": { "title": "Розклад", @@ -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-settings.json b/packages/i18n/src/locales/ua/workspace-settings.json index ad89c67bd21..14bbc831d6c 100644 --- a/packages/i18n/src/locales/ua/workspace-settings.json +++ b/packages/i18n/src/locales/ua/workspace-settings.json @@ -272,12 +272,12 @@ "templates": { "title": "Шаблони", "heading": "Шаблони", - "description": "Заощаджуйте 80% часу, витраченого на створення проєктів, робочих одиниць і сторінок, коли ви використовуєте шаблони." + "description": "Заощаджуйте 80% часу, витраченого на створення проєктів, робочих елементів і сторінок, коли ви використовуєте шаблони." }, "relations": { "title": "Зв'язки", "heading": "Зв'язки", - "description": "Створюйте та керуйте типами зв'язків, які поєднують робочі одиниці у вашому робочому просторі." + "description": "Створюйте та керуйте типами зв'язків, які поєднують робочі елементи у вашому робочому просторі." }, "cancel_trial": { "title": "Спочатку скасуйте пробний період.", @@ -465,7 +465,7 @@ "read": "Читання", "write": "Запис", "scope_description": { - "projects": "Доступ до проектів та всіх пов’язаних сутностей", + "projects": "Доступ до проєктів та всіх пов’язаних сутностей", "wiki": "Доступ до вікі та всіх пов’язаних сутностей", "workspaces": "Доступ до робочих просторів та всіх пов’язаних сутностей", "stickies": "Доступ до стікерів та всіх пов’язаних сутностей", diff --git a/packages/i18n/src/locales/ua/workspace.json b/packages/i18n/src/locales/ua/workspace.json index cb288fd2d89..d0b66427358 100644 --- a/packages/i18n/src/locales/ua/workspace.json +++ b/packages/i18n/src/locales/ua/workspace.json @@ -54,7 +54,7 @@ "empty_state": { "general": { "title": "Огляд проєктів, активностей і метрик", - "description": "Ласкаво просимо до Plane, ми раді, що ви з нами. Створіть перший проєкт, додайте робочі одиниці — і ця сторінка заповниться вашим прогресом. Адміністратори побачать тут також важливі елементи для команди.", + "description": "Ласкаво просимо до Plane, ми раді, що ви з нами. Створіть перший проєкт, додайте робочі елементи — і ця сторінка заповниться вашим прогресом. Адміністратори побачать тут також важливі елементи для команди.", "primary_button": { "text": "Створіть перший проєкт", "comic": { @@ -70,17 +70,17 @@ "page_label": "{workspace} - Аналітика", "open_tasks": "Усього відкритих завдань", "error": "Сталася помилка під час завантаження даних.", - "work_items_closed_in": "Робочі одиниці, закриті в", + "work_items_closed_in": "Робочі елементи, закриті в", "selected_projects": "Вибрані проєкти", "total_members": "Усього учасників", "total_cycles": "Усього циклів", "total_modules": "Усього модулів", "pending_work_items": { - "title": "Робочі одиниці, що очікують", - "empty_state": "Тут буде аналітика щодо робочих одиниць у розрізі виконавців." + "title": "Робочі елементи, що очікують", + "empty_state": "Тут буде аналітика щодо робочих елементів у розрізі виконавців." }, "work_items_closed_in_a_year": { - "title": "Робочі одиниці, закриті за рік", + "title": "Робочі елементи, закриті за рік", "empty_state": "Закривайте одиниці, щоб побачити аналітику в графіку." }, "most_work_items_created": { @@ -170,7 +170,7 @@ "permission": "У вас немає прав для цієї дії.", "cycle_delete": "Не вдалося видалити цикл", "module_delete": "Не вдалося видалити модуль", - "issue_delete": "Не вдалося видалити робочу одиницю" + "issue_delete": "Не вдалося видалити робочий елемент" }, "state": { "backlog": "Backlog", @@ -207,7 +207,7 @@ }, "no_projects": { "title": "Немає проєктів", - "description": "Щоб створювати робочі одиниці, потрібно створити або приєднатися до проєкту.", + "description": "Щоб створювати робочі елементи, потрібно створити або приєднатися до проєкту.", "primary_button": { "text": "Розпочати перший проєкт", "comic": { @@ -229,24 +229,24 @@ "add_view": "Додати подання", "empty_state": { "all-issues": { - "title": "Немає робочих одиниць у проєкті", + "title": "Немає робочих елементів у проєкті", "description": "Створіть першу одиницю та відстежуйте прогрес!", "primary_button": { - "text": "Створити робочу одиницю" + "text": "Створити робочий елемент" } }, "assigned": { "title": "Немає призначених одиниць", "description": "Тут відображатимуться одиниці, призначені вам.", "primary_button": { - "text": "Створити робочу одиницю" + "text": "Створити робочий елемент" } }, "created": { "title": "Немає створених одиниць", "description": "Тут відображатимуться одиниці, які ви створили.", "primary_button": { - "text": "Створити робочу одиницю" + "text": "Створити робочий елемент" } }, "subscribed": { @@ -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..beb60a67e38 100644 --- a/packages/i18n/src/locales/vi-VN/auth.json +++ b/packages/i18n/src/locales/vi-VN/auth.json @@ -364,5 +364,47 @@ "sub_header": "Nhập thông tin đăng nhập {ldapProviderName} của bạn" } } + }, + "space_auth": { + "email": "Email", + "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ã xác minh", + "create_account": "Tạo tài khoản", + "unique_code": "Mã xác minh", + "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." + }, + "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/vi-VN/common.json b/packages/i18n/src/locales/vi-VN/common.json index f9aae43c1b9..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", @@ -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..62710e16992 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": { @@ -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": "Văn bản", + "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": "Văn bản", + "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..f28a65a4a90 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..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": { @@ -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..b945a1b5534 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": "Bỏ qua", + "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 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 Plane 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": "Bỏ qua" } } diff --git a/packages/i18n/src/locales/zh-CN/accessibility.json b/packages/i18n/src/locales/zh-CN/accessibility.json index fea84d06373..6ec44512e2a 100644 --- a/packages/i18n/src/locales/zh-CN/accessibility.json +++ b/packages/i18n/src/locales/zh-CN/accessibility.json @@ -1,8 +1,8 @@ { "aria_labels": { "projects_sidebar": { - "workspace_logo": "工作空间徽标", - "open_workspace_switcher": "打开工作空间切换器", + "workspace_logo": "工作区徽标", + "open_workspace_switcher": "打开工作区切换器", "open_user_menu": "打开用户菜单", "open_command_palette": "打开命令面板", "open_extended_sidebar": "打开扩展侧边栏", diff --git a/packages/i18n/src/locales/zh-CN/auth.json b/packages/i18n/src/locales/zh-CN/auth.json index 1fc6f70571f..d28d0322c36 100644 --- a/packages/i18n/src/locales/zh-CN/auth.json +++ b/packages/i18n/src/locales/zh-CN/auth.json @@ -364,5 +364,47 @@ "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 工作项和页面。" + }, + "terms_sign_up": "创建账户即表示你同意我们的服务条款隐私政策。", + "terms_sign_in": "登录即表示你同意我们的服务条款隐私政策。" } } diff --git a/packages/i18n/src/locales/zh-CN/common.json b/packages/i18n/src/locales/zh-CN/common.json index dd67d925a07..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": "里程碑", @@ -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..83122b3fafc 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": { @@ -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..15c7121908d 100644 --- a/packages/i18n/src/locales/zh-CN/empty-state.json +++ b/packages/i18n/src/locales/zh-CN/empty-state.json @@ -213,12 +213,12 @@ }, "tokens": { "title": "暂无个人令牌", - "description": "生成安全的 API 令牌以将工作空间与外部系统和应用程序连接。", + "description": "生成安全的 API 令牌以将工作区与外部系统和应用程序连接。", "cta_primary": "添加 API 令牌" }, "workspace_tokens": { "title": "暂无访问令牌", - "description": "生成安全的 API 令牌以将工作空间与外部系统和应用程序连接。", + "description": "生成安全的 API 令牌以将工作区与外部系统和应用程序连接。", "cta_primary": "添加访问令牌" }, "webhooks": { @@ -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..f85318c160d 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": "打开工作项", @@ -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/integration.json b/packages/i18n/src/locales/zh-CN/integration.json index 3ea1da42116..c434bdd3e5c 100644 --- a/packages/i18n/src/locales/zh-CN/integration.json +++ b/packages/i18n/src/locales/zh-CN/integration.json @@ -176,10 +176,10 @@ }, "sentry_integration": { "name": "Sentry", - "description": "将您的Sentry工作空间连接到Plane。", - "connected_sentry_workspaces": "已连接的Sentry工作空间", + "description": "将您的Sentry工作区连接到Plane。", + "connected_sentry_workspaces": "已连接的Sentry工作区", "connected_on": "连接于{date}", - "disconnect_workspace": "断开{name}工作空间", + "disconnect_workspace": "断开{name}工作区", "state_mapping": { "title": "状态映射", "description": "将Sentry事件状态映射到您的项目状态。配置当Sentry事件已解决或未解决时使用哪些状态。", 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-type.json b/packages/i18n/src/locales/zh-CN/work-item-type.json index 0cc37999135..3737279dc3b 100644 --- a/packages/i18n/src/locales/zh-CN/work-item-type.json +++ b/packages/i18n/src/locales/zh-CN/work-item-type.json @@ -195,7 +195,7 @@ "validation_success_with_refs": "公式有效!返回 {resultType}(引用了 {count} 个字段)", "error": { "empty": "请输入公式", - "missing_context": "缺少工作空间、项目或工作项类型上下文", + "missing_context": "缺少工作区、项目或工作项类型上下文", "validation_failed": "验证失败" }, "picker": { diff --git a/packages/i18n/src/locales/zh-CN/work-item.json b/packages/i18n/src/locales/zh-CN/work-item.json index 0617955699e..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": { @@ -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-settings.json b/packages/i18n/src/locales/zh-CN/workspace-settings.json index 87ea4a39f2a..8fae8ff34a3 100644 --- a/packages/i18n/src/locales/zh-CN/workspace-settings.json +++ b/packages/i18n/src/locales/zh-CN/workspace-settings.json @@ -285,7 +285,7 @@ "dismiss": "关闭", "cancel": "取消试用", "cancel_success_title": "试用已取消。", - "cancel_success_message": "现在您可以删除工作空间了。", + "cancel_success_message": "现在您可以删除工作区了。", "cancel_error_title": "操作失败。", "cancel_error_message": "请重试。" }, @@ -303,7 +303,7 @@ "install": "安装", "installed": "已安装", "configure": "配置", - "app_available": "您已使此应用可用于Plane工作空间", + "app_available": "您已使此应用可用于Plane工作区", "app_credentials_regenrated": { "title": "应用凭证已成功重新生成", "description": "请在所有使用的地方替换客户端密钥。之前的密钥已不再有效。" @@ -354,7 +354,7 @@ "description": "用户在通过 Plane 认证后将被重定向到此路径。", "placeholder": "https://example.com https://example.com/" }, - "app_available_description": "连接Plane工作空间以开始使用", + "app_available_description": "连接Plane工作区以开始使用", "client_id_and_secret": "客户端ID和密钥", "client_id_and_secret_description": "复制并保存此密钥。关闭后您将无法再次查看此密钥。", "client_id_and_secret_download": "您可以从这里下载包含密钥的CSV文件。", @@ -393,18 +393,18 @@ "regenerate_client_secret_confirm_description": "使用此密钥的应用将停止工作。您需要在应用中更新密钥。", "regenerate_client_secret_confirm_cancel": "取消", "regenerate_client_secret_confirm_regenerate": "重新生成", - "read_only_access_to_workspace": "对您的工作空间的只读访问", - "write_access_to_workspace": "对您的工作空间的写入访问", - "read_only_access_to_user_profile": "对您的用户配置文件的只读访问", - "write_access_to_user_profile": "对您的用户配置文件的写入访问", - "connect_app_to_workspace": "将{app}连接到您的工作空间{workspace}", + "read_only_access_to_workspace": "对您的工作区的只读访问", + "write_access_to_workspace": "对您的工作区的写入访问", + "read_only_access_to_user_profile": "对您的个人资料的只读访问", + "write_access_to_user_profile": "对您的个人资料的写入访问", + "connect_app_to_workspace": "将{app}连接到您的工作区{workspace}", "user_permissions": "用户权限", - "user_permissions_description": "用户权限用于授予对用户配置文件的访问权限。", - "workspace_permissions": "工作空间权限", - "workspace_permissions_description": "工作空间权限用于授予对工作空间的访问权限。", + "user_permissions_description": "用户权限用于授予对个人资料的访问权限。", + "workspace_permissions": "工作区权限", + "workspace_permissions_description": "工作区权限用于授予对工作区的访问权限。", "with_the_permissions": "具有权限", - "app_consent_title": "{app}正在请求访问您的Plane工作空间和配置文件。", - "choose_workspace_to_connect_app_with": "选择要连接应用的工作空间", + "app_consent_title": "{app}正在请求访问您的 Plane 工作区和个人资料。", + "choose_workspace_to_connect_app_with": "选择要连接应用的工作区", "app_consent_workspace_permissions_title": "{app}想要", "app_consent_user_permissions_title": "{app}还可以请求用户对以下资源的权限。这些权限将仅由用户请求和授权。", "app_consent_accept_title": "通过接受", diff --git a/packages/i18n/src/locales/zh-CN/workspace.json b/packages/i18n/src/locales/zh-CN/workspace.json index a4f06dc7cf1..40cabb7620c 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 {项目}}", @@ -261,7 +261,8 @@ "delete_view": { "title": "您确定要删除此视图吗?", "content": "如果您确认,您为此视图选择的所有排序、筛选和显示选项 + 布局将被永久删除,无法恢复。" - } + }, + "page_title": "{workspaceName} - 全部视图" }, "workspace_draft_issues": { "draft_an_issue": "起草工作项", @@ -303,8 +304,8 @@ } }, "public": { - "title": "还没有工作空间页面", - "description": "在这里查看与工作空间中所有人共享的页面。", + "title": "还没有工作区页面", + "description": "在这里查看与工作区中所有人共享的页面。", "primary_button": { "text": "创建您的第一个页面" } @@ -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/accessibility.json b/packages/i18n/src/locales/zh-TW/accessibility.json index 75747f86124..ee9d1137aad 100644 --- a/packages/i18n/src/locales/zh-TW/accessibility.json +++ b/packages/i18n/src/locales/zh-TW/accessibility.json @@ -1,24 +1,24 @@ { "aria_labels": { "projects_sidebar": { - "workspace_logo": "工作空間標誌", - "open_workspace_switcher": "打開工作空間切換器", - "open_user_menu": "打開用戶選單", + "workspace_logo": "工作區標誌", + "open_workspace_switcher": "打開工作區切換器", + "open_user_menu": "打開使用者選單", "open_command_palette": "打開命令面板", "open_extended_sidebar": "打開擴展側邊欄", "close_extended_sidebar": "關閉擴展側邊欄", - "create_favorites_folder": "創建收藏夾文件夾", + "create_favorites_folder": "建立收藏夾文件夾", "open_folder": "打開文件夾", "close_folder": "關閉文件夾", "open_favorites_menu": "打開收藏夾選單", "close_favorites_menu": "關閉收藏夾選單", "enter_folder_name": "輸入文件夾名稱", - "create_new_project": "創建新項目", - "open_projects_menu": "打開項目選單", - "close_projects_menu": "關閉項目選單", + "create_new_project": "建立新專案", + "open_projects_menu": "打開專案選單", + "close_projects_menu": "關閉專案選單", "toggle_quick_actions_menu": "切換快速操作選單", - "open_project_menu": "打開項目選單", - "close_project_menu": "關閉項目選單", + "open_project_menu": "打開專案選單", + "close_project_menu": "關閉專案選單", "collapse_sidebar": "摺疊側邊欄", "expand_sidebar": "展開側邊欄", "edition_badge": "打開付費計劃模態框" diff --git a/packages/i18n/src/locales/zh-TW/auth.json b/packages/i18n/src/locales/zh-TW/auth.json index d7c050487f8..28a5ca990f2 100644 --- a/packages/i18n/src/locales/zh-TW/auth.json +++ b/packages/i18n/src/locales/zh-TW/auth.json @@ -238,7 +238,7 @@ } }, "errors": { - "match": "密碼不匹配", + "match": "密碼不相符", "empty": "請輸入密碼", "length": "密碼長度應超過8個字符", "strength": { @@ -269,7 +269,7 @@ }, "already_have_an_account": "已有帳戶?", "login": "登入", - "create_account": "創建帳戶", + "create_account": "建立帳戶", "new_to_plane": "初次使用Plane?", "back_to_sign_in": "返回登入", "resend_in": "{seconds}秒後重新發送", @@ -282,7 +282,7 @@ }, "sign_up": { "header": { - "label": "創建帳戶開始與團隊一起管理工作。", + "label": "建立帳戶開始與團隊一起管理工作。", "step": { "email": { "header": "註冊", @@ -325,7 +325,7 @@ }, "forgot_password": { "title": "重設密碼", - "description": "輸入您的用戶帳戶已驗證的電子郵件地址,我們將向您發送密碼重設連結。", + "description": "輸入您的使用者帳戶已驗證的電子郵件地址,我們將向您發送密碼重設連結。", "email_sent": "我們已將重設連結發送到您的電子郵件地址", "send_reset_link": "發送重設連結", "errors": { @@ -334,7 +334,7 @@ "toast": { "success": { "title": "郵件已發送", - "message": "請查看您的收件箱以獲取重設密碼的連結。如果幾分鐘內未收到,請檢查垃圾郵件文件夾。" + "message": "請查看您的收件箱以取得重設密碼的連結。如果幾分鐘內未收到,請檢查垃圾郵件文件夾。" }, "error": { "title": "錯誤!", @@ -364,5 +364,47 @@ "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 工作項目和頁面。" + }, + "terms_sign_up": "建立帳戶即表示你同意我們的服務條款隱私權政策。", + "terms_sign_in": "登入即表示你同意我們的服務條款隱私權政策。" } } diff --git a/packages/i18n/src/locales/zh-TW/common.json b/packages/i18n/src/locales/zh-TW/common.json index 834a2d922d8..d9e8f2f924e 100644 --- a/packages/i18n/src/locales/zh-TW/common.json +++ b/packages/i18n/src/locales/zh-TW/common.json @@ -102,18 +102,18 @@ "theme_updated_successfully": "主題更新成功", "failed_to_update_the_theme": "主題更新失敗", "email_notifications": "電子郵件通知", - "stay_in_the_loop_on_issues_you_are_subscribed_to_enable_this_to_get_notified": "持續追蹤您訂閱的工作事項。啟用此功能以接收通知。", + "stay_in_the_loop_on_issues_you_are_subscribed_to_enable_this_to_get_notified": "持續追蹤您訂閱的工作項目。啟用此功能以接收通知。", "email_notification_setting_updated_successfully": "電子郵件通知設定更新成功", "failed_to_update_email_notification_setting": "電子郵件通知設定更新失敗", "notify_me_when": "在以下情況通知我", "property_changes": "屬性變更", - "property_changes_description": "當工作事項的屬性 (如:指派對象、優先順序、評估等) 發生變更時通知我。", + "property_changes_description": "當工作項目的屬性 (如:指派對象、優先順序、評估等) 發生變更時通知我。", "state_change": "狀態變更", - "state_change_description": "當工作事項狀態變更時通知我", - "issue_completed": "工作事項完成", - "issue_completed_description": "僅在工作事項完成時通知我", + "state_change_description": "當工作項目狀態變更時通知我", + "issue_completed": "工作項目完成", + "issue_completed_description": "僅在工作項目完成時通知我", "comments": "留言", - "comments_description": "當有人在工作事項上留下留言時通知我", + "comments_description": "當有人在工作項目上留下留言時通知我", "mentions": "提及", "mentions_description": "僅在有人在留言或描述中提及我時通知我", "old_password": "舊密碼", @@ -121,7 +121,7 @@ "sign_out": "登出", "signing_out": "登出中", "active_cycles": "進行中的週期", - "active_cycles_description": "監控跨專案的週期、追蹤高優先順序工作事項,並關注需要注意的週期。", + "active_cycles_description": "監控跨專案的週期、追蹤高優先順序工作項目,並關注需要注意的週期。", "on_demand_snapshots_of_all_your_cycles": "依需求檢視所有週期的快照", "upgrade": "升級", "10000_feet_view": "俯瞰所有進行中的週期。", @@ -130,8 +130,8 @@ "get_snapshot_of_each_active_cycle_description": "追蹤所有進行中週期的高階指標,檢視其進度狀態,並根據期限衡量範圍。", "compare_burndowns": "比較燃盡圖。", "compare_burndowns_description": "透過檢視每個週期的燃盡報告來監控每個團隊的表現。", - "quickly_see_make_or_break_issues": "快速檢視關鍵工作事項。", - "quickly_see_make_or_break_issues_description": "預覽每個週期中相對於截止日期的高優先順序工作事項。一鍵檢視每個週期的所有工作事項。", + "quickly_see_make_or_break_issues": "快速檢視關鍵工作項目。", + "quickly_see_make_or_break_issues_description": "預覽每個週期中相對於截止日期的高優先順序工作項目。一鍵檢視每個週期的所有工作項目。", "zoom_into_cycles_that_need_attention": "關注需要注意的週期。", "zoom_into_cycles_that_need_attention_description": "一鍵調查任何不符合預期的週期狀態。", "stay_ahead_of_blockers": "預防阻礙。", @@ -140,7 +140,7 @@ "workspace_invites": "工作區邀請", "enter_god_mode": "進入管理員模式", "workspace_logo": "工作區標誌", - "new_issue": "新增工作事項", + "new_issue": "新增工作項目", "your_work": "您的工作", "drafts": "草稿", "projects": "專案", @@ -167,7 +167,7 @@ "create_project": "建立專案", "failed_to_remove_project_from_favorites": "無法從我的最愛移除專案。請再試一次。", "project_created_successfully": "專案建立成功", - "project_created_successfully_description": "專案建立成功。您現在可以開始新增工作事項。", + "project_created_successfully_description": "專案建立成功。您現在可以開始新增工作項目。", "project_name_already_taken": "專案名稱已被使用。", "project_name_cannot_contain_special_characters": "專案名稱不能包含特殊字元。", "project_identifier_already_taken": "專案識別碼已被使用。", @@ -178,7 +178,7 @@ "project_id_must_be_at_least_1_character": "專案 ID 至少必須有 1 個字元", "project_id_must_be_at_most_5_characters": "專案 ID 最多只能有 5 個字元", "project_id": "專案 ID", - "project_id_tooltip_content": "協助您唯一識別專案中的工作事項。最多 50 個字元。", + "project_id_tooltip_content": "協助您唯一識別專案中的工作項目。最多 50 個字元。", "description_placeholder": "描述", "only_alphanumeric_non_latin_characters_allowed": "僅允許英數字元和非拉丁字元。", "project_id_is_required": "專案 ID 為必填", @@ -211,7 +211,7 @@ "drag_to_rearrange": "拖曳以重新排列", "congrats": "恭喜!", "open_project": "開啟專案", - "issues": "工作事項", + "issues": "工作項目", "cycles": "週期", "modules": "模組", "pages": "頁面", @@ -220,14 +220,14 @@ "preview": "預覽", "time_tracking": "時間追蹤", "work_management": "工作管理", - "projects_and_issues": "專案與工作事項", + "projects_and_issues": "專案與工作項目", "projects_and_issues_description": "為此專案開啟或關閉這些功能。", "cycles_description": "為每個專案設定工作時間區段,並依需求調整週期。一個週期可以是兩週,下一個是一週。", "modules_description": "將工作組織成子專案,並指派專屬的負責人與任務對象。", "views_description": "儲存自訂排序、篩選和顯示選項,或與團隊分享。", "pages_description": "建立與編輯自由格式內容:筆記、文件,任何內容皆可。", "intake_description": "允許非成員分享錯誤、回饋和建議,而不會中斷您的工作流程。", - "time_tracking_description": "記錄在工作事項和專案上花費的時間。", + "time_tracking_description": "記錄在工作項目和專案上花費的時間。", "work_management_description": "輕鬆管理您的工作和專案。", "documentation": "文件", "message_support": "聯絡支援", @@ -258,30 +258,30 @@ "back_to_home": "回到首頁", "workspace_name": "工作區名稱", "deactivate_your_account": "停用您的帳號", - "deactivate_your_account_description": "一旦停用,您將無法被指派工作事項,並且不會被收費。若要重新啟用帳號,您需要使用此電子郵件地址收到工作區的邀請。", + "deactivate_your_account_description": "一旦停用,您將無法被指派工作項目,並且不會被收費。若要重新啟用帳號,您需要使用此電子郵件地址收到工作區的邀請。", "deactivating": "停用中", "confirm": "確認", "confirming": "確認中", "draft_created": "草稿已建立", - "issue_created_successfully": "工作事項建立成功", + "issue_created_successfully": "工作項目建立成功", "draft_creation_failed": "草稿建立失敗", - "issue_creation_failed": "工作事項建立失敗", - "draft_issue": "草稿工作事項", - "issue_updated_successfully": "工作事項更新成功", - "issue_could_not_be_updated": "工作事項無法更新", + "issue_creation_failed": "工作項目建立失敗", + "draft_issue": "草稿工作項目", + "issue_updated_successfully": "工作項目更新成功", + "issue_could_not_be_updated": "工作項目無法更新", "create_a_draft": "建立草稿", "save_to_drafts": "儲存為草稿", "save": "儲存", "update": "更新", "updating": "更新中", - "create_new_issue": "建立新工作事項", + "create_new_issue": "建立新工作項目", "editor_is_not_ready_to_discard_changes": "編輯器尚未準備好捨棄變更", - "failed_to_move_issue_to_project": "無法將工作事項移至專案", + "failed_to_move_issue_to_project": "無法將工作項目移至專案", "create_more": "建立更多", "add_to_project": "新增至專案", "discard": "捨棄", - "duplicate_issue_found": "找到重複的工作事項", - "duplicate_issues_found": "找到重複的工作事項", + "duplicate_issue_found": "找到重複的工作項目", + "duplicate_issues_found": "找到重複的工作項目", "no_matching_results": "沒有符合的結果", "title_is_required": "標題為必填", "title": "標題", @@ -308,8 +308,8 @@ "due_date": "截止日期", "target_date": "目標日期", "estimate": "評估", - "change_parent_issue": "變更父工作事項", - "remove_parent_issue": "移除父工作事項", + "change_parent_issue": "變更父工作項目", + "remove_parent_issue": "移除父工作項目", "add_parent": "新增上層", "loading_members": "載入成員中", "view_link_copied_to_clipboard": "檢視連結已複製到剪貼簿。", @@ -324,23 +324,23 @@ "deleting": "刪除中", "make_a_copy": "複製一份", "move_to_project": "移至專案", - "good": "早安", - "morning": "早上", - "afternoon": "下午", - "evening": "晚上", + "good": "", + "morning": "早安", + "afternoon": "午安", + "evening": "晚安", "show_all": "顯示全部", "show_less": "顯示較少", "no_data_yet": "尚無資料", "syncing": "同步中", - "add_work_item": "新增工作事項", + "add_work_item": "新增工作項目", "advanced_description_placeholder": "按 '/' 以使用指令", - "create_work_item": "建立工作事項", + "create_work_item": "建立工作項目", "attachments": "附件", "declining": "拒絕中", "declined": "已拒絕", "decline": "拒絕", "unassigned": "未指派", - "work_items": "工作事項", + "work_items": "工作項目", "add_link": "新增連結", "points": "點數", "no_assignee": "無指派對象", @@ -446,7 +446,7 @@ "created_at": "建立於", "updated_at": "更新時間", "completed_at": "完成於", - "layout": "版面配置", + "layout": "版面設定", "filters": "篩選器", "display": "顯示", "load_more": "載入更多", @@ -462,9 +462,9 @@ "group_by": "分組依據", "epic": "Epic", "epics": "史詩", - "work_item": "工作事項", - "work_items": "工作事項", - "sub_work_item": "子工作事項", + "work_item": "工作項目", + "work_items": "工作項目", + "sub_work_item": "子工作項目", "views": "檢視", "pages": "頁面", "add": "新增", @@ -486,7 +486,7 @@ "project_timezone": "專案時區", "created_on": "建立於", "updated_on": "更新於", - "completed_on": "Completed on", + "completed_on": "完成於", "update_project": "更新專案", "identifier_already_exists": "識別碼已存在", "add_more": "新增更多", @@ -507,12 +507,12 @@ "private": "私人" }, "done": "完成", - "sub_work_items": "子工作事項", + "sub_work_items": "子工作項目", "comment": "留言", "workspace_level": "工作區層級", "order_by": { "label": "排序依據", - "manual": "手動 - 排名", + "manual": "手動", "last_created": "最後建立", "last_updated": "最後更新", "start_date": "開始日期", @@ -534,9 +534,9 @@ "copied": "已複製!", "link_copied": "連結已複製!", "link_copied_to_clipboard": "連結已複製到剪貼簿", - "copied_to_clipboard": "工作事項連結已複製到剪貼簿", + "copied_to_clipboard": "工作項目連結已複製到剪貼簿", "branch_name_copied_to_clipboard": "分支名稱已複製到剪貼簿", - "is_copied_to_clipboard": "工作事項已複製到剪貼簿", + "is_copied_to_clipboard": "工作項目已複製到剪貼簿", "no_links_added_yet": "尚未新增連結", "add_link": "新增連結", "links": "連結", @@ -571,7 +571,7 @@ "modal": "彈出視窗", "full_screen": "全螢幕", "close_peek_view": "關閉預覽檢視", - "toggle_peek_view_layout": "切換預覽檢視版面配置", + "toggle_peek_view_layout": "切換預覽檢視版面設定", "options": "選項", "duration": "時長", "today": "今天", @@ -694,7 +694,7 @@ "pending": "待處理", "invite": "邀請", "view": "檢視", - "deactivated_user": "已停用用戶", + "deactivated_user": "已停用使用者", "apply": "應用", "applying": "應用中", "overview": "概覽", @@ -707,17 +707,17 @@ "templates": "模板", "business": "商業版", "members_and_teamspaces": "成員和團隊空間", - "recurring_work_items": "重複工作事項", + "recurring_work_items": "重複工作項目", "milestones": "里程碑", "open_in_full_screen": "以全螢幕開啟{page}", "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 軸", @@ -809,7 +809,7 @@ "other": "其他" }, "default_global_view": { - "all_issues": "所有工作事項", + "all_issues": "所有工作項目", "assigned": "已指派", "created": "已建立", "subscribed": "已訂閱" @@ -832,40 +832,55 @@ "pin": "釘選", "unpin": "取消釘選", "workspace_dashboards": "儀表板", - "pi_chat": "AI 聊天", + "pi_chat": "Plane AI", "in_app": "應用內", "forms": "表單", "milestones": "里程碑", - "milestones_description": "里程碑提供了一個層級,讓工作事項對齊共同的完成日期。", + "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": "日期", "exporter": { "csv": { "title": "CSV", - "description": "將工作事項匯出為 CSV 檔案。", + "description": "將工作項目匯出為 CSV 檔案。", "short_description": "匯出為 CSV" }, "excel": { "title": "Excel", - "description": "將工作事項匯出為 Excel 檔案。", + "description": "將工作項目匯出為 Excel 檔案。", "short_description": "匯出為 Excel" }, "xlsx": { "title": "Excel", - "description": "將工作事項匯出為 Excel 檔案。", + "description": "將工作項目匯出為 Excel 檔案。", "short_description": "匯出為 Excel" }, "json": { "title": "JSON", - "description": "將工作事項匯出為 JSON 檔案。", + "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/cycle.json b/packages/i18n/src/locales/zh-TW/cycle.json index acd1764201c..3436d4e96f0 100644 --- a/packages/i18n/src/locales/zh-TW/cycle.json +++ b/packages/i18n/src/locales/zh-TW/cycle.json @@ -2,19 +2,19 @@ "active_cycle": { "empty_state": { "progress": { - "title": "新增工作事項到週期以檢視其進度" + "title": "新增工作項目到週期以檢視其進度" }, "chart": { - "title": "新增工作事項到週期以檢視燃盡圖。" + "title": "新增工作項目到週期以檢視燃盡圖。" }, "priority_issue": { - "title": "快速檢視週期中處理的高優先順序工作事項。" + "title": "快速檢視週期中處理的高優先順序工作項目。" }, "assignee": { - "title": "新增指派對象到工作事項以檢視依指派對象分類的工作分析。" + "title": "新增指派對象到工作項目以檢視依指派對象分類的工作分析。" }, "label": { - "title": "新增標籤到工作事項以檢視依標籤分類的工作分析。" + "title": "新增標籤到工作項目以檢視依標籤分類的工作分析。" } } }, @@ -25,16 +25,16 @@ "active_cycle_analytics": { "empty_state": { "progress": { - "title": "將工作項目添加到週期以查看其\n進度" + "title": "將工作項目新增到週期以查看其\n進度" }, "priority": { - "title": "一目了然地觀察在週期中處理的高優先級\n工作項目。" + "title": "一目了然地觀察在週期中處理的高優先順序\n工作項目。" }, "assignee": { - "title": "為工作項目添加負責人,以查看按負責人\n劃分的工作明細。" + "title": "為工作項目新增負責人,以查看按負責人\n劃分的工作明細。" }, "label": { - "title": "為工作項目添加標籤,以查看按標籤\n劃分的工作明細。" + "title": "為工作項目新增標籤,以查看按標籤\n劃分的工作明細。" } } } diff --git a/packages/i18n/src/locales/zh-TW/editor.json b/packages/i18n/src/locales/zh-TW/editor.json index 45d93c25761..c93aa7ecb8b 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": { @@ -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..fce92f1e3fd 100644 --- a/packages/i18n/src/locales/zh-TW/empty-state.json +++ b/packages/i18n/src/locales/zh-TW/empty-state.json @@ -2,7 +2,7 @@ "common_empty_state": { "progress": { "title": "暫無進度指標可顯示。", - "description": "開始在工作項中設定屬性值以在此查看進度指標。" + "description": "開始在工作項目中設定屬性值以在此查看進度指標。" }, "updates": { "title": "暫無更新。", @@ -36,9 +36,9 @@ "description": "您所查找的專案不存在。" }, "work_items": { - "title": "從您的第一個工作項開始。", - "description": "工作項是專案的建構模組 — 指派負責人、設定優先順序並輕鬆追蹤進度。", - "cta_primary": "建立您的第一個工作項" + "title": "從您的第一個工作項目開始。", + "description": "工作項目是專案的建構模組 — 指派負責人、設定優先順序並輕鬆追蹤進度。", + "cta_primary": "建立您的第一個工作項目" }, "cycles": { "title": "在週期中分組和限時您的工作。", @@ -46,21 +46,21 @@ "cta_primary": "設定您的第一個週期" }, "cycle_work_items": { - "title": "此週期中沒有要顯示的工作項", - "description": "建立工作項以開始監控團隊在此週期中的進度並按時實現目標。", - "cta_primary": "建立工作項", - "cta_secondary": "新增現有工作項" + "title": "此週期中沒有要顯示的工作項目", + "description": "建立工作項目以開始監控團隊在此週期中的進度並按時實現目標。", + "cta_primary": "建立工作項目", + "cta_secondary": "新增現有工作項目" }, "modules": { "title": "將專案目標對應到模組並輕鬆追蹤。", - "description": "模組由相互關聯的工作項組成。它們有助於監控專案階段的進度,每個階段都有特定的截止日期和分析,以指示您離實現這些階段有多近。", + "description": "模組由相互關聯的工作項目組成。它們有助於監控專案階段的進度,每個階段都有特定的截止日期和分析,以指示您離實現這些階段有多近。", "cta_primary": "設定您的第一個模組" }, "module_work_items": { - "title": "此模組中沒有要顯示的工作項", - "description": "建立工作項以開始監控此模組。", - "cta_primary": "建立工作項", - "cta_secondary": "新增現有工作項" + "title": "此模組中沒有要顯示的工作項目", + "description": "建立工作項目以開始監控此模組。", + "cta_primary": "建立工作項目", + "cta_secondary": "新增現有工作項目" }, "views": { "title": "為專案儲存自訂檢視", @@ -68,18 +68,18 @@ "cta_primary": "建立檢視" }, "no_work_items_in_project": { - "title": "專案中暫無工作項", - "description": "將工作項新增至專案中,並使用檢視將工作切分為可追蹤的部分。", - "cta_primary": "新增工作項" + "title": "專案中暫無工作項目", + "description": "將工作項目新增至專案中,並使用檢視將工作切分為可追蹤的部分。", + "cta_primary": "新增工作項目" }, "work_item_filter": { - "title": "未找到工作項", + "title": "未找到工作項目", "description": "您目前的篩選器未傳回任何結果。請嘗試變更篩選器。", - "cta_primary": "新增工作項" + "cta_primary": "新增工作項目" }, "pages": { "title": "記錄一切 — 從筆記到 PRD", - "description": "頁面讓您在一個地方擷取和組織資訊。撰寫會議筆記、專案文件和 PRD,嵌入工作項,並使用現成的元件進行結構化。", + "description": "頁面讓您在一個地方擷取和組織資訊。撰寫會議筆記、專案文件和 PRD,嵌入工作項目,並使用現成的元件進行結構化。", "cta_primary": "建立您的第一個頁面" }, "archive_pages": { @@ -92,7 +92,7 @@ "cta_primary": "建立接收請求" }, "intake_main": { - "title": "選擇一個接收工作項以查看其詳細資訊" + "title": "選擇一個接收工作項目以查看其詳細資訊" }, "epics": { "title": "將複雜專案轉化為結構化史詩。", @@ -101,9 +101,9 @@ "cta_secondary": "文件" }, "epic_work_items": { - "title": "您尚未向此史詩新增工作項。", - "description": "開始向此史詩新增一些工作項並在此處追蹤它們。", - "cta_secondary": "新增工作項" + "title": "您尚未向此史詩新增工作項目。", + "description": "開始向此史詩新增一些工作項目並在此處追蹤它們。", + "cta_secondary": "新增工作項目" } }, "workspace_empty_state": { @@ -112,8 +112,8 @@ "description": "您可以封存已完成或已取消的史詩。封存後在此處尋找它們。" }, "archive_work_items": { - "title": "暫無已封存工作項", - "description": "透過手動或自動化,您可以封存已完成或已取消的工作項。封存後在此處尋找它們。", + "title": "暫無已封存工作項目", + "description": "透過手動或自動化,您可以封存已完成或已取消的工作項目。封存後在此處尋找它們。", "cta_primary": "設定自動化" }, "archive_cycles": { @@ -128,26 +128,26 @@ "title": "為您的工作保留重要的參考、資源或文件" }, "inbox_sidebar_all": { - "title": "您訂閱的工作項的更新將顯示在此處" + "title": "您訂閱的工作項目的更新將顯示在此處" }, "inbox_sidebar_mentions": { - "title": "您的工作項的提及將顯示在此處" + "title": "您的工作項目的提及將顯示在此處" }, "your_work_by_priority": { - "title": "尚未分配工作項" + "title": "尚未分配工作項目" }, "your_work_by_state": { - "title": "尚未分配工作項" + "title": "尚未分配工作項目" }, "views": { "title": "暫無檢視", - "description": "將工作項新增至專案中並使用檢視輕鬆篩選、排序和監控進度。", - "cta_primary": "新增工作項" + "description": "將工作項目新增至專案中並使用檢視輕鬆篩選、排序和監控進度。", + "cta_primary": "新增工作項目" }, "drafts": { - "title": "半成品工作項", - "description": "要試用此功能,請開始新增工作項並在中途離開,或在下方建立您的第一個草稿。😉", - "cta_primary": "建立草稿工作項" + "title": "半成品工作項目", + "description": "要試用此功能,請開始新增工作項目並在中途離開,或在下方建立您的第一個草稿。😉", + "cta_primary": "建立草稿工作項目" }, "projects_archived": { "title": "沒有已封存專案", @@ -157,7 +157,7 @@ "title": "建立專案以在此處視覺化專案指標。" }, "analytics_work_items": { - "title": "建立包含工作項和受託人的專案,以開始在此處追蹤績效、進度和團隊影響。" + "title": "建立包含工作項目和受託人的專案,以開始在此處追蹤績效、進度和團隊影響。" }, "analytics_no_cycle": { "title": "建立週期以將工作組織成有時限的階段並追蹤衝刺進度。" @@ -188,7 +188,7 @@ }, "wiki": { "title": "撰寫筆記、文件或完整的知識庫。", - "description": "頁面是 Plane 中的思想捕捉空間。記錄會議筆記,輕鬆格式化,嵌入工作項,使用元件庫進行配置,並將它們全部保留在專案上下文中。", + "description": "頁面是 Plane 中的思想捕捉空間。記錄會議筆記,輕鬆格式化,嵌入工作項目,使用元件庫進行設定,並將它們全部保留在專案上下文中。", "cta_primary": "建立您的頁面" }, "project_overview_state_sidebar": { @@ -199,12 +199,12 @@ "settings_empty_state": { "estimates": { "title": "暫無估算", - "description": "定義團隊如何衡量工作量,並在所有工作項中一致地追蹤它。", + "description": "定義團隊如何衡量工作量,並在所有工作項目中一致地追蹤它。", "cta_primary": "新增估算系統" }, "labels": { "title": "暫無標籤", - "description": "建立個人化標籤以有效分類和管理工作項。", + "description": "建立個人化標籤以有效分類和管理工作項目。", "cta_primary": "建立您的第一個標籤" }, "exports": { @@ -227,34 +227,34 @@ "cta_primary": "新增 webhook" }, "work_item_types": { - "title": "建立和自訂工作項類型", - "description": "為專案定義獨特的工作項類型。每種類型都可以有自己的屬性、工作流程和欄位 — 根據專案和團隊需求量身訂製。", + "title": "建立和自訂工作項目類型", + "description": "為專案定義獨特的工作項目類型。每種類型都可以有自己的屬性、工作流程和欄位 — 根據專案和團隊需求量身訂製。", "cta_primary": "啟用" }, "work_item_type_properties": { - "title": "定義要為此工作項類型擷取的屬性和詳細資訊。自訂它以符合專案的工作流程。", + "title": "定義要為此工作項目類型擷取的屬性和詳細資訊。自訂它以符合專案的工作流程。", "cta_secondary": "新增屬性" }, "templates": { "title": "暫無範本", - "description": "透過為工作項和頁面建立範本來減少設定時間 — 並在幾秒鐘內開始新工作。", + "description": "透過為工作項目和頁面建立範本來減少設定時間 — 並在幾秒鐘內開始新工作。", "cta_primary": "建立您的第一個範本" }, "recurring_work_items": { - "title": "暫無循環工作項", - "description": "設定循環工作項以自動化重複任務並輕鬆保持計劃進度。", - "cta_primary": "建立循環工作項" + "title": "暫無循環工作項目", + "description": "設定循環工作項目以自動化重複任務並輕鬆保持計劃進度。", + "cta_primary": "建立循環工作項目" }, "worklogs": { "title": "追蹤所有成員的工時表", - "description": "在工作項上記錄時間以檢視跨專案任何團隊成員的詳細工時表。" + "description": "在工作項目上記錄時間以檢視跨專案任何團隊成員的詳細工時表。" }, "group_syncing": { "title": "尚無群組對應" }, "template_setting": { "title": "暫無範本", - "description": "透過為專案、工作項和頁面建立範本來減少設定時間 — 並在幾秒鐘內開始新工作。", + "description": "透過為專案、工作項目和頁面建立範本來減少設定時間 — 並在幾秒鐘內開始新工作。", "cta_primary": "建立範本" }, "workflows": { @@ -266,5 +266,11 @@ "description": "選擇工作項目經過的狀態。" } } + }, + "app_not_found": { + "alt": "404 - 找不到頁面", + "title": "糟糕,發生了一些問題。", + "description": "抱歉,找不到您要前往的頁面。它可能已被移除、重新命名,或暫時無法使用。", + "go_to_home": "返回首頁" } } diff --git a/packages/i18n/src/locales/zh-TW/home.json b/packages/i18n/src/locales/zh-TW/home.json index d6275295b54..cafa35a4e2d 100644 --- a/packages/i18n/src/locales/zh-TW/home.json +++ b/packages/i18n/src/locales/zh-TW/home.json @@ -42,14 +42,14 @@ "empty": { "project": "一旦您造訪專案,您的最近專案就會出現在這裡。", "page": "一旦您造訪頁面,您的最近頁面就會出現在這裡。", - "issue": "一旦您造訪工作事項,您的最近工作事項就會出現在這裡。", + "issue": "一旦您造訪工作項目,您的最近工作項目就會出現在這裡。", "default": "您還沒有任何最近項目。" }, "filters": { "all": "所有", "projects": "專案", "pages": "頁面", - "issues": "工作事項" + "issues": "工作項目" } }, "new_at_plane": { diff --git a/packages/i18n/src/locales/zh-TW/inbox.json b/packages/i18n/src/locales/zh-TW/inbox.json index a6bd6a8b4a7..6cf2cd43cdd 100644 --- a/packages/i18n/src/locales/zh-TW/inbox.json +++ b/packages/i18n/src/locales/zh-TW/inbox.json @@ -24,30 +24,30 @@ }, "modals": { "decline": { - "title": "拒絕工作事項", - "content": "您確定要拒絕工作事項 {value} 嗎?" + "title": "拒絕工作項目", + "content": "您確定要拒絕工作項目 {value} 嗎?" }, "delete": { - "title": "刪除工作事項", - "content": "您確定要刪除工作事項 {value} 嗎?", - "success": "工作事項刪除成功" + "title": "刪除工作項目", + "content": "您確定要刪除工作項目 {value} 嗎?", + "success": "工作項目刪除成功" } }, "errors": { - "snooze_permission": "只有專案管理員可以延後/取消延後工作事項", - "accept_permission": "只有專案管理員可以接受工作事項", - "decline_permission": "只有專案管理員可以拒絕工作事項" + "snooze_permission": "只有專案管理員可以延後/取消延後工作項目", + "accept_permission": "只有專案管理員可以接受工作項目", + "decline_permission": "只有專案管理員可以拒絕工作項目" }, "actions": { "accept": "接受", "decline": "拒絕", "snooze": "延後", "unsnooze": "取消延後", - "copy": "複製工作事項連結", + "copy": "複製工作項目連結", "delete": "刪除", - "open": "開啟工作事項", + "open": "開啟工作項目", "mark_as_duplicate": "標記為重複", - "move": "將 {value} 移至專案工作事項" + "move": "將 {value} 移至專案工作項目" }, "source": { "in-app": "應用程式內" @@ -60,7 +60,7 @@ "label": "進件", "page_label": "{workspace} - 進件", "modal": { - "title": "建立進件工作事項" + "title": "建立進件工作項目" }, "tabs": { "open": "開啟", @@ -68,20 +68,71 @@ }, "empty_state": { "sidebar_open_tab": { - "title": "沒有開啟的工作事項", - "description": "在這裡尋找開啟的工作事項。建立新工作事項。" + "title": "沒有開啟的工作項目", + "description": "在這裡尋找開啟的工作項目。建立新工作項目。" }, "sidebar_closed_tab": { - "title": "沒有已關閉的工作事項", - "description": "所有已接受或拒絕的工作事項都可以在這裡找到。" + "title": "沒有已關閉的工作項目", + "description": "所有已接受或拒絕的工作項目都可以在這裡找到。" }, "sidebar_filter": { - "title": "沒有符合的工作事項", - "description": "沒有工作事項符合進件中套用的篩選條件。建立新工作事項。" + "title": "沒有符合的工作項目", + "description": "沒有工作項目符合進件中套用的篩選條件。建立新工作項目。" }, "detail": { - "title": "選擇工作事項以檢視其詳細資訊。" + "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/integration.json b/packages/i18n/src/locales/zh-TW/integration.json index fa9fac65242..44ebae2f59c 100644 --- a/packages/i18n/src/locales/zh-TW/integration.json +++ b/packages/i18n/src/locales/zh-TW/integration.json @@ -3,17 +3,17 @@ "integrations": "整合", "loading": "加載中", "unauthorized": "您無權查看此頁面。", - "configure": "配置", + "configure": "設定", "not_enabled": "{name} 未為此工作區啟用。", - "not_configured": "未配置", + "not_configured": "未設定", "disconnect_personal_account": "斷開個人 {providerName} 帳戶", - "not_configured_message_admin": "{name} 整合未配置。請聯繫您的實例管理員進行配置。", - "not_configured_message_support": "{name} 整合未配置。請聯繫支持進行配置。", - "external_api_unreachable": "無法訪問外部 API。請稍後再試。", - "error_fetching_supported_integrations": "無法獲取支持的整合。請稍後再試。", + "not_configured_message_admin": "{name} 整合未設定。請聯繫您的執行個體管理員進行設定。", + "not_configured_message_support": "{name} 整合尚未設定。請聯絡支援團隊進行設定。", + "external_api_unreachable": "無法存取外部 API。請稍後再試。", + "error_fetching_supported_integrations": "無法取得支援的整合。請稍後再試。", "back_to_integrations": "返回整合", "select_state": "選擇狀態", - "set_state": "設置狀態", + "set_state": "設定狀態", "choose_project": "選擇專案...", "skip_backward_state_movement": "防止因 PR 更新而將問題移回較早的狀態" }, @@ -23,8 +23,8 @@ "connect_org": "連接組織", "connect_org_description": "將您的 GitHub 組織與 Plane 連接", "processing": "處理中", - "org_added_desc": "GitHub org 添加於和時間", - "connection_fetch_error": "從服務器獲取連接詳情時出錯", + "org_added_desc": "GitHub org 新增於和時間", + "connection_fetch_error": "從伺服器取得連接詳情時出錯", "personal_account_connected": "個人帳戶已連接", "personal_account_connected_description": "您的 GitHub 帳戶現已連接到 Plane", "connect_personal_account": "連接個人帳戶", @@ -34,14 +34,14 @@ "project_issue_sync": "專案問題同步", "project_issue_sync_description": "將 GitHub 的問題同步到您的 Plane 專案", "project_issue_sync_empty_state": "映射的專案問題同步將在此處顯示", - "configure_project_issue_sync_state": "配置問題同步狀態", + "configure_project_issue_sync_state": "設定問題同步狀態", "select_issue_sync_direction": "選擇問題同步方向", "allow_bidirectional_sync": "雙向 - 在 GitHub 和 Plane 之間同步問題和評論", "allow_unidirectional_sync": "單向 - 僅從 GitHub 同步問題和評論到 Plane", - "allow_unidirectional_sync_warning": "GitHub 問題的資料將替換關聯 Plane 工作項中的資料(僅 GitHub → Plane)", + "allow_unidirectional_sync_warning": "GitHub 問題的資料將替換關聯 Plane 工作項目中的資料(僅 GitHub → Plane)", "remove_project_issue_sync": "移除此專案問題同步", "remove_project_issue_sync_confirmation": "您確定要移除此專案問題同步嗎?", - "add_pr_state_mapping": "添加拉取請求狀態映射到 Plane 專案", + "add_pr_state_mapping": "新增拉取請求狀態映射到 Plane 專案", "edit_pr_state_mapping": "編輯拉取請求狀態映射到 Plane 專案", "pr_state_mapping": "拉取請求狀態映射", "pr_state_mapping_description": "將 GitHub 的拉取請求狀態映射到您的 Plane 專案", @@ -51,7 +51,7 @@ "issue_sync_message": "工作項目已同步到 {project}", "link": "將 GitHub 倉庫連接到 Plane 專案", "pull_request_automation": "拉取請求自動化", - "pull_request_automation_description": "配置從 GitHub 到 Plane 專案的拉取請求狀態映射", + "pull_request_automation_description": "設定從 GitHub 到 Plane 專案的拉取請求狀態映射", "DRAFT_MR_OPENED": "草稿開啟", "MR_OPENED": "開啟", "MR_READY_FOR_MERGE": "準備合併", @@ -67,24 +67,24 @@ "gitlab_integration": { "name": "Gitlab", "description": "連接並同步您的 Gitlab 合併請求與 Plane。", - "connection_fetch_error": "從服務器獲取連接詳情時出錯", + "connection_fetch_error": "從伺服器取得連接詳情時出錯", "connect_org": "連接組織", "connect_org_description": "將您的 Gitlab 組織與 Plane 連接。", "project_connections": "Gitlab 專案連接", "project_connections_description": "從 Gitlab 同步合併請求到 Plane 專案。", "plane_project_connection": "Plane 專案連接", - "plane_project_connection_description": "配置從 Gitlab 到 Plane 專案的拉取請求狀態映射", + "plane_project_connection_description": "設定從 Gitlab 到 Plane 專案的拉取請求狀態映射", "remove_connection": "移除連接", "remove_connection_confirmation": "您確定要移除此連接嗎?", "link": "將 Gitlab 倉庫連接到 Plane 專案", "pull_request_automation": "拉取請求自動化", - "pull_request_automation_description": "配置從 Gitlab 到 Plane 的拉取請求狀態映射", - "DRAFT_MR_OPENED": "當草稿 MR 開啟時,將狀態設置為", - "MR_OPENED": "當 MR 開啟時,將狀態設置為", - "MR_REVIEW_REQUESTED": "當 MR 請求審核時,將狀態設置為", - "MR_READY_FOR_MERGE": "當 MR 準備合併時,將狀態設置為", - "MR_MERGED": "當 MR 已合併時,將狀態設置為", - "MR_CLOSED": "當 MR 關閉時,將狀態設置為", + "pull_request_automation_description": "設定從 Gitlab 到 Plane 的拉取請求狀態映射", + "DRAFT_MR_OPENED": "當草稿 MR 開啟時,將狀態設定為", + "MR_OPENED": "當 MR 開啟時,將狀態設定為", + "MR_REVIEW_REQUESTED": "當 MR 請求審核時,將狀態設定為", + "MR_READY_FOR_MERGE": "當 MR 準備合併時,將狀態設定為", + "MR_MERGED": "當 MR 已合併時,將狀態設定為", + "MR_CLOSED": "當 MR 關閉時,將狀態設定為", "integration_enabled_text": "啟用 Gitlab 整合後,您可以自動化工作項目工作流程", "choose_entity": "選擇實體", "choose_project": "選擇專案", @@ -92,11 +92,11 @@ "project_issue_sync": "專案問題同步", "project_issue_sync_description": "從 Gitlab 同步問題到您的 Plane 專案", "project_issue_sync_empty_state": "映射的專案問題同步將顯示在這裡", - "configure_project_issue_sync_state": "配置問題同步狀態", + "configure_project_issue_sync_state": "設定問題同步狀態", "select_issue_sync_direction": "選擇問題同步方向", "allow_bidirectional_sync": "雙向 - 在 Gitlab 和 Plane 之間雙向同步問題和評論", "allow_unidirectional_sync": "單向 - 僅從 Gitlab 同步問題和評論到 Plane", - "allow_unidirectional_sync_warning": "Gitlab 問題中的資料將替換連結的 Plane 工作項中的資料(僅 Gitlab → Plane)", + "allow_unidirectional_sync_warning": "Gitlab 問題中的資料將替換連結的 Plane 工作項目中的資料(僅 Gitlab → Plane)", "remove_project_issue_sync": "移除此專案問題同步", "remove_project_issue_sync_confirmation": "您確定要移除此專案問題同步嗎?", "ISSUE_OPEN": "問題開啟", @@ -107,24 +107,24 @@ }, "gitlab_enterprise_integration": { "name": "Gitlab Enterprise", - "description": "連接並同步您的 Gitlab Enterprise 實例與 Plane。", - "app_form_title": "Gitlab Enterprise 配置", - "app_form_description": "配置 Gitlab Enterprise 以連接到 Plane。", + "description": "連接並同步您的 Gitlab Enterprise 執行個體與 Plane。", + "app_form_title": "Gitlab Enterprise 設定", + "app_form_description": "設定 Gitlab Enterprise 以連接到 Plane。", "base_url_title": "基礎 URL", - "base_url_description": "您的 Gitlab Enterprise 實例的基礎 URL。", + "base_url_description": "您的 Gitlab Enterprise 執行個體的基礎 URL。", "base_url_placeholder": "例如:\"https://glab.plane.town\"", "base_url_error": "基礎 URL 是必需的", "invalid_base_url_error": "無效的基礎 URL", "client_id_title": "應用 ID", - "client_id_description": "您在 Gitlab Enterprise 實例中創建的應用的 ID。", + "client_id_description": "您在 Gitlab Enterprise 執行個體中建立的應用的 ID。", "client_id_placeholder": "例如:\"7cd732xxxxxxxxxxxxxx\"", "client_id_error": "應用 ID 是必需的", "client_secret_title": "客戶端密鑰", - "client_secret_description": "您在 Gitlab Enterprise 實例中創建的應用的客戶端密鑰。", + "client_secret_description": "您在 Gitlab Enterprise 執行個體中建立的應用的客戶端密鑰。", "client_secret_placeholder": "例如:\"gloas-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"", "client_secret_error": "客戶端密鑰是必需的", "webhook_secret_title": "Webhook 密鑰", - "webhook_secret_description": "一個隨機的 webhook 密鑰,用於驗證來自 Gitlab Enterprise 實例的 webhook。", + "webhook_secret_description": "一個隨機的 webhook 密鑰,用於驗證來自 Gitlab Enterprise 執行個體的 webhook。", "webhook_secret_placeholder": "例如:\"webhook1234567890\"", "webhook_secret_error": "Webhook 密鑰是必需的", "connect_app": "連接應用" @@ -145,12 +145,12 @@ }, "project_updates": { "title": "專案更新", - "description": "為您的專案配置更新通知", - "add_new_project_update": "添加新的專案更新通知", + "description": "為您的專案設定更新通知", + "add_new_project_update": "新增新的專案更新通知", "project_updates_empty_state": "與 Slack 頻道連接的專案將在此處顯示。", "project_updates_form": { - "title": "配置專案更新", - "description": "在創建工作項時在 Slack 中接收專案更新通知", + "title": "設定專案更新", + "description": "在建立工作項目時在 Slack 中接收專案更新通知", "failed_to_load_channels": "無法從 Slack 加載頻道", "project_dropdown": { "placeholder": "選擇專案", @@ -164,11 +164,11 @@ }, "all_projects_connected": "所有專案已連接到 Slack 頻道。", "all_channels_connected": "所有 Slack 頻道已連接到專案。", - "project_connection_success": "專案連接創建成功", + "project_connection_success": "專案連接建立成功", "project_connection_updated": "專案連接更新成功", "project_connection_deleted": "專案連接刪除成功", "failed_delete_project_connection": "刪除專案連接失敗", - "failed_create_project_connection": "創建專案連接失敗", + "failed_create_project_connection": "建立專案連接失敗", "failed_upserting_project_connection": "更新專案連接失敗", "failed_loading_project_connections": "無法加載您的專案連接。這可能是由於網絡問題或集成問題。" } @@ -176,15 +176,15 @@ }, "sentry_integration": { "name": "Sentry", - "description": "將您的Sentry工作空間連接到Plane。", - "connected_sentry_workspaces": "已連接的Sentry工作空間", + "description": "將您的Sentry工作區連接到Plane。", + "connected_sentry_workspaces": "已連接的Sentry工作區", "connected_on": "連接於{date}", - "disconnect_workspace": "斷開{name}工作空間", + "disconnect_workspace": "斷開{name}工作區", "state_mapping": { "title": "狀態映射", - "description": "將Sentry事件狀態映射到您的專案狀態。配置當Sentry事件已解決或未解決時使用哪些狀態。", - "add_new_state_mapping": "添加新狀態映射", - "empty_state": "未配置狀態映射。建立您的第一個映射以同步Sentry事件狀態與您的專案狀態。", + "description": "將Sentry事件狀態映射到您的專案狀態。設定當Sentry事件已解決或未解決時使用哪些狀態。", + "add_new_state_mapping": "新增新狀態映射", + "empty_state": "未設定狀態映射。建立您的第一個映射以同步Sentry事件狀態與您的專案狀態。", "failed_loading_state_mappings": "我們無法載入您的狀態映射。這可能是由於網路問題或整合問題。", "loading_project_states": "正在載入專案狀態...", "error_loading_states": "載入狀態時出錯", @@ -267,14 +267,14 @@ "github_enterprise_integration": { "name": "GitHub Enterprise", "description": "連接並同步您的 GitHub Enterprise 組織與 Plane。", - "app_form_title": "GitHub Enterprise 配置", - "app_form_description": "配置 GitHub Enterprise 以連接 Plane。", + "app_form_title": "GitHub Enterprise 設定", + "app_form_description": "設定 GitHub Enterprise 以連接 Plane。", "app_id_title": "應用 ID", - "app_id_description": "您在 GitHub Enterprise 組織中創建的應用的 ID。", + "app_id_description": "您在 GitHub Enterprise 組織中建立的應用的 ID。", "app_id_placeholder": "例如,\"1234567890\"", "app_id_error": "App ID 是必需的", "app_name_title": "應用 Slug", - "app_name_description": "您在 GitHub Enterprise 組織中創建的應用的 slug。", + "app_name_description": "您在 GitHub Enterprise 組織中建立的應用的 slug。", "app_name_error": "App slug 是必需的", "app_name_placeholder": "例如,\"plane-github-enterprise\"", "base_url_title": "Base URL", @@ -283,19 +283,19 @@ "base_url_error": "Base URL 是必需的", "invalid_base_url_error": "無效的基礎 URL", "client_id_title": "Client ID", - "client_id_description": "您在 GitHub Enterprise 組織中創建的應用的 client ID。", + "client_id_description": "您在 GitHub Enterprise 組織中建立的應用的 client ID。", "client_id_placeholder": "例如,\"1234567890\"", "client_id_error": "Client ID 是必需的", "client_secret_title": "Client Secret客戶端密碼", - "client_secret_description": "您在 GitHub Enterprise 組織中創建的應用的 client secret。", + "client_secret_description": "您在 GitHub Enterprise 組織中建立的應用的 client secret。", "client_secret_placeholder": "例如,\"1234567890\"", "client_secret_error": "Client secret 是必需的", "webhook_secret_title": "Webhook Secret", - "webhook_secret_description": "您在 GitHub Enterprise 組織中創建的應用的 webhook secret。", + "webhook_secret_description": "您在 GitHub Enterprise 組織中建立的應用的 webhook secret。", "webhook_secret_placeholder": "例如,\"1234567890\"", "webhook_secret_error": "Webhook secret 是必需的", "private_key_title": "Private Key (Base64 編碼)", - "private_key_description": "您在 GitHub Enterprise 組織中創建的應用的 private key。", + "private_key_description": "您在 GitHub Enterprise 組織中建立的應用的 private key。", "private_key_placeholder": "例如,\"MIIEpAIBAAKCAQEA...", "private_key_error": "Private key 是必需的", "connect_app": "連接應用" @@ -308,14 +308,14 @@ "multiple_connections_found": "在只期望一個連接時找到了多個連接", "cannot_create_multiple_connections": "您已將組織連接到某個工作區。請先中斷現有連接,再連接新的工作區。", "installation_not_found": "找不到請求的安裝", - "user_not_found": "找不到請求的用戶", - "error_fetching_token": "獲取認證令牌失敗", + "user_not_found": "找不到請求的使用者", + "error_fetching_token": "取得認證令牌失敗", "invalid_app_credentials": "提供的應用憑證無效", "invalid_app_installation_id": "安裝應用失敗" }, "import_status": { "queued": "排隊中", - "created": "已創建", + "created": "已建立", "initiated": "已啟動", "pulling": "拉取中", "timed_out": "超時", diff --git a/packages/i18n/src/locales/zh-TW/notification.json b/packages/i18n/src/locales/zh-TW/notification.json index 24435613072..034328339bc 100644 --- a/packages/i18n/src/locales/zh-TW/notification.json +++ b/packages/i18n/src/locales/zh-TW/notification.json @@ -29,12 +29,12 @@ "title": "選擇以檢視詳細資訊。" }, "all": { - "title": "沒有指派的工作事項", - "description": "您可以在這裡看到指派給您的工作事項的更新" + "title": "沒有指派的工作項目", + "description": "您可以在這裡看到指派給您的工作項目的更新" }, "mentions": { - "title": "沒有指派的工作事項", - "description": "您可以在這裡看到指派給您的工作事項的更新" + "title": "沒有指派的工作項目", + "description": "您可以在這裡看到指派給您的工作項目的更新" } }, "tabs": { diff --git a/packages/i18n/src/locales/zh-TW/page.json b/packages/i18n/src/locales/zh-TW/page.json index f0e876a9641..321a808e7cd 100644 --- a/packages/i18n/src/locales/zh-TW/page.json +++ b/packages/i18n/src/locales/zh-TW/page.json @@ -5,7 +5,7 @@ "label": "大綱", "empty_state": { "title": "缺少標題", - "description": "讓我們在這個頁面添加一些標題來在這裡查看它們。" + "description": "讓我們在這個頁面新增一些標題來在這裡查看它們。" } }, "info": { @@ -31,7 +31,7 @@ "download_button": "下載", "empty_state": { "title": "缺少圖片", - "description": "添加圖片以在這裡查看它們。" + "description": "新增圖片以在這裡查看它們。" } }, "comments": { @@ -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/power-k.json b/packages/i18n/src/locales/zh-TW/power-k.json index 794259af97a..37c4473ef58 100644 --- a/packages/i18n/src/locales/zh-TW/power-k.json +++ b/packages/i18n/src/locales/zh-TW/power-k.json @@ -1,12 +1,12 @@ { "power_k": { "actions_commands": { - "bulk_delete_work_items": "批次刪除工作事項" + "bulk_delete_work_items": "批次刪除工作項目" }, "contextual_actions": { "work_item": { - "title": "工作事項操作", - "indicator": "工作事項", + "title": "工作項目操作", + "indicator": "工作項目", "change_state": "變更狀態", "change_priority": "變更優先順序", "change_assignees": "指派給", @@ -20,14 +20,14 @@ "unsubscribe": "取消訂閱通知", "delete": "刪除", "copy_id": "複製 ID", - "copy_id_toast_success": "工作事項 ID 已複製到剪貼簿。", - "copy_id_toast_error": "複製工作事項 ID 至剪貼簿時發生錯誤。", + "copy_id_toast_success": "工作項目 ID 已複製到剪貼簿。", + "copy_id_toast_error": "複製工作項目 ID 至剪貼簿時發生錯誤。", "copy_title": "複製標題", - "copy_title_toast_success": "工作事項標題已複製到剪貼簿。", - "copy_title_toast_error": "複製工作事項標題至剪貼簿時發生錯誤。", + "copy_title_toast_success": "工作項目標題已複製到剪貼簿。", + "copy_title_toast_error": "複製工作項目標題至剪貼簿時發生錯誤。", "copy_url": "複製 URL", - "copy_url_toast_success": "工作事項 URL 已複製到剪貼簿。", - "copy_url_toast_error": "複製工作事項 URL 至剪貼簿時發生錯誤。" + "copy_url_toast_success": "工作項目 URL 已複製到剪貼簿。", + "copy_url_toast_error": "複製工作項目 URL 至剪貼簿時發生錯誤。" }, "cycle": { "title": "週期操作", @@ -66,7 +66,7 @@ } }, "creation_actions": { - "create_work_item": "新工作事項", + "create_work_item": "新工作項目", "create_page": "新頁面", "create_view": "新檢視", "create_cycle": "新週期", @@ -83,16 +83,16 @@ "nav_account_settings": "前往帳號設定", "open_project": "開啟專案", "nav_projects_list": "前往專案清單", - "nav_all_workspace_work_items": "前往所有工作事項", - "nav_assigned_workspace_work_items": "前往已指派工作事項", - "nav_created_workspace_work_items": "前往已建立工作事項", - "nav_subscribed_workspace_work_items": "前往已訂閱工作事項", + "nav_all_workspace_work_items": "前往所有工作項目", + "nav_assigned_workspace_work_items": "前往已指派工作項目", + "nav_created_workspace_work_items": "前往已建立工作項目", + "nav_subscribed_workspace_work_items": "前往已訂閱工作項目", "nav_workspace_analytics": "前往工作區分析", "nav_workspace_drafts": "前往工作區草稿", "nav_workspace_archives": "前往工作區封存", "open_workspace_setting": "開啟工作區設定", "nav_workspace_settings": "前往工作區設定", - "nav_project_work_items": "前往工作事項", + "nav_project_work_items": "前往工作項目", "open_project_cycle": "開啟週期", "nav_project_cycles": "前往週期", "open_project_module": "開啟模組", diff --git a/packages/i18n/src/locales/zh-TW/project-settings.json b/packages/i18n/src/locales/zh-TW/project-settings.json index a7c3a476f2e..0e7661b3ff0 100644 --- a/packages/i18n/src/locales/zh-TW/project-settings.json +++ b/packages/i18n/src/locales/zh-TW/project-settings.json @@ -27,8 +27,8 @@ "project_subscribers": "專案訂閱者", "project_subscribers_description": "請選擇將接收此專案通知的成員。", "guest_super_permissions": { - "title": "授予訪客使用者檢視所有工作事項的權限:", - "sub_heading": "這將允許訪客檢視所有專案工作事項。" + "title": "授予訪客使用者檢視所有工作項目的權限:", + "sub_heading": "這將允許訪客檢視所有專案工作項目。" }, "invite_members": { "title": "邀請成員", @@ -38,7 +38,7 @@ }, "states": { "heading": "狀態", - "description": "定義並自訂工作流程狀態以追蹤工作事項的進度。", + "description": "定義並自訂工作流程狀態以追蹤工作項目的進度。", "describe_this_state_for_your_members": "為您的成員描述此狀態。", "empty_state": { "title": "{groupKey} 群組沒有可用的狀態", @@ -47,7 +47,7 @@ }, "labels": { "heading": "標籤", - "description": "建立自訂標籤以分類和整理您的工作事項", + "description": "建立自訂標籤以分類和整理您的工作項目", "label_title": "標籤標題", "label_title_is_required": "標籤標題為必填", "label_max_char": "標籤名稱不應超過 255 個字元", @@ -200,25 +200,25 @@ "empty_state": { "labels": { "title": "尚無標籤", - "description": "建立標籤以協助組織和篩選專案中的工作事項。" + "description": "建立標籤以協助組織和篩選專案中的工作項目。" }, "estimates": { "title": "尚無評估系統", - "description": "建立一組評估以傳達每個工作事項的工作量。", + "description": "建立一組評估以傳達每個工作項目的工作量。", "primary_button": "新增評估系統" }, "integrations": { - "title": "未配置整合", - "description": "配置 GitHub 和其他整合以同步您的專案工作項目。" + "title": "未設定整合", + "description": "設定 GitHub 和其他整合以同步您的專案工作項目。" } }, "workflows": { "toggle": { "title": "啟用工作流程", - "description": "設定工作流程以控制工作事項的流轉", + "description": "設定工作流程以控制工作項目的流轉", "no_states_tooltip": "此工作流程尚未新增任何狀態。", - "no_work_item_types_tooltip": "此工作流程尚未新增任何工作事項類型。", - "no_states_or_work_item_types_tooltip": "此工作流程尚未新增任何狀態或工作事項類型。", + "no_work_item_types_tooltip": "此工作流程尚未新增任何工作項目類型。", + "no_states_or_work_item_types_tooltip": "此工作流程尚未新增任何狀態或工作項目類型。", "toast": { "loading": { "enabling": "正在啟用工作流程", @@ -235,7 +235,7 @@ } }, "heading": "工作流程", - "description": "自動化工作事項轉換,並設定規則以控制任務在您的專案流程中推進的方式。", + "description": "自動化工作項目轉換,並設定規則以控制任務在您的專案流程中推進的方式。", "add_button": "新增工作流程", "search": "搜尋工作流程", "detail": { @@ -243,10 +243,10 @@ "add_states": "新增狀態", "unmapped_states": { "title": "偵測到未對應的狀態", - "description": "所選類型的某些工作事項目前處於此工作流程中不存在的狀態。", + "description": "所選類型的某些工作項目目前處於此工作流程中不存在的狀態。", "note": "如果您啟用此工作流程,這些項目將自動移至此工作流程的初始狀態。", "label": "缺少的狀態", - "tooltip": "某些工作事項處於未對應至此工作流程的狀態。開啟工作流程以檢視。" + "tooltip": "某些工作項目處於未對應至此工作流程的狀態。開啟工作流程以檢視。" } }, "select_states": { @@ -256,7 +256,7 @@ } }, "default_footer": { - "fallback_message": "此工作流程適用於任何未指派給工作流程的工作事項類型。" + "fallback_message": "此工作流程適用於任何未指派給工作流程的工作項目類型。" }, "create": { "heading": "建立新工作流程", @@ -275,7 +275,7 @@ } }, "work_item_type": { - "label": "工作事項類型" + "label": "工作項目類型" }, "success": { "title": "成功!", @@ -319,8 +319,8 @@ } }, "work_item_types": { - "heading": "工作事項類型", - "description": "使用獨特屬性建立和自訂不同類型的工作事項" + "heading": "工作項目類型", + "description": "使用獨特屬性建立和自訂不同類型的工作項目" }, "features": { "cycles": { @@ -436,7 +436,7 @@ }, "templates": { "heading": "模板", - "description": "使用範本可節省 80% 建立專案、工作事項和頁面所花費的時間。" + "description": "使用範本可節省 80% 建立專案、工作項目和頁面所花費的時間。" }, "cycles": { "auto_schedule": { @@ -448,7 +448,7 @@ "cycle_title": { "label": "週期標題", "placeholder": "標題", - "tooltip": "標題將為後續週期添加編號。例如:設計 - 1/2/3", + "tooltip": "標題將為後續週期新增編號。例如:設計 - 1/2/3", "validation": { "required": "週期標題為必填項", "max_length": "標題不得超過255個字元" @@ -489,8 +489,8 @@ } }, "auto_rollover": { - "label": "工作項自動結轉", - "tooltip": "在週期完成的當天,將所有未完成的工作項移至下一個週期。" + "label": "工作項目自動結轉", + "tooltip": "在週期完成的當天,將所有未完成的工作項目移至下一個週期。" } }, "toast": { diff --git a/packages/i18n/src/locales/zh-TW/project.json b/packages/i18n/src/locales/zh-TW/project.json index 08e874ac56f..f3a2a3e1982 100644 --- a/packages/i18n/src/locales/zh-TW/project.json +++ b/packages/i18n/src/locales/zh-TW/project.json @@ -19,7 +19,7 @@ "start_date": "開始日期", "end_date": "結束日期", "in_your_timezone": "在您的時區", - "transfer_work_items": "轉移 {count} 工作事項", + "transfer_work_items": "轉移 {count} 工作項目", "transfer": { "no_cycles_available": "沒有其他可用的週期來轉移工作項目。" }, @@ -29,9 +29,9 @@ "label": "使用中的週期", "progress": "進度", "chart": "燃盡圖", - "priority_issue": "優先順序工作事項", + "priority_issue": "優先順序工作項目", "assignees": "指派對象", - "issue_burndown": "工作事項燃盡", + "issue_burndown": "工作項目燃盡", "ideal": "理想", "current": "目前", "labels": "標籤", @@ -113,18 +113,18 @@ } }, "no_issues": { - "title": "週期中沒有新增工作事項", - "description": "新增或建立您希望在此週期內時間區段化和交付的工作事項", + "title": "週期中沒有新增工作項目", + "description": "新增或建立您希望在此週期內時間區段化和交付的工作項目", "primary_button": { - "text": "建立新工作事項" + "text": "建立新工作項目" }, "secondary_button": { - "text": "新增現有工作事項" + "text": "新增現有工作項目" } }, "completed_no_issues": { - "title": "週期中沒有工作事項", - "description": "週期中沒有工作事項。工作事項已被轉移或隱藏。若要檢視隱藏的工作事項(如果有),請相應地更新您的顯示屬性。" + "title": "週期中沒有工作項目", + "description": "週期中沒有工作項目。工作項目已被轉移或隱藏。若要檢視隱藏的工作項目(如果有),請相應地更新您的顯示屬性。" }, "active": { "title": "沒有使用中的週期", @@ -144,7 +144,7 @@ "primary_button": { "text": "建立您的第一個檢視", "comic": { - "title": "檢視基於工作事項屬性運作。", + "title": "檢視基於工作項目屬性運作。", "description": "您可以從這裡建立檢視,使用您認為合適的屬性作為篩選器。" } }, @@ -154,14 +154,14 @@ } }, "no_archived_issues": { - "title": "尚無已封存的工作事項", - "description": "您可以手動或透過自動化封存已完成或已取消的工作事項。封存後會在這裡找到它們。", + "title": "尚無已封存的工作項目", + "description": "您可以手動或透過自動化封存已完成或已取消的工作項目。封存後會在這裡找到它們。", "primary_button": { "text": "設定自動化" } }, "issues_empty_filter": { - "title": "找不到符合所套用篩選器的工作事項", + "title": "找不到符合所套用篩選器的工作項目", "secondary_button": { "text": "清除所有篩選器" } @@ -190,25 +190,25 @@ "project_issues": { "empty_state": { "no_issues": { - "title": "建立工作事項並指派給某人,甚至是您自己", - "description": "將工作事項視為工作、任務、工作或待辦事項。我們喜歡這樣。工作事項及其子工作事項通常是指派給團隊成員的以時間為基礎的可執行項目。您的團隊建立、指派和完成工作事項,以推動您的專案朝向其目標前進。", + "title": "建立工作項目並指派給某人,甚至是您自己", + "description": "將工作項目視為工作、任務、工作或待辦事項。我們喜歡這樣。工作項目及其子工作項目通常是指派給團隊成員的以時間為基礎的可執行項目。您的團隊建立、指派和完成工作項目,以推動您的專案朝向其目標前進。", "primary_button": { - "text": "建立您的第一個工作事項", + "text": "建立您的第一個工作項目", "comic": { - "title": "工作事項是 Plane 中的基本單位。", - "description": "重新設計 Plane 使用者介面、重塑公司品牌或推出新的燃料噴射系統都是可能有子工作事項的工作事項範例。" + "title": "工作項目是 Plane 中的基本單位。", + "description": "重新設計 Plane 使用者介面、重塑公司品牌或推出新的燃料噴射系統都是可能有子工作項目的工作項目範例。" } } }, "no_archived_issues": { - "title": "尚無已封存的工作事項", - "description": "透過手動或自動化的方式,您可以封存已完成或取消的工作事項。一旦封存,您可以在這裡找到它們。", + "title": "尚無已封存的工作項目", + "description": "透過手動或自動化的方式,您可以封存已完成或取消的工作項目。一旦封存,您可以在這裡找到它們。", "primary_button": { "text": "設定自動化" } }, "issues_empty_filter": { - "title": "找不到符合套用篩選器的工作事項", + "title": "找不到符合套用篩選器的工作項目", "secondary_button": { "text": "清除所有篩選器" } @@ -225,7 +225,7 @@ "empty_state": { "general": { "title": "將您的專案里程碑對應到模組並輕鬆追蹤彙總工作。", - "description": "屬於邏輯、階層式上層的一組工作事項形成一個模組。將其視為一種依專案里程碑追蹤工作的方式。它們有自己的期間和截止日期以及分析,可協助您了解您距離里程碑有多近或多遠。", + "description": "屬於邏輯、階層式上層的一組工作項目形成一個模組。將其視為一種依專案里程碑追蹤工作的方式。它們有自己的期間和截止日期以及分析,可協助您了解您距離里程碑有多近或多遠。", "primary_button": { "text": "建立您的第一個模組", "comic": { @@ -235,13 +235,13 @@ } }, "no_issues": { - "title": "模組中沒有工作事項", - "description": "建立或新增您想要作為此模組一部分完成的工作事項", + "title": "模組中沒有工作項目", + "description": "建立或新增您想要作為此模組一部分完成的工作項目", "primary_button": { - "text": "建立新工作事項" + "text": "建立新工作項目" }, "secondary_button": { - "text": "新增現有工作事項" + "text": "新增現有工作項目" } }, "archived": { @@ -272,7 +272,7 @@ "empty_state": { "general": { "title": "撰寫筆記、文件或完整的知識庫。讓 Galileo(Plane 的 AI 助手)協助您開始", - "description": "頁面是 Plane 中的思考筆記空間。記下會議筆記,輕鬆格式化,嵌入工作事項,使用元件庫排版,並將它們全部保留在專案的上下文中。若要快速完成任何文件,可以使用快速鍵或按鈕來呼叫 Plane 的 AI Galileo。", + "description": "頁面是 Plane 中的思考筆記空間。記下會議筆記,輕鬆格式化,嵌入工作項目,使用元件庫排版,並將它們全部保留在專案的上下文中。若要快速完成任何文件,可以使用快速鍵或按鈕來呼叫 Plane 的 AI Galileo。", "primary_button": { "text": "建立您的第一個頁面" } @@ -301,7 +301,7 @@ "empty_state": { "inbox": { "title": "進件功能未啟用於此專案。", - "description": "進件可協助您管理專案的傳入請求,並將它們新增為工作流程中的工作事項。從專案設定啟用進件以管理請求。", + "description": "進件可協助您管理專案的傳入請求,並將它們新增為工作流程中的工作項目。從專案設定啟用進件以管理請求。", "primary_button": { "text": "管理功能" } @@ -346,14 +346,14 @@ "cancelled": "已取消" }, "layout": { - "list": "清單版面配置", - "board": "圖庫版面配置", - "timeline": "時間軸版面配置" + "list": "清單版面設定", + "board": "圖庫版面設定", + "timeline": "時間軸版面設定" }, "order_by": { "name": "名稱", "progress": "進度", - "issues": "工作事項數量", + "issues": "工作項目數量", "due_date": "截止日期", "created_at": "建立日期", "manual": "手動" @@ -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/settings.json b/packages/i18n/src/locales/zh-TW/settings.json index ba424028070..ab1005a5fef 100644 --- a/packages/i18n/src/locales/zh-TW/settings.json +++ b/packages/i18n/src/locales/zh-TW/settings.json @@ -45,7 +45,7 @@ }, "notifications": { "heading": "電子郵件通知", - "description": "隨時掌握您訂閱的工作事項。啟用此功能以接收通知。", + "description": "隨時掌握您訂閱的工作項目。啟用此功能以接收通知。", "select_default_view": "選擇預設檢視", "compact": "緊湊", "full": "全螢幕" @@ -59,7 +59,7 @@ }, "activity": { "heading": "活動", - "description": "追蹤您在所有專案和工作事項中的近期操作和變更。" + "description": "追蹤您在所有專案和工作項目中的近期操作和變更。" }, "connections": { "title": "連接", @@ -78,16 +78,16 @@ "stats": { "workload": "工作量", "overview": "概覽", - "created": "已建立的工作事項", - "assigned": "已指派的工作事項", - "subscribed": "已訂閱的工作事項", + "created": "已建立的工作項目", + "assigned": "已指派的工作項目", + "subscribed": "已訂閱的工作項目", "state_distribution": { - "title": "依狀態分類的工作事項", - "empty": "建立工作事項以在圖表中檢視依狀態分類的工作事項,以便進行更好的分析。" + "title": "依狀態分類的工作項目", + "empty": "建立工作項目以在圖表中檢視依狀態分類的工作項目,以便進行更好的分析。" }, "priority_distribution": { - "title": "依優先順序分類的工作事項", - "empty": "建立工作事項以在圖表中檢視依優先順序分類的工作事項,以便進行更好的分析。" + "title": "依優先順序分類的工作項目", + "empty": "建立工作項目以在圖表中檢視依優先順序分類的工作項目,以便進行更好的分析。" }, "recent_activity": { "title": "最近活動", @@ -115,19 +115,19 @@ "empty_state": { "activity": { "title": "尚無活動", - "description": "開始建立新工作事項!為其新增詳細資訊和屬性。探索更多 Plane 功能以檢視您的活動。" + "description": "開始建立新工作項目!為其新增詳細資訊和屬性。探索更多 Plane 功能以檢視您的活動。" }, "assigned": { - "title": "沒有指派給您的工作事項", - "description": "從這裡可以追蹤指派給您的工作事項。" + "title": "沒有指派給您的工作項目", + "description": "從這裡可以追蹤指派給您的工作項目。" }, "created": { - "title": "尚無工作事項", - "description": "您建立的所有工作事項都會出現在這裡,直接在這裡追蹤它們。" + "title": "尚無工作項目", + "description": "您建立的所有工作項目都會出現在這裡,直接在這裡追蹤它們。" }, "subscribed": { - "title": "尚無工作事項", - "description": "訂閱您感興趣的工作事項,在這裡追蹤它們。" + "title": "尚無工作項目", + "description": "訂閱您感興趣的工作項目,在這裡追蹤它們。" } } }, diff --git a/packages/i18n/src/locales/zh-TW/template.json b/packages/i18n/src/locales/zh-TW/template.json index 8610f8ff25c..17f853c2000 100644 --- a/packages/i18n/src/locales/zh-TW/template.json +++ b/packages/i18n/src/locales/zh-TW/template.json @@ -2,9 +2,9 @@ "templates": { "settings": { "title": "模板", - "description": "使用模板可節省80%的專案、工作項目和頁面創建時間。", + "description": "使用模板可節省80%的專案、工作項目和頁面建立時間。", "new_project_template": "新專案模板", - "new_work_item_template": "新工作事項模板", + "new_work_item_template": "新工作項目模板", "new_page_template": "新頁面模板", "options": { "project": { @@ -18,10 +18,10 @@ } }, "create_template": { - "label": "創建模板", + "label": "建立模板", "no_permission": { - "project": "聯繫您的專案管理員創建模板", - "workspace": "聯繫您的workspace管理員創建模板" + "project": "聯繫您的專案管理員建立模板", + "workspace": "聯繫您的workspace管理員建立模板" } }, "use_template": { @@ -63,7 +63,7 @@ "placeholder": "描述此專案的目的和目標。" }, "button": { - "create": "創建專案模板", + "create": "建立專案模板", "update": "更新專案模板" } }, @@ -91,7 +91,7 @@ "placeholder": "描述此工作項目,以便清楚地了解完成時將實現什麼。" }, "button": { - "create": "創建工作項目模板", + "create": "建立工作項目模板", "update": "更新工作項目模板" } }, @@ -115,7 +115,7 @@ } }, "button": { - "create": "創建頁面模板", + "create": "建立頁面模板", "update": "更新頁面模板" } }, @@ -140,7 +140,7 @@ }, "description": { "label": "描述", - "placeholder": "通過我們的語音轉文字整合提高生產力並簡化溝通。\n• 即時轉錄:立即將口語轉換為準確的文字。\n• 任務和評論創建:通過語音命令添加任務、描述和評論。", + "placeholder": "通過我們的語音轉文字整合提高生產力並簡化溝通。\n• 即時轉錄:立即將口語轉換為準確的文字。\n• 任務和評論建立:通過語音命令新增任務、描述和評論。", "validation": { "required": "描述為必填項" } @@ -154,8 +154,8 @@ }, "keywords": { "label": "關鍵字", - "placeholder": "使用您認為用戶在尋找此模板時會搜索的術語。", - "helperText": "輸入逗號分隔的關鍵詞,這些關鍵詞可能會幫助人們從搜索中找到此模板。", + "placeholder": "使用您認為使用者在尋找此模板時會搜尋的術語。", + "helperText": "輸入逗號分隔的關鍵詞,這些關鍵詞可能會幫助人們從搜尋中找到此模板。", "validation": { "required": "至少需要一個關鍵詞" } @@ -201,7 +201,7 @@ } }, "cover_image": { - "label": "添加將在市場中顯示的封面圖片", + "label": "新增將在市場中顯示的封面圖片", "upload_title": "上傳封面圖片", "upload_placeholder": "點擊上傳或拖放上傳封面圖片", "drop_here": "拖放到這裡", @@ -227,44 +227,44 @@ "empty_state": { "upgrade": { "title": "模板", - "description": "使用Plane中的專案、工作項目和頁面模板,您無需從頭創建專案或手動設置工作項目屬性。", + "description": "使用Plane中的專案、工作項目和頁面模板,您無需從頭建立專案或手動設定工作項目屬性。", "sub_description": "使用模板可節省80%的管理時間。" }, "no_templates": { - "button": "創建您的第一個模板" + "button": "建立您的第一個模板" }, "no_labels": { - "description": " 尚無標籤。創建標籤以幫助組織和篩選專案中的工作項目。" + "description": " 尚無標籤。建立標籤以幫助組織和篩選專案中的工作項目。" }, "no_modules": { "description": "尚無模組。將工作組織成具有專門負責人和受讓人的子專案。" }, "no_work_items": { - "description": "尚無工作項目。添加一個以更好地組織您的工作。" + "description": "尚無工作項目。新增一個以更好地組織您的工作。" }, "no_sub_work_items": { - "description": "尚無子工作項目。添加一個以更好地組織您的工作。" + "description": "尚無子工作項目。新增一個以更好地組織您的工作。" }, "page": { "no_templates": { - "title": "您沒有訪問任何模板。", - "description": "請創建一個模板" + "title": "您沒有存取任何模板。", + "description": "請建立一個模板" }, "no_results": { "title": "沒有找到模板。", - "description": "嘗試使用其他術語搜索。" + "description": "嘗試使用其他術語搜尋。" } } }, "toasts": { "create": { "success": { - "title": "模板已創建", + "title": "模板已建立", "message": "{templateName},{templateType}模板,現已可用於您的workspace。" }, "error": { - "title": "我們這次無法創建該模板。", - "message": "嘗試再次保存您的詳細信息或將它們複製到新模板中,最好在另一個標籤頁中。" + "title": "我們這次無法建立該模板。", + "message": "嘗試再次保存您的詳細資訊或將它們複製到新模板中,最好在另一個標籤頁中。" } }, "update": { @@ -274,7 +274,7 @@ }, "error": { "title": "我們無法保存對此模板的更改。", - "message": "嘗試再次保存您的詳細信息或稍後返回此模板。如果仍有問題,請聯繫我們。" + "message": "嘗試再次保存您的詳細資訊或稍後返回此模板。如果仍有問題,請聯繫我們。" } }, "delete": { @@ -309,7 +309,7 @@ "title": "移除模板", "description": { "prefix": "您確定要移除模板-", - "suffix": "嗎?此模板將不再在市場上供用戶使用。" + "suffix": "嗎?此模板將不再在市場上供使用者使用。" } }, "dropdown": { diff --git a/packages/i18n/src/locales/zh-TW/tour.json b/packages/i18n/src/locales/zh-TW/tour.json index f2599d4883e..658220a2fb0 100644 --- a/packages/i18n/src/locales/zh-TW/tour.json +++ b/packages/i18n/src/locales/zh-TW/tour.json @@ -3,111 +3,111 @@ "workitems": { "step_zero": { "title": "歡迎來到您的工作區", - "description": "為了幫助您開始,我們為您創建了一個演示項目。讓我們添加您的第一個工作項。" + "description": "為了幫助您開始,我們為您建立了一個示範專案。讓我們新增您的第一個工作項目。" }, "step_one": { - "title": "點擊「+添加工作項」", - "description": "首先點擊「+新建工作項」按鈕。您可以創建任務、錯誤或符合您需求的自定義類型。" + "title": "點擊「+ 新增工作項目」", + "description": "首先點擊「+ 新增工作項目」按鈕。您可以建立任務、錯誤或符合您需求的自訂類型。" }, "step_two": { - "title": "篩選您的工作項", - "description": "使用篩選器快速縮小列表範圍。您可以按狀態、優先級或團隊成員進行篩選。 " + "title": "篩選您的工作項目", + "description": "使用篩選器快速縮小清單範圍。您可以按狀態、優先順序或團隊成員進行篩選。 " }, "step_three": { - "title": "根據需要查看、分組和排序工作項。", - "description": "查看所需屬性,並根據您的需求對工作項進行分組或排序。" + "title": "依需求檢視、分組和排序工作項目。", + "description": "檢視必要屬性,並依需求對工作項目進行分組或排序。" }, "step_four": { - "title": "按您的方式可視化", - "description": "選擇要在列表中查看的屬性。您還可以按自己的方式對工作項進行分組和排序。" + "title": "以您的方式視覺化", + "description": "選擇要在清單中檢視的屬性。您也可以按自己的方式對工作項目進行分組和排序。" } }, "cycle": { "step_zero": { "title": "使用週期取得進展", - "description": "按Q鍵創建週期。為其命名並設置日期—每個項目只有一個週期。" + "description": "按 Q 鍵建立週期。為其命名並設定日期,每個專案一次只有一個週期。" }, "step_one": { - "title": "創建新週期", - "description": "按Q鍵創建週期。為其命名並設置日期—每個項目只有一個週期。" + "title": "建立新週期", + "description": "按 Q 鍵建立週期。為其命名並設定日期,每個專案一次只有一個週期。" }, "step_two": { "title": "點擊「+」", - "description": "首先點擊「+」按鈕。直接從週期頁面添加新的或現有的工作項。" + "description": "首先點擊「+」按鈕。直接從週期頁面新增新的或現有的工作項目。" }, "step_three": { "title": "週期摘要", - "description": "跟踪週期進度、團隊生產力和優先事項—並調查是否有任何落後。" + "description": "追蹤週期進度、團隊生產力和優先事項,並檢查是否有任何落後。" }, "step_four": { - "title": "轉移工作項", + "title": "轉移工作項目", "description": "截止日期後,週期會自動完成。將未完成的工作移至另一個週期。" } }, "module": { "step_zero": { - "title": "將項目分解為模塊", - "description": "模塊是較小的、集中的項目,幫助用戶在特定時間範圍內對工作項進行分組和組織。" + "title": "將專案分解為模組", + "description": "模組是較小且聚焦的專案,協助使用者在特定時間範圍內對工作項目進行分組和整理。" }, "step_one": { - "title": "創建模塊", - "description": "模塊是較小的、集中的項目,幫助用戶在特定時間範圍內對工作項進行分組和組織。" + "title": "建立模組", + "description": "模組是較小且聚焦的專案,協助使用者在特定時間範圍內對工作項目進行分組和整理。" }, "step_two": { "title": "點擊「+」", - "description": "首先點擊「+」按鈕。直接從模塊頁面添加新的或現有的工作項。" + "description": "首先點擊「+」按鈕。直接從模組頁面新增新的或現有的工作項目。" }, "step_three": { - "title": "模塊狀態", - "description": "模塊使用這些狀態來幫助用戶規劃並清楚地跟踪進度和階段。" + "title": "模組狀態", + "description": "模組使用這些狀態來協助使用者規劃,並清楚追蹤進度和階段。" }, "step_four": { - "title": "模塊進度", - "description": "模塊進度通過已完成的項目進行跟踪,並提供分析以監控性能。" + "title": "模組進度", + "description": "模組進度會透過已完成的工作項目進行追蹤,並提供分析以監控表現。" } }, "page": { "step_zero": { - "title": "使用AI驅動的頁面進行文檔化", - "description": "Plane中的頁面讓您可以捕獲、組織和協作處理項目信息—無需外部工具。" + "title": "使用 AI 驅動的頁面整理文件", + "description": "Plane 中的頁面讓您可以擷取、整理並協作處理專案資訊,無需外部工具。" }, "step_one": { "title": "將頁面設為公開或私密", - "description": "頁面可以設置為公開,對工作區中的所有人可見,或設置為私密,僅您可以訪問。" + "description": "頁面可以設定為公開,對工作區中的所有人可見,或設定為私密,僅您可以存取。" }, "step_two": { "title": "使用 / 命令", - "description": "在頁面上使用 / 從16種塊類型添加內容,包括列表、圖像、表格和嵌入。" + "description": "在頁面上使用 / 從 16 種區塊類型新增內容,包括清單、圖片、表格和嵌入。" }, "step_three": { "title": "頁面操作", - "description": "創建頁面後,您可以點擊右上角的•••菜單執行以下操作。" + "description": "建立頁面後,您可以點擊右上角的 ••• 選單執行以下操作。" }, "step_four": { "title": "目錄", - "description": "點擊面板圖標查看所有標題,獲得頁面的鳥瞰圖。" + "description": "點擊面板圖示檢視所有標題,快速掌握頁面結構。" }, "step_five": { "title": "版本歷史", - "description": "頁面通過版本歷史跟踪所有編輯,允許您在需要時恢復以前的版本。" + "description": "頁面會透過版本歷史追蹤所有編輯,讓您在需要時還原先前版本。" } }, "intake": { "step_zero": { "title": "使用接收簡化請求", - "description": "Plane專有功能,允許訪客為錯誤、請求或工單創建工作項。" + "description": "Plane 專有功能,允許訪客為錯誤、請求或工單建立工作項目。" }, "step_one": { - "title": "打開/關閉接收請求", - "description": "待處理的請求保留在「打開」標籤中,一旦由管理員或成員處理,它們將移至「關閉」。" + "title": "開啟/關閉進件請求", + "description": "待處理的請求會保留在「開啟」分頁中,一旦由管理員或成員處理,就會移至「關閉」。" }, "step_two": { "title": "接受/拒絕待處理請求", - "description": "接受以編輯工作項並將其移至您的項目,或拒絕以將其標記為已取消。" + "description": "接受即可編輯工作項目並將其移至您的專案,或拒絕以將其標記為已取消。" }, "step_three": { - "title": "暫時推遲", - "description": "可以推遲工作項以便稍後查看。它將移至您的打開請求列表的底部。" + "title": "暫時延後", + "description": "可以延後工作項目以便稍後檢視。它將移至開啟請求清單的底部。" } }, "mcp_connectors": { @@ -118,24 +118,24 @@ }, "navigation": { "modal": { - "title": "導航,重新想像", - "sub_title": "您的工作區現在通過更智能、更簡化的導航更容易探索。", - "highlight_1": "簡化的左側面板結構,更快發現", - "highlight_2": "改進的全局搜索,立即跳轉到任何內容", - "highlight_3": "更智能的類別分組,清晰和專注", + "title": "重新設計的導覽", + "sub_title": "您的工作區現在透過更智慧、更簡化的導覽,更容易探索。", + "highlight_1": "簡化的左側面板結構,讓探索更快速", + "highlight_2": "改進的全域搜尋,可立即前往任何內容", + "highlight_3": "更智慧的類別分組,提升清晰度和專注度", "footer": "想要快速瀏覽嗎?" }, "step_zero": { - "title": "即刻查找任何內容", - "description": "使用通用搜索跳轉到任務、項目、頁面和人員—不離開您的流程。" + "title": "即刻尋找任何內容", + "description": "使用通用搜尋前往任務、專案、頁面和人員,不離開您的流程。" }, "step_one": { "title": "掌控更新", - "description": "您的收件箱將所有提及、批准和活動保存在一個地方,因此您永遠不會錯過重要的工作。" + "description": "您的收件匣會將所有提及、核准和活動集中在一處,因此您不會錯過重要工作。" }, "step_two": { - "title": "個性化您的導航", - "description": "在首選項中自定義您看到的內容以及導航方式。" + "title": "個人化您的導覽", + "description": "在偏好設定中自訂您看到的內容以及導覽方式。" } }, "actions": { @@ -148,31 +148,31 @@ "got_it": "知道了" }, "seed_data": { - "title": "這是您的演示項目", - "description": "項目讓您可以管理團隊、任務以及在工作區中完成工作所需的一切。" + "title": "這是您的示範專案", + "description": "專案讓您可以管理團隊、任務,以及在工作區中完成工作所需的一切。" } }, "get_started": { "title": "你好 {name},歡迎!", - "description": "這是您開始Plane之旅所需的一切。", + "description": "這是您開始 Plane 之旅所需的一切。", "checklist_section": { "title": "開始", - "description": "開始設置,看到您的想法更快地變為現實。", + "description": "開始設定,讓您的想法更快成真。", "checklist_items": { "item_1": { - "title": "創建項目" + "title": "建立專案" }, "item_2": { - "title": "創建工作項" + "title": "建立工作項目" }, "item_3": { "title": "邀請團隊成員" }, "item_4": { - "title": "創建頁面" + "title": "建立頁面" }, "item_5": { - "title": "試用Plane AI聊天" + "title": "試用 Plane AI 聊天" }, "item_6": { "title": "鏈接集成" diff --git a/packages/i18n/src/locales/zh-TW/update.json b/packages/i18n/src/locales/zh-TW/update.json index 04bfa1e2ba9..1b90c72591a 100644 --- a/packages/i18n/src/locales/zh-TW/update.json +++ b/packages/i18n/src/locales/zh-TW/update.json @@ -14,12 +14,12 @@ "reaction": { "create": { "success": { - "title": "反應已創建", - "message": "反應已成功創建。" + "title": "反應已建立", + "message": "反應已成功建立。" }, "error": { - "title": "反應未創建", - "message": "反應未創建。" + "title": "反應未建立", + "message": "反應未建立。" } }, "remove": { @@ -35,12 +35,12 @@ }, "create": { "success": { - "title": "更新已創建", - "message": "更新已成功創建。" + "title": "更新已建立", + "message": "更新已成功建立。" }, "error": { - "title": "更新未創建", - "message": "更新未創建。" + "title": "更新未建立", + "message": "更新未建立。" } }, "delete": { diff --git a/packages/i18n/src/locales/zh-TW/work-item-type.json b/packages/i18n/src/locales/zh-TW/work-item-type.json index c58d61722cb..b1ea03ca24d 100644 --- a/packages/i18n/src/locales/zh-TW/work-item-type.json +++ b/packages/i18n/src/locales/zh-TW/work-item-type.json @@ -4,7 +4,7 @@ "label_lowercase": "工作項目類型", "settings": { "description": "自訂並新增您自己的屬性,以符合您團隊的需求。", - "cant_delete_default_message": "無法刪除此工作項目類型,因為它已設置為該專案的預設類型。", + "cant_delete_default_message": "無法刪除此工作項目類型,因為它已設定為該專案的預設類型。", "set_as_default": "設為預設", "cant_set_default_inactive_message": "請先啟用此類型再將其設為預設", "set_default_confirmation": { @@ -13,10 +13,10 @@ "confirm_button": "設為預設" }, "properties": { - "title": "自定義屬性", + "title": "自訂屬性", "description": "建立和自訂屬性。", - "tooltip": "每種工作項目類型都有一組默認屬性,如標題、描述、負責人、狀態、優先級、開始日期、截止日期、模塊、週期等。您還可以自定義並添加自己的屬性,以適應您團隊的需求。", - "add_button": "添加新屬性", + "tooltip": "每種工作項目類型都有一組預設屬性,如標題、描述、負責人、狀態、優先順序、開始日期、截止日期、模組、週期等。您還可以自訂並新增自己的屬性,以符合您團隊的需求。", + "add_button": "新增屬性", "project": { "add_button": { "import_from_workspace": "從工作區匯入" @@ -68,7 +68,7 @@ }, "number": { "default": { - "placeholder": "添加數字" + "placeholder": "新增數字" } }, "relation": { @@ -79,18 +79,18 @@ "label": "多選" }, "no_default_value": { - "label": "無默認值" + "label": "無預設值" } }, "boolean": { "label": "真 | 假", - "no_default": "無默認值" + "no_default": "無預設值" }, "option": { "create_update": { "label": "選項", "form": { - "placeholder": "添加選項", + "placeholder": "新增選項", "errors": { "name": { "required": "選項名稱是必填的。", @@ -114,11 +114,11 @@ "create": { "success": { "title": "成功!", - "message": "屬性 {name} 已成功創建。" + "message": "屬性 {name} 已成功建立。" }, "error": { "title": "錯誤!", - "message": "創建屬性失敗。請再試一次!" + "message": "建立屬性失敗。請再試一次!" } }, "update": { @@ -175,7 +175,7 @@ "required": "您必須選擇一個屬性類型。" }, "options": { - "required": "您必須添加至少一個選項。" + "required": "您必須新增至少一個選項。" }, "formula": { "required": "公式表達式為必填。", @@ -195,7 +195,7 @@ "validation_success_with_refs": "公式有效!回傳 {resultType}(參照了 {count} 個欄位)", "error": { "empty": "請輸入公式", - "missing_context": "缺少工作空間、專案或工作項目類型上下文", + "missing_context": "缺少工作區、專案或工作項目類型上下文", "validation_failed": "驗證失敗" }, "picker": { @@ -206,20 +206,20 @@ "enable_disable": { "label": "活躍", "tooltip": { - "disabled": "點擊以禁用", + "disabled": "點擊以停用", "enabled": "點擊以啟用" } }, "delete_confirmation": { "title": "刪除此屬性", - "description": "刪除屬性可能導致現有數據丟失。", - "secondary_description": "您是否想要禁用屬性代替刪除?", + "description": "刪除屬性可能導致現有數據遺失。", + "secondary_description": "您是否想要停用屬性代替刪除?", "primary_button": "{action},刪除它", - "secondary_button": "是的,禁用它" + "secondary_button": "是的,停用它" }, "mandate_confirmation": { "label": "必填屬性", - "content": "此屬性似乎有一個默認選項。將屬性設為必填將移除默認值,用戶必須添加他們選擇的值。", + "content": "此屬性似乎有一個預設選項。將屬性設為必填將移除預設值,使用者必須新增他們選擇的值。", "tooltip": { "disabled": "此屬性類型不能設為必填", "enabled": "取消勾選以將字段標記為可選", @@ -227,13 +227,13 @@ } }, "empty_state": { - "title": "添加自定義屬性", - "description": "您為此工作項目類型添加的新屬性將顯示在此處。" + "title": "新增自訂屬性", + "description": "您為此工作項目類型新增的新屬性將顯示在此處。" } }, "types": { "title": "類型", - "description": "建立和自訂具有屬性的工作事項類型。", + "description": "建立和自訂具有屬性的工作項目類型。", "sort_options": { "project_count": "參與專案的數量" }, @@ -247,8 +247,8 @@ "import_from_workspace": "從工作區匯入" }, "banner": { - "with_access": "啟用工作事項類型以從工作區層級匯入類型", - "without_access": "工作事項類型已停用。請聯絡工作區管理員在工作區設定中啟用。" + "with_access": "啟用工作項目類型以從工作區層級匯入類型", + "without_access": "工作項目類型已停用。請聯絡工作區管理員在工作區設定中啟用。" } } }, @@ -264,7 +264,7 @@ }, "unlink_confirmation": { "title": "取消連結屬性", - "description": "取消連結此屬性將永久刪除使用此類型的每個工作事項中的所有值。此操作無法還原。", + "description": "取消連結此屬性將永久刪除使用此類型的每個工作項目中的所有值。此操作無法還原。", "input_label": "輸入", "input_label_suffix": "以繼續:", "confirm": "取消連結屬性", @@ -293,17 +293,17 @@ } }, "create": { - "title": "創建工作項目類型", - "button": "添加工作項目類型", + "title": "建立工作項目類型", + "button": "新增工作項目類型", "toast": { "success": { "title": "成功!", - "message": "工作項目類型已成功創建。" + "message": "工作項目類型已成功建立。" }, "error": { "title": "錯誤!", "message": { - "default": "建立工作事項類型失敗。請再試一次!", + "default": "建立工作項目類型失敗。請再試一次!", "conflict": "{name} 類型已存在。請選擇其他名稱。" } } @@ -320,7 +320,7 @@ "error": { "title": "錯誤!", "message": { - "default": "更新工作事項類型失敗。請再試一次!", + "default": "更新工作項目類型失敗。請再試一次!", "conflict": "{name} 類型已存在。請選擇其他名稱。" } } @@ -352,7 +352,7 @@ }, "change_confirmation": { "title": "更改工作項目類型?", - "description": "更改工作項目類型可能會導致丟失特定於當前類型的自定義屬性值。此操作無法撤銷。", + "description": "更改工作項目類型可能會導致遺失特定於目前類型的自訂屬性值。此操作無法撤銷。", "button": { "loading": "更改中", "default": "更改類型" @@ -361,29 +361,29 @@ "empty_state": { "enable": { "title": "啟用工作項目類型", - "description": "使用工作項目類型為您的工作塑造工作項目。使用圖標、背景和屬性自定義它們,並為此專案配置它們。", + "description": "使用工作項目類型為您的工作塑造工作項目。使用圖示、背景和屬性自訂它們,並為此專案設定它們。", "primary_button": { "text": "啟用" }, "confirmation": { - "title": "一旦啟用,工作項目類型不能被禁用。", - "description": "Plane的工作項目將成為此專案的默認工作項目類型,並將在此專案中顯示其圖標和背景。", + "title": "一旦啟用,工作項目類型不能被停用。", + "description": "Plane 的工作項目將成為此專案的預設工作項目類型,並將在此專案中顯示其圖示和背景。", "button": { "default": "啟用", - "loading": "設置中" + "loading": "設定中" } } }, "get_pro": { - "title": "獲取專業版以啟用工作項目類型。", - "description": "使用工作項目類型為您的工作塑造工作項目。使用圖標、背景和屬性自定義它們,並為此專案配置它們。", + "title": "取得專業版以啟用工作項目類型。", + "description": "使用工作項目類型為您的工作塑造工作項目。使用圖示、背景和屬性自訂它們,並為此專案設定它們。", "primary_button": { - "text": "獲取專業版" + "text": "取得專業版" } }, "upgrade": { "title": "升級以啟用工作項目類型。", - "description": "使用工作項目類型為您的工作塑造工作項目。使用圖標、背景和屬性自定義它們,並為此專案配置它們。", + "description": "使用工作項目類型為您的工作塑造工作項目。使用圖示、背景和屬性自訂它們,並為此專案設定它們。", "primary_button": { "text": "升級" } diff --git a/packages/i18n/src/locales/zh-TW/work-item.json b/packages/i18n/src/locales/zh-TW/work-item.json index 450b65a1131..4175bac81d4 100644 --- a/packages/i18n/src/locales/zh-TW/work-item.json +++ b/packages/i18n/src/locales/zh-TW/work-item.json @@ -1,50 +1,50 @@ { "issue": { - "label": "{count, plural, one {工作事項} other {工作事項}}", - "all": "所有工作事項", - "edit": "編輯工作事項", + "label": "{count, plural, one {工作項目} other {工作項目}}", + "all": "所有工作項目", + "edit": "編輯工作項目", "title": { - "label": "工作事項標題", - "required": "工作事項標題為必填。" + "label": "工作項目標題", + "required": "工作項目標題為必填。" }, "add": { - "press_enter": "按 'Enter' 以新增另一個工作事項", - "label": "新增工作事項", + "press_enter": "按 'Enter' 以新增另一個工作項目", + "label": "新增工作項目", "cycle": { - "failed": "無法將工作事項新增到週期。請再試一次。", - "success": "{count, plural, one {工作事項} other {工作事項}} 已成功新增到週期。", - "loading": "正在將 {count, plural, one {工作事項} other {工作事項}} 新增到週期" + "failed": "無法將工作項目新增到週期。請再試一次。", + "success": "{count, plural, one {工作項目} other {工作項目}} 已成功新增到週期。", + "loading": "正在將 {count, plural, one {工作項目} other {工作項目}} 新增到週期" }, "assignee": "新增指派對象", "start_date": "新增開始日期", "due_date": "新增截止日期", - "parent": "新增父工作事項", - "sub_issue": "新增子工作事項", + "parent": "新增父工作項目", + "sub_issue": "新增子工作項目", "dependency": "新增相依性", "relation": "新增關聯", "link": "新增連結", - "existing": "新增現有工作事項" + "existing": "新增現有工作項目" }, "remove": { - "label": "移除工作事項", + "label": "移除工作項目", "cycle": { - "loading": "正在從週期移除工作事項", - "success": "已成功從週期移除工作事項。", - "failed": "無法從週期移除工作事項。請再試一次。" + "loading": "正在從週期移除工作項目", + "success": "已成功從週期移除工作項目。", + "failed": "無法從週期移除工作項目。請再試一次。" }, "module": { - "loading": "正在從模組移除工作事項", - "success": "已成功從模組移除工作事項。", - "failed": "無法從模組移除工作事項。請再試一次。" + "loading": "正在從模組移除工作項目", + "success": "已成功從模組移除工作項目。", + "failed": "無法從模組移除工作項目。請再試一次。" }, "parent": { - "label": "移除父工作事項" + "label": "移除父工作項目" } }, - "new": "新工作事項", - "adding": "新增工作事項中", + "new": "新工作項目", + "adding": "新增工作項目中", "create": { - "success": "工作事項建立成功" + "success": "工作項目建立成功" }, "priority": { "urgent": "緊急", @@ -56,31 +56,31 @@ "properties": { "label": "顯示屬性", "id": "ID", - "issue_type": "工作事項類型", - "sub_issue_count": "子工作事項數量", + "issue_type": "工作項目類型", + "sub_issue_count": "子工作項目數量", "attachment_count": "附件數量", "created_on": "建立於", - "sub_issue": "子工作事項", - "work_item_count": "工作事項數量" + "sub_issue": "子工作項目", + "work_item_count": "工作項目數量" }, "extra": { - "show_sub_issues": "顯示子工作事項", + "show_sub_issues": "顯示子工作項目", "show_empty_groups": "顯示空群組" } }, "layouts": { - "ordered_by_label": "此版面配置依據以下條件排序", + "ordered_by_label": "此版面設定依據以下條件排序", "list": "清單", "kanban": "看板", "calendar": "日曆", "spreadsheet": "試算表", "gantt": "甘特圖", "title": { - "list": "清單版面配置", - "kanban": "看板版面配置", - "calendar": "日曆版面配置", - "spreadsheet": "試算表版面配置", - "gantt": "甘特圖版面配置" + "list": "清單版面設定", + "kanban": "看板版面設定", + "calendar": "日曆版面設定", + "spreadsheet": "試算表版面設定", + "gantt": "甘特圖版面設定" } }, "states": { @@ -152,35 +152,35 @@ }, "empty_state": { "issue_detail": { - "title": "工作事項不存在", - "description": "您尋找的工作事項不存在、已封存或已刪除。", + "title": "工作項目不存在", + "description": "您尋找的工作項目不存在、已封存或已刪除。", "primary_button": { - "text": "檢視其他工作事項" + "text": "檢視其他工作項目" } } }, "sibling": { - "label": "同層級工作事項" + "label": "同層級工作項目" }, "archive": { - "description": "只有已完成或取消的\n工作事項可以封存", - "label": "封存工作事項", - "confirm_message": "您確定要封存工作事項嗎?所有已封存的工作事項稍後都可以還原。", + "description": "只有已完成或取消的工作項目可以封存", + "label": "封存工作項目", + "confirm_message": "您確定要封存工作項目嗎?所有已封存的工作項目稍後都可以還原。", "success": { "label": "封存成功", "message": "您的封存可以在專案封存中找到。" }, "failed": { - "message": "無法封存工作事項。請再試一次。" + "message": "無法封存工作項目。請再試一次。" } }, "restore": { "success": { "title": "還原成功", - "message": "您的工作事項可以在專案工作事項中找到。" + "message": "您的工作項目可以在專案工作項目中找到。" }, "failed": { - "message": "無法還原工作事項。請再試一次。" + "message": "無法還原工作項目。請再試一次。" } }, "relation": { @@ -195,29 +195,29 @@ "implements": "實現", "implemented_by": "實現者" }, - "copy_link": "複製工作事項連結", + "copy_link": "複製工作項目連結", "delete": { - "label": "刪除工作事項", - "error": "刪除工作事項時發生錯誤" + "label": "刪除工作項目", + "error": "刪除工作項目時發生錯誤" }, "subscription": { "actions": { - "subscribed": "已成功訂閱工作事項", - "unsubscribed": "已成功取消訂閱工作事項" + "subscribed": "已成功訂閱工作項目", + "unsubscribed": "已成功取消訂閱工作項目" } }, "select": { - "error": "請至少選擇一個工作事項", - "empty": "未選擇工作事項", - "add_selected": "新增已選取的工作事項", + "error": "請至少選擇一個工作項目", + "empty": "未選擇工作項目", + "add_selected": "新增已選取的工作項目", "select_all": "全選", "deselect_all": "取消全選" }, - "open_in_full_screen": "以全螢幕開啟工作事項", + "open_in_full_screen": "以全螢幕開啟工作項目", "duplicate": { "modal": { "title": "複製到另一個專案", - "description1": "此操作將建立此工作事項的副本。", + "description1": "此操作將建立此工作項目的副本。", "description2": "複製時所有屬性資料都將被移除。", "placeholder": "選擇專案" } @@ -225,10 +225,10 @@ "toast": { "duplicate": { "success": { - "message": "工作事項複製成功" + "message": "工作項目複製成功" }, "error": { - "message": "工作事項複製失敗" + "message": "工作項目複製失敗" } } }, @@ -270,22 +270,22 @@ }, "sub_work_item": { "update": { - "success": "子工作事項更新成功", - "error": "更新子工作事項時發生錯誤" + "success": "子工作項目更新成功", + "error": "更新子工作項目時發生錯誤" }, "remove": { - "success": "子工作事項移除成功", - "error": "移除子工作事項時發生錯誤" + "success": "子工作項目移除成功", + "error": "移除子工作項目時發生錯誤" }, "empty_state": { "sub_list_filters": { - "title": "您沒有符合您應用過的過濾器的子工作事項。", - "description": "要查看所有子工作事項,請清除所有應用過的過濾器。", + "title": "您沒有符合您應用過的過濾器的子工作項目。", + "description": "要查看所有子工作項目,請清除所有應用過的過濾器。", "action": "清除過濾器" }, "list_filters": { - "title": "您沒有符合您應用過的過濾器的工作事項。", - "description": "要查看所有工作事項,請清除所有應用過的過濾器。", + "title": "您沒有符合您應用過的過濾器的工作項目。", + "description": "要查看所有工作項目,請清除所有應用過的過濾器。", "action": "清除過濾器" } } @@ -293,10 +293,10 @@ "issue_relation": { "empty_state": { "search": { - "title": "找不到符合的工作事項" + "title": "找不到符合的工作項目" }, "no_issues": { - "title": "找不到工作事項" + "title": "找不到工作項目" } } }, @@ -304,7 +304,7 @@ "empty_state": { "general": { "title": "尚無留言", - "description": "留言可用作工作事項的討論和後續追蹤空間" + "description": "留言可用作工作項目的討論和後續追蹤空間" } } }, @@ -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/workflow.json b/packages/i18n/src/locales/zh-TW/workflow.json index bac5b3f7cfc..2e27ef899e2 100644 --- a/packages/i18n/src/locales/zh-TW/workflow.json +++ b/packages/i18n/src/locales/zh-TW/workflow.json @@ -2,20 +2,20 @@ "workflows": { "workflow_states": { "work_item_creation": "允許新工作項目", - "work_item_creation_disable_tooltip": "此狀態已禁用工作項目創建", - "default_state": "默認狀態允許所有成員創建新工作項目。這無法更改", + "work_item_creation_disable_tooltip": "此狀態已停用工作項目建立", + "default_state": "預設狀態允許所有成員建立新工作項目。這無法變更", "state_change_count": "{count, plural, one {1個允許的狀態變更} other {{count}個允許的狀態變更}}", "movers_count": "{count, plural, one {1個列出的審核者} other {{count}個列出的審核者}}", "state_changes": { "label": { - "default": "添加允許的狀態變更", - "loading": "添加允許的狀態變更中" + "default": "新增允許的狀態變更", + "loading": "新增允許的狀態變更中" }, "move_to": "變更狀態為", "movers": { "label": "當審核者為", "tooltip": "審核者是被允許將工作項目從一個狀態移動到另一個狀態的人。", - "add": "添加審核者" + "add": "新增審核者" } } }, @@ -32,7 +32,7 @@ "empty_state": { "upgrade": { "title": "使用工作流程控制變更和審核的混亂。", - "description": "在Plane中使用工作流程設置工作移動、由誰移動以及何時移動的規則。" + "description": "在Plane中使用工作流程設定工作移動、由誰移動以及何時移動的規則。" } }, "quick_actions": { @@ -42,11 +42,11 @@ "confirmation_modals": { "reset_workflow": { "title": "您確定要重置此工作流程嗎?", - "description": "如果您重置此工作流程,所有狀態變更規則都將被刪除,您將需要重新創建它們才能在此專案中運行。" + "description": "如果您重置此工作流程,所有狀態變更規則都將被刪除,您將需要重新建立它們才能在此專案中運行。" }, "delete_state_change": { "title": "您確定要刪除此狀態變更規則嗎?", - "description": "一旦刪除,您將無法撤消此更改,如果您希望此規則在此專案中運行,您將需要重新設置。" + "description": "一旦刪除,您將無法撤消此更改,如果您希望此規則在此專案中運行,您將需要重新設定。" } }, "toasts": { @@ -73,8 +73,8 @@ }, "add_state_change_rule": { "error": { - "title": "添加狀態變更規則時出錯", - "message": "無法添加狀態變更規則。請再試一次。" + "title": "新增狀態變更規則時出錯", + "message": "無法新增狀態變更規則。請再試一次。" } }, "modify_state_change_rule": { diff --git a/packages/i18n/src/locales/zh-TW/workspace-settings.json b/packages/i18n/src/locales/zh-TW/workspace-settings.json index 2d01f10ef72..2962b200847 100644 --- a/packages/i18n/src/locales/zh-TW/workspace-settings.json +++ b/packages/i18n/src/locales/zh-TW/workspace-settings.json @@ -82,7 +82,7 @@ "export_separate_files": "將資料匯出為個別檔案", "exporting_projects": "匯出專案", "format": "格式", - "filters_info": "應用篩選器以根據您的條件匯出特定工作項。", + "filters_info": "應用篩選器以根據您的條件匯出特定工作項目。", "modal": { "title": "匯出至", "toasts": { @@ -253,7 +253,7 @@ "identity": { "title": "身份", "heading": "身份", - "description": "配置您的網域並啟用單一登入" + "description": "設定您的網域並啟用單一登入" }, "project_states": { "title": "專案狀態", @@ -272,12 +272,12 @@ "templates": { "title": "範本", "heading": "範本", - "description": "使用範本可節省 80% 建立專案、工作事項和頁面所花費的時間。" + "description": "使用範本可節省 80% 建立專案、工作項目和頁面所花費的時間。" }, "relations": { "title": "關聯", "heading": "關聯", - "description": "建立並管理能連接工作區中各工作事項的關聯類型。" + "description": "建立並管理能連接工作區中各工作項目的關聯類型。" }, "cancel_trial": { "title": "請先取消您的試用期。", @@ -285,7 +285,7 @@ "dismiss": "忽略", "cancel": "取消試用期", "cancel_success_title": "試用期已取消。", - "cancel_success_message": "您現在可以刪除工作空間。", + "cancel_success_message": "您現在可以刪除工作區。", "cancel_error_title": "操作失敗。", "cancel_error_message": "請再試一次。" }, @@ -302,8 +302,8 @@ "disconnect": "中斷連線", "install": "安裝", "installed": "已安裝", - "configure": "配置", - "app_available": "您已使此應用可用於Plane工作空間", + "configure": "設定", + "app_available": "您已使此應用可用於Plane工作區", "app_credentials_regenrated": { "title": "應用程式憑證已成功重新生成", "description": "請在所有使用的地方替換客戶端密鑰。之前的密鑰已不再有效。" @@ -350,11 +350,11 @@ "placeholder": "輸入隨機密鑰" }, "redirect_uris": { - "label": "重定向 URI(以空格分隔)", + "label": "重新導向 URI(以空格分隔)", "description": "使用者在透過 Plane 認證後將被重新導向到此路徑。", "placeholder": "https://example.com https://example.com/" }, - "app_available_description": "連接Plane工作空間以開始使用", + "app_available_description": "連接Plane工作區以開始使用", "client_id_and_secret": "客戶端ID和密鑰", "client_id_and_secret_description": "複製並保存此密鑰。關閉後您將無法再次查看此密鑰。", "client_id_and_secret_download": "您可以從這裡下載包含密鑰的CSV檔案。", @@ -375,10 +375,10 @@ "webhook_url_title": "Webhook URL", "webhook_url_error": "Webhook URL為必填項", "invalid_webhook_url_error": "無效的Webhook URL", - "redirect_uris_title": "重定向URI", - "redirect_uris_error": "重定向URI為必填項", - "invalid_redirect_uris_error": "無效的重定向URI", - "redirect_uris_description": "輸入應用將在用戶後重定向到的URI,用空格分隔,例如 https://example.com https://example.com/", + "redirect_uris_title": "重新導向URI", + "redirect_uris_error": "重新導向URI為必填項", + "invalid_redirect_uris_error": "無效的重新導向URI", + "redirect_uris_description": "輸入應用將在使用者後重新導向到的URI,用空格分隔,例如 https://example.com https://example.com/", "authorized_javascript_origins_title": "授權的JavaScript來源", "authorized_javascript_origins_error": "授權的JavaScript來源為必填項", "invalid_authorized_javascript_origins_error": "無效的授權JavaScript來源", @@ -393,20 +393,20 @@ "regenerate_client_secret_confirm_description": "使用此密鑰的應用將停止工作。您需要在應用中更新密鑰。", "regenerate_client_secret_confirm_cancel": "取消", "regenerate_client_secret_confirm_regenerate": "重新生成", - "read_only_access_to_workspace": "對您的工作空間的唯讀存取", - "write_access_to_workspace": "對您的工作空間的寫入存取", - "read_only_access_to_user_profile": "對您的用戶設定檔的唯讀存取", - "write_access_to_user_profile": "對您的用戶設定檔的寫入存取", - "connect_app_to_workspace": "將{app}連接到您的工作空間{workspace}", - "user_permissions": "用戶權限", - "user_permissions_description": "用戶權限用於授予對用戶設定檔的存取權限。", - "workspace_permissions": "工作空間權限", - "workspace_permissions_description": "工作空間權限用於授予對工作空間的存取權限。", + "read_only_access_to_workspace": "對您的工作區的唯讀存取", + "write_access_to_workspace": "對您的工作區的寫入存取", + "read_only_access_to_user_profile": "對您的使用者設定檔的唯讀存取", + "write_access_to_user_profile": "對您的使用者設定檔的寫入存取", + "connect_app_to_workspace": "將{app}連接到您的工作區{workspace}", + "user_permissions": "使用者權限", + "user_permissions_description": "使用者權限用於授予對使用者設定檔的存取權限。", + "workspace_permissions": "工作區權限", + "workspace_permissions_description": "工作區權限用於授予對工作區的存取權限。", "with_the_permissions": "具有權限", - "app_consent_title": "{app}正在請求存取您的Plane工作空間和設定檔。", - "choose_workspace_to_connect_app_with": "選擇要連接應用的工作空間", + "app_consent_title": "{app}正在請求存取您的Plane工作區和設定檔。", + "choose_workspace_to_connect_app_with": "選擇要連接應用的工作區", "app_consent_workspace_permissions_title": "{app}想要", - "app_consent_user_permissions_title": "{app}還可以請求用戶對以下資源的權限。這些權限將僅由用戶請求和授權。", + "app_consent_user_permissions_title": "{app}還可以請求使用者對以下資源的權限。這些權限將僅由使用者請求和授權。", "app_consent_accept_title": "通過接受", "app_consent_accept_1": "您授予應用在Plane內部或外部可以使用應用的任何地方存取您的Plane資料的權限", "app_consent_accept_2": "您同意{app}的隱私政策和使用條款", @@ -427,17 +427,17 @@ "terms_of_service_url_title": "使用條款URL", "terms_of_service_url_error": "使用條款URL是必填項", "invalid_terms_of_service_url_error": "無效的使用條款URL", - "support_url_title": "支持URL", - "support_url_error": "支持URL是必填項", - "invalid_support_url_error": "無效的支持URL", - "video_url_title": "視頻URL", - "video_url_error": "視頻URL是必填項", - "invalid_video_url_error": "無效的視頻URL", - "setup_url_error": "設置URL是必填項", - "invalid_setup_url_error": "無效的設置URL", - "configuration_url_title": "配置URL", - "configuration_url_error": "配置URL是必填項", - "invalid_configuration_url_error": "無效的配置URL", + "support_url_title": "支援網址", + "support_url_error": "支援網址為必填項", + "invalid_support_url_error": "無效的支援網址", + "video_url_title": "影片網址", + "video_url_error": "影片網址為必填項", + "invalid_video_url_error": "無效的影片網址", + "setup_url_error": "設定URL是必填項", + "invalid_setup_url_error": "無效的設定URL", + "configuration_url_title": "設定URL", + "configuration_url_error": "設定URL是必填項", + "invalid_configuration_url_error": "無效的設定URL", "contact_email_title": "聯絡電子郵件", "contact_email_error": "聯絡電子郵件是必填項", "invalid_contact_email_error": "無效的聯絡電子郵件", diff --git a/packages/i18n/src/locales/zh-TW/workspace.json b/packages/i18n/src/locales/zh-TW/workspace.json index 3f2194ec768..d814a594d76 100644 --- a/packages/i18n/src/locales/zh-TW/workspace.json +++ b/packages/i18n/src/locales/zh-TW/workspace.json @@ -54,7 +54,7 @@ "empty_state": { "general": { "title": "您的專案、活動和指標概覽", - "description": "歡迎使用 Plane,我們很高興您在這裡。建立您的第一個專案並追蹤您的工作事項,這個頁面將會變成一個協助您進展的空間。管理員也會看到協助他們團隊進展的項目。", + "description": "歡迎使用 Plane,我們很高興您在這裡。建立您的第一個專案並追蹤您的工作項目,這個頁面將會變成一個協助您進展的空間。管理員也會看到協助他們團隊進展的項目。", "primary_button": { "text": "建立您的第一個專案", "comic": { @@ -70,26 +70,26 @@ "page_label": "{workspace} - 分析", "open_tasks": "開啟任務總數", "error": "取得資料時發生錯誤。", - "work_items_closed_in": "已完成的工作事項數量在", + "work_items_closed_in": "已完成的工作項目數量在", "selected_projects": "已選取的專案", "total_members": "成員總數", "total_cycles": "週期總數", "total_modules": "模組總數", "pending_work_items": { - "title": "待處理工作事項", - "empty_state": "在此顯示同事待處理工作事項的分析。" + "title": "待處理工作項目", + "empty_state": "在此顯示同事待處理工作項目的分析。" }, "work_items_closed_in_a_year": { - "title": "年度完成工作事項", - "empty_state": "完成工作事項以圖表形式檢視分析。" + "title": "年度完成工作項目", + "empty_state": "完成工作項目以圖表形式檢視分析。" }, "most_work_items_created": { - "title": "最多工作事項建立者", - "empty_state": "在此顯示同事及其建立的工作事項數量。" + "title": "最多工作項目建立者", + "empty_state": "在此顯示同事及其建立的工作項目數量。" }, "most_work_items_closed": { - "title": "最多工作事項完成者", - "empty_state": "在此顯示同事及其完成的工作事項數量。" + "title": "最多工作項目完成者", + "empty_state": "在此顯示同事及其完成的工作項目數量。" }, "tabs": { "scope_and_demand": "範圍與需求", @@ -122,7 +122,7 @@ }, "general": { "title": "追蹤進度、工作量和分配。發現趨勢,消除障礙,加速工作進展", - "description": "查看範圍與需求、估算和範圍蔓延。獲取團隊成員和團隊的績效,確保您的專案按時運行。", + "description": "查看範圍與需求、估算和範圍蔓延。取得團隊成員和團隊的績效,確保您的專案按時運行。", "primary_button": { "text": "開始您的第一個專案", "comic": { @@ -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 {專案}}", @@ -170,7 +170,7 @@ "permission": "您沒有執行此操作的權限。", "cycle_delete": "無法刪除週期", "module_delete": "無法刪除模組", - "issue_delete": "無法刪除工作事項" + "issue_delete": "無法刪除工作項目" }, "state": { "backlog": "待辦事項", @@ -207,7 +207,7 @@ }, "no_projects": { "title": "沒有專案", - "description": "若要建立工作事項或管理您的工作,您需要建立專案或成為專案的一部分。", + "description": "若要建立工作項目或管理您的工作,您需要建立專案或成為專案的一部分。", "primary_button": { "text": "開始您的第一個專案", "comic": { @@ -229,45 +229,46 @@ "add_view": "新增檢視", "empty_state": { "all-issues": { - "title": "專案中沒有工作事項", - "description": "第一個專案完成!現在,將您的工作分割成可追蹤的工作事項。讓我們開始吧!", + "title": "專案中沒有工作項目", + "description": "第一個專案完成!現在,將您的工作分割成可追蹤的工作項目。讓我們開始吧!", "primary_button": { - "text": "建立新工作事項" + "text": "建立新工作項目" } }, "assigned": { - "title": "尚無工作事項", - "description": "從這裡可以追蹤指派給您的工作事項。", + "title": "尚無工作項目", + "description": "從這裡可以追蹤指派給您的工作項目。", "primary_button": { - "text": "建立新工作事項" + "text": "建立新工作項目" } }, "created": { - "title": "尚無工作事項", - "description": "您建立的所有工作事項都會出現在這裡,直接在這裡追蹤它們。", + "title": "尚無工作項目", + "description": "您建立的所有工作項目都會出現在這裡,直接在這裡追蹤它們。", "primary_button": { - "text": "建立新工作事項" + "text": "建立新工作項目" } }, "subscribed": { - "title": "尚無工作事項", - "description": "訂閱您感興趣的工作事項,在這裡追蹤它們。" + "title": "尚無工作項目", + "description": "訂閱您感興趣的工作項目,在這裡追蹤它們。" }, "custom-view": { - "title": "尚無工作事項", - "description": "符合篩選條件的工作事項,在這裡追蹤它們。" + "title": "尚無工作項目", + "description": "符合篩選條件的工作項目,在這裡追蹤它們。" } }, "delete_view": { "title": "您確定要刪除此視圖嗎?", "content": "如果您確認,您為此視圖選擇的所有排序、篩選和顯示選項 + 布局將被永久刪除,無法恢復。" - } + }, + "page_title": "{workspaceName} - 全部檢視" }, "workspace_draft_issues": { - "draft_an_issue": "建立工作事項草稿", + "draft_an_issue": "建立工作項目草稿", "empty_state": { - "title": "寫到一半的工作事項,以及即將推出的留言會出現在這裡。", - "description": "若要試用此功能,請開始新增工作事項並中途離開,或在下方建立您的第一個草稿。😉", + "title": "寫到一半的工作項目,以及即將推出的留言會出現在這裡。", + "description": "若要試用此功能,請開始新增工作項目並中途離開,或在下方建立您的第一個草稿。😉", "primary_button": { "text": "建立您的第一個草稿" } @@ -279,7 +280,7 @@ "toasts": { "created": { "success": "草稿已建立", - "error": "無法建立工作事項。請再試一次。" + "error": "無法建立工作項目。請再試一次。" }, "deleted": { "success": "草稿已刪除" @@ -292,26 +293,26 @@ "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": { "title": "還沒有歸檔的頁面", - "description": "歸檔不在您雷達上的頁面。需要時在這裡訪問它們。" + "description": "歸檔不在您雷達上的頁面。需要時在這裡存取它們。" }, "shared": { "title": "尚無共享頁面", @@ -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 ( -