From 8f93c06c040426cf946e52b0ed9cac1d7c60674f Mon Sep 17 00:00:00 2001 From: desperado1802 <124465103+desperado1802@users.noreply.github.com> Date: Sat, 28 Oct 2023 09:00:58 +0300 Subject: [PATCH] Feat/task screen title block (#1674) * added task screen * added the api to get task by id, and storing in in global state * added the text input for title, also the icons necessary for editing, copying, saving * added copy title func, refactored and fixed build error * limited the title text to 255 chars max, showing a flash message when it's exceeded and title is being saved, also when title is copied * updated color of copy title flash message --- apps/mobile/app/app.tsx | 72 +-- apps/mobile/app/components/ProfileImage.tsx | 140 ++--- .../app/components/Task/TitleBlock/index.tsx | 164 ++++++ apps/mobile/app/components/index.ts | 23 +- apps/mobile/app/components/svgs/icons.tsx | 167 ++++-- .../app/helpers/img-title-profile-avatar.ts | 4 +- apps/mobile/app/i18n/ar.ts | 555 +++++++++--------- apps/mobile/app/i18n/bg.ts | 522 ++++++++-------- apps/mobile/app/i18n/en.ts | 540 ++++++++--------- apps/mobile/app/i18n/es.ts | 522 ++++++++-------- apps/mobile/app/i18n/fr.ts | 495 ++++++++-------- apps/mobile/app/i18n/he.ts | 522 ++++++++-------- apps/mobile/app/i18n/ko.ts | 550 ++++++++--------- apps/mobile/app/i18n/ru.ts | 522 ++++++++-------- apps/mobile/app/models/task/TaskStore.ts | 47 +- .../app/navigators/AuthenticatedNavigator.tsx | 195 +++--- .../Authenticated/TaskScreen/index.tsx | 84 +++ .../TeamScreen/components/ListCardItem.tsx | 458 ++++++++------- apps/mobile/app/screens/index.ts | 31 +- .../app/services/client/requests/tasks.ts | 144 +++-- .../services/hooks/features/useTeamTasks.ts | 19 + .../app/services/interfaces/IDataResponse.ts | 29 +- 22 files changed, 3209 insertions(+), 2596 deletions(-) create mode 100644 apps/mobile/app/components/Task/TitleBlock/index.tsx create mode 100644 apps/mobile/app/screens/Authenticated/TaskScreen/index.tsx diff --git a/apps/mobile/app/app.tsx b/apps/mobile/app/app.tsx index 0e8b9776b..a238eb9a2 100644 --- a/apps/mobile/app/app.tsx +++ b/apps/mobile/app/app.tsx @@ -9,22 +9,23 @@ * The app navigation resides in ./app/navigators, so head over there * if you're interested in adding screens and navigators. */ -import './i18n'; -import './utils/ignoreWarnings'; -import { useFonts } from 'expo-font'; -import React, { useEffect } from 'react'; -import { Provider as PaperProvider } from 'react-native-paper'; +import "./i18n" +import "./utils/ignoreWarnings" +import { useFonts } from "expo-font" +import React, { useEffect } from "react" +import { Provider as PaperProvider } from "react-native-paper" -import { initialWindowMetrics, SafeAreaProvider } from 'react-native-safe-area-context'; -import { useInitialRootStore, useStores } from './models'; -import { AppNavigator, useNavigationPersistence } from './navigators'; -import { ErrorBoundary } from './screens/ErrorScreen/ErrorBoundary'; -import * as storage from './utils/storage'; -import { customDarkTheme, customFontsToLoad, customLightTheme } from './theme'; -import { setupReactotron } from './services/reactotron'; -import Config from './config'; -import { observer } from 'mobx-react-lite'; -import { initCrashReporting } from './utils/crashReporting'; +import { initialWindowMetrics, SafeAreaProvider } from "react-native-safe-area-context" +import { useInitialRootStore, useStores } from "./models" +import { AppNavigator, useNavigationPersistence } from "./navigators" +import { ErrorBoundary } from "./screens/ErrorScreen/ErrorBoundary" +import * as storage from "./utils/storage" +import { customDarkTheme, customFontsToLoad, customLightTheme } from "./theme" +import { setupReactotron } from "./services/reactotron" +import Config from "./config" +import { observer } from "mobx-react-lite" +import { initCrashReporting } from "./utils/crashReporting" +import FlashMessage from "react-native-flash-message" // Set up Reactotron, which is a free desktop app for inspecting and debugging // React Native apps. Learn more here: https://github.com/infinitered/reactotron @@ -32,40 +33,40 @@ setupReactotron({ // clear the Reactotron window when the app loads/reloads clearOnLoad: true, // generally going to be localhost - host: 'localhost', + host: "localhost", // Reactotron can monitor AsyncStorage for you useAsyncStorage: true, // log the initial restored state from AsyncStorage logInitialState: true, // log out any snapshots as they happen (this is useful for debugging but slow) - logSnapshots: false -}); + logSnapshots: false, +}) -export const NAVIGATION_PERSISTENCE_KEY = 'NAVIGATION_STATE'; +export const NAVIGATION_PERSISTENCE_KEY = "NAVIGATION_STATE" interface AppProps { - hideSplashScreen: () => Promise; + hideSplashScreen: () => Promise } /** * This is the root component of our app. */ const App = observer((props: AppProps) => { - const { hideSplashScreen } = props; + const { hideSplashScreen } = props const { initialNavigationState, onNavigationStateChange, - isRestored: isNavigationStateRestored - } = useNavigationPersistence(storage, NAVIGATION_PERSISTENCE_KEY); + isRestored: isNavigationStateRestored, + } = useNavigationPersistence(storage, NAVIGATION_PERSISTENCE_KEY) const { - authenticationStore: { isDarkMode } - } = useStores(); + authenticationStore: { isDarkMode }, + } = useStores() useEffect(() => { - initCrashReporting(); // To initialize Sentry.io - }, []); + initCrashReporting() // To initialize Sentry.io + }, []) - const [areFontsLoaded] = useFonts(customFontsToLoad); + const [areFontsLoaded] = useFonts(customFontsToLoad) const { rehydrated } = useInitialRootStore(() => { // This runs after the root store has been initialized and rehydrated. @@ -74,8 +75,8 @@ const App = observer((props: AppProps) => { // Slightly delaying splash screen hiding for better UX; can be customized or removed as needed, // Note: (vanilla Android) The splash-screen will not appear if you launch your app via the terminal or Android Studio. Kill the app and launch it normally by tapping on the launcher icon. https://stackoverflow.com/a/69831106 // Note: (vanilla iOS) You might notice the splash-screen logo change size. This happens in debug/development mode. Try building the app for release. - setTimeout(hideSplashScreen, 500); - }); + setTimeout(hideSplashScreen, 500) + }) // Before we show the app, we have to wait for our state to be ready. // In the meantime, don't render anything. This will be the background @@ -83,15 +84,16 @@ const App = observer((props: AppProps) => { // In iOS: application:didFinishLaunchingWithOptions: // In Android: https://stackoverflow.com/a/45838109/204044 // You can replace with your own loading component if you wish. - if (!rehydrated || !isNavigationStateRestored || !areFontsLoaded) return null; + if (!rehydrated || !isNavigationStateRestored || !areFontsLoaded) return null // otherwise, we're ready to render the app - const theme = isDarkMode ? customDarkTheme : customLightTheme; + const theme = isDarkMode ? customDarkTheme : customLightTheme return ( + { - ); -}); -export default App; + ) +}) +export default App diff --git a/apps/mobile/app/components/ProfileImage.tsx b/apps/mobile/app/components/ProfileImage.tsx index 0a0d66c37..91521af57 100644 --- a/apps/mobile/app/components/ProfileImage.tsx +++ b/apps/mobile/app/components/ProfileImage.tsx @@ -1,58 +1,60 @@ /* eslint-disable react-native/no-unused-styles */ /* eslint-disable react-native/no-color-literals */ /* eslint-disable react-native/no-inline-styles */ -import React, { FC, useMemo } from 'react'; -import { View, StyleSheet } from 'react-native'; -import { Avatar } from 'react-native-paper'; -import { IUser } from '../services/interfaces/IUserData'; -import { typography, useAppTheme } from '../theme'; -import { imgTitleProfileAvatar } from '../helpers/img-title-profile-avatar'; -import { useOrganizationTeam } from '../services/hooks/useOrganization'; -import { useTimer } from '../services/hooks/useTimer'; -import { getTimerStatusValue } from '../helpers/get-timer-status'; +import React, { FC, useMemo } from "react" +import { View, StyleSheet } from "react-native" +import { Avatar } from "react-native-paper" +import { IUser } from "../services/interfaces/IUserData" +import { typography, useAppTheme } from "../theme" +import { imgTitleProfileAvatar } from "../helpers/img-title-profile-avatar" +import { useOrganizationTeam } from "../services/hooks/useOrganization" +import { useTimer } from "../services/hooks/useTimer" +import { getTimerStatusValue } from "../helpers/get-timer-status" import { idleStatusIconLarge, onlineAndTrackingTimeStatusIconLarge, pauseStatusIconLarge, - suspendedStatusIconLarge -} from './svgs/icons'; -import { SvgXml } from 'react-native-svg'; + suspendedStatusIconLarge, +} from "./svgs/icons" +import { SvgXml } from "react-native-svg" interface Props { - user: IUser; - size?: number; + user: IUser + size?: number } const ProfileImage: FC = ({ user, size }) => { - const { colors } = useAppTheme(); + const { colors } = useAppTheme() - const { currentTeam } = useOrganizationTeam(); + const { currentTeam } = useOrganizationTeam() - const currentMember = currentTeam?.members.find((currentMember) => currentMember.employee.userId === user.id); + const currentMember = currentTeam?.members?.find( + (currentMember) => currentMember.employee.userId === user.id, + ) - const { timerStatus } = useTimer(); + const { timerStatus } = useTimer() - const status = getTimerStatusValue(timerStatus, currentMember, currentTeam?.public); + const status = getTimerStatusValue(timerStatus, currentMember, currentTeam?.public) const imageUrl = useMemo( () => user?.image?.thumbUrl || user?.image?.fullUrl || user?.imageUrl, - [user?.image?.thumb, user] - ); + [user?.image?.thumb, user], + ) - let iconSvgXml = ''; + let iconSvgXml = "" switch (status) { - case 'online': - iconSvgXml = onlineAndTrackingTimeStatusIconLarge; - break; - case 'pause': - iconSvgXml = pauseStatusIconLarge; - break; - case 'idle': - iconSvgXml = idleStatusIconLarge; - break; - case 'suspended': - iconSvgXml = suspendedStatusIconLarge; - break; + case "online": + iconSvgXml = onlineAndTrackingTimeStatusIconLarge + break + case "pause": + iconSvgXml = pauseStatusIconLarge + break + case "idle": + iconSvgXml = idleStatusIconLarge + break + case "suspended": + iconSvgXml = suspendedStatusIconLarge + break } return ( @@ -66,16 +68,16 @@ const ProfileImage: FC = ({ user, size }) => { width: size, height: size, borderColor: - status === 'online' - ? '#6EE7B7' - : status === 'pause' - ? '#EFCF9E' - : status === 'idle' - ? '#F5BEBE' - : '#DCD6D6' + status === "online" + ? "#6EE7B7" + : status === "pause" + ? "#EFCF9E" + : status === "idle" + ? "#F5BEBE" + : "#DCD6D6", }} source={{ - uri: imageUrl + uri: imageUrl, }} /> ) : ( @@ -87,13 +89,13 @@ const ProfileImage: FC = ({ user, size }) => { width: size, height: size, borderColor: - status === 'online' - ? '#6EE7B7' - : status === 'pause' - ? '#EFCF9E' - : status === 'idle' - ? '#F5BEBE' - : '#DCD6D6' + status === "online" + ? "#6EE7B7" + : status === "pause" + ? "#EFCF9E" + : status === "idle" + ? "#F5BEBE" + : "#DCD6D6", }} labelStyle={styles.prefix} /> @@ -105,41 +107,41 @@ const ProfileImage: FC = ({ user, size }) => { borderRadius: 100, width: 25, height: 25, - position: 'absolute', + position: "absolute", backgroundColor: - status === 'online' - ? '#6EE7B7' - : status === 'pause' - ? '#EFCF9E' - : status === 'idle' - ? '#F5BEBE' - : '#DCD6D6', - alignItems: 'center', - justifyContent: 'center', + status === "online" + ? "#6EE7B7" + : status === "pause" + ? "#EFCF9E" + : status === "idle" + ? "#F5BEBE" + : "#DCD6D6", + alignItems: "center", + justifyContent: "center", borderColor: colors.background, - borderWidth: 3 + borderWidth: 3, }} > - ); -}; -export default ProfileImage; + ) +} +export default ProfileImage const styles = StyleSheet.create({ container: { - alignItems: 'center', - height: '10%' + alignItems: "center", + height: "10%", }, prefix: { fontFamily: typography.fonts.PlusJakartaSans.light, fontSize: 42, - fontWeight: '200' + fontWeight: "200", }, profileImage: { borderRadius: 200, - borderWidth: 3 - } -}); + borderWidth: 3, + }, +}) diff --git a/apps/mobile/app/components/Task/TitleBlock/index.tsx b/apps/mobile/app/components/Task/TitleBlock/index.tsx new file mode 100644 index 000000000..e78de6f1b --- /dev/null +++ b/apps/mobile/app/components/Task/TitleBlock/index.tsx @@ -0,0 +1,164 @@ +/* eslint-disable react-native/no-inline-styles */ +/* eslint-disable react-native/no-color-literals */ +import { View, TextInput, StyleSheet, TouchableOpacity } from "react-native" +import React, { SetStateAction, useCallback, useEffect, useState } from "react" +import { useStores } from "../../../models" +import { useAppTheme } from "../../../theme" +import { SvgXml } from "react-native-svg" +import * as Clipboard from "expo-clipboard" +import { closeIconLight, copyIcon, editIcon, tickIconLight } from "../../svgs/icons" +import { useTeamTasks } from "../../../services/hooks/features/useTeamTasks" +import { showMessage } from "react-native-flash-message" +import { translate } from "../../../i18n" + +const TaskTitleBlock = () => { + const { + TaskStore: { detailedTask: task }, + } = useStores() + + const { dark, colors } = useAppTheme() + + const [title, setTitle] = useState("") + const [edit, setEdit] = useState(false) + + const { updateTitle } = useTeamTasks() + + const saveTitle = useCallback((newTitle: string) => { + if (newTitle.length > 255) { + showMessage({ + message: translate("taskDetailsScreen.characterLimitErrorTitle"), + description: translate("taskDetailsScreen.characterLimitErrorDescription"), + type: "danger", + }) + return + } + updateTitle(newTitle, task, true) + setEdit(false) + }, []) + + useEffect(() => { + if (!edit) { + task && setTitle(task?.title) + } + }, [task?.title, edit]) + + const copyTitle = () => { + Clipboard.setStringAsync(title) + showMessage({ + message: translate("taskDetailsScreen.copyTitle"), + type: "info", + backgroundColor: colors.secondary, + }) + } + + return ( + + + setTitle(text)} + value={title} + /> + saveTitle(title)} + /> + + + ) +} + +export default TaskTitleBlock + +interface ITitleIcons { + dark: boolean + edit: boolean + setEdit: React.Dispatch> + copyTitle: () => void + saveTitle: () => void +} + +const TitleIcons: React.FC = ({ dark, edit, setEdit, copyTitle, saveTitle }) => { + return ( + <> + {edit ? ( + + + + + setEdit(false)} + style={[ + styles.saveCancelButtons, + { + borderColor: dark ? "#464242" : "#e5e7eb", + }, + ]} + > + + + + ) : ( + + setEdit(true)} style={styles.editButton}> + + + + + + + )} + + ) +} + +const styles = StyleSheet.create({ + copyButton: { + alignItems: "center", + height: 30, + justifyContent: "center", + width: 30, + }, + editButton: { + alignItems: "center", + backgroundColor: "#EDEDED", + borderRadius: 100, + height: 30, + justifyContent: "center", + padding: 5, + width: 30, + }, + saveCancelButtons: { + borderRadius: 5, + borderWidth: 1, + padding: 3, + }, + textInput: { + borderRadius: 5, + borderWidth: 1, + flex: 1, + fontSize: 20, + fontWeight: "600", + maxHeight: 150, + textAlignVertical: "top", + }, +}) diff --git a/apps/mobile/app/components/index.ts b/apps/mobile/app/components/index.ts index 3da2dd977..7b6cdb1e3 100644 --- a/apps/mobile/app/components/index.ts +++ b/apps/mobile/app/components/index.ts @@ -1,11 +1,12 @@ -export * from './AutoImage'; -export * from './Button'; -export * from './Card'; -export * from './Header'; -export * from './Icon'; -export * from './ListItem'; -export * from './Screen'; -export * from './Text'; -export * from './TextField'; -export * from './Toggle'; -export * from './EmptyState'; +export * from "./AutoImage" +export * from "./Button" +export * from "./Card" +export * from "./Header" +export * from "./Icon" +export * from "./ListItem" +export * from "./Screen" +export * from "./Text" +export * from "./TextField" +export * from "./Toggle" +export * from "./EmptyState" +export * from "./Task/TitleBlock" diff --git a/apps/mobile/app/components/svgs/icons.tsx b/apps/mobile/app/components/svgs/icons.tsx index 55c10cfe4..48dcd2d17 100644 --- a/apps/mobile/app/components/svgs/icons.tsx +++ b/apps/mobile/app/components/svgs/icons.tsx @@ -3,31 +3,31 @@ export const sunDarkLarge = ` -`; +` export const moonDarkLarge = ` -`; +` export const sunLightLarge = ` -`; +` export const moonLightLarge = ` -`; +` export const moonLightMedium = ` -`; +` export const moonDarkMedium = ` -`; +` // Ever Teams Logo @@ -87,7 +87,7 @@ export const everTeamsLogoLightTheme = ` - `; + ` export const everTeamsLogoDarkTheme = ` - `; + ` export const grayCircleIcon = ` - `; + ` export const greenCircleTickIcon = ` - `; + ` // Timer Icons @@ -180,7 +180,7 @@ export const timerLargeStopIcon = ` - `; + ` export const timerMediumStopIcon = ` - `; + ` export const timerSmallStopIcon = ` - `; + ` export const timerLargePlayIcon = ` - `; + ` export const timerLargeDarkPlayIcon = ` - `; + ` export const timerMediumDarkPlayIcon = ` - `; + ` export const timerMediumPlayIcon = ` - `; + ` export const timerSmallPlayIcon = ` - `; + ` export const timerSmallDarkPlayIcon = ` - `; + ` // Footer Navigation and Hamburger/Drawer Menu icons @@ -293,7 +293,7 @@ export const peopleIconGrey = ` -`; +` export const peopleIconActive = ` @@ -302,7 +302,7 @@ export const peopleIconActive = ` -`; +` export const peopleIconActiveDark = ` @@ -311,22 +311,22 @@ export const peopleIconActiveDark = ` -`; +` export const userGrey = ` -`; +` export const userActive = ` -`; +` export const userActiveDark = ` -`; +` export const peopleNotFocusedDark = ` @@ -336,7 +336,7 @@ export const peopleNotFocusedDark = ` -`; +` export const peopleCaseNotFocusedDark2 = ` @@ -346,7 +346,7 @@ export const peopleCaseNotFocusedDark2 = ` -`; +` export const peopleNotFocusedLight = ` @@ -356,14 +356,14 @@ export const peopleNotFocusedLight = ` -`; +` export const briefCaseNotFocusedLight = ` -`; +` export const briefCaseNotFocusedDark = ` @@ -371,7 +371,7 @@ export const briefCaseNotFocusedDark = ` -`; +` export const briefCaseNotFocusedDark2 = ` @@ -380,44 +380,44 @@ export const briefCaseNotFocusedDark2 = ` -`; +` export const userNotFocusedDark = ` -`; +` export const userNotFocusedDark2 = ` -`; +` export const userNotFocusedLight = ` -`; +` export const userFocusedLight = ` -`; +` export const userFocusedDark = ` -`; +` export const settingsIconLight = ` -`; +` export const settingsIconDark = ` -`; +` // Timer Status Icons @@ -429,7 +429,7 @@ export const suspendedStatusIcon = ` - `; + ` export const idleStatusIcon = ` - `; + ` export const onlineAndTrackingTimeStatusIcon = ` - `; + ` export const pauseStatusIcon = ` - `; + ` export const suspendedStatusIconLarge = ` - `; + ` export const idleStatusIconLarge = ` - `; + ` export const onlineAndTrackingTimeStatusIconLarge = ` - `; + ` export const pauseStatusIconLarge = ` - `; + ` + +// Task Screen // +// Task Title +export const tickIconLight = ` + + ` + +export const tickIconDark = ` + + ` + +export const closeIconLight = ` + + + ` + +export const closeIconDark = ` + + + ` + +export const editIcon = ` + + + + +` + +export const copyIcon = ` + + + +` diff --git a/apps/mobile/app/helpers/img-title-profile-avatar.ts b/apps/mobile/app/helpers/img-title-profile-avatar.ts index b0b6c8e80..5df38a765 100644 --- a/apps/mobile/app/helpers/img-title-profile-avatar.ts +++ b/apps/mobile/app/helpers/img-title-profile-avatar.ts @@ -1,3 +1,3 @@ export const imgTitleProfileAvatar = (memberName: string): string => { - return memberName.substring(0, 1).toUpperCase(); -}; + return memberName?.substring(0, 1).toUpperCase() +} diff --git a/apps/mobile/app/i18n/ar.ts b/apps/mobile/app/i18n/ar.ts index c852ffa66..9f7b943f9 100644 --- a/apps/mobile/app/i18n/ar.ts +++ b/apps/mobile/app/i18n/ar.ts @@ -1,350 +1,365 @@ -import { Translations } from './en'; +import { Translations } from "./en" const ar: Translations = { common: { - ok: 'نعم', - cancel: 'حذف', - loading: 'Loading', - back: 'خلف', - logOut: 'تسجيل خروج', - save: 'حفظ', - edit: 'Edit', - confirm: 'Confirm', - discard: 'Discard' + ok: "نعم", + cancel: "حذف", + loading: "Loading", + back: "خلف", + logOut: "تسجيل خروج", + save: "حفظ", + edit: "Edit", + confirm: "Confirm", + discard: "Discard", // @demo remove-current-line }, welcomeScreen: { postscript: - 'ربما لا يكون هذا هو الشكل الذي يبدو عليه تطبيقك مالم يمنحك المصمم هذه الشاشات وشحنها في هذه الحالة', - readyForLaunch: 'تطبيقك تقريبا جاهز للتشغيل', - exciting: 'اوه هذا مثير', - letsGo: 'لنذهب' // @demo remove-current-line + "ربما لا يكون هذا هو الشكل الذي يبدو عليه تطبيقك مالم يمنحك المصمم هذه الشاشات وشحنها في هذه الحالة", + readyForLaunch: "تطبيقك تقريبا جاهز للتشغيل", + exciting: "اوه هذا مثير", + letsGo: "لنذهب", // @demo remove-current-line }, errorScreen: { - title: 'هناك خطأ ما', + title: "هناك خطأ ما", friendlySubtitle: "هذه هي الشاشة التي سيشاهدها المستخدمون في عملية الانتاج عند حدوث خطأ. سترغب في تخصيص هذه الرسالة ( الموجودة في 'ts.en/i18n/app') وربما التخطيط ايضاً ('app/screens/ErrorScreen'). إذا كنت تريد إزالة هذا بالكامل، تحقق من 'app/app.tsp' من اجل عنصر .", - reset: 'اعادة تعيين التطبيق', - traceTitle: 'خطأ من مجموعة %{name}' // @demo remove-current-line + reset: "اعادة تعيين التطبيق", + traceTitle: "خطأ من مجموعة %{name}", // @demo remove-current-line }, emptyStateComponent: { generic: { - heading: 'فارغة جداً....حزين', - content: 'لا توجد بيانات حتى الآن. حاول النقر فوق الزر لتحديث التطبيق او اعادة تحميله.', - button: 'لنحاول هذا مرّة أخرى' - } + heading: "فارغة جداً....حزين", + content: "لا توجد بيانات حتى الآن. حاول النقر فوق الزر لتحديث التطبيق او اعادة تحميله.", + button: "لنحاول هذا مرّة أخرى", + }, }, // @demo remove-block-start errors: { - invalidEmail: 'عنوان البريد الالكتروني غير صالح' + invalidEmail: "عنوان البريد الالكتروني غير صالح", }, loginScreen: { - name: 'تسجيل الدخول', - enterDetails: 'إنشاء فريق جديد', - enterDetails2: 'انضم إلى الفريق الحالي', - hintDetails: 'الرجاء إدخال تفاصيل فريقك لإنشاء فريق جديد.', - enterDetails3: 'مساحة العمل', - hintDetails2: 'الرجاء إدخال البريد الإلكتروني ورمز الدعوة للانضمام إلى الفريق الحالي.', - hintDetails3: 'البريد الإلكتروني المرتبط بمساحات العمل التالية', - joinTeam: 'انضم إلى الفريق', - joinExistTeam: 'الانضمام إلى الفريق الحالي؟', - joinTeamHint: 'أدخل رمز الدعوة الذي أرسلناه إلى بريدك الإلكتروني', - step1Title: 'حدد اسم الفريق', - step2Title: 'قدم المزيد من التفاصيل', - step3Title: 'شفرة الدعوة', - confirmDetails: 'يرجى التحقق من بريدك الإلكتروني للحصول على رمز التأكيد', - confirmDetails2: 'الرجاء إدخال رمز الدعوة الذي أرسلناه إلى بريدك الإلكتروني', - sendCode: 'أرسل كود', - codeNotReceived: 'ألم تستلم الرمز؟ يكرر', - inviteStepLabel: 'أدخل بريدك الإلكتروني', - emailFieldLabel: 'بريدك الالكتروني', - teamNameFieldLabel: 'اسم الفريق', - inviteCodeFieldLabel: 'أدخل رمز الدعوة', - selectWorkspaceFieldLabel: 'حدد مساحة العمل', - emailFieldPlaceholder: 'أدخل عنوان بريدك الالكتروني', - teamNameFieldPlaceholder: 'الرجاء إدخال اسم فريقك', - userNameFieldPlaceholder: 'أدخل أسمك', - tapContinue: 'يكمل', - tapJoin: 'ينضم', - createTeam: 'إنشاء فريق' + name: "تسجيل الدخول", + enterDetails: "إنشاء فريق جديد", + enterDetails2: "انضم إلى الفريق الحالي", + hintDetails: "الرجاء إدخال تفاصيل فريقك لإنشاء فريق جديد.", + enterDetails3: "مساحة العمل", + hintDetails2: "الرجاء إدخال البريد الإلكتروني ورمز الدعوة للانضمام إلى الفريق الحالي.", + hintDetails3: "البريد الإلكتروني المرتبط بمساحات العمل التالية", + joinTeam: "انضم إلى الفريق", + joinExistTeam: "الانضمام إلى الفريق الحالي؟", + joinTeamHint: "أدخل رمز الدعوة الذي أرسلناه إلى بريدك الإلكتروني", + step1Title: "حدد اسم الفريق", + step2Title: "قدم المزيد من التفاصيل", + step3Title: "شفرة الدعوة", + confirmDetails: "يرجى التحقق من بريدك الإلكتروني للحصول على رمز التأكيد", + confirmDetails2: "الرجاء إدخال رمز الدعوة الذي أرسلناه إلى بريدك الإلكتروني", + sendCode: "أرسل كود", + codeNotReceived: "ألم تستلم الرمز؟ يكرر", + inviteStepLabel: "أدخل بريدك الإلكتروني", + emailFieldLabel: "بريدك الالكتروني", + teamNameFieldLabel: "اسم الفريق", + inviteCodeFieldLabel: "أدخل رمز الدعوة", + selectWorkspaceFieldLabel: "حدد مساحة العمل", + emailFieldPlaceholder: "أدخل عنوان بريدك الالكتروني", + teamNameFieldPlaceholder: "الرجاء إدخال اسم فريقك", + userNameFieldPlaceholder: "أدخل أسمك", + tapContinue: "يكمل", + tapJoin: "ينضم", + createTeam: "إنشاء فريق", }, myWorkScreen: { - name: 'عملى', - estimateLabel: 'تقدير', - statusText: 'حالة', - taskFieldPlaceholder: 'ما الذي تعمل عليه', - sizeText: 'الأحجام', - prioritiesText: 'الأولويات', - tabCreateTask: 'قم بإنشاء مهمة جديدة', - labelText: 'مُلصَق' + name: "عملى", + estimateLabel: "تقدير", + statusText: "حالة", + taskFieldPlaceholder: "ما الذي تعمل عليه", + sizeText: "الأحجام", + prioritiesText: "الأولويات", + tabCreateTask: "قم بإنشاء مهمة جديدة", + labelText: "مُلصَق", }, teamScreen: { - name: 'فرق', - cardTotalTimeLabel: 'الوقت الكلي', - cardTodayWorkLabel: 'العمل اليوم', - cardTotalWorkLabel: 'إجمالي العمل', - inviteButton: 'يدعو', - inviteModalTitle: 'ادعُ عضوًا إلى فريقك', - inviteModalHint: 'أرسل دعوة إلى أحد أعضاء الفريق عبر البريد الإلكتروني', - inviteEmailFieldPlaceholder: 'أدخل عنوان البريد الإلكتروني', - inviteNameFieldPlaceholder: 'أدخل اسم عضو الفريق', - sendButton: 'إرسال', - createNewTeamButton: 'أنشئ فريقًا جديدًا' + name: "فرق", + cardTotalTimeLabel: "الوقت الكلي", + cardTodayWorkLabel: "العمل اليوم", + cardTotalWorkLabel: "إجمالي العمل", + inviteButton: "يدعو", + inviteModalTitle: "ادعُ عضوًا إلى فريقك", + inviteModalHint: "أرسل دعوة إلى أحد أعضاء الفريق عبر البريد الإلكتروني", + inviteEmailFieldPlaceholder: "أدخل عنوان البريد الإلكتروني", + inviteNameFieldPlaceholder: "أدخل اسم عضو الفريق", + sendButton: "إرسال", + createNewTeamButton: "أنشئ فريقًا جديدًا", + }, + taskDetailsScreen: { + characterLimitErrorTitle: "لم نتمكن من تحديث عنوان المهمة.", + characterLimitErrorDescription: "لا يمكن أن يتجاوز عنوان المهمة 255 حرفًا.", + copyTitle: "تم نسخ العنوان.", }, tasksScreen: { - name: 'مهام', - now: 'الآن', - last24hours: 'أخر 24 ساعه', - totalTimeLabel: 'الوقت الكلي', - workedTab: 'عمل', - assignedTab: 'تعيين', - unassignedTab: 'غير معين', - createTaskButton: 'إنشاء مهمة', - assignTaskButton: 'تعيين مهمة', - createButton: 'خلق', - assignButton: 'تعيين', - resendInvitation: 'اعادة ارسال الدعوة', - editTaskLabel: 'تحرير المهمة', - unassignTaskLabel: 'إلغاء تعيين المهمة', - unMakeManager: 'إلغاء إنشاء مدير', - makeManager: 'جعل مديرا', - remove: 'يزيل', - filter: 'منقي', - apply: 'يتقدم', - reset: 'إعادة ضبط' + name: "مهام", + now: "الآن", + last24hours: "أخر 24 ساعه", + totalTimeLabel: "الوقت الكلي", + workedTab: "عمل", + assignedTab: "تعيين", + unassignedTab: "غير معين", + createTaskButton: "إنشاء مهمة", + assignTaskButton: "تعيين مهمة", + createButton: "خلق", + assignButton: "تعيين", + resendInvitation: "اعادة ارسال الدعوة", + editTaskLabel: "تحرير المهمة", + unassignTaskLabel: "إلغاء تعيين المهمة", + unMakeManager: "إلغاء إنشاء مدير", + makeManager: "جعل مديرا", + remove: "يزيل", + filter: "منقي", + apply: "يتقدم", + reset: "إعادة ضبط", }, noTeamScreen: { - createYourTeam: 'Create your own team or join existed', - hintMessage: 'Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.' + createYourTeam: "Create your own team or join existed", + hintMessage: "Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.", }, settingScreen: { - name: 'Settings', + name: "Settings", personalSection: { - name: 'Personal', - fullName: 'Full Name', - yourContact: 'Your Contact', - yourContactHint: 'Your contact information', - themes: 'Themes', - darkModeToLight: 'Dark Mode to Light Mode', - lightModeToDark: 'Light Mode to Dark Mode', - language: 'Language', - changeAvatar: 'Change Avatar', - timeZone: 'Time Zone', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - removeAccount: 'Remove Account', - removeAccountHint: 'Account will be removed from all teams, except where you are the only manager', - deleteAccount: 'Delete Account', - deleteAccountHint: 'Your account will be deleted permanently with remolving from all teams', - detect: 'Detect' + name: "Personal", + fullName: "Full Name", + yourContact: "Your Contact", + yourContactHint: "Your contact information", + themes: "Themes", + darkModeToLight: "Dark Mode to Light Mode", + lightModeToDark: "Light Mode to Dark Mode", + language: "Language", + changeAvatar: "Change Avatar", + timeZone: "Time Zone", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + removeAccount: "Remove Account", + removeAccountHint: + "Account will be removed from all teams, except where you are the only manager", + deleteAccount: "Delete Account", + deleteAccountHint: + "Your account will be deleted permanently with remolving from all teams", + detect: "Detect", }, teamSection: { - name: 'Team', - teamName: 'Team Name', - timeTracking: 'Time Tracking', - timeTrackingHint: 'Enable time tracking', - taskStatuses: 'Task Statuses', - taskPriorities: 'Task Priorities', - taskSizes: 'Task Sizes', - taskLabel: 'Task Label', - changeLogo: 'Change Logo', - teamRole: 'Manager Member & Role', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - transferOwnership: 'Transfer Ownership', - transferOwnershipHint: 'Transfer full ownership of team to another user', - removeTeam: 'Remove Team', - removeTeamHint: 'Team will be completely removed for the system and team members lost access', - quitTeam: 'Quit the team', - quitTeamHint: 'You are about to quit the team', - areYouSure: 'Are you sure ?', + name: "Team", + teamName: "Team Name", + timeTracking: "Time Tracking", + timeTrackingHint: "Enable time tracking", + taskStatuses: "Task Statuses", + taskPriorities: "Task Priorities", + taskSizes: "Task Sizes", + taskLabel: "Task Label", + changeLogo: "Change Logo", + teamRole: "Manager Member & Role", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + transferOwnership: "Transfer Ownership", + transferOwnershipHint: "Transfer full ownership of team to another user", + removeTeam: "Remove Team", + removeTeamHint: + "Team will be completely removed for the system and team members lost access", + quitTeam: "Quit the team", + quitTeamHint: "You are about to quit the team", + areYouSure: "Are you sure ?", changeTeamName: { - mainTitle: 'Change Team Name', - inputPlaceholder: 'Team Name' - } + mainTitle: "Change Team Name", + inputPlaceholder: "Team Name", + }, }, - dangerZone: 'Danger Zone', - modalChangeLanguageTitle: 'Change Language', + dangerZone: "Danger Zone", + modalChangeLanguageTitle: "Change Language", languages: { - english: 'English ( United States )', - french: 'French ( France )', - arabic: 'Arabic', - russian: 'Russian', - bulgarian: 'Bulgarian', - spanish: 'Spanish', - korean: 'Korean', - hebrew: 'Hebrew' + english: "English ( United States )", + french: "French ( France )", + arabic: "Arabic", + russian: "Russian", + bulgarian: "Bulgarian", + spanish: "Spanish", + korean: "Korean", + hebrew: "Hebrew", }, statusScreen: { - mainTitle: 'Task Statuses', - statuses: 'Statuses', - listStatuses: 'List of Statuses', - noActiveStatuses: 'There are no active statuses', - createStatusButton: 'Create new status', - createNewStatusText: 'Create New Status', - statusNamePlaceholder: 'Status Name', - statusIconPlaceholder: 'Choose Icon', - statusColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Statuses", + statuses: "Statuses", + listStatuses: "List of Statuses", + noActiveStatuses: "There are no active statuses", + createStatusButton: "Create new status", + createNewStatusText: "Create New Status", + statusNamePlaceholder: "Status Name", + statusIconPlaceholder: "Choose Icon", + statusColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, priorityScreen: { - mainTitle: 'Task Priorities', - priorities: 'Priorities', - listPriorities: 'List of Priorities', - noActivePriorities: 'There are no active priorities', - createPriorityButton: 'Create new priority', - createNewPriorityText: 'Create New Priority', - priorityNamePlaceholder: 'Priority Name', - priorityIconPlaceholder: 'Search Icon', - priorityColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Priorities", + priorities: "Priorities", + listPriorities: "List of Priorities", + noActivePriorities: "There are no active priorities", + createPriorityButton: "Create new priority", + createNewPriorityText: "Create New Priority", + priorityNamePlaceholder: "Priority Name", + priorityIconPlaceholder: "Search Icon", + priorityColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, labelScreen: { - mainTitle: 'Task Labels', - listLabels: 'List of Labels', - labels: 'Labels', - noActiveLabels: 'There are no active labels', - createLabelButton: 'Create new label', - createNewLabelText: 'Create New Labels', - labelNamePlaceholder: 'Labels Name', - labelIconPlaceholder: 'Choose Icon', - labelColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Labels", + listLabels: "List of Labels", + labels: "Labels", + noActiveLabels: "There are no active labels", + createLabelButton: "Create new label", + createNewLabelText: "Create New Labels", + labelNamePlaceholder: "Labels Name", + labelIconPlaceholder: "Choose Icon", + labelColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, sizeScreen: { - mainTitle: 'Task Sizes', - sizes: 'Sizes', - listSizes: 'List of Sizes', - noActiveSizes: 'There are no active sizes', - createSizeButton: 'Create new size', - createNewSizeText: 'Create New Sizes', - sizeNamePlaceholder: 'Size Name', - sizeIconPlaceholder: 'Choose Icon', - sizeColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Sizes", + sizes: "Sizes", + listSizes: "List of Sizes", + noActiveSizes: "There are no active sizes", + createSizeButton: "Create new size", + createNewSizeText: "Create New Sizes", + sizeNamePlaceholder: "Size Name", + sizeIconPlaceholder: "Choose Icon", + sizeColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, membersSettingsScreen: { - mainTitle: 'الأعضاء والأدوار' + mainTitle: "الأعضاء والأدوار", }, changeFullName: { - firstNamePlaceholder: 'First Name', - lastNamePlaholder: 'Last Name', - mainTitle: 'Change Full Name' + firstNamePlaceholder: "First Name", + lastNamePlaholder: "Last Name", + mainTitle: "Change Full Name", }, changeAvatar: { - recentPictures: 'Recent Pictures', - recentFiles: 'Recent files', - selectFromGalery: 'Select from galery', - selectFromFiles: 'Select from Files', - continueButton: 'Continue', - logoDeleteConfirmation: 'Are you sure you want to delete the logo?', - avatarDeleteConfirmation: 'Are you sure you want to delete the avatar?' + recentPictures: "Recent Pictures", + recentFiles: "Recent files", + selectFromGalery: "Select from galery", + selectFromFiles: "Select from Files", + continueButton: "Continue", + logoDeleteConfirmation: "Are you sure you want to delete the logo?", + avatarDeleteConfirmation: "Are you sure you want to delete the avatar?", }, contact: { - mainTitle: 'Change Your Contact', - emailPlaceholder: 'Email Address', - phonePlaceholder: 'Phone Number', - emailNotValid: 'Please provide a valid Email', - phoneNotValid: 'Please provide a valid Phone Number' + mainTitle: "Change Your Contact", + emailPlaceholder: "Email Address", + phonePlaceholder: "Phone Number", + emailNotValid: "Please provide a valid Email", + phoneNotValid: "Please provide a valid Phone Number", }, changeTimezone: { - mainTitle: 'Change Time Zone', - selectTimezoneTitle: 'Select Time Zone' + mainTitle: "Change Time Zone", + selectTimezoneTitle: "Select Time Zone", }, changeLanguage: { - mainTitle: 'Change Language', - selectLanguageTitle: 'Select Languanges' - } + mainTitle: "Change Language", + selectLanguageTitle: "Select Languanges", + }, }, hamburgerMenu: { - darkMode: 'الوضع الداكن' + darkMode: "الوضع الداكن", }, inviteModal: { - accept: 'يقبل', - reject: 'يرفض', - inviteHint: 'لقد تمت دعوتك للانضمام' + accept: "يقبل", + reject: "يرفض", + inviteHint: "لقد تمت دعوتك للانضمام", }, accountVerificationModal: { - verify: 'يؤكد' + verify: "يؤكد", }, demoNavigator: { - componentsTab: 'عناصر', - debugTab: 'تصحيح', - communityTab: 'واصل اجتماعي', - podcastListTab: 'البودكاست' + componentsTab: "عناصر", + debugTab: "تصحيح", + communityTab: "واصل اجتماعي", + podcastListTab: "البودكاست", }, demoCommunityScreen: { - title: 'تواصل مع المجتمع', - tagLine: 'قم بالتوصيل لمنتدى Infinite Red الذي يضم تفاعل المهندسين المحلّيين ورفع مستوى تطوير تطبيقك معنا', - joinUsOnSlackTitle: 'انضم الينا على Slack', + title: "تواصل مع المجتمع", + tagLine: + "قم بالتوصيل لمنتدى Infinite Red الذي يضم تفاعل المهندسين المحلّيين ورفع مستوى تطوير تطبيقك معنا", + joinUsOnSlackTitle: "انضم الينا على Slack", joinUsOnSlack: - 'هل ترغب في وجود مكان للتواصل مع مهندسي React Native حول العالم؟ الانضمام الى المحادثة في سلاك المجتمع الاحمر اللانهائي! مجتمعناالمتنامي هو مساحةآمنة لطرح الاسئلة والتعلم من الآخرين وتنمية شبكتك.', - joinSlackLink: 'انضم الي مجتمع Slack', - makeIgniteEvenBetterTitle: 'اجعل Ignite افضل', + "هل ترغب في وجود مكان للتواصل مع مهندسي React Native حول العالم؟ الانضمام الى المحادثة في سلاك المجتمع الاحمر اللانهائي! مجتمعناالمتنامي هو مساحةآمنة لطرح الاسئلة والتعلم من الآخرين وتنمية شبكتك.", + joinSlackLink: "انضم الي مجتمع Slack", + makeIgniteEvenBetterTitle: "اجعل Ignite افضل", makeIgniteEvenBetter: - 'هل لديك فكرة لجعل Ignite افضل؟ نحن سعداء لسماع ذلك! نحن نبحث دائماً عن الآخرين الذين يرغبون في مساعدتنا في بناء افضل الادوات المحلية التفاعلية المتوفرة هناك. انضم الينا عبر GitHub للانضمام الينا في بناء مستقبل Ignite', - contributeToIgniteLink: 'ساهم في Ignite', - theLatestInReactNativeTitle: 'الاحدث في React Native', - theLatestInReactNative: 'نخن هنا لنبقيك محدثاً على جميع React Native التي تعرضها', - reactNativeRadioLink: 'راديو React Native', - reactNativeNewsletterLink: 'نشرة اخبار React Native', - reactNativeLiveLink: 'مباشر React Native', - chainReactConferenceLink: 'مؤتمر Chain React', - hireUsTitle: 'قم بتوظيف Infinite Red لمشروعك القادم', - hireUs: 'سواء كان الامر يتعلّق بتشغيل مشروع كامل او اعداد الفرق بسرعة من خلال التدريب العلمي لدينا، يمكن ان يساعد Infinite Red اللامتناهي في اي مشروع محلي يتفاعل معه.', - hireUsLink: 'ارسل لنا رسالة' + "هل لديك فكرة لجعل Ignite افضل؟ نحن سعداء لسماع ذلك! نحن نبحث دائماً عن الآخرين الذين يرغبون في مساعدتنا في بناء افضل الادوات المحلية التفاعلية المتوفرة هناك. انضم الينا عبر GitHub للانضمام الينا في بناء مستقبل Ignite", + contributeToIgniteLink: "ساهم في Ignite", + theLatestInReactNativeTitle: "الاحدث في React Native", + theLatestInReactNative: "نخن هنا لنبقيك محدثاً على جميع React Native التي تعرضها", + reactNativeRadioLink: "راديو React Native", + reactNativeNewsletterLink: "نشرة اخبار React Native", + reactNativeLiveLink: "مباشر React Native", + chainReactConferenceLink: "مؤتمر Chain React", + hireUsTitle: "قم بتوظيف Infinite Red لمشروعك القادم", + hireUs: "سواء كان الامر يتعلّق بتشغيل مشروع كامل او اعداد الفرق بسرعة من خلال التدريب العلمي لدينا، يمكن ان يساعد Infinite Red اللامتناهي في اي مشروع محلي يتفاعل معه.", + hireUsLink: "ارسل لنا رسالة", }, demoShowroomScreen: { - jumpStart: 'مكونات او عناصر لبدء مشروعك', + jumpStart: "مكونات او عناصر لبدء مشروعك", lorem2Sentences: - 'عامل الناس بأخلاقك لا بأخلاقهم. عامل الناس بأخلاقك لا بأخلاقهم. عامل الناس بأخلاقك لا بأخلاقهم', - demoHeaderTxExample: 'ياي', - demoViaTxProp: 'عبر `tx` Prop', - demoViaSpecifiedTxProp: 'Prop `{{prop}}Tx` عبر' + "عامل الناس بأخلاقك لا بأخلاقهم. عامل الناس بأخلاقك لا بأخلاقهم. عامل الناس بأخلاقك لا بأخلاقهم", + demoHeaderTxExample: "ياي", + demoViaTxProp: "عبر `tx` Prop", + demoViaSpecifiedTxProp: "Prop `{{prop}}Tx` عبر", }, demoDebugScreen: { - howTo: 'كيف', - title: 'التصحيح', - tagLine: 'مبروك، لديك نموذج اصلي متقدم للغاية للتفاعل هنا. الاستفادة من هذه النمذجة', - reactotron: 'Reactotron ارسل إلى', - reportBugs: 'الابلاغ عن اخطاء', - demoList: 'قائمة تجريبية', - demoPodcastList: 'قائمة البودكاست التجريبي', + howTo: "كيف", + title: "التصحيح", + tagLine: "مبروك، لديك نموذج اصلي متقدم للغاية للتفاعل هنا. الاستفادة من هذه النمذجة", + reactotron: "Reactotron ارسل إلى", + reportBugs: "الابلاغ عن اخطاء", + demoList: "قائمة تجريبية", + demoPodcastList: "قائمة البودكاست التجريبي", androidReactotronHint: - 'اذا لم ينجح ذللك، فتأكد من تشغيل تطبيق الحاسوب الخاص Reactotron، وقم بتشغيل عكس adb tcp:9090 \ntcp:9090 من جهازك الطرفي ، واعد تحميل التطبيق', - iosReactotronHint: 'اذا لم ينجح ذلك، فتأكد من تشغيل تطبيق الحاسوب الخاص ب Reactotron وأعد تحميل التطبيق', - macosReactotronHint: 'اذا لم ينجح ذلك، فتأكد من تشغيل الحاسوب ب Reactotron وأعد تحميل التطبيق', - webReactotronHint: 'اذا لم ينجح ذلك، فتأكد من تشغيل الحاسوب ب Reactotron وأعد تحميل التطبيق', - windowsReactotronHint: 'اذا لم ينجح ذلك، فتأكد من تشغيل الحاسوب ب Reactotron وأعد تحميل التطبيق' + "اذا لم ينجح ذللك، فتأكد من تشغيل تطبيق الحاسوب الخاص Reactotron، وقم بتشغيل عكس adb tcp:9090 \ntcp:9090 من جهازك الطرفي ، واعد تحميل التطبيق", + iosReactotronHint: + "اذا لم ينجح ذلك، فتأكد من تشغيل تطبيق الحاسوب الخاص ب Reactotron وأعد تحميل التطبيق", + macosReactotronHint: + "اذا لم ينجح ذلك، فتأكد من تشغيل الحاسوب ب Reactotron وأعد تحميل التطبيق", + webReactotronHint: + "اذا لم ينجح ذلك، فتأكد من تشغيل الحاسوب ب Reactotron وأعد تحميل التطبيق", + windowsReactotronHint: + "اذا لم ينجح ذلك، فتأكد من تشغيل الحاسوب ب Reactotron وأعد تحميل التطبيق", }, demoPodcastListScreen: { - title: 'حلقات إذاعية React Native', - onlyFavorites: 'المفضلة فقط', - favoriteButton: 'المفضل', - unfavoriteButton: 'غير مفضل', + title: "حلقات إذاعية React Native", + onlyFavorites: "المفضلة فقط", + favoriteButton: "المفضل", + unfavoriteButton: "غير مفضل", accessibility: { - cardHint: 'انقر مرّتين للاستماع على الحلقة. انقر مرّتين وانتظر لتفعيل {{action}} هذه الحلقة.', - switch: 'قم بالتبديل لاظهار المفضّلة فقط.', - favoriteAction: 'تبديل المفضلة', - favoriteIcon: 'الحلقة الغير مفضّلة', - unfavoriteIcon: 'الحلقة المفضّلة', - publishLabel: 'نشرت {{date}}', - durationLabel: 'المدّة: {{hours}} ساعات {{minutes}} دقائق {{seconds}} ثواني' + cardHint: + "انقر مرّتين للاستماع على الحلقة. انقر مرّتين وانتظر لتفعيل {{action}} هذه الحلقة.", + switch: "قم بالتبديل لاظهار المفضّلة فقط.", + favoriteAction: "تبديل المفضلة", + favoriteIcon: "الحلقة الغير مفضّلة", + unfavoriteIcon: "الحلقة المفضّلة", + publishLabel: "نشرت {{date}}", + durationLabel: "المدّة: {{hours}} ساعات {{minutes}} دقائق {{seconds}} ثواني", }, noFavoritesEmptyState: { - heading: 'هذا يبدو فارغاً بعض الشيء.', - content: 'لم تتم اضافة اي مفضلات حتى الان. اضغط على القلب في إحدى الحلقات لإضافته الى المفضلة.' - } - } + heading: "هذا يبدو فارغاً بعض الشيء.", + content: + "لم تتم اضافة اي مفضلات حتى الان. اضغط على القلب في إحدى الحلقات لإضافته الى المفضلة.", + }, + }, // @demo remove-block-end -}; +} -export default ar; +export default ar diff --git a/apps/mobile/app/i18n/bg.ts b/apps/mobile/app/i18n/bg.ts index 5e2d6d5d3..9f1b1f4b3 100644 --- a/apps/mobile/app/i18n/bg.ts +++ b/apps/mobile/app/i18n/bg.ts @@ -1,335 +1,349 @@ const bg = { common: { - ok: 'OK!', - cancel: 'Cancel', - back: 'Back', - loading: 'Loading', - save: 'Save', - edit: 'Edit', - confirm: 'Confirm', - discard: 'Discard', - logOut: 'Log Out' // @demo remove-current-line + ok: "OK!", + cancel: "Cancel", + back: "Back", + loading: "Loading", + save: "Save", + edit: "Edit", + confirm: "Confirm", + discard: "Discard", + logOut: "Log Out", // @demo remove-current-line }, welcomeScreen: { postscript: "psst — This probably isn't what your app looks like. (Unless your designer handed you these screens, and in that case, ship it!)", - readyForLaunch: 'Your app, almost ready for launch!', - exciting: '(ohh, this is exciting!)', - letsGo: "Let's go!" // @demo remove-current-line + readyForLaunch: "Your app, almost ready for launch!", + exciting: "(ohh, this is exciting!)", + letsGo: "Let's go!", // @demo remove-current-line }, errorScreen: { - title: 'Something went wrong!', + title: "Something went wrong!", friendlySubtitle: "This is the screen that your users will see in production when an error is thrown. You'll want to customize this message (located in `app/i18n/en.ts`) and probably the layout as well (`app/screens/ErrorScreen`). If you want to remove this entirely, check `app/app.tsx` for the component.", - reset: 'RESET APP', - traceTitle: 'Error from %{name} stack' // @demo remove-current-line + reset: "RESET APP", + traceTitle: "Error from %{name} stack", // @demo remove-current-line }, emptyStateComponent: { generic: { - heading: 'So empty... so sad', - content: 'No data found yet. Try clicking the button to refresh or reload the app.', - button: "Let's try this again" - } + heading: "So empty... so sad", + content: "No data found yet. Try clicking the button to refresh or reload the app.", + button: "Let's try this again", + }, }, // @demo remove-block-start errors: { - invalidEmail: 'Invalid email address.' + invalidEmail: "Invalid email address.", }, loginScreen: { - name: 'Login', - enterDetails: 'Create New Team', - enterDetails2: 'Join Existed Team', - enterDetails3: 'Workspace', - hintDetails: 'Please enter your team details to create a new team.', - hintDetails2: 'Please enter email and invitation code to join existing team.', - hintDetails3: 'The email associated with the next workspaces', - joinTeam: 'Join Team', - joinExistTeam: 'Joining existing team?', - joinTeamHint: 'Enter the invitation code we sent to your email', - step1Title: 'Select Team Name', - step2Title: 'Provide More Details', - step3Title: 'Invitation code', - confirmDetails: 'Please check your email for confirm code', - confirmDetails2: 'Please enter the invitation code we sent to your Email', - sendCode: 'send Code', - codeNotReceived: 'Didn’t recieve code ?Re', - inviteStepLabel: 'Provide your Email', - emailFieldLabel: 'Your Email', - teamNameFieldLabel: 'Team Name', - inviteCodeFieldLabel: 'Input invitation code', - selectWorkspaceFieldLabel: 'Select Workspace', - emailFieldPlaceholder: 'Enter your email address', - teamNameFieldPlaceholder: 'Please Enter your team name', - userNameFieldPlaceholder: 'Enter your name', - tapContinue: 'Continue', - tapJoin: 'Join', - createTeam: 'Create Team' + name: "Login", + enterDetails: "Create New Team", + enterDetails2: "Join Existed Team", + enterDetails3: "Workspace", + hintDetails: "Please enter your team details to create a new team.", + hintDetails2: "Please enter email and invitation code to join existing team.", + hintDetails3: "The email associated with the next workspaces", + joinTeam: "Join Team", + joinExistTeam: "Joining existing team?", + joinTeamHint: "Enter the invitation code we sent to your email", + step1Title: "Select Team Name", + step2Title: "Provide More Details", + step3Title: "Invitation code", + confirmDetails: "Please check your email for confirm code", + confirmDetails2: "Please enter the invitation code we sent to your Email", + sendCode: "send Code", + codeNotReceived: "Didn’t recieve code ?Re", + inviteStepLabel: "Provide your Email", + emailFieldLabel: "Your Email", + teamNameFieldLabel: "Team Name", + inviteCodeFieldLabel: "Input invitation code", + selectWorkspaceFieldLabel: "Select Workspace", + emailFieldPlaceholder: "Enter your email address", + teamNameFieldPlaceholder: "Please Enter your team name", + userNameFieldPlaceholder: "Enter your name", + tapContinue: "Continue", + tapJoin: "Join", + createTeam: "Create Team", }, myWorkScreen: { - name: 'My Work', - estimateLabel: 'Estimate', - statusText: 'Status', - taskFieldPlaceholder: 'What you working on', - sizeText: 'Sizes', - prioritiesText: 'Priorities', - tabCreateTask: 'Create New Task', - labelText: 'Label' + name: "My Work", + estimateLabel: "Estimate", + statusText: "Status", + taskFieldPlaceholder: "What you working on", + sizeText: "Sizes", + prioritiesText: "Priorities", + tabCreateTask: "Create New Task", + labelText: "Label", }, teamScreen: { - name: 'Teams', - cardTotalTimeLabel: 'Total time', - cardTodayWorkLabel: 'Today work', - cardTotalWorkLabel: 'Total work', - inviteButton: 'Invite', - inviteModalTitle: 'Invite member to your team', - inviteModalHint: 'Send a invitation to a team member by email', - inviteEmailFieldPlaceholder: 'Input email address', - inviteNameFieldPlaceholder: 'Input team member name', - sendButton: 'Create' + name: "Teams", + cardTotalTimeLabel: "Total time", + cardTodayWorkLabel: "Today work", + cardTotalWorkLabel: "Total work", + inviteButton: "Invite", + inviteModalTitle: "Invite member to your team", + inviteModalHint: "Send a invitation to a team member by email", + inviteEmailFieldPlaceholder: "Input email address", + inviteNameFieldPlaceholder: "Input team member name", + sendButton: "Create", + }, + taskDetailsScreen: { + characterLimitErrorTitle: "We couldn't update Task Title.", + characterLimitErrorDescription: "Task title can't exceed 255 characters.", + copyTitle: "Title Copied.", }, tasksScreen: { - name: 'Tasks', - now: 'Now', - last24hours: 'Last 24 hours', - totalTimeLabel: 'Total Time', - workedTab: 'Worked', - assignedTab: 'Assigned', - unassignedTab: 'Unassigned', - createTaskButton: 'Create Task', - assignTaskButton: 'Assign Task', - createButton: 'Create', - assignButton: 'Assign', - resendInvitation: 'Resend Invitation', - editTaskLabel: 'Edit Task', - unassignTaskLabel: 'Unassign Task', - unMakeManager: 'Unmake a Manager', - makeManager: 'Make a Manager', - remove: 'Remove', - filter: 'Filter', - apply: 'Apply', - reset: 'Reset' + name: "Tasks", + now: "Now", + last24hours: "Last 24 hours", + totalTimeLabel: "Total Time", + workedTab: "Worked", + assignedTab: "Assigned", + unassignedTab: "Unassigned", + createTaskButton: "Create Task", + assignTaskButton: "Assign Task", + createButton: "Create", + assignButton: "Assign", + resendInvitation: "Resend Invitation", + editTaskLabel: "Edit Task", + unassignTaskLabel: "Unassign Task", + unMakeManager: "Unmake a Manager", + makeManager: "Make a Manager", + remove: "Remove", + filter: "Filter", + apply: "Apply", + reset: "Reset", }, noTeamScreen: { - createYourTeam: 'Create your own team or join existed', - hintMessage: 'Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.' + createYourTeam: "Create your own team or join existed", + hintMessage: "Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.", }, settingScreen: { - name: 'Settings', + name: "Settings", personalSection: { - name: 'Personal', - fullName: 'Full Name', - yourContact: 'Your Contact', - yourContactHint: 'Your contact information', - themes: 'Themes', - darkModeToLight: 'Dark Mode to Light Mode', - lightModeToDark: 'Light Mode to Dark Mode', - language: 'Language', - changeAvatar: 'Change Avatar', - timeZone: 'Time Zone', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - removeAccount: 'Remove Account', - removeAccountHint: 'Account will be removed from all teams, except where you are the only manager', - deleteAccount: 'Delete Account', - deleteAccountHint: 'Your account will be deleted permanently with remolving from all teams', - detect: 'Detect' + name: "Personal", + fullName: "Full Name", + yourContact: "Your Contact", + yourContactHint: "Your contact information", + themes: "Themes", + darkModeToLight: "Dark Mode to Light Mode", + lightModeToDark: "Light Mode to Dark Mode", + language: "Language", + changeAvatar: "Change Avatar", + timeZone: "Time Zone", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + removeAccount: "Remove Account", + removeAccountHint: + "Account will be removed from all teams, except where you are the only manager", + deleteAccount: "Delete Account", + deleteAccountHint: + "Your account will be deleted permanently with remolving from all teams", + detect: "Detect", }, teamSection: { - name: 'Team', - teamName: 'Team Name', - timeTracking: 'Time Tracking', - timeTrackingHint: 'Enable time tracking', - taskStatuses: 'Task Statuses', - taskPriorities: 'Task Priorities', - taskSizes: 'Task Sizes', - taskLabel: 'Task Label', - changeLogo: 'Change Logo', - teamRole: 'Manager Member & Role', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - transferOwnership: 'Transfer Ownership', - transferOwnershipHint: 'Transfer full ownership of team to another user', - removeTeam: 'Remove Team', - removeTeamHint: 'Team will be completely removed for the system and team members lost access', - quitTeam: 'Quit the team', - quitTeamHint: 'You are about to quit the team', - areYouSure: 'Are you sure ?', + name: "Team", + teamName: "Team Name", + timeTracking: "Time Tracking", + timeTrackingHint: "Enable time tracking", + taskStatuses: "Task Statuses", + taskPriorities: "Task Priorities", + taskSizes: "Task Sizes", + taskLabel: "Task Label", + changeLogo: "Change Logo", + teamRole: "Manager Member & Role", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + transferOwnership: "Transfer Ownership", + transferOwnershipHint: "Transfer full ownership of team to another user", + removeTeam: "Remove Team", + removeTeamHint: + "Team will be completely removed for the system and team members lost access", + quitTeam: "Quit the team", + quitTeamHint: "You are about to quit the team", + areYouSure: "Are you sure ?", changeTeamName: { - mainTitle: 'Change Team Name', - inputPlaceholder: 'Team Name' - } + mainTitle: "Change Team Name", + inputPlaceholder: "Team Name", + }, }, - dangerZone: 'Danger Zone', - modalChangeLanguageTitle: 'Change Language', + dangerZone: "Danger Zone", + modalChangeLanguageTitle: "Change Language", languages: { - english: 'English ( United States )', - french: 'French ( France )', - arabic: 'Arabic', - russian: 'Russian', - bulgarian: 'Bulgarian', - spanish: 'Spanish', - korean: 'Korean', - hebrew: 'Hebrew' + english: "English ( United States )", + french: "French ( France )", + arabic: "Arabic", + russian: "Russian", + bulgarian: "Bulgarian", + spanish: "Spanish", + korean: "Korean", + hebrew: "Hebrew", }, statusScreen: { - mainTitle: 'Task Statuses', - listStatuses: 'List of Statuses', - noActiveStatuses: 'There are no active statuses', - createStatusButton: 'Create new status', - createNewStatusText: 'Create New Status', - statusNamePlaceholder: 'Status Name', - statusIconPlaceholder: 'Choose Icon', - statusColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Statuses", + listStatuses: "List of Statuses", + noActiveStatuses: "There are no active statuses", + createStatusButton: "Create new status", + createNewStatusText: "Create New Status", + statusNamePlaceholder: "Status Name", + statusIconPlaceholder: "Choose Icon", + statusColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, priorityScreen: { - mainTitle: 'Task Priorities', - priorities: 'Priorities', - listPriorities: 'List of Priorities', - noActivePriorities: 'There are no active priorities', - createPriorityButton: 'Create new priority', - createNewPriorityText: 'Create New Priority', - priorityNamePlaceholder: 'Priority Name', - priorityIconPlaceholder: 'Search Icon', - priorityColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Priorities", + priorities: "Priorities", + listPriorities: "List of Priorities", + noActivePriorities: "There are no active priorities", + createPriorityButton: "Create new priority", + createNewPriorityText: "Create New Priority", + priorityNamePlaceholder: "Priority Name", + priorityIconPlaceholder: "Search Icon", + priorityColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, labelScreen: { - mainTitle: 'Task Labels', - listLabels: 'List of Labels', - noActiveLabels: 'There are no active labels', - createLabelButton: 'Create new label', - createNewLabelText: 'Create New Labels', - labelNamePlaceholder: 'Labels Name', - labelIconPlaceholder: 'Choose Icon', - labelColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Labels", + listLabels: "List of Labels", + noActiveLabels: "There are no active labels", + createLabelButton: "Create new label", + createNewLabelText: "Create New Labels", + labelNamePlaceholder: "Labels Name", + labelIconPlaceholder: "Choose Icon", + labelColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, sizeScreen: { - mainTitle: 'Task Sizes', - listSizes: 'List of Sizes', - noActiveSizes: 'There are no active sizes', - createSizeButton: 'Create new size', - createNewSizeText: 'Create New Sizes', - sizeNamePlaceholder: 'Size Name', - sizeIconPlaceholder: 'Choose Icon', - sizeColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Sizes", + listSizes: "List of Sizes", + noActiveSizes: "There are no active sizes", + createSizeButton: "Create new size", + createNewSizeText: "Create New Sizes", + sizeNamePlaceholder: "Size Name", + sizeIconPlaceholder: "Choose Icon", + sizeColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, membersSettingsScreen: { - mainTitle: 'Members & Roles' + mainTitle: "Members & Roles", }, changeFullName: { - firstNamePlaceholder: 'First Name', - lastNamePlaholder: 'Last Name', - mainTitle: 'Change Full Name' + firstNamePlaceholder: "First Name", + lastNamePlaholder: "Last Name", + mainTitle: "Change Full Name", }, changeAvatar: { - recentPictures: 'Recent Pictures', - recentFiles: 'Recent files', - selectFromGalery: 'Select from galery', - selectFromFiles: 'Select from Files', - continueButton: 'Continue', - logoDeleteConfirmation: 'Are you sure you want to delete the logo?', - avatarDeleteConfirmation: 'Are you sure you want to delete the avatar?' + recentPictures: "Recent Pictures", + recentFiles: "Recent files", + selectFromGalery: "Select from galery", + selectFromFiles: "Select from Files", + continueButton: "Continue", + logoDeleteConfirmation: "Are you sure you want to delete the logo?", + avatarDeleteConfirmation: "Are you sure you want to delete the avatar?", }, contact: { - mainTitle: 'Change Your Contact', - emailPlaceholder: 'Email Address', - phonePlaceholder: 'Phone Number', - emailNotValid: 'Please provide a valid Email', - phoneNotValid: 'Please provide a valid Phone Number' - } + mainTitle: "Change Your Contact", + emailPlaceholder: "Email Address", + phonePlaceholder: "Phone Number", + emailNotValid: "Please provide a valid Email", + phoneNotValid: "Please provide a valid Phone Number", + }, }, inviteModal: { - accept: 'Accept', - reject: 'Reject', - inviteHint: 'You have been invited to join' + accept: "Accept", + reject: "Reject", + inviteHint: "You have been invited to join", }, accountVerificationModal: { - verify: 'Verify' + verify: "Verify", }, demoNavigator: { - componentsTab: 'Components', - debugTab: 'Debug', - communityTab: 'Community', - podcastListTab: 'Podcast' + componentsTab: "Components", + debugTab: "Debug", + communityTab: "Community", + podcastListTab: "Podcast", }, demoCommunityScreen: { - title: 'Connect with the community', + title: "Connect with the community", tagLine: "Plug in to Infinite Red's community of React Native engineers and level up your app development with us!", - joinUsOnSlackTitle: 'Join us on Slack', + joinUsOnSlackTitle: "Join us on Slack", joinUsOnSlack: - 'Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.', - joinSlackLink: 'Join the Slack Community', - makeIgniteEvenBetterTitle: 'Make Ignite even better', + "Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.", + joinSlackLink: "Join the Slack Community", + makeIgniteEvenBetterTitle: "Make Ignite even better", makeIgniteEvenBetter: "Have an idea to make Ignite even better? We're happy to hear that! We're always looking for others who want to help us build the best React Native tooling out there. Join us over on GitHub to join us in building the future of Ignite.", - contributeToIgniteLink: 'Contribute to Ignite', - theLatestInReactNativeTitle: 'The latest in React Native', + contributeToIgniteLink: "Contribute to Ignite", + theLatestInReactNativeTitle: "The latest in React Native", theLatestInReactNative: "We're here to keep you current on all React Native has to offer.", - reactNativeRadioLink: 'React Native Radio', - reactNativeNewsletterLink: 'React Native Newsletter', - reactNativeLiveLink: 'React Native Live', - chainReactConferenceLink: 'Chain React Conference', - hireUsTitle: 'Hire Infinite Red for your next project', + reactNativeRadioLink: "React Native Radio", + reactNativeNewsletterLink: "React Native Newsletter", + reactNativeLiveLink: "React Native Live", + chainReactConferenceLink: "Chain React Conference", + hireUsTitle: "Hire Infinite Red for your next project", hireUs: "Whether it's running a full project or getting teams up to speed with our hands-on training, Infinite Red can help with just about any React Native project.", - hireUsLink: 'Send us a message' + hireUsLink: "Send us a message", }, demoShowroomScreen: { - jumpStart: 'Components to jump start your project!', + jumpStart: "Components to jump start your project!", lorem2Sentences: - 'Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.', - demoHeaderTxExample: 'Yay', - demoViaTxProp: 'Via `tx` Prop', - demoViaSpecifiedTxProp: 'Via `{{prop}}Tx` Prop' + "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.", + demoHeaderTxExample: "Yay", + demoViaTxProp: "Via `tx` Prop", + demoViaSpecifiedTxProp: "Via `{{prop}}Tx` Prop", }, demoDebugScreen: { - howTo: 'HOW TO', - title: 'Debug', + howTo: "HOW TO", + title: "Debug", tagLine: "Congratulations, you've got a very advanced React Native app template here. Take advantage of this boilerplate!", - reactotron: 'Send to Reactotron', - reportBugs: 'Report Bugs', - demoList: 'Demo List', - demoPodcastList: 'Demo Podcast List', + reactotron: "Send to Reactotron", + reportBugs: "Report Bugs", + demoList: "Demo List", + demoPodcastList: "Demo Podcast List", androidReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running, run adb reverse tcp:9090 tcp:9090 from your terminal, and reload the app.", - iosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - macosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - webReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - windowsReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app." + iosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + macosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + webReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + windowsReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", }, demoPodcastListScreen: { - title: 'React Native Radio episodes', - onlyFavorites: 'Only Show Favorites', - favoriteButton: 'Favorite', - unfavoriteButton: 'Unfavorite', + title: "React Native Radio episodes", + onlyFavorites: "Only Show Favorites", + favoriteButton: "Favorite", + unfavoriteButton: "Unfavorite", accessibility: { - cardHint: 'Double tap to listen to the episode. Double tap and hold to {{action}} this episode.', - switch: 'Switch on to only show favorites', - favoriteAction: 'Toggle Favorite', - favoriteIcon: 'Episode not favorited', - unfavoriteIcon: 'Episode favorited', - publishLabel: 'Published {{date}}', - durationLabel: 'Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds' + cardHint: + "Double tap to listen to the episode. Double tap and hold to {{action}} this episode.", + switch: "Switch on to only show favorites", + favoriteAction: "Toggle Favorite", + favoriteIcon: "Episode not favorited", + unfavoriteIcon: "Episode favorited", + publishLabel: "Published {{date}}", + durationLabel: "Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds", }, noFavoritesEmptyState: { - heading: 'This looks a bit empty', - content: 'No favorites have been added yet. Tap the heart on an episode to add it to your favorites!' - } - } + heading: "This looks a bit empty", + content: + "No favorites have been added yet. Tap the heart on an episode to add it to your favorites!", + }, + }, // @demo remove-block-end -}; +} -export default bg; -export type Translations = typeof bg; +export default bg +export type Translations = typeof bg diff --git a/apps/mobile/app/i18n/en.ts b/apps/mobile/app/i18n/en.ts index acf2e1cb9..e9a2414c8 100644 --- a/apps/mobile/app/i18n/en.ts +++ b/apps/mobile/app/i18n/en.ts @@ -1,350 +1,364 @@ const en = { common: { - ok: 'OK!', - cancel: 'Cancel', - loading: 'Loading', - edit: 'Edit', - confirm: 'Confirm', - discard: 'Discard', - back: 'Back', - save: 'Save', - logOut: 'Log Out' // @demo remove-current-line + ok: "OK!", + cancel: "Cancel", + loading: "Loading", + edit: "Edit", + confirm: "Confirm", + discard: "Discard", + back: "Back", + save: "Save", + logOut: "Log Out", // @demo remove-current-line }, welcomeScreen: { postscript: "psst — This probably isn't what your app looks like. (Unless your designer handed you these screens, and in that case, ship it!)", - readyForLaunch: 'Your app, almost ready for launch!', - exciting: '(ohh, this is exciting!)', - letsGo: "Let's go!" // @demo remove-current-line + readyForLaunch: "Your app, almost ready for launch!", + exciting: "(ohh, this is exciting!)", + letsGo: "Let's go!", // @demo remove-current-line }, errorScreen: { - title: 'Something went wrong!', + title: "Something went wrong!", friendlySubtitle: "This is the screen that your users will see in production when an error is thrown. You'll want to customize this message (located in `app/i18n/en.ts`) and probably the layout as well (`app/screens/ErrorScreen`). If you want to remove this entirely, check `app/app.tsx` for the component.", - reset: 'RESET APP', - traceTitle: 'Error from %{name} stack' // @demo remove-current-line + reset: "RESET APP", + traceTitle: "Error from %{name} stack", // @demo remove-current-line }, emptyStateComponent: { generic: { - heading: 'So empty... so sad', - content: 'No data found yet. Try clicking the button to refresh or reload the app.', - button: "Let's try this again" - } + heading: "So empty... so sad", + content: "No data found yet. Try clicking the button to refresh or reload the app.", + button: "Let's try this again", + }, }, // @demo remove-block-start errors: { - invalidEmail: 'Invalid email address.' + invalidEmail: "Invalid email address.", }, loginScreen: { - name: 'Login', - enterDetails: 'Create New Team', - enterDetails2: 'Login', - enterDetails3: 'Workspace', - hintDetails: 'Please enter your team details to create a new team.', - hintDetails2: 'Please enter email and invitation code to join existing team.', - hintDetails3: 'The email associated with the next workspaces', - joinTeam: 'Join Team', - joinExistTeam: 'Login', - joinTeamHint: 'Enter the invitation code we sent to your email', - step1Title: 'Select Team Name', - step2Title: 'Provide More Details', - step3Title: 'Invitation code', - confirmDetails: 'Please check your email for confirm code', - confirmDetails2: 'Please enter the invitation code we sent to your Email', - sendCode: 'Resend Code', - codeNotReceived: 'Didn’t recieve code ?', - inviteStepLabel: 'Enter Email', - emailFieldLabel: 'Your Email', - teamNameFieldLabel: 'Team Name', - inviteCodeFieldLabel: 'Security Code', - selectWorkspaceFieldLabel: 'Select Workspace', - emailFieldPlaceholder: 'Enter your email address', - teamNameFieldPlaceholder: 'Please Enter your team name', - userNameFieldPlaceholder: 'Enter your name', - tapContinue: 'Continue', - tapJoin: 'Join', - createTeam: 'Create Team' + name: "Login", + enterDetails: "Create New Team", + enterDetails2: "Login", + enterDetails3: "Workspace", + hintDetails: "Please enter your team details to create a new team.", + hintDetails2: "Please enter email and invitation code to join existing team.", + hintDetails3: "The email associated with the next workspaces", + joinTeam: "Join Team", + joinExistTeam: "Login", + joinTeamHint: "Enter the invitation code we sent to your email", + step1Title: "Select Team Name", + step2Title: "Provide More Details", + step3Title: "Invitation code", + confirmDetails: "Please check your email for confirm code", + confirmDetails2: "Please enter the invitation code we sent to your Email", + sendCode: "Resend Code", + codeNotReceived: "Didn’t recieve code ?", + inviteStepLabel: "Enter Email", + emailFieldLabel: "Your Email", + teamNameFieldLabel: "Team Name", + inviteCodeFieldLabel: "Security Code", + selectWorkspaceFieldLabel: "Select Workspace", + emailFieldPlaceholder: "Enter your email address", + teamNameFieldPlaceholder: "Please Enter your team name", + userNameFieldPlaceholder: "Enter your name", + tapContinue: "Continue", + tapJoin: "Join", + createTeam: "Create Team", }, myWorkScreen: { - name: 'My Work', - estimateLabel: 'Estimate', - statusText: 'Status', - taskFieldPlaceholder: 'What you working on', - sizeText: 'Sizes', - prioritiesText: 'Priorities', - tabCreateTask: 'Create New Task', - labelText: 'Label' + name: "My Work", + estimateLabel: "Estimate", + statusText: "Status", + taskFieldPlaceholder: "What you working on", + sizeText: "Sizes", + prioritiesText: "Priorities", + tabCreateTask: "Create New Task", + labelText: "Label", }, teamScreen: { - name: 'Teams', - cardTotalTimeLabel: 'Total time', - cardTodayWorkLabel: 'Today work', - cardTotalWorkLabel: 'Total work', - inviteButton: 'Invite', - inviteModalTitle: 'Invite member to your team', - inviteModalHint: 'Send a invitation to a team member by email', - inviteEmailFieldPlaceholder: 'Input email address', - inviteNameFieldPlaceholder: 'Input team member name', - sendButton: 'Create', - createNewTeamButton: 'Create new team' + name: "Teams", + cardTotalTimeLabel: "Total time", + cardTodayWorkLabel: "Today work", + cardTotalWorkLabel: "Total work", + inviteButton: "Invite", + inviteModalTitle: "Invite member to your team", + inviteModalHint: "Send a invitation to a team member by email", + inviteEmailFieldPlaceholder: "Input email address", + inviteNameFieldPlaceholder: "Input team member name", + sendButton: "Create", + createNewTeamButton: "Create new team", + }, + taskDetailsScreen: { + characterLimitErrorTitle: "We couldn't update Task Title.", + characterLimitErrorDescription: "Task title can't exceed 255 characters.", + copyTitle: "Title Copied.", }, tasksScreen: { - name: 'Tasks', - now: 'Now', - last24hours: 'Last 24 hours', - totalTimeLabel: 'Total Time', - workedTab: 'Worked', - assignedTab: 'Assigned', - unassignedTab: 'Unassigned', - createTaskButton: 'Create Task', - assignTaskButton: 'Assign Task', - createButton: 'Create', - assignButton: 'Assign', - resendInvitation: 'Resend Invitation', - editTaskLabel: 'Edit Task', - unassignTaskLabel: 'Unassign Task', - unMakeManager: 'Unmake a Manager', - makeManager: 'Make a Manager', - remove: 'Remove', - filter: 'Filter', - apply: 'Apply', - reset: 'Reset' + name: "Tasks", + now: "Now", + last24hours: "Last 24 hours", + totalTimeLabel: "Total Time", + workedTab: "Worked", + assignedTab: "Assigned", + unassignedTab: "Unassigned", + createTaskButton: "Create Task", + assignTaskButton: "Assign Task", + createButton: "Create", + assignButton: "Assign", + resendInvitation: "Resend Invitation", + editTaskLabel: "Edit Task", + unassignTaskLabel: "Unassign Task", + unMakeManager: "Unmake a Manager", + makeManager: "Make a Manager", + remove: "Remove", + filter: "Filter", + apply: "Apply", + reset: "Reset", }, noTeamScreen: { - createYourTeam: 'Create your own team or join existed', - hintMessage: 'Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.' + createYourTeam: "Create your own team or join existed", + hintMessage: "Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.", }, settingScreen: { - name: 'Settings', + name: "Settings", personalSection: { - name: 'Personal', - fullName: 'Full Name', - yourContact: 'Your Contact', - yourContactHint: 'Your contact information', - themes: 'Themes', - darkModeToLight: 'Dark Mode to Light Mode', - lightModeToDark: 'Light Mode to Dark Mode', - language: 'Language', - changeAvatar: 'Change Avatar', - timeZone: 'Time Zone', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - removeAccount: 'Remove Account', - removeAccountHint: 'Account will be removed from all teams, except where you are the only manager', - deleteAccount: 'Delete Account', - deleteAccountHint: 'Your account will be deleted permanently with remolving from all teams', - detect: 'Detect' + name: "Personal", + fullName: "Full Name", + yourContact: "Your Contact", + yourContactHint: "Your contact information", + themes: "Themes", + darkModeToLight: "Dark Mode to Light Mode", + lightModeToDark: "Light Mode to Dark Mode", + language: "Language", + changeAvatar: "Change Avatar", + timeZone: "Time Zone", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + removeAccount: "Remove Account", + removeAccountHint: + "Account will be removed from all teams, except where you are the only manager", + deleteAccount: "Delete Account", + deleteAccountHint: + "Your account will be deleted permanently with remolving from all teams", + detect: "Detect", }, teamSection: { - name: 'Team', - teamName: 'Team Name', - timeTracking: 'Time Tracking', - timeTrackingHint: 'Enable time tracking', - taskStatuses: 'Task Statuses', - taskPriorities: 'Task Priorities', - taskSizes: 'Task Sizes', - taskLabel: 'Task Label', - changeLogo: 'Change Logo', - teamRole: 'Manager Member & Role', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - transferOwnership: 'Transfer Ownership', - transferOwnershipHint: 'Transfer full ownership of team to another user', - removeTeam: 'Remove Team', - removeTeamHint: 'Team will be completely removed for the system and team members lost access', - quitTeam: 'Quit the team', - quitTeamHint: 'You are about to quit the team', - areYouSure: 'Are you sure ?', + name: "Team", + teamName: "Team Name", + timeTracking: "Time Tracking", + timeTrackingHint: "Enable time tracking", + taskStatuses: "Task Statuses", + taskPriorities: "Task Priorities", + taskSizes: "Task Sizes", + taskLabel: "Task Label", + changeLogo: "Change Logo", + teamRole: "Manager Member & Role", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + transferOwnership: "Transfer Ownership", + transferOwnershipHint: "Transfer full ownership of team to another user", + removeTeam: "Remove Team", + removeTeamHint: + "Team will be completely removed for the system and team members lost access", + quitTeam: "Quit the team", + quitTeamHint: "You are about to quit the team", + areYouSure: "Are you sure ?", changeTeamName: { - mainTitle: 'Change Team Name', - inputPlaceholder: 'Team Name' - } + mainTitle: "Change Team Name", + inputPlaceholder: "Team Name", + }, }, - dangerZone: 'Danger Zone', - modalChangeLanguageTitle: 'Change Language', + dangerZone: "Danger Zone", + modalChangeLanguageTitle: "Change Language", languages: { - english: 'English ( United States )', - french: 'French ( France )', - arabic: 'Arabic', - russian: 'Russian', - bulgarian: 'Bulgarian', - spanish: 'Spanish', - korean: 'Korean', - hebrew: 'Hebrew' + english: "English ( United States )", + french: "French ( France )", + arabic: "Arabic", + russian: "Russian", + bulgarian: "Bulgarian", + spanish: "Spanish", + korean: "Korean", + hebrew: "Hebrew", }, statusScreen: { - mainTitle: 'Task Statuses', - statuses: 'Statuses', - listStatuses: 'List of Statuses', - noActiveStatuses: 'There are no active statuses', - createStatusButton: 'Create new status', - createNewStatusText: 'Create New Status', - statusNamePlaceholder: 'Status Name', - statusIconPlaceholder: 'Choose Icon', - statusColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Statuses", + statuses: "Statuses", + listStatuses: "List of Statuses", + noActiveStatuses: "There are no active statuses", + createStatusButton: "Create new status", + createNewStatusText: "Create New Status", + statusNamePlaceholder: "Status Name", + statusIconPlaceholder: "Choose Icon", + statusColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, priorityScreen: { - mainTitle: 'Task Priorities', - priorities: 'Priorities', - listPriorities: 'List of Priorities', - noActivePriorities: 'There are no active priorities', - createPriorityButton: 'Create new priority', - createNewPriorityText: 'Create New Priority', - priorityNamePlaceholder: 'Priority Name', - priorityIconPlaceholder: 'Search Icon', - priorityColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Priorities", + priorities: "Priorities", + listPriorities: "List of Priorities", + noActivePriorities: "There are no active priorities", + createPriorityButton: "Create new priority", + createNewPriorityText: "Create New Priority", + priorityNamePlaceholder: "Priority Name", + priorityIconPlaceholder: "Search Icon", + priorityColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, labelScreen: { - mainTitle: 'Task Labels', - listLabels: 'List of Labels', - labels: 'Labels', - noActiveLabels: 'There are no active labels', - createLabelButton: 'Create new label', - createNewLabelText: 'Create New Labels', - labelNamePlaceholder: 'Labels Name', - labelIconPlaceholder: 'Choose Icon', - labelColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Labels", + listLabels: "List of Labels", + labels: "Labels", + noActiveLabels: "There are no active labels", + createLabelButton: "Create new label", + createNewLabelText: "Create New Labels", + labelNamePlaceholder: "Labels Name", + labelIconPlaceholder: "Choose Icon", + labelColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, sizeScreen: { - mainTitle: 'Task Sizes', - sizes: 'Sizes', - listSizes: 'List of Sizes', - noActiveSizes: 'There are no active sizes', - createSizeButton: 'Create new size', - createNewSizeText: 'Create New Sizes', - sizeNamePlaceholder: 'Size Name', - sizeIconPlaceholder: 'Choose Icon', - sizeColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Sizes", + sizes: "Sizes", + listSizes: "List of Sizes", + noActiveSizes: "There are no active sizes", + createSizeButton: "Create new size", + createNewSizeText: "Create New Sizes", + sizeNamePlaceholder: "Size Name", + sizeIconPlaceholder: "Choose Icon", + sizeColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, membersSettingsScreen: { - mainTitle: 'Members & Roles' + mainTitle: "Members & Roles", }, changeFullName: { - firstNamePlaceholder: 'First Name', - lastNamePlaholder: 'Last Name', - mainTitle: 'Change Full Name' + firstNamePlaceholder: "First Name", + lastNamePlaholder: "Last Name", + mainTitle: "Change Full Name", }, changeAvatar: { - recentPictures: 'Recent Pictures', - recentFiles: 'Recent files', - selectFromGalery: 'Select from galery', - selectFromFiles: 'Select from Files', - continueButton: 'Continue', - logoDeleteConfirmation: 'Are you sure you want to delete the logo?', - avatarDeleteConfirmation: 'Are you sure you want to delete the avatar?' + recentPictures: "Recent Pictures", + recentFiles: "Recent files", + selectFromGalery: "Select from galery", + selectFromFiles: "Select from Files", + continueButton: "Continue", + logoDeleteConfirmation: "Are you sure you want to delete the logo?", + avatarDeleteConfirmation: "Are you sure you want to delete the avatar?", }, contact: { - mainTitle: 'Change Your Contact', - emailPlaceholder: 'Email Address', - phonePlaceholder: 'Phone Number', - emailNotValid: 'Please provide a valid Email', - phoneNotValid: 'Please provide a valid Phone Number' + mainTitle: "Change Your Contact", + emailPlaceholder: "Email Address", + phonePlaceholder: "Phone Number", + emailNotValid: "Please provide a valid Email", + phoneNotValid: "Please provide a valid Phone Number", }, changeTimezone: { - mainTitle: 'Change Time Zone', - selectTimezoneTitle: 'Select Time Zone' + mainTitle: "Change Time Zone", + selectTimezoneTitle: "Select Time Zone", }, changeLanguage: { - mainTitle: 'Change Language', - selectLanguageTitle: 'Select Languanges' - } + mainTitle: "Change Language", + selectLanguageTitle: "Select Languanges", + }, }, hamburgerMenu: { - darkMode: 'Dark Mode' + darkMode: "Dark Mode", }, inviteModal: { - accept: 'Accept', - reject: 'Reject', - inviteHint: 'You have been invited to join' + accept: "Accept", + reject: "Reject", + inviteHint: "You have been invited to join", }, accountVerificationModal: { - verify: 'Verify' + verify: "Verify", }, demoNavigator: { - componentsTab: 'Components', - debugTab: 'Debug', - communityTab: 'Community', - podcastListTab: 'Podcast' + componentsTab: "Components", + debugTab: "Debug", + communityTab: "Community", + podcastListTab: "Podcast", }, demoCommunityScreen: { - title: 'Connect with the community', + title: "Connect with the community", tagLine: "Plug in to Infinite Red's community of React Native engineers and level up your app development with us!", - joinUsOnSlackTitle: 'Join us on Slack', + joinUsOnSlackTitle: "Join us on Slack", joinUsOnSlack: - 'Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.', - joinSlackLink: 'Join the Slack Community', - makeIgniteEvenBetterTitle: 'Make Ignite even better', + "Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.", + joinSlackLink: "Join the Slack Community", + makeIgniteEvenBetterTitle: "Make Ignite even better", makeIgniteEvenBetter: "Have an idea to make Ignite even better? We're happy to hear that! We're always looking for others who want to help us build the best React Native tooling out there. Join us over on GitHub to join us in building the future of Ignite.", - contributeToIgniteLink: 'Contribute to Ignite', - theLatestInReactNativeTitle: 'The latest in React Native', + contributeToIgniteLink: "Contribute to Ignite", + theLatestInReactNativeTitle: "The latest in React Native", theLatestInReactNative: "We're here to keep you current on all React Native has to offer.", - reactNativeRadioLink: 'React Native Radio', - reactNativeNewsletterLink: 'React Native Newsletter', - reactNativeLiveLink: 'React Native Live', - chainReactConferenceLink: 'Chain React Conference', - hireUsTitle: 'Hire Infinite Red for your next project', + reactNativeRadioLink: "React Native Radio", + reactNativeNewsletterLink: "React Native Newsletter", + reactNativeLiveLink: "React Native Live", + chainReactConferenceLink: "Chain React Conference", + hireUsTitle: "Hire Infinite Red for your next project", hireUs: "Whether it's running a full project or getting teams up to speed with our hands-on training, Infinite Red can help with just about any React Native project.", - hireUsLink: 'Send us a message' + hireUsLink: "Send us a message", }, demoShowroomScreen: { - jumpStart: 'Components to jump start your project!', + jumpStart: "Components to jump start your project!", lorem2Sentences: - 'Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.', - demoHeaderTxExample: 'Yay', - demoViaTxProp: 'Via `tx` Prop', - demoViaSpecifiedTxProp: 'Via `{{prop}}Tx` Prop' + "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.", + demoHeaderTxExample: "Yay", + demoViaTxProp: "Via `tx` Prop", + demoViaSpecifiedTxProp: "Via `{{prop}}Tx` Prop", }, demoDebugScreen: { - howTo: 'HOW TO', - title: 'Debug', + howTo: "HOW TO", + title: "Debug", tagLine: "Congratulations, you've got a very advanced React Native app template here. Take advantage of this boilerplate!", - reactotron: 'Send to Reactotron', - reportBugs: 'Report Bugs', - demoList: 'Demo List', - demoPodcastList: 'Demo Podcast List', + reactotron: "Send to Reactotron", + reportBugs: "Report Bugs", + demoList: "Demo List", + demoPodcastList: "Demo Podcast List", androidReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running, run adb reverse tcp:9090 tcp:9090 from your terminal, and reload the app.", - iosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - macosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - webReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - windowsReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app." + iosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + macosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + webReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + windowsReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", }, demoPodcastListScreen: { - title: 'React Native Radio episodes', - onlyFavorites: 'Only Show Favorites', - favoriteButton: 'Favorite', - unfavoriteButton: 'Unfavorite', + title: "React Native Radio episodes", + onlyFavorites: "Only Show Favorites", + favoriteButton: "Favorite", + unfavoriteButton: "Unfavorite", accessibility: { - cardHint: 'Double tap to listen to the episode. Double tap and hold to {{action}} this episode.', - switch: 'Switch on to only show favorites', - favoriteAction: 'Toggle Favorite', - favoriteIcon: 'Episode not favorited', - unfavoriteIcon: 'Episode favorited', - publishLabel: 'Published {{date}}', - durationLabel: 'Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds' + cardHint: + "Double tap to listen to the episode. Double tap and hold to {{action}} this episode.", + switch: "Switch on to only show favorites", + favoriteAction: "Toggle Favorite", + favoriteIcon: "Episode not favorited", + unfavoriteIcon: "Episode favorited", + publishLabel: "Published {{date}}", + durationLabel: "Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds", }, noFavoritesEmptyState: { - heading: 'This looks a bit empty', - content: 'No favorites have been added yet. Tap the heart on an episode to add it to your favorites!' - } - } + heading: "This looks a bit empty", + content: + "No favorites have been added yet. Tap the heart on an episode to add it to your favorites!", + }, + }, // @demo remove-block-end -}; +} -export default en; -export type Translations = typeof en; +export default en +export type Translations = typeof en diff --git a/apps/mobile/app/i18n/es.ts b/apps/mobile/app/i18n/es.ts index 91ca0346c..3e0bbcde9 100644 --- a/apps/mobile/app/i18n/es.ts +++ b/apps/mobile/app/i18n/es.ts @@ -1,335 +1,349 @@ const es = { common: { - ok: 'OK!', - cancel: 'Cancel', - loading: 'Loading', - back: 'Back', - save: 'Save', - edit: 'Edit', - confirm: 'Confirm', - discard: 'Discard', - logOut: 'Log Out' // @demo remove-current-line + ok: "OK!", + cancel: "Cancel", + loading: "Loading", + back: "Back", + save: "Save", + edit: "Edit", + confirm: "Confirm", + discard: "Discard", + logOut: "Log Out", // @demo remove-current-line }, welcomeScreen: { postscript: "psst — This probably isn't what your app looks like. (Unless your designer handed you these screens, and in that case, ship it!)", - readyForLaunch: 'Your app, almost ready for launch!', - exciting: '(ohh, this is exciting!)', - letsGo: "Let's go!" // @demo remove-current-line + readyForLaunch: "Your app, almost ready for launch!", + exciting: "(ohh, this is exciting!)", + letsGo: "Let's go!", // @demo remove-current-line }, errorScreen: { - title: 'Something went wrong!', + title: "Something went wrong!", friendlySubtitle: "This is the screen that your users will see in production when an error is thrown. You'll want to customize this message (located in `app/i18n/en.ts`) and probably the layout as well (`app/screens/ErrorScreen`). If you want to remove this entirely, check `app/app.tsx` for the component.", - reset: 'RESET APP', - traceTitle: 'Error from %{name} stack' // @demo remove-current-line + reset: "RESET APP", + traceTitle: "Error from %{name} stack", // @demo remove-current-line }, emptyStateComponent: { generic: { - heading: 'So empty... so sad', - content: 'No data found yet. Try clicking the button to refresh or reload the app.', - button: "Let's try this again" - } + heading: "So empty... so sad", + content: "No data found yet. Try clicking the button to refresh or reload the app.", + button: "Let's try this again", + }, }, // @demo remove-block-start errors: { - invalidEmail: 'Invalid email address.' + invalidEmail: "Invalid email address.", }, loginScreen: { - name: 'Login', - enterDetails: 'Create New Team', - enterDetails2: 'Join Existed Team', - enterDetails3: 'Workspace', - hintDetails: 'Please enter your team details to create a new team.', - hintDetails2: 'Please enter email and invitation code to join existing team.', - hintDetails3: 'The email associated with the next workspaces', - joinTeam: 'Join Team', - joinExistTeam: 'Joining existing team?', - joinTeamHint: 'Enter the invitation code we sent to your email', - step1Title: 'Select Team Name', - step2Title: 'Provide More Details', - step3Title: 'Invitation code', - confirmDetails: 'Please check your email for confirm code', - confirmDetails2: 'Please enter the invitation code we sent to your Email', - sendCode: 'send Code', - codeNotReceived: 'Didn’t recieve code ?Re', - inviteStepLabel: 'Provide your Email', - emailFieldLabel: 'Your Email', - teamNameFieldLabel: 'Team Name', - inviteCodeFieldLabel: 'Input invitation code', - selectWorkspaceFieldLabel: 'Select Workspace', - emailFieldPlaceholder: 'Enter your email address', - teamNameFieldPlaceholder: 'Please Enter your team name', - userNameFieldPlaceholder: 'Enter your name', - tapContinue: 'Continue', - tapJoin: 'Join', - createTeam: 'Create Team' + name: "Login", + enterDetails: "Create New Team", + enterDetails2: "Join Existed Team", + enterDetails3: "Workspace", + hintDetails: "Please enter your team details to create a new team.", + hintDetails2: "Please enter email and invitation code to join existing team.", + hintDetails3: "The email associated with the next workspaces", + joinTeam: "Join Team", + joinExistTeam: "Joining existing team?", + joinTeamHint: "Enter the invitation code we sent to your email", + step1Title: "Select Team Name", + step2Title: "Provide More Details", + step3Title: "Invitation code", + confirmDetails: "Please check your email for confirm code", + confirmDetails2: "Please enter the invitation code we sent to your Email", + sendCode: "send Code", + codeNotReceived: "Didn’t recieve code ?Re", + inviteStepLabel: "Provide your Email", + emailFieldLabel: "Your Email", + teamNameFieldLabel: "Team Name", + inviteCodeFieldLabel: "Input invitation code", + selectWorkspaceFieldLabel: "Select Workspace", + emailFieldPlaceholder: "Enter your email address", + teamNameFieldPlaceholder: "Please Enter your team name", + userNameFieldPlaceholder: "Enter your name", + tapContinue: "Continue", + tapJoin: "Join", + createTeam: "Create Team", }, myWorkScreen: { - name: 'My Work', - estimateLabel: 'Estimate', - statusText: 'Status', - taskFieldPlaceholder: 'What you working on', - sizeText: 'Sizes', - prioritiesText: 'Priorities', - tabCreateTask: 'Create New Task', - labelText: 'Label' + name: "My Work", + estimateLabel: "Estimate", + statusText: "Status", + taskFieldPlaceholder: "What you working on", + sizeText: "Sizes", + prioritiesText: "Priorities", + tabCreateTask: "Create New Task", + labelText: "Label", }, teamScreen: { - name: 'Teams', - cardTotalTimeLabel: 'Total time', - cardTodayWorkLabel: 'Today work', - cardTotalWorkLabel: 'Total work', - inviteButton: 'Invite', - inviteModalTitle: 'Invite member to your team', - inviteModalHint: 'Send a invitation to a team member by email', - inviteEmailFieldPlaceholder: 'Input email address', - inviteNameFieldPlaceholder: 'Input team member name', - sendButton: 'Create' + name: "Teams", + cardTotalTimeLabel: "Total time", + cardTodayWorkLabel: "Today work", + cardTotalWorkLabel: "Total work", + inviteButton: "Invite", + inviteModalTitle: "Invite member to your team", + inviteModalHint: "Send a invitation to a team member by email", + inviteEmailFieldPlaceholder: "Input email address", + inviteNameFieldPlaceholder: "Input team member name", + sendButton: "Create", + }, + taskDetailsScreen: { + characterLimitErrorTitle: "We couldn't update Task Title.", + characterLimitErrorDescription: "Task title can't exceed 255 characters.", + copyTitle: "Title Copied.", }, tasksScreen: { - name: 'Tasks', - now: 'Now', - last24hours: 'Last 24 hours', - totalTimeLabel: 'Total Time', - workedTab: 'Worked', - assignedTab: 'Assigned', - unassignedTab: 'Unassigned', - createTaskButton: 'Create Task', - assignTaskButton: 'Assign Task', - createButton: 'Create', - assignButton: 'Assign', - resendInvitation: 'Resend Invitation', - editTaskLabel: 'Edit Task', - unassignTaskLabel: 'Unassign Task', - unMakeManager: 'Unmake a Manager', - makeManager: 'Make a Manager', - remove: 'Remove', - filter: 'Filter', - apply: 'Apply', - reset: 'Reset' + name: "Tasks", + now: "Now", + last24hours: "Last 24 hours", + totalTimeLabel: "Total Time", + workedTab: "Worked", + assignedTab: "Assigned", + unassignedTab: "Unassigned", + createTaskButton: "Create Task", + assignTaskButton: "Assign Task", + createButton: "Create", + assignButton: "Assign", + resendInvitation: "Resend Invitation", + editTaskLabel: "Edit Task", + unassignTaskLabel: "Unassign Task", + unMakeManager: "Unmake a Manager", + makeManager: "Make a Manager", + remove: "Remove", + filter: "Filter", + apply: "Apply", + reset: "Reset", }, noTeamScreen: { - createYourTeam: 'Create your own team or join existed', - hintMessage: 'Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.' + createYourTeam: "Create your own team or join existed", + hintMessage: "Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.", }, settingScreen: { - name: 'Settings', + name: "Settings", personalSection: { - name: 'Personal', - fullName: 'Full Name', - yourContact: 'Your Contact', - yourContactHint: 'Your contact information', - themes: 'Themes', - darkModeToLight: 'Dark Mode to Light Mode', - lightModeToDark: 'Light Mode to Dark Mode', - language: 'Language', - changeAvatar: 'Change Avatar', - timeZone: 'Time Zone', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - removeAccount: 'Remove Account', - removeAccountHint: 'Account will be removed from all teams, except where you are the only manager', - deleteAccount: 'Delete Account', - deleteAccountHint: 'Your account will be deleted permanently with remolving from all teams', - detect: 'Detect' + name: "Personal", + fullName: "Full Name", + yourContact: "Your Contact", + yourContactHint: "Your contact information", + themes: "Themes", + darkModeToLight: "Dark Mode to Light Mode", + lightModeToDark: "Light Mode to Dark Mode", + language: "Language", + changeAvatar: "Change Avatar", + timeZone: "Time Zone", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + removeAccount: "Remove Account", + removeAccountHint: + "Account will be removed from all teams, except where you are the only manager", + deleteAccount: "Delete Account", + deleteAccountHint: + "Your account will be deleted permanently with remolving from all teams", + detect: "Detect", }, teamSection: { - name: 'Team', - teamName: 'Team Name', - timeTracking: 'Time Tracking', - timeTrackingHint: 'Enable time tracking', - taskStatuses: 'Task Statuses', - taskPriorities: 'Task Priorities', - taskSizes: 'Task Sizes', - taskLabel: 'Task Label', - changeLogo: 'Change Logo', - teamRole: 'Manager Member & Role', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - transferOwnership: 'Transfer Ownership', - transferOwnershipHint: 'Transfer full ownership of team to another user', - removeTeam: 'Remove Team', - removeTeamHint: 'Team will be completely removed for the system and team members lost access', - quitTeam: 'Quit the team', - quitTeamHint: 'You are about to quit the team', - areYouSure: 'Are you sure ?', + name: "Team", + teamName: "Team Name", + timeTracking: "Time Tracking", + timeTrackingHint: "Enable time tracking", + taskStatuses: "Task Statuses", + taskPriorities: "Task Priorities", + taskSizes: "Task Sizes", + taskLabel: "Task Label", + changeLogo: "Change Logo", + teamRole: "Manager Member & Role", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + transferOwnership: "Transfer Ownership", + transferOwnershipHint: "Transfer full ownership of team to another user", + removeTeam: "Remove Team", + removeTeamHint: + "Team will be completely removed for the system and team members lost access", + quitTeam: "Quit the team", + quitTeamHint: "You are about to quit the team", + areYouSure: "Are you sure ?", changeTeamName: { - mainTitle: 'Change Team Name', - inputPlaceholder: 'Team Name' - } + mainTitle: "Change Team Name", + inputPlaceholder: "Team Name", + }, }, - dangerZone: 'Danger Zone', - modalChangeLanguageTitle: 'Change Language', + dangerZone: "Danger Zone", + modalChangeLanguageTitle: "Change Language", languages: { - english: 'English ( United States )', - french: 'French ( France )', - arabic: 'Arabic', - russian: 'Russian', - bulgarian: 'Bulgarian', - spanish: 'Spanish', - korean: 'Korean', - hebrew: 'Hebrew' + english: "English ( United States )", + french: "French ( France )", + arabic: "Arabic", + russian: "Russian", + bulgarian: "Bulgarian", + spanish: "Spanish", + korean: "Korean", + hebrew: "Hebrew", }, statusScreen: { - mainTitle: 'Task Statuses', - listStatuses: 'List of Statuses', - noActiveStatuses: 'There are no active statuses', - createStatusButton: 'Create new status', - createNewStatusText: 'Create New Status', - statusNamePlaceholder: 'Status Name', - statusIconPlaceholder: 'Choose Icon', - statusColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Statuses", + listStatuses: "List of Statuses", + noActiveStatuses: "There are no active statuses", + createStatusButton: "Create new status", + createNewStatusText: "Create New Status", + statusNamePlaceholder: "Status Name", + statusIconPlaceholder: "Choose Icon", + statusColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, priorityScreen: { - mainTitle: 'Task Priorities', - priorities: 'Priorities', - listPriorities: 'List of Priorities', - noActivePriorities: 'There are no active priorities', - createPriorityButton: 'Create new priority', - createNewPriorityText: 'Create New Priority', - priorityNamePlaceholder: 'Priority Name', - priorityIconPlaceholder: 'Search Icon', - priorityColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Priorities", + priorities: "Priorities", + listPriorities: "List of Priorities", + noActivePriorities: "There are no active priorities", + createPriorityButton: "Create new priority", + createNewPriorityText: "Create New Priority", + priorityNamePlaceholder: "Priority Name", + priorityIconPlaceholder: "Search Icon", + priorityColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, labelScreen: { - mainTitle: 'Task Labels', - listLabels: 'List of Labels', - noActiveLabels: 'There are no active labels', - createLabelButton: 'Create new label', - createNewLabelText: 'Create New Labels', - labelNamePlaceholder: 'Labels Name', - labelIconPlaceholder: 'Choose Icon', - labelColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Labels", + listLabels: "List of Labels", + noActiveLabels: "There are no active labels", + createLabelButton: "Create new label", + createNewLabelText: "Create New Labels", + labelNamePlaceholder: "Labels Name", + labelIconPlaceholder: "Choose Icon", + labelColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, sizeScreen: { - mainTitle: 'Task Sizes', - listSizes: 'List of Sizes', - noActiveSizes: 'There are no active sizes', - createSizeButton: 'Create new size', - createNewSizeText: 'Create New Sizes', - sizeNamePlaceholder: 'Size Name', - sizeIconPlaceholder: 'Choose Icon', - sizeColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Sizes", + listSizes: "List of Sizes", + noActiveSizes: "There are no active sizes", + createSizeButton: "Create new size", + createNewSizeText: "Create New Sizes", + sizeNamePlaceholder: "Size Name", + sizeIconPlaceholder: "Choose Icon", + sizeColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, membersSettingsScreen: { - mainTitle: 'Members & Roles' + mainTitle: "Members & Roles", }, changeFullName: { - firstNamePlaceholder: 'First Name', - lastNamePlaholder: 'Last Name', - mainTitle: 'Change Full Name' + firstNamePlaceholder: "First Name", + lastNamePlaholder: "Last Name", + mainTitle: "Change Full Name", }, changeAvatar: { - recentPictures: 'Recent Pictures', - recentFiles: 'Recent files', - selectFromGalery: 'Select from galery', - selectFromFiles: 'Select from Files', - continueButton: 'Continue', - logoDeleteConfirmation: 'Are you sure you want to delete the logo?', - avatarDeleteConfirmation: 'Are you sure you want to delete the avatar?' + recentPictures: "Recent Pictures", + recentFiles: "Recent files", + selectFromGalery: "Select from galery", + selectFromFiles: "Select from Files", + continueButton: "Continue", + logoDeleteConfirmation: "Are you sure you want to delete the logo?", + avatarDeleteConfirmation: "Are you sure you want to delete the avatar?", }, contact: { - mainTitle: 'Change Your Contact', - emailPlaceholder: 'Email Address', - phonePlaceholder: 'Phone Number', - emailNotValid: 'Please provide a valid Email', - phoneNotValid: 'Please provide a valid Phone Number' - } + mainTitle: "Change Your Contact", + emailPlaceholder: "Email Address", + phonePlaceholder: "Phone Number", + emailNotValid: "Please provide a valid Email", + phoneNotValid: "Please provide a valid Phone Number", + }, }, inviteModal: { - accept: 'Accept', - reject: 'Reject', - inviteHint: 'You have been invited to join' + accept: "Accept", + reject: "Reject", + inviteHint: "You have been invited to join", }, accountVerificationModal: { - verify: 'Verify' + verify: "Verify", }, demoNavigator: { - componentsTab: 'Components', - debugTab: 'Debug', - communityTab: 'Community', - podcastListTab: 'Podcast' + componentsTab: "Components", + debugTab: "Debug", + communityTab: "Community", + podcastListTab: "Podcast", }, demoCommunityScreen: { - title: 'Connect with the community', + title: "Connect with the community", tagLine: "Plug in to Infinite Red's community of React Native engineers and level up your app development with us!", - joinUsOnSlackTitle: 'Join us on Slack', + joinUsOnSlackTitle: "Join us on Slack", joinUsOnSlack: - 'Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.', - joinSlackLink: 'Join the Slack Community', - makeIgniteEvenBetterTitle: 'Make Ignite even better', + "Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.", + joinSlackLink: "Join the Slack Community", + makeIgniteEvenBetterTitle: "Make Ignite even better", makeIgniteEvenBetter: "Have an idea to make Ignite even better? We're happy to hear that! We're always looking for others who want to help us build the best React Native tooling out there. Join us over on GitHub to join us in building the future of Ignite.", - contributeToIgniteLink: 'Contribute to Ignite', - theLatestInReactNativeTitle: 'The latest in React Native', + contributeToIgniteLink: "Contribute to Ignite", + theLatestInReactNativeTitle: "The latest in React Native", theLatestInReactNative: "We're here to keep you current on all React Native has to offer.", - reactNativeRadioLink: 'React Native Radio', - reactNativeNewsletterLink: 'React Native Newsletter', - reactNativeLiveLink: 'React Native Live', - chainReactConferenceLink: 'Chain React Conference', - hireUsTitle: 'Hire Infinite Red for your next project', + reactNativeRadioLink: "React Native Radio", + reactNativeNewsletterLink: "React Native Newsletter", + reactNativeLiveLink: "React Native Live", + chainReactConferenceLink: "Chain React Conference", + hireUsTitle: "Hire Infinite Red for your next project", hireUs: "Whether it's running a full project or getting teams up to speed with our hands-on training, Infinite Red can help with just about any React Native project.", - hireUsLink: 'Send us a message' + hireUsLink: "Send us a message", }, demoShowroomScreen: { - jumpStart: 'Components to jump start your project!', + jumpStart: "Components to jump start your project!", lorem2Sentences: - 'Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.', - demoHeaderTxExample: 'Yay', - demoViaTxProp: 'Via `tx` Prop', - demoViaSpecifiedTxProp: 'Via `{{prop}}Tx` Prop' + "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.", + demoHeaderTxExample: "Yay", + demoViaTxProp: "Via `tx` Prop", + demoViaSpecifiedTxProp: "Via `{{prop}}Tx` Prop", }, demoDebugScreen: { - howTo: 'HOW TO', - title: 'Debug', + howTo: "HOW TO", + title: "Debug", tagLine: "Congratulations, you've got a very advanced React Native app template here. Take advantage of this boilerplate!", - reactotron: 'Send to Reactotron', - reportBugs: 'Report Bugs', - demoList: 'Demo List', - demoPodcastList: 'Demo Podcast List', + reactotron: "Send to Reactotron", + reportBugs: "Report Bugs", + demoList: "Demo List", + demoPodcastList: "Demo Podcast List", androidReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running, run adb reverse tcp:9090 tcp:9090 from your terminal, and reload the app.", - iosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - macosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - webReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - windowsReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app." + iosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + macosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + webReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + windowsReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", }, demoPodcastListScreen: { - title: 'React Native Radio episodes', - onlyFavorites: 'Only Show Favorites', - favoriteButton: 'Favorite', - unfavoriteButton: 'Unfavorite', + title: "React Native Radio episodes", + onlyFavorites: "Only Show Favorites", + favoriteButton: "Favorite", + unfavoriteButton: "Unfavorite", accessibility: { - cardHint: 'Double tap to listen to the episode. Double tap and hold to {{action}} this episode.', - switch: 'Switch on to only show favorites', - favoriteAction: 'Toggle Favorite', - favoriteIcon: 'Episode not favorited', - unfavoriteIcon: 'Episode favorited', - publishLabel: 'Published {{date}}', - durationLabel: 'Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds' + cardHint: + "Double tap to listen to the episode. Double tap and hold to {{action}} this episode.", + switch: "Switch on to only show favorites", + favoriteAction: "Toggle Favorite", + favoriteIcon: "Episode not favorited", + unfavoriteIcon: "Episode favorited", + publishLabel: "Published {{date}}", + durationLabel: "Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds", }, noFavoritesEmptyState: { - heading: 'This looks a bit empty', - content: 'No favorites have been added yet. Tap the heart on an episode to add it to your favorites!' - } - } + heading: "This looks a bit empty", + content: + "No favorites have been added yet. Tap the heart on an episode to add it to your favorites!", + }, + }, // @demo remove-block-end -}; +} -export default es; -export type Translations = typeof es; +export default es +export type Translations = typeof es diff --git a/apps/mobile/app/i18n/fr.ts b/apps/mobile/app/i18n/fr.ts index ac1ab5cff..d419eff47 100644 --- a/apps/mobile/app/i18n/fr.ts +++ b/apps/mobile/app/i18n/fr.ts @@ -1,348 +1,365 @@ const fr = { common: { - ok: 'OK!', - cancel: 'Annuler', - loading: 'Patientez', - back: 'Retour', - save: 'Sauvegarder', - logOut: 'Se déconnecter', // @demo remove-current-line - edit: 'Edit', - confirm: 'Confirm', - discard: 'Discard' + ok: "OK!", + cancel: "Annuler", + loading: "Patientez", + back: "Retour", + save: "Sauvegarder", + logOut: "Se déconnecter", // @demo remove-current-line + edit: "Edit", + confirm: "Confirm", + discard: "Discard", }, welcomeScreen: { postscript: "psst — This probably isn't what your app looks like. (Unless your designer handed you these screens, and in that case, ship it!)", - readyForLaunch: 'Your app, almost ready for launch!', - exciting: '(ohh, this is exciting!)', - letsGo: "Let's go!" // @demo remove-current-line + readyForLaunch: "Your app, almost ready for launch!", + exciting: "(ohh, this is exciting!)", + letsGo: "Let's go!", // @demo remove-current-line }, errorScreen: { - title: 'Something went wrong!', + title: "Something went wrong!", friendlySubtitle: "This is the screen that your users will see in production when an error is thrown. You'll want to customize this message (located in `app/i18n/en.ts`) and probably the layout as well (`app/screens/ErrorScreen`). If you want to remove this entirely, check `app/app.tsx` for the component.", - reset: 'RESET APP', - traceTitle: 'Error from %{name} stack' // @demo remove-current-line + reset: "RESET APP", + traceTitle: "Error from %{name} stack", // @demo remove-current-line }, emptyStateComponent: { generic: { - heading: 'So empty... so sad', - content: 'No data found yet. Try clicking the button to refresh or reload the app.', - button: "Let's try this again" - } + heading: "So empty... so sad", + content: "No data found yet. Try clicking the button to refresh or reload the app.", + button: "Let's try this again", + }, }, // @demo remove-block-start errors: { - invalidEmail: 'Invalid email address.' + invalidEmail: "Invalid email address.", }, loginScreen: { - name: 'Connexion', - enterDetails: 'Créer une nouvelle équipe', + name: "Connexion", + enterDetails: "Créer une nouvelle équipe", enterDetails2: "Rejoignez l'équipe existante", - enterDetails3: 'Espace de travail', - hintDetails: 'Veuillez entrer les détails pour créer une nouvelle équipe.', - hintDetails2: "Veuillez entrer l'e-mail et le code d'invitation pour rejoindre l'équipe existante.", + enterDetails3: "Espace de travail", + hintDetails: "Veuillez entrer les détails pour créer une nouvelle équipe.", + hintDetails2: + "Veuillez entrer l'e-mail et le code d'invitation pour rejoindre l'équipe existante.", hintDetails3: "L'email associé aux prochains espaces de travail", - joinTeam: 'Rejoindre une équipe', - joinExistTeam: 'Rejoindre une équipe existante ?', + joinTeam: "Rejoindre une équipe", + joinExistTeam: "Rejoindre une équipe existante ?", joinTeamHint: "Entrez le code d'invitation que nous vous avons envoyé par e-mail", step1Title: "Sélectionnez le nom de l'équipe", - step2Title: 'Fournir plus de détails', + step2Title: "Fournir plus de détails", step3Title: "Code d'invitation", - confirmDetails: 'Veuillez vérifier votre e-mail pour confirmer le code', - confirmDetails2: "Veuillez saisir le code d'invitation que nous vous avons envoyé par e-mail", - sendCode: 'Renvoyer le code', + confirmDetails: "Veuillez vérifier votre e-mail pour confirmer le code", + confirmDetails2: + "Veuillez saisir le code d'invitation que nous vous avons envoyé par e-mail", + sendCode: "Renvoyer le code", codeNotReceived: "Vous n'avez pas reçu le code ?", - inviteStepLabel: 'Indiquez votre e-mail', - emailFieldLabel: 'Votre e-mail', + inviteStepLabel: "Indiquez votre e-mail", + emailFieldLabel: "Votre e-mail", teamNameFieldLabel: "Nom de l'équipe", inviteCodeFieldLabel: "Saisir le code d'invitation", - selectWorkspaceFieldLabel: 'Sélectionnez un espace de travail', - emailFieldPlaceholder: 'Entrez votre adresse email', - teamNameFieldPlaceholder: 'Veuillez saisir le nom de votre équipe', - userNameFieldPlaceholder: 'Entrez votre nom', - tapContinue: 'Continuer', - tapJoin: 'Rejoindre', - createTeam: "Créer l'équipe" + selectWorkspaceFieldLabel: "Sélectionnez un espace de travail", + emailFieldPlaceholder: "Entrez votre adresse email", + teamNameFieldPlaceholder: "Veuillez saisir le nom de votre équipe", + userNameFieldPlaceholder: "Entrez votre nom", + tapContinue: "Continuer", + tapJoin: "Rejoindre", + createTeam: "Créer l'équipe", }, myWorkScreen: { - name: 'Mon travail', - estimateLabel: 'Estimation', - statusText: 'Statut', - taskFieldPlaceholder: 'Sur quoi tu travailles', - sizeText: 'Tailles', - prioritiesText: 'Priorités', - tabCreateTask: 'Créer une Nouvelle Tâche', - labelText: 'Étiquette' + name: "Mon travail", + estimateLabel: "Estimation", + statusText: "Statut", + taskFieldPlaceholder: "Sur quoi tu travailles", + sizeText: "Tailles", + prioritiesText: "Priorités", + tabCreateTask: "Créer une Nouvelle Tâche", + labelText: "Étiquette", }, teamScreen: { - name: 'Équipes', - cardTotalTimeLabel: 'Temps total', + name: "Équipes", + cardTotalTimeLabel: "Temps total", cardTodayWorkLabel: "Travail d'aujourd'hui", - cardTotalWorkLabel: 'Travail total', - inviteButton: 'Inviter', - inviteModalTitle: 'Inviter un membre dans votre équipe', + cardTotalWorkLabel: "Travail total", + inviteButton: "Inviter", + inviteModalTitle: "Inviter un membre dans votre équipe", inviteModalHint: "Envoyer une invitation à un membre de l'équipe par e-mail", inviteEmailFieldPlaceholder: "Saisir l'adresse e-mail", inviteNameFieldPlaceholder: "Saisir le nom du membre de l'équipe", - sendButton: 'Créer', - createNewTeamButton: 'Créer une nouvelle équipe' + sendButton: "Créer", + createNewTeamButton: "Créer une nouvelle équipe", + }, + taskDetailsScreen: { + characterLimitErrorTitle: "Nous n'avons pas pu mettre à jour le titre de la tâche.", + characterLimitErrorDescription: "Le titre de la tâche ne peut pas dépasser 255 caractères.", + copyTitle: "Titre copié.", }, tasksScreen: { - name: 'Tâches', - now: 'Maintenant', - last24hours: 'Dernières 24 heures', - totalTimeLabel: 'Temps total', - workedTab: 'Travaillée', - assignedTab: 'Attribué', - unassignedTab: 'Non attribué', - createTaskButton: 'Créer une tâche', - assignTaskButton: 'Attribuer une tâche', - createButton: 'Créer', - assignButton: 'Attribuer', + name: "Tâches", + now: "Maintenant", + last24hours: "Dernières 24 heures", + totalTimeLabel: "Temps total", + workedTab: "Travaillée", + assignedTab: "Attribué", + unassignedTab: "Non attribué", + createTaskButton: "Créer une tâche", + assignTaskButton: "Attribuer une tâche", + createButton: "Créer", + assignButton: "Attribuer", resendInvitation: "Renvoyer l'invitation", - editTaskLabel: 'Modifier la tâche', + editTaskLabel: "Modifier la tâche", unassignTaskLabel: "Annuler l'attribution d'une tâche", - unMakeManager: 'Défaire un manager', - makeManager: 'Créer un gestionnaire', - remove: 'Supprimer', - filter: 'Filtre', - apply: 'Appliquer', - reset: 'Réinitialiser' + unMakeManager: "Défaire un manager", + makeManager: "Créer un gestionnaire", + remove: "Supprimer", + filter: "Filtre", + apply: "Appliquer", + reset: "Réinitialiser", }, settingScreen: { - name: 'Réglages', + name: "Réglages", personalSection: { - name: 'Personnel', - fullName: 'Nom Complet', - yourContact: 'Votre contact', - yourContactHint: 'Vos coordonnées', - themes: 'Thèmes', - darkModeToLight: 'Mode sombre en mode clair', - lightModeToDark: 'Mode clair au mode sombre', - language: 'Langue', + name: "Personnel", + fullName: "Nom Complet", + yourContact: "Votre contact", + yourContactHint: "Vos coordonnées", + themes: "Thèmes", + darkModeToLight: "Mode sombre en mode clair", + lightModeToDark: "Mode clair au mode sombre", + language: "Langue", changeAvatar: "Changer d'avatar", - timeZone: 'Fuseau horaire', - workSchedule: 'Horaire de travail', - workScheduleHint: 'Définissez votre horaire de travail maintenant', - removeAccount: 'Supprimer le compte', - removeAccountHint: 'Le compte sera supprimé de toutes les équipes, sauf si vous êtes le seul responsable', - deleteAccount: 'Supprimer le compte', - deleteAccountHint: 'Votre compte sera définitivement supprimé avec la suppression de toutes les équipes', - detect: 'Détecter' + timeZone: "Fuseau horaire", + workSchedule: "Horaire de travail", + workScheduleHint: "Définissez votre horaire de travail maintenant", + removeAccount: "Supprimer le compte", + removeAccountHint: + "Le compte sera supprimé de toutes les équipes, sauf si vous êtes le seul responsable", + deleteAccount: "Supprimer le compte", + deleteAccountHint: + "Votre compte sera définitivement supprimé avec la suppression de toutes les équipes", + detect: "Détecter", }, teamSection: { - name: 'Équipe', + name: "Équipe", teamName: "Nom de l'équipe", - timeTracking: 'Suivi du temps', - timeTrackingHint: 'Activer le suivi du temps', - taskStatuses: 'Statuts des tâches', - taskPriorities: 'Priorités des tâches', - taskSizes: 'Tailles des tâches', - taskLabel: 'Libellé de la tâche', - changeLogo: 'Changer de logo', - teamRole: 'Membre gestionnaire et rôle', - workSchedule: 'Horaire de travail', - workScheduleHint: 'Définissez votre horaire de travail maintenant', - transferOwnership: 'Transfert de propriété', - transferOwnershipHint: "Transférer la pleine propriété de l'équipe à un autre utilisateur", + timeTracking: "Suivi du temps", + timeTrackingHint: "Activer le suivi du temps", + taskStatuses: "Statuts des tâches", + taskPriorities: "Priorités des tâches", + taskSizes: "Tailles des tâches", + taskLabel: "Libellé de la tâche", + changeLogo: "Changer de logo", + teamRole: "Membre gestionnaire et rôle", + workSchedule: "Horaire de travail", + workScheduleHint: "Définissez votre horaire de travail maintenant", + transferOwnership: "Transfert de propriété", + transferOwnershipHint: + "Transférer la pleine propriété de l'équipe à un autre utilisateur", removeTeam: "Supprimer l'équipe", removeTeamHint: "L'équipe sera complètement supprimée du système et les membres de l'équipe perdront l'accès", quitTeam: "Quitter l'équipe", quitTeamHint: "Vous êtes sur le point de quitter l'équipe", - areYouSure: 'Etes-vous sûr ?', + areYouSure: "Etes-vous sûr ?", changeTeamName: { - mainTitle: 'Change Team Name', - inputPlaceholder: 'Team Name' - } + mainTitle: "Change Team Name", + inputPlaceholder: "Team Name", + }, }, - dangerZone: 'Zone dangereuse', - modalChangeLanguageTitle: 'Changer de langue', + dangerZone: "Zone dangereuse", + modalChangeLanguageTitle: "Changer de langue", languages: { - english: 'Anglais ( États-Unis )', - french: 'Français (France)', - arabic: 'Arabe', - russian: 'Russe', - bulgarian: 'bulgare', - spanish: 'Espagnol', - korean: 'Coréen', - hebrew: 'Hébreu' + english: "Anglais ( États-Unis )", + french: "Français (France)", + arabic: "Arabe", + russian: "Russe", + bulgarian: "bulgare", + spanish: "Espagnol", + korean: "Coréen", + hebrew: "Hébreu", }, statusScreen: { - mainTitle: 'Task Statuses', - listStatuses: 'List of Statuses', - noActiveStatuses: 'There are no active statuses', - createStatusButton: 'Create new status', - createNewStatusText: 'Create New Status', - statusNamePlaceholder: 'Status Name', - statusIconPlaceholder: 'Choose Icon', - statusColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Statuses", + listStatuses: "List of Statuses", + noActiveStatuses: "There are no active statuses", + createStatusButton: "Create new status", + createNewStatusText: "Create New Status", + statusNamePlaceholder: "Status Name", + statusIconPlaceholder: "Choose Icon", + statusColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, noTeamScreen: { - createYourTeam: 'Create your own team or join existed', - hintMessage: 'Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.' + createYourTeam: "Create your own team or join existed", + hintMessage: + "Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.", }, priorityScreen: { - mainTitle: 'Task Priorities', - listPriorities: 'List of Priorities', - noActivePriorities: 'There are no active priorities', - createPriorityButton: 'Create new priority', - createNewPriorityText: 'Create New Priority', - priorityNamePlaceholder: 'Priority Name', - priorityIconPlaceholder: 'Search Icon', - priorityColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Priorities", + listPriorities: "List of Priorities", + noActivePriorities: "There are no active priorities", + createPriorityButton: "Create new priority", + createNewPriorityText: "Create New Priority", + priorityNamePlaceholder: "Priority Name", + priorityIconPlaceholder: "Search Icon", + priorityColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, labelScreen: { - mainTitle: 'Task Labels', - listLabels: 'List of Labels', - noActiveLabels: 'There are no active labels', - createLabelButton: 'Create new label', - createNewLabelText: 'Create New Labels', - labelNamePlaceholder: 'Labels Name', - labelIconPlaceholder: 'Choose Icon', - labelColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Labels", + listLabels: "List of Labels", + noActiveLabels: "There are no active labels", + createLabelButton: "Create new label", + createNewLabelText: "Create New Labels", + labelNamePlaceholder: "Labels Name", + labelIconPlaceholder: "Choose Icon", + labelColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, sizeScreen: { - mainTitle: 'Task Sizes', - listSizes: 'List of Sizes', - noActiveSizes: 'There are no active sizes', - createSizeButton: 'Create new size', - createNewSizeText: 'Create New Sizes', - sizeNamePlaceholder: 'Size Name', - sizeIconPlaceholder: 'Choose Icon', - sizeColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Sizes", + listSizes: "List of Sizes", + noActiveSizes: "There are no active sizes", + createSizeButton: "Create new size", + createNewSizeText: "Create New Sizes", + sizeNamePlaceholder: "Size Name", + sizeIconPlaceholder: "Choose Icon", + sizeColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, membersSettingsScreen: { - mainTitle: 'Membres et rôles' + mainTitle: "Membres et rôles", }, changeAvatar: { - recentPictures: 'Photos récentes', - recentFiles: 'Fichiers récents', - selectFromGalery: 'Sélectionner depuis la galerie', - selectFromFiles: 'Sélectionner depuis les fichiers', - continueButton: 'Continuer', - logoDeleteConfirmation: 'Êtes-vous sûr de vouloir supprimer le logo?', - avatarDeleteConfirmation: 'Are you sure you want to delete the avatar?' + recentPictures: "Photos récentes", + recentFiles: "Fichiers récents", + selectFromGalery: "Sélectionner depuis la galerie", + selectFromFiles: "Sélectionner depuis les fichiers", + continueButton: "Continuer", + logoDeleteConfirmation: "Êtes-vous sûr de vouloir supprimer le logo?", + avatarDeleteConfirmation: "Are you sure you want to delete the avatar?", }, changeFullName: { - firstNamePlaceholder: 'First Name', - lastNamePlaholder: 'Last Name', - mainTitle: 'Change Full Name' + firstNamePlaceholder: "First Name", + lastNamePlaholder: "Last Name", + mainTitle: "Change Full Name", }, contact: { - mainTitle: 'Change Your Contact', - emailPlaceholder: 'Email Address', - phonePlaceholder: 'Phone Number', - emailNotValid: 'Please provide a valid Email', - phoneNotValid: 'Please provide a valid Phone Number' + mainTitle: "Change Your Contact", + emailPlaceholder: "Email Address", + phonePlaceholder: "Phone Number", + emailNotValid: "Please provide a valid Email", + phoneNotValid: "Please provide a valid Phone Number", }, changeTimezone: { - mainTitle: 'Changer le fuseau horaire', - selectTimezoneTitle: 'Choisir le fuseau horaire' + mainTitle: "Changer le fuseau horaire", + selectTimezoneTitle: "Choisir le fuseau horaire", }, changeLanguage: { - mainTitle: 'Changer la langue', - selectLanguageTitle: 'Choisir la langue' - } + mainTitle: "Changer la langue", + selectLanguageTitle: "Choisir la langue", + }, }, hamburgerMenu: { - darkMode: 'Mode sombre' + darkMode: "Mode sombre", }, inviteModal: { - accept: 'Accepter', - reject: 'Rejeter', - inviteHint: 'Vous avez été invité à rejoindre' + accept: "Accepter", + reject: "Rejeter", + inviteHint: "Vous avez été invité à rejoindre", }, accountVerificationModal: { - verify: 'Vérifier' + verify: "Vérifier", }, demoNavigator: { - componentsTab: 'Components', - debugTab: 'Debug', - communityTab: 'Community', - podcastListTab: 'Podcast' + componentsTab: "Components", + debugTab: "Debug", + communityTab: "Community", + podcastListTab: "Podcast", }, demoCommunityScreen: { - title: 'Connect with the community', + title: "Connect with the community", tagLine: "Plug in to Infinite Red's community of React Native engineers and level up your app development with us!", - joinUsOnSlackTitle: 'Join us on Slack', + joinUsOnSlackTitle: "Join us on Slack", joinUsOnSlack: - 'Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.', - joinSlackLink: 'Join the Slack Community', - makeIgniteEvenBetterTitle: 'Make Ignite even better', + "Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.", + joinSlackLink: "Join the Slack Community", + makeIgniteEvenBetterTitle: "Make Ignite even better", makeIgniteEvenBetter: "Have an idea to make Ignite even better? We're happy to hear that! We're always looking for others who want to help us build the best React Native tooling out there. Join us over on GitHub to join us in building the future of Ignite.", - contributeToIgniteLink: 'Contribute to Ignite', - theLatestInReactNativeTitle: 'The latest in React Native', + contributeToIgniteLink: "Contribute to Ignite", + theLatestInReactNativeTitle: "The latest in React Native", theLatestInReactNative: "We're here to keep you current on all React Native has to offer.", - reactNativeRadioLink: 'React Native Radio', - reactNativeNewsletterLink: 'React Native Newsletter', - reactNativeLiveLink: 'React Native Live', - chainReactConferenceLink: 'Chain React Conference', - hireUsTitle: 'Hire Infinite Red for your next project', + reactNativeRadioLink: "React Native Radio", + reactNativeNewsletterLink: "React Native Newsletter", + reactNativeLiveLink: "React Native Live", + chainReactConferenceLink: "Chain React Conference", + hireUsTitle: "Hire Infinite Red for your next project", hireUs: "Whether it's running a full project or getting teams up to speed with our hands-on training, Infinite Red can help with just about any React Native project.", - hireUsLink: 'Send us a message' + hireUsLink: "Send us a message", }, demoShowroomScreen: { - jumpStart: 'Components to jump start your project!', + jumpStart: "Components to jump start your project!", lorem2Sentences: - 'Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.', - demoHeaderTxExample: 'Yay', - demoViaTxProp: 'Via `tx` Prop', - demoViaSpecifiedTxProp: 'Via `{{prop}}Tx` Prop' + "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.", + demoHeaderTxExample: "Yay", + demoViaTxProp: "Via `tx` Prop", + demoViaSpecifiedTxProp: "Via `{{prop}}Tx` Prop", }, demoDebugScreen: { - howTo: 'HOW TO', - title: 'Debug', + howTo: "HOW TO", + title: "Debug", tagLine: "Congratulations, you've got a very advanced React Native app template here. Take advantage of this boilerplate!", - reactotron: 'Send to Reactotron', - reportBugs: 'Report Bugs', - demoList: 'Demo List', - demoPodcastList: 'Demo Podcast List', + reactotron: "Send to Reactotron", + reportBugs: "Report Bugs", + demoList: "Demo List", + demoPodcastList: "Demo Podcast List", androidReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running, run adb reverse tcp:9090 tcp:9090 from your terminal, and reload the app.", - iosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - macosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - webReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - windowsReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app." + iosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + macosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + webReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + windowsReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", }, demoPodcastListScreen: { - title: 'React Native Radio episodes', - onlyFavorites: 'Only Show Favorites', - favoriteButton: 'Favorite', - unfavoriteButton: 'Unfavorite', + title: "React Native Radio episodes", + onlyFavorites: "Only Show Favorites", + favoriteButton: "Favorite", + unfavoriteButton: "Unfavorite", accessibility: { - cardHint: 'Double tap to listen to the episode. Double tap and hold to {{action}} this episode.', - switch: 'Switch on to only show favorites', - favoriteAction: 'Toggle Favorite', - favoriteIcon: 'Episode not favorited', - unfavoriteIcon: 'Episode favorited', - publishLabel: 'Published {{date}}', - durationLabel: 'Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds' + cardHint: + "Double tap to listen to the episode. Double tap and hold to {{action}} this episode.", + switch: "Switch on to only show favorites", + favoriteAction: "Toggle Favorite", + favoriteIcon: "Episode not favorited", + unfavoriteIcon: "Episode favorited", + publishLabel: "Published {{date}}", + durationLabel: "Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds", }, noFavoritesEmptyState: { - heading: 'This looks a bit empty', - content: 'No favorites have been added yet. Tap the heart on an episode to add it to your favorites!' - } - } + heading: "This looks a bit empty", + content: + "No favorites have been added yet. Tap the heart on an episode to add it to your favorites!", + }, + }, // @demo remove-block-end -}; +} -export default fr; -export type Translations = typeof fr; +export default fr +export type Translations = typeof fr diff --git a/apps/mobile/app/i18n/he.ts b/apps/mobile/app/i18n/he.ts index b2a3f3c9c..3e189e982 100644 --- a/apps/mobile/app/i18n/he.ts +++ b/apps/mobile/app/i18n/he.ts @@ -1,335 +1,349 @@ const he = { common: { - ok: 'OK!', - cancel: 'Cancel', - back: 'Back', - loading: 'Loading', - save: 'Save', - edit: 'Edit', - confirm: 'Confirm', - discard: 'Discard', - logOut: 'Log Out' // @demo remove-current-line + ok: "OK!", + cancel: "Cancel", + back: "Back", + loading: "Loading", + save: "Save", + edit: "Edit", + confirm: "Confirm", + discard: "Discard", + logOut: "Log Out", // @demo remove-current-line }, welcomeScreen: { postscript: "psst — This probably isn't what your app looks like. (Unless your designer handed you these screens, and in that case, ship it!)", - readyForLaunch: 'Your app, almost ready for launch!', - exciting: '(ohh, this is exciting!)', - letsGo: "Let's go!" // @demo remove-current-line + readyForLaunch: "Your app, almost ready for launch!", + exciting: "(ohh, this is exciting!)", + letsGo: "Let's go!", // @demo remove-current-line }, errorScreen: { - title: 'Something went wrong!', + title: "Something went wrong!", friendlySubtitle: "This is the screen that your users will see in production when an error is thrown. You'll want to customize this message (located in `app/i18n/en.ts`) and probably the layout as well (`app/screens/ErrorScreen`). If you want to remove this entirely, check `app/app.tsx` for the component.", - reset: 'RESET APP', - traceTitle: 'Error from %{name} stack' // @demo remove-current-line + reset: "RESET APP", + traceTitle: "Error from %{name} stack", // @demo remove-current-line }, emptyStateComponent: { generic: { - heading: 'So empty... so sad', - content: 'No data found yet. Try clicking the button to refresh or reload the app.', - button: "Let's try this again" - } + heading: "So empty... so sad", + content: "No data found yet. Try clicking the button to refresh or reload the app.", + button: "Let's try this again", + }, }, // @demo remove-block-start errors: { - invalidEmail: 'Invalid email address.' + invalidEmail: "Invalid email address.", }, loginScreen: { - name: 'Login', - enterDetails: 'Create New Team', - enterDetails2: 'Join Existed Team', - enterDetails3: 'Workspace', - hintDetails: 'Please enter your team details to create a new team.', - hintDetails2: 'Please enter email and invitation code to join existing team.', - hintDetails3: 'The email associated with the next workspaces', - joinTeam: 'Join Team', - joinExistTeam: 'Joining existing team?', - joinTeamHint: 'Enter the invitation code we sent to your email', - step1Title: 'Select Team Name', - step2Title: 'Provide More Details', - step3Title: 'Invitation code', - confirmDetails: 'Please check your email for confirm code', - confirmDetails2: 'Please enter the invitation code we sent to your Email', - sendCode: 'send Code', - codeNotReceived: 'Didn’t recieve code ?Re', - inviteStepLabel: 'Provide your Email', - emailFieldLabel: 'Your Email', - teamNameFieldLabel: 'Team Name', - inviteCodeFieldLabel: 'Input invitation code', - selectWorkspaceFieldLabel: 'Select Workspace', - emailFieldPlaceholder: 'Enter your email address', - teamNameFieldPlaceholder: 'Please Enter your team name', - userNameFieldPlaceholder: 'Enter your name', - tapContinue: 'Continue', - tapJoin: 'Join', - createTeam: 'Create Team' + name: "Login", + enterDetails: "Create New Team", + enterDetails2: "Join Existed Team", + enterDetails3: "Workspace", + hintDetails: "Please enter your team details to create a new team.", + hintDetails2: "Please enter email and invitation code to join existing team.", + hintDetails3: "The email associated with the next workspaces", + joinTeam: "Join Team", + joinExistTeam: "Joining existing team?", + joinTeamHint: "Enter the invitation code we sent to your email", + step1Title: "Select Team Name", + step2Title: "Provide More Details", + step3Title: "Invitation code", + confirmDetails: "Please check your email for confirm code", + confirmDetails2: "Please enter the invitation code we sent to your Email", + sendCode: "send Code", + codeNotReceived: "Didn’t recieve code ?Re", + inviteStepLabel: "Provide your Email", + emailFieldLabel: "Your Email", + teamNameFieldLabel: "Team Name", + inviteCodeFieldLabel: "Input invitation code", + selectWorkspaceFieldLabel: "Select Workspace", + emailFieldPlaceholder: "Enter your email address", + teamNameFieldPlaceholder: "Please Enter your team name", + userNameFieldPlaceholder: "Enter your name", + tapContinue: "Continue", + tapJoin: "Join", + createTeam: "Create Team", }, myWorkScreen: { - name: 'My Work', - estimateLabel: 'Estimate', - statusText: 'Status', - taskFieldPlaceholder: 'What you working on', - sizeText: 'Sizes', - prioritiesText: 'Priorities', - tabCreateTask: 'Create New Task', - labelText: 'Label' + name: "My Work", + estimateLabel: "Estimate", + statusText: "Status", + taskFieldPlaceholder: "What you working on", + sizeText: "Sizes", + prioritiesText: "Priorities", + tabCreateTask: "Create New Task", + labelText: "Label", }, teamScreen: { - name: 'Teams', - cardTotalTimeLabel: 'Total time', - cardTodayWorkLabel: 'Today work', - cardTotalWorkLabel: 'Total work', - inviteButton: 'Invite', - inviteModalTitle: 'Invite member to your team', - inviteModalHint: 'Send a invitation to a team member by email', - inviteEmailFieldPlaceholder: 'Input email address', - inviteNameFieldPlaceholder: 'Input team member name', - sendButton: 'Create' + name: "Teams", + cardTotalTimeLabel: "Total time", + cardTodayWorkLabel: "Today work", + cardTotalWorkLabel: "Total work", + inviteButton: "Invite", + inviteModalTitle: "Invite member to your team", + inviteModalHint: "Send a invitation to a team member by email", + inviteEmailFieldPlaceholder: "Input email address", + inviteNameFieldPlaceholder: "Input team member name", + sendButton: "Create", + }, + taskDetailsScreen: { + characterLimitErrorTitle: "We couldn't update Task Title.", + characterLimitErrorDescription: "Task title can't exceed 255 characters.", + copyTitle: "Title Copied.", }, tasksScreen: { - name: 'Tasks', - now: 'Now', - last24hours: 'Last 24 hours', - totalTimeLabel: 'Total Time', - workedTab: 'Worked', - assignedTab: 'Assigned', - unassignedTab: 'Unassigned', - createTaskButton: 'Create Task', - assignTaskButton: 'Assign Task', - createButton: 'Create', - assignButton: 'Assign', - resendInvitation: 'Resend Invitation', - editTaskLabel: 'Edit Task', - unassignTaskLabel: 'Unassign Task', - unMakeManager: 'Unmake a Manager', - makeManager: 'Make a Manager', - remove: 'Remove', - filter: 'Filter', - apply: 'Apply', - reset: 'Reset' + name: "Tasks", + now: "Now", + last24hours: "Last 24 hours", + totalTimeLabel: "Total Time", + workedTab: "Worked", + assignedTab: "Assigned", + unassignedTab: "Unassigned", + createTaskButton: "Create Task", + assignTaskButton: "Assign Task", + createButton: "Create", + assignButton: "Assign", + resendInvitation: "Resend Invitation", + editTaskLabel: "Edit Task", + unassignTaskLabel: "Unassign Task", + unMakeManager: "Unmake a Manager", + makeManager: "Make a Manager", + remove: "Remove", + filter: "Filter", + apply: "Apply", + reset: "Reset", }, noTeamScreen: { - createYourTeam: 'Create your own team or join existed', - hintMessage: 'Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.' + createYourTeam: "Create your own team or join existed", + hintMessage: "Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.", }, settingScreen: { - name: 'Settings', + name: "Settings", personalSection: { - name: 'Personal', - fullName: 'Full Name', - yourContact: 'Your Contact', - yourContactHint: 'Your contact information', - themes: 'Themes', - darkModeToLight: 'Dark Mode to Light Mode', - lightModeToDark: 'Light Mode to Dark Mode', - language: 'Language', - changeAvatar: 'Change Avatar', - timeZone: 'Time Zone', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - removeAccount: 'Remove Account', - removeAccountHint: 'Account will be removed from all teams, except where you are the only manager', - deleteAccount: 'Delete Account', - deleteAccountHint: 'Your account will be deleted permanently with remolving from all teams', - detect: 'Detect' + name: "Personal", + fullName: "Full Name", + yourContact: "Your Contact", + yourContactHint: "Your contact information", + themes: "Themes", + darkModeToLight: "Dark Mode to Light Mode", + lightModeToDark: "Light Mode to Dark Mode", + language: "Language", + changeAvatar: "Change Avatar", + timeZone: "Time Zone", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + removeAccount: "Remove Account", + removeAccountHint: + "Account will be removed from all teams, except where you are the only manager", + deleteAccount: "Delete Account", + deleteAccountHint: + "Your account will be deleted permanently with remolving from all teams", + detect: "Detect", }, teamSection: { - name: 'Team', - teamName: 'Team Name', - timeTracking: 'Time Tracking', - timeTrackingHint: 'Enable time tracking', - taskStatuses: 'Task Statuses', - taskPriorities: 'Task Priorities', - taskSizes: 'Task Sizes', - taskLabel: 'Task Label', - changeLogo: 'Change Logo', - teamRole: 'Manager Member & Role', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - transferOwnership: 'Transfer Ownership', - transferOwnershipHint: 'Transfer full ownership of team to another user', - removeTeam: 'Remove Team', - removeTeamHint: 'Team will be completely removed for the system and team members lost access', - quitTeam: 'Quit the team', - quitTeamHint: 'You are about to quit the team', - areYouSure: 'Are you sure ?', + name: "Team", + teamName: "Team Name", + timeTracking: "Time Tracking", + timeTrackingHint: "Enable time tracking", + taskStatuses: "Task Statuses", + taskPriorities: "Task Priorities", + taskSizes: "Task Sizes", + taskLabel: "Task Label", + changeLogo: "Change Logo", + teamRole: "Manager Member & Role", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + transferOwnership: "Transfer Ownership", + transferOwnershipHint: "Transfer full ownership of team to another user", + removeTeam: "Remove Team", + removeTeamHint: + "Team will be completely removed for the system and team members lost access", + quitTeam: "Quit the team", + quitTeamHint: "You are about to quit the team", + areYouSure: "Are you sure ?", changeTeamName: { - mainTitle: 'Change Team Name', - inputPlaceholder: 'Team Name' - } + mainTitle: "Change Team Name", + inputPlaceholder: "Team Name", + }, }, - dangerZone: 'Danger Zone', - modalChangeLanguageTitle: 'Change Language', + dangerZone: "Danger Zone", + modalChangeLanguageTitle: "Change Language", languages: { - english: 'English ( United States )', - french: 'French ( France )', - arabic: 'Arabic', - russian: 'Russian', - bulgarian: 'Bulgarian', - spanish: 'Spanish', - korean: 'Korean', - hebrew: 'Hebrew' + english: "English ( United States )", + french: "French ( France )", + arabic: "Arabic", + russian: "Russian", + bulgarian: "Bulgarian", + spanish: "Spanish", + korean: "Korean", + hebrew: "Hebrew", }, statusScreen: { - mainTitle: 'Task Statuses', - listStatuses: 'List of Statuses', - noActiveStatuses: 'There are no active statuses', - createStatusButton: 'Create new status', - createNewStatusText: 'Create New Status', - statusNamePlaceholder: 'Status Name', - statusIconPlaceholder: 'Choose Icon', - statusColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Statuses", + listStatuses: "List of Statuses", + noActiveStatuses: "There are no active statuses", + createStatusButton: "Create new status", + createNewStatusText: "Create New Status", + statusNamePlaceholder: "Status Name", + statusIconPlaceholder: "Choose Icon", + statusColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, priorityScreen: { - mainTitle: 'Task Priorities', - priorities: 'Priorities', - listPriorities: 'List of Priorities', - noActivePriorities: 'There are no active priorities', - createPriorityButton: 'Create new priority', - createNewPriorityText: 'Create New Priority', - priorityNamePlaceholder: 'Priority Name', - priorityIconPlaceholder: 'Search Icon', - priorityColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Priorities", + priorities: "Priorities", + listPriorities: "List of Priorities", + noActivePriorities: "There are no active priorities", + createPriorityButton: "Create new priority", + createNewPriorityText: "Create New Priority", + priorityNamePlaceholder: "Priority Name", + priorityIconPlaceholder: "Search Icon", + priorityColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, labelScreen: { - mainTitle: 'Task Labels', - listLabels: 'List of Labels', - noActiveLabels: 'There are no active labels', - createLabelButton: 'Create new label', - createNewLabelText: 'Create New Labels', - labelNamePlaceholder: 'Labels Name', - labelIconPlaceholder: 'Choose Icon', - labelColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Labels", + listLabels: "List of Labels", + noActiveLabels: "There are no active labels", + createLabelButton: "Create new label", + createNewLabelText: "Create New Labels", + labelNamePlaceholder: "Labels Name", + labelIconPlaceholder: "Choose Icon", + labelColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, sizeScreen: { - mainTitle: 'Task Sizes', - listSizes: 'List of Sizes', - noActiveSizes: 'There are no active sizes', - createSizeButton: 'Create new size', - createNewSizeText: 'Create New Sizes', - sizeNamePlaceholder: 'Size Name', - sizeIconPlaceholder: 'Choose Icon', - sizeColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Sizes", + listSizes: "List of Sizes", + noActiveSizes: "There are no active sizes", + createSizeButton: "Create new size", + createNewSizeText: "Create New Sizes", + sizeNamePlaceholder: "Size Name", + sizeIconPlaceholder: "Choose Icon", + sizeColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, membersSettingsScreen: { - mainTitle: 'Members & Roles' + mainTitle: "Members & Roles", }, changeFullName: { - firstNamePlaceholder: 'First Name', - lastNamePlaholder: 'Last Name', - mainTitle: 'Change Full Name' + firstNamePlaceholder: "First Name", + lastNamePlaholder: "Last Name", + mainTitle: "Change Full Name", }, changeAvatar: { - recentPictures: 'Recent Pictures', - recentFiles: 'Recent files', - selectFromGalery: 'Select from galery', - selectFromFiles: 'Select from Files', - continueButton: 'Continue', - logoDeleteConfirmation: 'Are you sure you want to delete the logo?', - avatarDeleteConfirmation: 'Are you sure you want to delete the avatar?' + recentPictures: "Recent Pictures", + recentFiles: "Recent files", + selectFromGalery: "Select from galery", + selectFromFiles: "Select from Files", + continueButton: "Continue", + logoDeleteConfirmation: "Are you sure you want to delete the logo?", + avatarDeleteConfirmation: "Are you sure you want to delete the avatar?", }, contact: { - mainTitle: 'Change Your Contact', - emailPlaceholder: 'Email Address', - phonePlaceholder: 'Phone Number', - emailNotValid: 'Please provide a valid Email', - phoneNotValid: 'Please provide a valid Phone Number' - } + mainTitle: "Change Your Contact", + emailPlaceholder: "Email Address", + phonePlaceholder: "Phone Number", + emailNotValid: "Please provide a valid Email", + phoneNotValid: "Please provide a valid Phone Number", + }, }, demoNavigator: { - componentsTab: 'Components', - debugTab: 'Debug', - communityTab: 'Community', - podcastListTab: 'Podcast' + componentsTab: "Components", + debugTab: "Debug", + communityTab: "Community", + podcastListTab: "Podcast", }, demoCommunityScreen: { - title: 'Connect with the community', + title: "Connect with the community", tagLine: "Plug in to Infinite Red's community of React Native engineers and level up your app development with us!", - joinUsOnSlackTitle: 'Join us on Slack', + joinUsOnSlackTitle: "Join us on Slack", joinUsOnSlack: - 'Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.', - joinSlackLink: 'Join the Slack Community', - makeIgniteEvenBetterTitle: 'Make Ignite even better', + "Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.", + joinSlackLink: "Join the Slack Community", + makeIgniteEvenBetterTitle: "Make Ignite even better", makeIgniteEvenBetter: "Have an idea to make Ignite even better? We're happy to hear that! We're always looking for others who want to help us build the best React Native tooling out there. Join us over on GitHub to join us in building the future of Ignite.", - contributeToIgniteLink: 'Contribute to Ignite', - theLatestInReactNativeTitle: 'The latest in React Native', + contributeToIgniteLink: "Contribute to Ignite", + theLatestInReactNativeTitle: "The latest in React Native", theLatestInReactNative: "We're here to keep you current on all React Native has to offer.", - reactNativeRadioLink: 'React Native Radio', - reactNativeNewsletterLink: 'React Native Newsletter', - reactNativeLiveLink: 'React Native Live', - chainReactConferenceLink: 'Chain React Conference', - hireUsTitle: 'Hire Infinite Red for your next project', + reactNativeRadioLink: "React Native Radio", + reactNativeNewsletterLink: "React Native Newsletter", + reactNativeLiveLink: "React Native Live", + chainReactConferenceLink: "Chain React Conference", + hireUsTitle: "Hire Infinite Red for your next project", hireUs: "Whether it's running a full project or getting teams up to speed with our hands-on training, Infinite Red can help with just about any React Native project.", - hireUsLink: 'Send us a message' + hireUsLink: "Send us a message", }, inviteModal: { - accept: 'Accept', - reject: 'Reject', - inviteHint: 'You have been invited to join' + accept: "Accept", + reject: "Reject", + inviteHint: "You have been invited to join", }, accountVerificationModal: { - verify: 'Verify' + verify: "Verify", }, demoShowroomScreen: { - jumpStart: 'Components to jump start your project!', + jumpStart: "Components to jump start your project!", lorem2Sentences: - 'Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.', - demoHeaderTxExample: 'Yay', - demoViaTxProp: 'Via `tx` Prop', - demoViaSpecifiedTxProp: 'Via `{{prop}}Tx` Prop' + "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.", + demoHeaderTxExample: "Yay", + demoViaTxProp: "Via `tx` Prop", + demoViaSpecifiedTxProp: "Via `{{prop}}Tx` Prop", }, demoDebugScreen: { - howTo: 'HOW TO', - title: 'Debug', + howTo: "HOW TO", + title: "Debug", tagLine: "Congratulations, you've got a very advanced React Native app template here. Take advantage of this boilerplate!", - reactotron: 'Send to Reactotron', - reportBugs: 'Report Bugs', - demoList: 'Demo List', - demoPodcastList: 'Demo Podcast List', + reactotron: "Send to Reactotron", + reportBugs: "Report Bugs", + demoList: "Demo List", + demoPodcastList: "Demo Podcast List", androidReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running, run adb reverse tcp:9090 tcp:9090 from your terminal, and reload the app.", - iosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - macosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - webReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - windowsReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app." + iosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + macosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + webReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + windowsReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", }, demoPodcastListScreen: { - title: 'React Native Radio episodes', - onlyFavorites: 'Only Show Favorites', - favoriteButton: 'Favorite', - unfavoriteButton: 'Unfavorite', + title: "React Native Radio episodes", + onlyFavorites: "Only Show Favorites", + favoriteButton: "Favorite", + unfavoriteButton: "Unfavorite", accessibility: { - cardHint: 'Double tap to listen to the episode. Double tap and hold to {{action}} this episode.', - switch: 'Switch on to only show favorites', - favoriteAction: 'Toggle Favorite', - favoriteIcon: 'Episode not favorited', - unfavoriteIcon: 'Episode favorited', - publishLabel: 'Published {{date}}', - durationLabel: 'Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds' + cardHint: + "Double tap to listen to the episode. Double tap and hold to {{action}} this episode.", + switch: "Switch on to only show favorites", + favoriteAction: "Toggle Favorite", + favoriteIcon: "Episode not favorited", + unfavoriteIcon: "Episode favorited", + publishLabel: "Published {{date}}", + durationLabel: "Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds", }, noFavoritesEmptyState: { - heading: 'This looks a bit empty', - content: 'No favorites have been added yet. Tap the heart on an episode to add it to your favorites!' - } - } + heading: "This looks a bit empty", + content: + "No favorites have been added yet. Tap the heart on an episode to add it to your favorites!", + }, + }, // @demo remove-block-end -}; +} -export default he; -export type Translations = typeof he; +export default he +export type Translations = typeof he diff --git a/apps/mobile/app/i18n/ko.ts b/apps/mobile/app/i18n/ko.ts index c35215bc9..a5d2d4ac0 100644 --- a/apps/mobile/app/i18n/ko.ts +++ b/apps/mobile/app/i18n/ko.ts @@ -1,356 +1,364 @@ -import { Translations } from './en'; +import { Translations } from "./en" const ko: Translations = { common: { - ok: '확인!', - cancel: '취소', - loading: 'Loading', - back: '뒤로', - save: '', - logOut: '로그아웃', - edit: 'Edit', - confirm: 'Confirm', - discard: 'Discard' + ok: "확인!", + cancel: "취소", + loading: "Loading", + back: "뒤로", + save: "", + logOut: "로그아웃", + edit: "Edit", + confirm: "Confirm", + discard: "Discard", }, welcomeScreen: { postscript: - '잠깐! — 지금 보시는 것은 아마도 당신의 앱의 모양새가 아닐겁니다. (디자이너분이 이렇게 건내주셨다면 모를까요. 만약에 그렇다면, 이대로 가져갑시다!) ', - readyForLaunch: '출시 준비가 거의 끝난 나만의 앱!', - exciting: '(오, 이거 신나는데요!)', - letsGo: '가보자구요!' // @demo remove-current-line + "잠깐! — 지금 보시는 것은 아마도 당신의 앱의 모양새가 아닐겁니다. (디자이너분이 이렇게 건내주셨다면 모를까요. 만약에 그렇다면, 이대로 가져갑시다!) ", + readyForLaunch: "출시 준비가 거의 끝난 나만의 앱!", + exciting: "(오, 이거 신나는데요!)", + letsGo: "가보자구요!", // @demo remove-current-line }, errorScreen: { - title: '뭔가 잘못되었습니다!', + title: "뭔가 잘못되었습니다!", friendlySubtitle: - '이 화면은 오류가 발생할 때 프로덕션에서 사용자에게 표시됩니다. 이 메시지를 커스터마이징 할 수 있고(해당 파일은 `app/i18n/ko.ts` 에 있습니다) 레이아웃도 마찬가지로 수정할 수 있습니다(`app/screens/error`). 만약 이 오류화면을 완전히 없에버리고 싶다면 `app/app.tsx` 파일에서 컴포넌트를 확인하기 바랍니다.', - reset: '초기화', - traceTitle: '%{name} 스택에서의 오류' // @demo remove-current-line + "이 화면은 오류가 발생할 때 프로덕션에서 사용자에게 표시됩니다. 이 메시지를 커스터마이징 할 수 있고(해당 파일은 `app/i18n/ko.ts` 에 있습니다) 레이아웃도 마찬가지로 수정할 수 있습니다(`app/screens/error`). 만약 이 오류화면을 완전히 없에버리고 싶다면 `app/app.tsx` 파일에서 컴포넌트를 확인하기 바랍니다.", + reset: "초기화", + traceTitle: "%{name} 스택에서의 오류", // @demo remove-current-line }, emptyStateComponent: { generic: { - heading: '너무 텅 비어서.. 너무 슬퍼요..', - content: '데이터가 없습니다. 버튼을 눌러서 리프레쉬 하시거나 앱을 리로드하세요.', - button: '다시 시도해봅시다' - } + heading: "너무 텅 비어서.. 너무 슬퍼요..", + content: "데이터가 없습니다. 버튼을 눌러서 리프레쉬 하시거나 앱을 리로드하세요.", + button: "다시 시도해봅시다", + }, }, // @demo remove-block-start errors: { - invalidEmail: '잘못된 이메일 주소 입니다.' + invalidEmail: "잘못된 이메일 주소 입니다.", }, loginScreen: { - name: '로그인', - enterDetails: '새 팀 만들기', - enterDetails2: '기존 팀에 합류', - enterDetails3: '작업공간', - hintDetails: '새 팀을 만들려면 팀 세부 정보를 입력하십시오.', - hintDetails2: '기존 팀에 가입하려면 이메일과 초대 코드를 입력하세요.', - hintDetails3: '다음 작업공간과 연결된 이메일', - joinTeam: '팀에 합류', - joinExistTeam: '기존 팀에 합류하시겠습니까?', - joinTeamHint: '이메일로 보내드린 초대 코드를 입력하세요.', - step1Title: '팀 이름 선택', - step2Title: '자세한 내용 제공', - step3Title: '초대 코드', - confirmDetails: '확인 코드는 이메일을 확인하세요.', - confirmDetails2: '귀하의 이메일로 전송된 초대 코드를 입력하십시오', - sendCode: '코드 보내기', - codeNotReceived: '코드를 받지 못하셨나요?', - inviteStepLabel: '이메일 제공', - emailFieldLabel: '귀하의 이메일', - teamNameFieldLabel: '팀 이름', - inviteCodeFieldLabel: '초대 코드 입력', - selectWorkspaceFieldLabel: '작업공간 선택', - emailFieldPlaceholder: '이메일 주소를 입력하세요', - teamNameFieldPlaceholder: '팀 이름을 입력하세요', - userNameFieldPlaceholder: '당신의 이름을 입력', - tapContinue: '계속하다', - tapJoin: '가입하다', - createTeam: 'Create Team' + name: "로그인", + enterDetails: "새 팀 만들기", + enterDetails2: "기존 팀에 합류", + enterDetails3: "작업공간", + hintDetails: "새 팀을 만들려면 팀 세부 정보를 입력하십시오.", + hintDetails2: "기존 팀에 가입하려면 이메일과 초대 코드를 입력하세요.", + hintDetails3: "다음 작업공간과 연결된 이메일", + joinTeam: "팀에 합류", + joinExistTeam: "기존 팀에 합류하시겠습니까?", + joinTeamHint: "이메일로 보내드린 초대 코드를 입력하세요.", + step1Title: "팀 이름 선택", + step2Title: "자세한 내용 제공", + step3Title: "초대 코드", + confirmDetails: "확인 코드는 이메일을 확인하세요.", + confirmDetails2: "귀하의 이메일로 전송된 초대 코드를 입력하십시오", + sendCode: "코드 보내기", + codeNotReceived: "코드를 받지 못하셨나요?", + inviteStepLabel: "이메일 제공", + emailFieldLabel: "귀하의 이메일", + teamNameFieldLabel: "팀 이름", + inviteCodeFieldLabel: "초대 코드 입력", + selectWorkspaceFieldLabel: "작업공간 선택", + emailFieldPlaceholder: "이메일 주소를 입력하세요", + teamNameFieldPlaceholder: "팀 이름을 입력하세요", + userNameFieldPlaceholder: "당신의 이름을 입력", + tapContinue: "계속하다", + tapJoin: "가입하다", + createTeam: "Create Team", }, myWorkScreen: { - name: '내 작품', - estimateLabel: '추정', - statusText: '상태', - taskFieldPlaceholder: '작업 중인 작업', - sizeText: '크기', - prioritiesText: '우선순위', - tabCreateTask: '새 작업 만들기', - labelText: '상표' + name: "내 작품", + estimateLabel: "추정", + statusText: "상태", + taskFieldPlaceholder: "작업 중인 작업", + sizeText: "크기", + prioritiesText: "우선순위", + tabCreateTask: "새 작업 만들기", + labelText: "상표", }, teamScreen: { - name: '팀', - cardTotalTimeLabel: '총 시간', - cardTodayWorkLabel: '오늘 일', - cardTotalWorkLabel: '총 작업', - inviteButton: '초대', - inviteModalTitle: '팀원을 팀에 초대', - inviteModalHint: '이메일로 팀원에게 초대장 보내기', - inviteEmailFieldPlaceholder: '이메일 주소 입력', - inviteNameFieldPlaceholder: '팀원 이름 입력', - sendButton: '보내다', - createNewTeamButton: '새 팀 만들기' + name: "팀", + cardTotalTimeLabel: "총 시간", + cardTodayWorkLabel: "오늘 일", + cardTotalWorkLabel: "총 작업", + inviteButton: "초대", + inviteModalTitle: "팀원을 팀에 초대", + inviteModalHint: "이메일로 팀원에게 초대장 보내기", + inviteEmailFieldPlaceholder: "이메일 주소 입력", + inviteNameFieldPlaceholder: "팀원 이름 입력", + sendButton: "보내다", + createNewTeamButton: "새 팀 만들기", + }, + taskDetailsScreen: { + characterLimitErrorTitle: "작업 제목을 업데이트할 수 없습니다.", + characterLimitErrorDescription: "작업 제목은 255자를 초과할 수 없습니다.", + copyTitle: "제목이 복사되었습니다.", }, tasksScreen: { - name: '작업', - now: '지금', - last24hours: '지난 24시간', - totalTimeLabel: '총 시간', - workedTab: '일했다', - assignedTab: '할당된', - unassignedTab: '할당되지 않음', - createTaskButton: '작업 만들기', - assignTaskButton: '작업 할당', - createButton: '창조하다', - assignButton: '양수인', - resendInvitation: '초대장 다시 보내기', - editTaskLabel: '작업 편집', - unassignTaskLabel: '작업 할당 해제', - unMakeManager: '관리자 만들기 취소', - makeManager: '관리자 만들기', - remove: '제거', - filter: '필터', - apply: '적용하다', - reset: '초기화' + name: "작업", + now: "지금", + last24hours: "지난 24시간", + totalTimeLabel: "총 시간", + workedTab: "일했다", + assignedTab: "할당된", + unassignedTab: "할당되지 않음", + createTaskButton: "작업 만들기", + assignTaskButton: "작업 할당", + createButton: "창조하다", + assignButton: "양수인", + resendInvitation: "초대장 다시 보내기", + editTaskLabel: "작업 편집", + unassignTaskLabel: "작업 할당 해제", + unMakeManager: "관리자 만들기 취소", + makeManager: "관리자 만들기", + remove: "제거", + filter: "필터", + apply: "적용하다", + reset: "초기화", }, noTeamScreen: { - createYourTeam: 'Create your own team or join existed', - hintMessage: 'Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.' + createYourTeam: "Create your own team or join existed", + hintMessage: "Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.", }, settingScreen: { - name: 'Settings', + name: "Settings", personalSection: { - name: 'Personal', - fullName: 'Full Name', - yourContact: 'Your Contact', - yourContactHint: 'Your contact information', - themes: 'Themes', - darkModeToLight: 'Dark Mode to Light Mode', - lightModeToDark: 'Light Mode to Dark Mode', - language: 'Language', - changeAvatar: 'Change Avatar', - timeZone: 'Time Zone', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - removeAccount: 'Remove Account', - removeAccountHint: 'Account will be removed from all teams, except where you are the only manager', - deleteAccount: 'Delete Account', - deleteAccountHint: 'Your account will be deleted permanently with remolving from all teams', - detect: 'Detect' + name: "Personal", + fullName: "Full Name", + yourContact: "Your Contact", + yourContactHint: "Your contact information", + themes: "Themes", + darkModeToLight: "Dark Mode to Light Mode", + lightModeToDark: "Light Mode to Dark Mode", + language: "Language", + changeAvatar: "Change Avatar", + timeZone: "Time Zone", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + removeAccount: "Remove Account", + removeAccountHint: + "Account will be removed from all teams, except where you are the only manager", + deleteAccount: "Delete Account", + deleteAccountHint: + "Your account will be deleted permanently with remolving from all teams", + detect: "Detect", }, teamSection: { - name: 'Team', - teamName: 'Team Name', - timeTracking: 'Time Tracking', - timeTrackingHint: 'Enable time tracking', - taskStatuses: 'Task Statuses', - taskPriorities: 'Task Priorities', - taskSizes: 'Task Sizes', - taskLabel: 'Task Label', - changeLogo: 'Change Logo', - teamRole: 'Manager Member & Role', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - transferOwnership: 'Transfer Ownership', - transferOwnershipHint: 'Transfer full ownership of team to another user', - removeTeam: 'Remove Team', - removeTeamHint: 'Team will be completely removed for the system and team members lost access', - quitTeam: 'Quit the team', - quitTeamHint: 'You are about to quit the team', - areYouSure: 'Are you sure ?', + name: "Team", + teamName: "Team Name", + timeTracking: "Time Tracking", + timeTrackingHint: "Enable time tracking", + taskStatuses: "Task Statuses", + taskPriorities: "Task Priorities", + taskSizes: "Task Sizes", + taskLabel: "Task Label", + changeLogo: "Change Logo", + teamRole: "Manager Member & Role", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + transferOwnership: "Transfer Ownership", + transferOwnershipHint: "Transfer full ownership of team to another user", + removeTeam: "Remove Team", + removeTeamHint: + "Team will be completely removed for the system and team members lost access", + quitTeam: "Quit the team", + quitTeamHint: "You are about to quit the team", + areYouSure: "Are you sure ?", changeTeamName: { - mainTitle: 'Change Team Name', - inputPlaceholder: 'Team Name' - } + mainTitle: "Change Team Name", + inputPlaceholder: "Team Name", + }, }, - dangerZone: 'Danger Zone', - modalChangeLanguageTitle: 'Change Language', + dangerZone: "Danger Zone", + modalChangeLanguageTitle: "Change Language", languages: { - english: 'English ( United States )', - french: 'French ( France )', - arabic: 'Arabic', - russian: 'Russian', - bulgarian: 'Bulgarian', - spanish: 'Spanish', - korean: 'Korean', - hebrew: 'Hebrew' + english: "English ( United States )", + french: "French ( France )", + arabic: "Arabic", + russian: "Russian", + bulgarian: "Bulgarian", + spanish: "Spanish", + korean: "Korean", + hebrew: "Hebrew", }, statusScreen: { - mainTitle: 'Task Statuses', - statuses: 'Statuses', - listStatuses: 'List of Statuses', - noActiveStatuses: 'There are no active statuses', - createStatusButton: 'Create new status', - createNewStatusText: 'Create New Status', - statusNamePlaceholder: 'Status Name', - statusIconPlaceholder: 'Choose Icon', - statusColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Statuses", + statuses: "Statuses", + listStatuses: "List of Statuses", + noActiveStatuses: "There are no active statuses", + createStatusButton: "Create new status", + createNewStatusText: "Create New Status", + statusNamePlaceholder: "Status Name", + statusIconPlaceholder: "Choose Icon", + statusColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, priorityScreen: { - mainTitle: 'Task Priorities', - priorities: 'Priorities', - listPriorities: 'List of Priorities', - noActivePriorities: 'There are no active priorities', - createPriorityButton: 'Create new priority', - createNewPriorityText: 'Create New Priority', - priorityNamePlaceholder: 'Priority Name', - priorityIconPlaceholder: 'Search Icon', - priorityColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Priorities", + priorities: "Priorities", + listPriorities: "List of Priorities", + noActivePriorities: "There are no active priorities", + createPriorityButton: "Create new priority", + createNewPriorityText: "Create New Priority", + priorityNamePlaceholder: "Priority Name", + priorityIconPlaceholder: "Search Icon", + priorityColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, labelScreen: { - mainTitle: 'Task Labels', - listLabels: 'List of Labels', - labels: 'Labels', - noActiveLabels: 'There are no active labels', - createLabelButton: 'Create new label', - createNewLabelText: 'Create New Labels', - labelNamePlaceholder: 'Labels Name', - labelIconPlaceholder: 'Choose Icon', - labelColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Labels", + listLabels: "List of Labels", + labels: "Labels", + noActiveLabels: "There are no active labels", + createLabelButton: "Create new label", + createNewLabelText: "Create New Labels", + labelNamePlaceholder: "Labels Name", + labelIconPlaceholder: "Choose Icon", + labelColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, sizeScreen: { - mainTitle: 'Task Sizes', - sizes: 'Sizes', - listSizes: 'List of Sizes', - noActiveSizes: 'There are no active sizes', - createSizeButton: 'Create new size', - createNewSizeText: 'Create New Sizes', - sizeNamePlaceholder: 'Size Name', - sizeIconPlaceholder: 'Choose Icon', - sizeColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Sizes", + sizes: "Sizes", + listSizes: "List of Sizes", + noActiveSizes: "There are no active sizes", + createSizeButton: "Create new size", + createNewSizeText: "Create New Sizes", + sizeNamePlaceholder: "Size Name", + sizeIconPlaceholder: "Choose Icon", + sizeColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, membersSettingsScreen: { - mainTitle: 'Members & Roles' + mainTitle: "Members & Roles", }, changeFullName: { - firstNamePlaceholder: 'First Name', - lastNamePlaholder: 'Last Name', - mainTitle: 'Change Full Name' + firstNamePlaceholder: "First Name", + lastNamePlaholder: "Last Name", + mainTitle: "Change Full Name", }, changeAvatar: { - recentPictures: 'Recent Pictures', - recentFiles: 'Recent files', - selectFromGalery: 'Select from galery', - selectFromFiles: 'Select from Files', - continueButton: 'Continue', - logoDeleteConfirmation: 'Are you sure you want to delete the logo?', - avatarDeleteConfirmation: 'Are you sure you want to delete the avatar?' + recentPictures: "Recent Pictures", + recentFiles: "Recent files", + selectFromGalery: "Select from galery", + selectFromFiles: "Select from Files", + continueButton: "Continue", + logoDeleteConfirmation: "Are you sure you want to delete the logo?", + avatarDeleteConfirmation: "Are you sure you want to delete the avatar?", }, contact: { - mainTitle: 'Change Your Contact', - emailPlaceholder: 'Email Address', - phonePlaceholder: 'Phone Number', - emailNotValid: 'Please provide a valid Email', - phoneNotValid: 'Please provide a valid Phone Number' + mainTitle: "Change Your Contact", + emailPlaceholder: "Email Address", + phonePlaceholder: "Phone Number", + emailNotValid: "Please provide a valid Email", + phoneNotValid: "Please provide a valid Phone Number", }, changeTimezone: { - mainTitle: 'Change Time Zone', - selectTimezoneTitle: 'Select Time Zone' + mainTitle: "Change Time Zone", + selectTimezoneTitle: "Select Time Zone", }, changeLanguage: { - mainTitle: 'Change Language', - selectLanguageTitle: 'Select Languanges' - } + mainTitle: "Change Language", + selectLanguageTitle: "Select Languanges", + }, }, hamburgerMenu: { - darkMode: '다크 모드' + darkMode: "다크 모드", }, inviteModal: { - accept: '수용하다', - reject: '거부하다', - inviteHint: '귀하는 가입 초대를 받았습니다.' + accept: "수용하다", + reject: "거부하다", + inviteHint: "귀하는 가입 초대를 받았습니다.", }, accountVerificationModal: { - verify: '확인하다' + verify: "확인하다", }, demoNavigator: { - componentsTab: '컴포넌트', - debugTab: '디버그', - communityTab: '커뮤니티', - podcastListTab: '팟캐스트' + componentsTab: "컴포넌트", + debugTab: "디버그", + communityTab: "커뮤니티", + podcastListTab: "팟캐스트", }, demoCommunityScreen: { - title: '커뮤니티와 함께해요', + title: "커뮤니티와 함께해요", tagLine: - '전문적인 React Native 엔지니어들로 구성된 Infinite Red 커뮤니티에 접속해서 함께 개발 실력을 향상시켜 보세요!', - joinUsOnSlackTitle: 'Slack 에 참여하세요', + "전문적인 React Native 엔지니어들로 구성된 Infinite Red 커뮤니티에 접속해서 함께 개발 실력을 향상시켜 보세요!", + joinUsOnSlackTitle: "Slack 에 참여하세요", joinUsOnSlack: - '전 세계 React Native 엔지니어들과 함께할 수 있는 곳이 있었으면 좋겠죠? Infinite Red Community Slack 에서 대화에 참여하세요! 우리의 성장하는 커뮤니티는 질문을 던지고, 다른 사람들로부터 배우고, 네트워크를 확장할 수 있는 안전한 공간입니다. ', - joinSlackLink: 'Slack 에 참여하기', - makeIgniteEvenBetterTitle: 'Ignite 을 향상시켜요', + "전 세계 React Native 엔지니어들과 함께할 수 있는 곳이 있었으면 좋겠죠? Infinite Red Community Slack 에서 대화에 참여하세요! 우리의 성장하는 커뮤니티는 질문을 던지고, 다른 사람들로부터 배우고, 네트워크를 확장할 수 있는 안전한 공간입니다. ", + joinSlackLink: "Slack 에 참여하기", + makeIgniteEvenBetterTitle: "Ignite 을 향상시켜요", makeIgniteEvenBetter: - 'Ignite 을 더 좋게 만들 아이디어가 있나요? 기쁜 소식이네요. 우리는 항상 최고의 React Native 도구를 구축하는데 도움을 줄 수 있는 분들을 찾고 있습니다. GitHub 에서 Ignite 의 미래를 만들어 가는것에 함께해 주세요.', - contributeToIgniteLink: 'Ignite 에 기여하기', - theLatestInReactNativeTitle: 'React Native 의 최신정보', - theLatestInReactNative: 'React Native 가 제공하는 모든 최신 정보를 알려드립니다.', - reactNativeRadioLink: 'React Native 라디오', - reactNativeNewsletterLink: 'React Native 뉴스레터', - reactNativeLiveLink: 'React Native 라이브 스트리밍', - chainReactConferenceLink: 'Chain React 컨퍼런스', - hireUsTitle: '다음 프로젝트에 Infinite Red 를 고용하세요', - hireUs: '프로젝트 전체를 수행하든, 실무 교육을 통해 팀의 개발 속도에 박차를 가하든 상관없이, Infinite Red 는 React Native 프로젝트의 모든 분야의 에서 도움을 드릴 수 있습니다.', - hireUsLink: '메세지 보내기' + "Ignite 을 더 좋게 만들 아이디어가 있나요? 기쁜 소식이네요. 우리는 항상 최고의 React Native 도구를 구축하는데 도움을 줄 수 있는 분들을 찾고 있습니다. GitHub 에서 Ignite 의 미래를 만들어 가는것에 함께해 주세요.", + contributeToIgniteLink: "Ignite 에 기여하기", + theLatestInReactNativeTitle: "React Native 의 최신정보", + theLatestInReactNative: "React Native 가 제공하는 모든 최신 정보를 알려드립니다.", + reactNativeRadioLink: "React Native 라디오", + reactNativeNewsletterLink: "React Native 뉴스레터", + reactNativeLiveLink: "React Native 라이브 스트리밍", + chainReactConferenceLink: "Chain React 컨퍼런스", + hireUsTitle: "다음 프로젝트에 Infinite Red 를 고용하세요", + hireUs: "프로젝트 전체를 수행하든, 실무 교육을 통해 팀의 개발 속도에 박차를 가하든 상관없이, Infinite Red 는 React Native 프로젝트의 모든 분야의 에서 도움을 드릴 수 있습니다.", + hireUsLink: "메세지 보내기", }, demoShowroomScreen: { - jumpStart: '프로젝트를 바로 시작할 수 있는 컴포넌트들!', + jumpStart: "프로젝트를 바로 시작할 수 있는 컴포넌트들!", lorem2Sentences: - '별 하나에 추억과, 별 하나에 사랑과, 별 하나에 쓸쓸함과, 별 하나에 동경(憧憬)과, 별 하나에 시와, 별 하나에 어머니, 어머니', - demoHeaderTxExample: '야호', - demoViaTxProp: '`tx` Prop 을 통해', - demoViaSpecifiedTxProp: '`{{prop}}Tx` Prop 을 통해' + "별 하나에 추억과, 별 하나에 사랑과, 별 하나에 쓸쓸함과, 별 하나에 동경(憧憬)과, 별 하나에 시와, 별 하나에 어머니, 어머니", + demoHeaderTxExample: "야호", + demoViaTxProp: "`tx` Prop 을 통해", + demoViaSpecifiedTxProp: "`{{prop}}Tx` Prop 을 통해", }, demoDebugScreen: { - howTo: '사용방법', - title: '디버그', + howTo: "사용방법", + title: "디버그", tagLine: - '축하합니다. 여기 아주 고급스러운 React Native 앱 템플릿이 있습니다. 이 보일러 플레이트를 사용해보세요!', - reactotron: 'Reactotron 으로 보내기', - reportBugs: '버그 보고하기', - demoList: '데모 목록', - demoPodcastList: '데모 팟캐스트 목록', + "축하합니다. 여기 아주 고급스러운 React Native 앱 템플릿이 있습니다. 이 보일러 플레이트를 사용해보세요!", + reactotron: "Reactotron 으로 보내기", + reportBugs: "버그 보고하기", + demoList: "데모 목록", + demoPodcastList: "데모 팟캐스트 목록", androidReactotronHint: - '만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후, 터미널에서 adb reverse tcp:9090 tcp:9090 을 실행한 다음 앱을 다시 실행해보세요.', + "만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후, 터미널에서 adb reverse tcp:9090 tcp:9090 을 실행한 다음 앱을 다시 실행해보세요.", iosReactotronHint: - '만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후 앱을 다시 실행해보세요.', + "만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후 앱을 다시 실행해보세요.", macosReactotronHint: - '만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후 앱을 다시 실행해보세요.', + "만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후 앱을 다시 실행해보세요.", webReactotronHint: - '만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후 앱을 다시 실행해보세요.', + "만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후 앱을 다시 실행해보세요.", windowsReactotronHint: - '만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후 앱을 다시 실행해보세요.' + "만약에 동작하지 않는 경우, Reactotron 데스크탑 앱이 실행중인지 확인 후 앱을 다시 실행해보세요.", }, demoPodcastListScreen: { - title: 'React Native 라디오 에피소드', - onlyFavorites: '즐겨찾기만 보기', - favoriteButton: '즐겨찾기', - unfavoriteButton: '즐겨찾기 해제', + title: "React Native 라디오 에피소드", + onlyFavorites: "즐겨찾기만 보기", + favoriteButton: "즐겨찾기", + unfavoriteButton: "즐겨찾기 해제", accessibility: { cardHint: - '에피소드를 들으려면 두 번 탭하세요. 이 에피소드를 좋아하거나 싫어하려면 두 번 탭하고 길게 누르세요.', - switch: '즐겨찾기를 사용하려면 스위치를 사용하세요.', - favoriteAction: '즐겨찾기 토글', - favoriteIcon: '좋아하는 에피소드', - unfavoriteIcon: '즐겨찾기하지 않은 에피소드', - publishLabel: '{{date}} 에 발행됨', - durationLabel: '소요시간: {{hours}}시간 {{minutes}}분 {{seconds}}초' + "에피소드를 들으려면 두 번 탭하세요. 이 에피소드를 좋아하거나 싫어하려면 두 번 탭하고 길게 누르세요.", + switch: "즐겨찾기를 사용하려면 스위치를 사용하세요.", + favoriteAction: "즐겨찾기 토글", + favoriteIcon: "좋아하는 에피소드", + unfavoriteIcon: "즐겨찾기하지 않은 에피소드", + publishLabel: "{{date}} 에 발행됨", + durationLabel: "소요시간: {{hours}}시간 {{minutes}}분 {{seconds}}초", }, noFavoritesEmptyState: { - heading: '조금 텅 비어 있네요.', - content: '즐겨찾기가 없습니다. 에피소드에 있는 하트를 눌러서 즐겨찾기에 추가하세요.' - } - } + heading: "조금 텅 비어 있네요.", + content: "즐겨찾기가 없습니다. 에피소드에 있는 하트를 눌러서 즐겨찾기에 추가하세요.", + }, + }, // @demo remove-block-end -}; +} -export default ko; +export default ko diff --git a/apps/mobile/app/i18n/ru.ts b/apps/mobile/app/i18n/ru.ts index feb5e6ffe..92502220a 100644 --- a/apps/mobile/app/i18n/ru.ts +++ b/apps/mobile/app/i18n/ru.ts @@ -1,335 +1,349 @@ const ru = { common: { - ok: 'OK!', - cancel: 'Cancel', - loading: 'Loading', - back: 'Back', - save: 'Save', - edit: 'Edit', - confirm: 'Confirm', - discard: 'Discard', - logOut: 'Log Out' // @demo remove-current-line + ok: "OK!", + cancel: "Cancel", + loading: "Loading", + back: "Back", + save: "Save", + edit: "Edit", + confirm: "Confirm", + discard: "Discard", + logOut: "Log Out", // @demo remove-current-line }, welcomeScreen: { postscript: "psst — This probably isn't what your app looks like. (Unless your designer handed you these screens, and in that case, ship it!)", - readyForLaunch: 'Your app, almost ready for launch!', - exciting: '(ohh, this is exciting!)', - letsGo: "Let's go!" // @demo remove-current-line + readyForLaunch: "Your app, almost ready for launch!", + exciting: "(ohh, this is exciting!)", + letsGo: "Let's go!", // @demo remove-current-line }, errorScreen: { - title: 'Something went wrong!', + title: "Something went wrong!", friendlySubtitle: "This is the screen that your users will see in production when an error is thrown. You'll want to customize this message (located in `app/i18n/en.ts`) and probably the layout as well (`app/screens/ErrorScreen`). If you want to remove this entirely, check `app/app.tsx` for the component.", - reset: 'RESET APP', - traceTitle: 'Error from %{name} stack' // @demo remove-current-line + reset: "RESET APP", + traceTitle: "Error from %{name} stack", // @demo remove-current-line }, emptyStateComponent: { generic: { - heading: 'So empty... so sad', - content: 'No data found yet. Try clicking the button to refresh or reload the app.', - button: "Let's try this again" - } + heading: "So empty... so sad", + content: "No data found yet. Try clicking the button to refresh or reload the app.", + button: "Let's try this again", + }, }, // @demo remove-block-start errors: { - invalidEmail: 'Invalid email address.' + invalidEmail: "Invalid email address.", }, loginScreen: { - name: 'Login', - enterDetails: 'Create New Team', - enterDetails2: 'Join Existed Team', - enterDetails3: 'Workspace', - hintDetails: 'Please enter your team details to create a new team.', - hintDetails2: 'Please enter email and invitation code to join existing team.', - hintDetails3: 'The email associated with the next workspaces', - joinTeam: 'Join Team', - joinExistTeam: 'Joining existing team?', - joinTeamHint: 'Enter the invitation code we sent to your email', - step1Title: 'Select Team Name', - step2Title: 'Provide More Details', - step3Title: 'Invitation code', - confirmDetails: 'Please check your email for confirm code', - confirmDetails2: 'Please enter the invitation code we sent to your Email', - sendCode: 'send Code', - codeNotReceived: 'Didn’t recieve code ?Re', - inviteStepLabel: 'Provide your Email', - emailFieldLabel: 'Your Email', - teamNameFieldLabel: 'Team Name', - inviteCodeFieldLabel: 'Input invitation code', - selectWorkspaceFieldLabel: 'Select Workspace', - emailFieldPlaceholder: 'Enter your email address', - teamNameFieldPlaceholder: 'Please Enter your team name', - userNameFieldPlaceholder: 'Enter your name', - tapContinue: 'Continue', - tapJoin: 'Join', - createTeam: 'Create Team' + name: "Login", + enterDetails: "Create New Team", + enterDetails2: "Join Existed Team", + enterDetails3: "Workspace", + hintDetails: "Please enter your team details to create a new team.", + hintDetails2: "Please enter email and invitation code to join existing team.", + hintDetails3: "The email associated with the next workspaces", + joinTeam: "Join Team", + joinExistTeam: "Joining existing team?", + joinTeamHint: "Enter the invitation code we sent to your email", + step1Title: "Select Team Name", + step2Title: "Provide More Details", + step3Title: "Invitation code", + confirmDetails: "Please check your email for confirm code", + confirmDetails2: "Please enter the invitation code we sent to your Email", + sendCode: "send Code", + codeNotReceived: "Didn’t recieve code ?Re", + inviteStepLabel: "Provide your Email", + emailFieldLabel: "Your Email", + teamNameFieldLabel: "Team Name", + inviteCodeFieldLabel: "Input invitation code", + selectWorkspaceFieldLabel: "Select Workspace", + emailFieldPlaceholder: "Enter your email address", + teamNameFieldPlaceholder: "Please Enter your team name", + userNameFieldPlaceholder: "Enter your name", + tapContinue: "Continue", + tapJoin: "Join", + createTeam: "Create Team", }, myWorkScreen: { - name: 'My Work', - estimateLabel: 'Estimate', - statusText: 'Status', - taskFieldPlaceholder: 'What you working on', - sizeText: 'Sizes', - prioritiesText: 'Priorities', - tabCreateTask: 'Create New Task', - labelText: 'Label' + name: "My Work", + estimateLabel: "Estimate", + statusText: "Status", + taskFieldPlaceholder: "What you working on", + sizeText: "Sizes", + prioritiesText: "Priorities", + tabCreateTask: "Create New Task", + labelText: "Label", }, teamScreen: { - name: 'Teams', - cardTotalTimeLabel: 'Total time', - cardTodayWorkLabel: 'Today work', - cardTotalWorkLabel: 'Total work', - inviteButton: 'Invite', - inviteModalTitle: 'Invite member to your team', - inviteModalHint: 'Send a invitation to a team member by email', - inviteEmailFieldPlaceholder: 'Input email address', - inviteNameFieldPlaceholder: 'Input team member name', - sendButton: 'Create' + name: "Teams", + cardTotalTimeLabel: "Total time", + cardTodayWorkLabel: "Today work", + cardTotalWorkLabel: "Total work", + inviteButton: "Invite", + inviteModalTitle: "Invite member to your team", + inviteModalHint: "Send a invitation to a team member by email", + inviteEmailFieldPlaceholder: "Input email address", + inviteNameFieldPlaceholder: "Input team member name", + sendButton: "Create", + }, + taskDetailsScreen: { + characterLimitErrorTitle: "We couldn't update Task Title.", + characterLimitErrorDescription: "Task title can't exceed 255 characters.", + copyTitle: "Title Copied.", }, tasksScreen: { - name: 'Tasks', - now: 'Now', - last24hours: 'Last 24 hours', - totalTimeLabel: 'Total Time', - workedTab: 'Worked', - assignedTab: 'Assigned', - unassignedTab: 'Unassigned', - createTaskButton: 'Create Task', - assignTaskButton: 'Assign Task', - createButton: 'Create', - assignButton: 'Assign', - resendInvitation: 'Resend Invitation', - editTaskLabel: 'Edit Task', - unassignTaskLabel: 'Unassign Task', - unMakeManager: 'Unmake a Manager', - makeManager: 'Make a Manager', - remove: 'Remove', - filter: 'Filter', - apply: 'Apply', - reset: 'Reset' + name: "Tasks", + now: "Now", + last24hours: "Last 24 hours", + totalTimeLabel: "Total Time", + workedTab: "Worked", + assignedTab: "Assigned", + unassignedTab: "Unassigned", + createTaskButton: "Create Task", + assignTaskButton: "Assign Task", + createButton: "Create", + assignButton: "Assign", + resendInvitation: "Resend Invitation", + editTaskLabel: "Edit Task", + unassignTaskLabel: "Unassign Task", + unMakeManager: "Unmake a Manager", + makeManager: "Make a Manager", + remove: "Remove", + filter: "Filter", + apply: "Apply", + reset: "Reset", }, noTeamScreen: { - createYourTeam: 'Create your own team or join existed', - hintMessage: 'Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.' + createYourTeam: "Create your own team or join existed", + hintMessage: "Lorem ipsum dolor sit amet consectetur. Blandit lobortis dui risus neque.", }, settingScreen: { - name: 'Settings', + name: "Settings", personalSection: { - name: 'Personal', - fullName: 'Full Name', - yourContact: 'Your Contact', - yourContactHint: 'Your contact information', - themes: 'Themes', - darkModeToLight: 'Dark Mode to Light Mode', - lightModeToDark: 'Light Mode to Dark Mode', - language: 'Language', - changeAvatar: 'Change Avatar', - timeZone: 'Time Zone', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - removeAccount: 'Remove Account', - removeAccountHint: 'Account will be removed from all teams, except where you are the only manager', - deleteAccount: 'Delete Account', - deleteAccountHint: 'Your account will be deleted permanently with remolving from all teams', - detect: 'Detect' + name: "Personal", + fullName: "Full Name", + yourContact: "Your Contact", + yourContactHint: "Your contact information", + themes: "Themes", + darkModeToLight: "Dark Mode to Light Mode", + lightModeToDark: "Light Mode to Dark Mode", + language: "Language", + changeAvatar: "Change Avatar", + timeZone: "Time Zone", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + removeAccount: "Remove Account", + removeAccountHint: + "Account will be removed from all teams, except where you are the only manager", + deleteAccount: "Delete Account", + deleteAccountHint: + "Your account will be deleted permanently with remolving from all teams", + detect: "Detect", }, teamSection: { - name: 'Team', - teamName: 'Team Name', - timeTracking: 'Time Tracking', - timeTrackingHint: 'Enable time tracking', - taskStatuses: 'Task Statuses', - taskPriorities: 'Task Priorities', - taskSizes: 'Task Sizes', - taskLabel: 'Task Label', - changeLogo: 'Change Logo', - teamRole: 'Manager Member & Role', - workSchedule: 'Work Schedule', - workScheduleHint: 'Set your work schedule now', - transferOwnership: 'Transfer Ownership', - transferOwnershipHint: 'Transfer full ownership of team to another user', - removeTeam: 'Remove Team', - removeTeamHint: 'Team will be completely removed for the system and team members lost access', - quitTeam: 'Quit the team', - quitTeamHint: 'You are about to quit the team', - areYouSure: 'Are you sure ?', + name: "Team", + teamName: "Team Name", + timeTracking: "Time Tracking", + timeTrackingHint: "Enable time tracking", + taskStatuses: "Task Statuses", + taskPriorities: "Task Priorities", + taskSizes: "Task Sizes", + taskLabel: "Task Label", + changeLogo: "Change Logo", + teamRole: "Manager Member & Role", + workSchedule: "Work Schedule", + workScheduleHint: "Set your work schedule now", + transferOwnership: "Transfer Ownership", + transferOwnershipHint: "Transfer full ownership of team to another user", + removeTeam: "Remove Team", + removeTeamHint: + "Team will be completely removed for the system and team members lost access", + quitTeam: "Quit the team", + quitTeamHint: "You are about to quit the team", + areYouSure: "Are you sure ?", changeTeamName: { - mainTitle: 'Change Team Name', - inputPlaceholder: 'Team Name' - } + mainTitle: "Change Team Name", + inputPlaceholder: "Team Name", + }, }, - dangerZone: 'Danger Zone', - modalChangeLanguageTitle: 'Change Language', + dangerZone: "Danger Zone", + modalChangeLanguageTitle: "Change Language", languages: { - english: 'English ( United States )', - french: 'French ( France )', - arabic: 'Arabic', - russian: 'Russian', - bulgarian: 'Bulgarian', - spanish: 'Spanish', - korean: 'Korean', - hebrew: 'Hebrew' + english: "English ( United States )", + french: "French ( France )", + arabic: "Arabic", + russian: "Russian", + bulgarian: "Bulgarian", + spanish: "Spanish", + korean: "Korean", + hebrew: "Hebrew", }, statusScreen: { - mainTitle: 'Task Statuses', - listStatuses: 'List of Statuses', - noActiveStatuses: 'There are no active statuses', - createStatusButton: 'Create new status', - createNewStatusText: 'Create New Status', - statusNamePlaceholder: 'Status Name', - statusIconPlaceholder: 'Choose Icon', - statusColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Statuses", + listStatuses: "List of Statuses", + noActiveStatuses: "There are no active statuses", + createStatusButton: "Create new status", + createNewStatusText: "Create New Status", + statusNamePlaceholder: "Status Name", + statusIconPlaceholder: "Choose Icon", + statusColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, priorityScreen: { - mainTitle: 'Task Priorities', - priorities: 'Priorities', - listPriorities: 'List of Priorities', - noActivePriorities: 'There are no active priorities', - createPriorityButton: 'Create new priority', - createNewPriorityText: 'Create New Priority', - priorityNamePlaceholder: 'Priority Name', - priorityIconPlaceholder: 'Search Icon', - priorityColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Priorities", + priorities: "Priorities", + listPriorities: "List of Priorities", + noActivePriorities: "There are no active priorities", + createPriorityButton: "Create new priority", + createNewPriorityText: "Create New Priority", + priorityNamePlaceholder: "Priority Name", + priorityIconPlaceholder: "Search Icon", + priorityColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, labelScreen: { - mainTitle: 'Task Labels', - listLabels: 'List of Labels', - noActiveLabels: 'There are no active labels', - createLabelButton: 'Create new label', - createNewLabelText: 'Create New Labels', - labelNamePlaceholder: 'Labels Name', - labelIconPlaceholder: 'Choose Icon', - labelColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Labels", + listLabels: "List of Labels", + noActiveLabels: "There are no active labels", + createLabelButton: "Create new label", + createNewLabelText: "Create New Labels", + labelNamePlaceholder: "Labels Name", + labelIconPlaceholder: "Choose Icon", + labelColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, sizeScreen: { - mainTitle: 'Task Sizes', - listSizes: 'List of Sizes', - noActiveSizes: 'There are no active sizes', - createSizeButton: 'Create new size', - createNewSizeText: 'Create New Sizes', - sizeNamePlaceholder: 'Size Name', - sizeIconPlaceholder: 'Choose Icon', - sizeColorPlaceholder: 'Colors', - cancelButtonText: 'Cancel', - createButtonText: 'Create', - updateButtonText: 'Update' + mainTitle: "Task Sizes", + listSizes: "List of Sizes", + noActiveSizes: "There are no active sizes", + createSizeButton: "Create new size", + createNewSizeText: "Create New Sizes", + sizeNamePlaceholder: "Size Name", + sizeIconPlaceholder: "Choose Icon", + sizeColorPlaceholder: "Colors", + cancelButtonText: "Cancel", + createButtonText: "Create", + updateButtonText: "Update", }, membersSettingsScreen: { - mainTitle: 'Members & Roles' + mainTitle: "Members & Roles", }, changeFullName: { - firstNamePlaceholder: 'First Name', - lastNamePlaholder: 'Last Name', - mainTitle: 'Change Full Name' + firstNamePlaceholder: "First Name", + lastNamePlaholder: "Last Name", + mainTitle: "Change Full Name", }, changeAvatar: { - recentPictures: 'Recent Pictures', - recentFiles: 'Recent files', - selectFromGalery: 'Select from galery', - selectFromFiles: 'Select from Files', - continueButton: 'Continue', - logoDeleteConfirmation: 'Are you sure you want to delete the logo?', - avatarDeleteConfirmation: 'Are you sure you want to delete the avatar?' + recentPictures: "Recent Pictures", + recentFiles: "Recent files", + selectFromGalery: "Select from galery", + selectFromFiles: "Select from Files", + continueButton: "Continue", + logoDeleteConfirmation: "Are you sure you want to delete the logo?", + avatarDeleteConfirmation: "Are you sure you want to delete the avatar?", }, contact: { - mainTitle: 'Change Your Contact', - emailPlaceholder: 'Email Address', - phonePlaceholder: 'Phone Number', - emailNotValid: 'Please provide a valid Email', - phoneNotValid: 'Please provide a valid Phone Number' - } + mainTitle: "Change Your Contact", + emailPlaceholder: "Email Address", + phonePlaceholder: "Phone Number", + emailNotValid: "Please provide a valid Email", + phoneNotValid: "Please provide a valid Phone Number", + }, }, inviteModal: { - accept: 'Accept', - reject: 'Reject', - inviteHint: 'You have been invited to join' + accept: "Accept", + reject: "Reject", + inviteHint: "You have been invited to join", }, accountVerificationModal: { - verify: 'Verify' + verify: "Verify", }, demoNavigator: { - componentsTab: 'Components', - debugTab: 'Debug', - communityTab: 'Community', - podcastListTab: 'Podcast' + componentsTab: "Components", + debugTab: "Debug", + communityTab: "Community", + podcastListTab: "Podcast", }, demoCommunityScreen: { - title: 'Connect with the community', + title: "Connect with the community", tagLine: "Plug in to Infinite Red's community of React Native engineers and level up your app development with us!", - joinUsOnSlackTitle: 'Join us on Slack', + joinUsOnSlackTitle: "Join us on Slack", joinUsOnSlack: - 'Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.', - joinSlackLink: 'Join the Slack Community', - makeIgniteEvenBetterTitle: 'Make Ignite even better', + "Wish there was a place to connect with React Native engineers around the world? Join the conversation in the Infinite Red Community Slack! Our growing community is a safe space to ask questions, learn from others, and grow your network.", + joinSlackLink: "Join the Slack Community", + makeIgniteEvenBetterTitle: "Make Ignite even better", makeIgniteEvenBetter: "Have an idea to make Ignite even better? We're happy to hear that! We're always looking for others who want to help us build the best React Native tooling out there. Join us over on GitHub to join us in building the future of Ignite.", - contributeToIgniteLink: 'Contribute to Ignite', - theLatestInReactNativeTitle: 'The latest in React Native', + contributeToIgniteLink: "Contribute to Ignite", + theLatestInReactNativeTitle: "The latest in React Native", theLatestInReactNative: "We're here to keep you current on all React Native has to offer.", - reactNativeRadioLink: 'React Native Radio', - reactNativeNewsletterLink: 'React Native Newsletter', - reactNativeLiveLink: 'React Native Live', - chainReactConferenceLink: 'Chain React Conference', - hireUsTitle: 'Hire Infinite Red for your next project', + reactNativeRadioLink: "React Native Radio", + reactNativeNewsletterLink: "React Native Newsletter", + reactNativeLiveLink: "React Native Live", + chainReactConferenceLink: "Chain React Conference", + hireUsTitle: "Hire Infinite Red for your next project", hireUs: "Whether it's running a full project or getting teams up to speed with our hands-on training, Infinite Red can help with just about any React Native project.", - hireUsLink: 'Send us a message' + hireUsLink: "Send us a message", }, demoShowroomScreen: { - jumpStart: 'Components to jump start your project!', + jumpStart: "Components to jump start your project!", lorem2Sentences: - 'Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.', - demoHeaderTxExample: 'Yay', - demoViaTxProp: 'Via `tx` Prop', - demoViaSpecifiedTxProp: 'Via `{{prop}}Tx` Prop' + "Nulla cupidatat deserunt amet quis aliquip nostrud do adipisicing. Adipisicing excepteur elit laborum Lorem adipisicing do duis.", + demoHeaderTxExample: "Yay", + demoViaTxProp: "Via `tx` Prop", + demoViaSpecifiedTxProp: "Via `{{prop}}Tx` Prop", }, demoDebugScreen: { - howTo: 'HOW TO', - title: 'Debug', + howTo: "HOW TO", + title: "Debug", tagLine: "Congratulations, you've got a very advanced React Native app template here. Take advantage of this boilerplate!", - reactotron: 'Send to Reactotron', - reportBugs: 'Report Bugs', - demoList: 'Demo List', - demoPodcastList: 'Demo Podcast List', + reactotron: "Send to Reactotron", + reportBugs: "Report Bugs", + demoList: "Demo List", + demoPodcastList: "Demo Podcast List", androidReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running, run adb reverse tcp:9090 tcp:9090 from your terminal, and reload the app.", - iosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - macosReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - webReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", - windowsReactotronHint: "If this doesn't work, ensure the Reactotron desktop app is running and reload app." + iosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + macosReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + webReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", + windowsReactotronHint: + "If this doesn't work, ensure the Reactotron desktop app is running and reload app.", }, demoPodcastListScreen: { - title: 'React Native Radio episodes', - onlyFavorites: 'Only Show Favorites', - favoriteButton: 'Favorite', - unfavoriteButton: 'Unfavorite', + title: "React Native Radio episodes", + onlyFavorites: "Only Show Favorites", + favoriteButton: "Favorite", + unfavoriteButton: "Unfavorite", accessibility: { - cardHint: 'Double tap to listen to the episode. Double tap and hold to {{action}} this episode.', - switch: 'Switch on to only show favorites', - favoriteAction: 'Toggle Favorite', - favoriteIcon: 'Episode not favorited', - unfavoriteIcon: 'Episode favorited', - publishLabel: 'Published {{date}}', - durationLabel: 'Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds' + cardHint: + "Double tap to listen to the episode. Double tap and hold to {{action}} this episode.", + switch: "Switch on to only show favorites", + favoriteAction: "Toggle Favorite", + favoriteIcon: "Episode not favorited", + unfavoriteIcon: "Episode favorited", + publishLabel: "Published {{date}}", + durationLabel: "Duration: {{hours}} hours {{minutes}} minutes {{seconds}} seconds", }, noFavoritesEmptyState: { - heading: 'This looks a bit empty', - content: 'No favorites have been added yet. Tap the heart on an episode to add it to your favorites!' - } - } + heading: "This looks a bit empty", + content: + "No favorites have been added yet. Tap the heart on an episode to add it to your favorites!", + }, + }, // @demo remove-block-end -}; +} -export default ru; -export type Translations = typeof ru; +export default ru +export type Translations = typeof ru diff --git a/apps/mobile/app/models/task/TaskStore.ts b/apps/mobile/app/models/task/TaskStore.ts index 5684b802a..40f9157df 100644 --- a/apps/mobile/app/models/task/TaskStore.ts +++ b/apps/mobile/app/models/task/TaskStore.ts @@ -1,13 +1,14 @@ -import { Instance, SnapshotOut, types } from 'mobx-state-tree'; -import { IFilter } from '../../screens/Authenticated/ProfileScreen/components/FilterPopup'; -import { ITeamTask } from '../../services/interfaces/ITask'; +import { Instance, SnapshotOut, types } from "mobx-state-tree" +import { IFilter } from "../../screens/Authenticated/ProfileScreen/components/FilterPopup" +import { ITeamTask } from "../../services/interfaces/ITask" export const TaskStoreModel = types - .model('TaskStore') + .model("TaskStore") .props({ teamTasks: types.array(types.frozen()), + detailedTask: types.frozen(), activeTask: types.frozen(), - activeTaskId: types.optional(types.string, ''), + activeTaskId: types.optional(types.string, ""), assignedTasks: types.array(types.frozen()), unassignedTasks: types.array(types.frozen()), fetchingTasks: types.optional(types.boolean, false), @@ -18,45 +19,49 @@ export const TaskStoreModel = types sizes: [], priorities: [], labels: [], - apply: false - }) + apply: false, + }), }) .actions((store) => ({ setAssignedTasks(value: any) { - store.assignedTasks = value; + store.assignedTasks = value }, setUnassignedTasks(value: any) { - store.unassignedTasks = value; + store.unassignedTasks = value + }, + + setDetailedTask(task: any) { + store.detailedTask = task }, setActiveTask(task: any) { - store.activeTask = task; + store.activeTask = task }, setActiveTaskId(id: string) { - store.activeTaskId = id; + store.activeTaskId = id }, setTasksStatisticsState(stats: any) { - store.tasksStatisticsState = stats; + store.tasksStatisticsState = stats }, setStatActiveTask(stats: any) { - store.statActiveTask = stats; + store.statActiveTask = stats }, setFilter(filter: IFilter) { - store.filter = filter; + store.filter = filter }, setTeamTasks(tasks: any) { - store.teamTasks = tasks; + store.teamTasks = tasks }, setFetchingTasks(value: boolean) { - store.fetchingTasks = value; + store.fetchingTasks = value }, resetTeamTasksData() { - store.activeTask = null; - store.activeTaskId = ''; - store.teamTasks.clear(); - } - })); + store.activeTask = null + store.activeTaskId = "" + store.teamTasks.clear() + }, + })) export interface TeamStore extends Instance {} export interface TeamStoreSnapshot extends SnapshotOut {} diff --git a/apps/mobile/app/navigators/AuthenticatedNavigator.tsx b/apps/mobile/app/navigators/AuthenticatedNavigator.tsx index f8aebb3a8..30f420187 100644 --- a/apps/mobile/app/navigators/AuthenticatedNavigator.tsx +++ b/apps/mobile/app/navigators/AuthenticatedNavigator.tsx @@ -1,14 +1,18 @@ /* eslint-disable react-native/no-inline-styles */ -import React, { useEffect, useState } from 'react'; -import { Image, TextStyle, View, ViewStyle } from 'react-native'; -import { BottomTabScreenProps, createBottomTabNavigator, BottomTabNavigationProp } from '@react-navigation/bottom-tabs'; -import { createDrawerNavigator, DrawerScreenProps } from '@react-navigation/drawer'; -import type { StackNavigationProp } from '@react-navigation/stack'; -import { CompositeScreenProps, CompositeNavigationProp, RouteProp } from '@react-navigation/native'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import React, { useEffect, useState } from "react" +import { Image, TextStyle, View, ViewStyle } from "react-native" +import { + BottomTabScreenProps, + createBottomTabNavigator, + BottomTabNavigationProp, +} from "@react-navigation/bottom-tabs" +import { createDrawerNavigator, DrawerScreenProps } from "@react-navigation/drawer" +import type { StackNavigationProp } from "@react-navigation/stack" +import { CompositeScreenProps, CompositeNavigationProp, RouteProp } from "@react-navigation/native" +import { useSafeAreaInsets } from "react-native-safe-area-context" // COMPONENTS -import { AppStackParamList, AppStackScreenProps } from './AppNavigator'; +import { AppStackParamList, AppStackScreenProps } from "./AppNavigator" import { AuthenticatedProfileScreen, AuthenticatedTeamScreen, @@ -18,17 +22,18 @@ import { TaskLabelScreen, TaskSizeScreen, TaskPriorityScreen, - MembersSettingsScreen -} from '../screens'; + MembersSettingsScreen, + AuthenticatedTaskScreen, +} from "../screens" // HELPERS -import { translate } from '../i18n'; -import { spacing, typography, useAppTheme } from '../theme'; -import HamburgerMenu from '../components/HamburgerMenu'; -import { Skeleton } from 'react-native-skeletons'; -import { useStores } from '../models'; -import { observer } from 'mobx-react-lite'; -import { SvgXml } from 'react-native-svg'; +import { translate } from "../i18n" +import { spacing, typography, useAppTheme } from "../theme" +import HamburgerMenu from "../components/HamburgerMenu" +import { Skeleton } from "react-native-skeletons" +import { useStores } from "../models" +import { observer } from "mobx-react-lite" +import { SvgXml } from "react-native-svg" import { briefCaseNotFocusedDark, briefCaseNotFocusedLight, @@ -37,67 +42,78 @@ import { userFocusedDark, userFocusedLight, userNotFocusedDark, - userNotFocusedLight -} from '../components/svgs/icons'; + userNotFocusedLight, +} from "../components/svgs/icons" export type AuthenticatedTabParamList = { - Timer: undefined; - Team: undefined; - Setting: { activeTab: 1 | 2 }; - Profile: { userId: string; activeTab: 'worked' | 'assigned' | 'unassigned' }; -}; + Timer: undefined + Team: undefined + Setting: { activeTab: 1 | 2 } + Profile: { userId: string; activeTab: "worked" | "assigned" | "unassigned" } + TaskScreen: { taskId: string } +} export type AuthenticatedDrawerParamList = { - Setting: undefined; - AuthenticatedTab: undefined; - TaskLabelScreen: undefined; - TaskSizeScreen: undefined; - TaskStatus: undefined; - TaskPriority: undefined; - MembersSettingsScreen: undefined; -}; + Setting: undefined + AuthenticatedTab: undefined + TaskLabelScreen: undefined + TaskSizeScreen: undefined + TaskStatus: undefined + TaskPriority: undefined + MembersSettingsScreen: undefined + TaskScreen: { taskId: string } +} /** * Helper for automatically generating navigation prop types for each route. * * More info: https://reactnavigation.org/docs/typescript/#organizing-types */ -export type AuthenticatedTabScreenProps = CompositeScreenProps< - BottomTabScreenProps, - AppStackScreenProps ->; +export type AuthenticatedTabScreenProps = + CompositeScreenProps< + BottomTabScreenProps, + AppStackScreenProps + > -export type AuthenticatedDrawerScreenProps = CompositeScreenProps< - DrawerScreenProps, - AppStackScreenProps ->; +export type AuthenticatedDrawerScreenProps = + CompositeScreenProps< + DrawerScreenProps, + AppStackScreenProps + > -export type SettingScreenNavigationProp = CompositeNavigationProp< - BottomTabNavigationProp, - StackNavigationProp ->; +export type SettingScreenNavigationProp = + CompositeNavigationProp< + BottomTabNavigationProp, + StackNavigationProp + > -export type SettingScreenRouteProp = RouteProp; +export type SettingScreenRouteProp = RouteProp< + AuthenticatedTabParamList, + T +> -const Tab = createBottomTabNavigator(); +const Tab = createBottomTabNavigator() const TabNavigator = observer(function TabNavigator() { - const { bottom } = useSafeAreaInsets(); - const { colors, dark } = useAppTheme(); + const { bottom } = useSafeAreaInsets() + const { colors, dark } = useAppTheme() const { - teamStore: { isTrackingEnabled } - } = useStores(); - const [isLoading, setIsLoading] = useState(true); + teamStore: { isTrackingEnabled }, + } = useStores() + const [isLoading, setIsLoading] = useState(true) useEffect(() => { - setTimeout(() => setIsLoading(false), 3000); - }, []); + setTimeout(() => setIsLoading(false), 3000) + }, []) return ( ( - + - + {isTrackingEnabled ? ( - + ) : null} - ) + ), } - : null) + : null), }} initialRouteName="Team" > @@ -153,20 +171,22 @@ const TabNavigator = observer(function TabNavigator() { name="Profile" component={AuthenticatedProfileScreen} options={{ - tabBarLabel: translate('tasksScreen.name'), + tabBarLabel: translate("tasksScreen.name"), tabBarIcon: ({ focused }) => focused ? ( ) : ( - + ), - tabBarActiveTintColor: dark ? '#8C7AE4' : '#3826A6' + tabBarActiveTintColor: dark ? "#8C7AE4" : "#3826A6", }} /> @@ -174,7 +194,7 @@ const TabNavigator = observer(function TabNavigator() { name="Team" component={AuthenticatedTeamScreen} options={{ - tabBarLabel: translate('teamScreen.name'), + tabBarLabel: translate("teamScreen.name"), tabBarIcon: ({ focused }) => !focused ? ( @@ -182,12 +202,12 @@ const TabNavigator = observer(function TabNavigator() { ), - tabBarActiveTintColor: dark ? '#8C7AE4' : '#3826A6' + tabBarActiveTintColor: dark ? "#8C7AE4" : "#3826A6", }} /> {isTrackingEnabled ? ( @@ -195,7 +215,7 @@ const TabNavigator = observer(function TabNavigator() { name="Timer" component={AuthenticatedTimerScreen} options={{ - tabBarLabel: translate('myWorkScreen.name'), + tabBarLabel: translate("myWorkScreen.name"), tabBarIcon: ({ focused }) => !focused ? ( @@ -203,23 +223,28 @@ const TabNavigator = observer(function TabNavigator() { ), - tabBarActiveTintColor: dark ? '#8C7AE4' : '#3826A6' + tabBarActiveTintColor: dark ? "#8C7AE4" : "#3826A6", }} /> ) : null} - ); -}); + ) +}) -const drawer = createDrawerNavigator(); +const drawer = createDrawerNavigator() export const AuthenticatedNavigator = observer(function AuthenticatedNavigator() { return ( } - screenOptions={{ headerShown: false, drawerPosition: 'right', drawerStyle: { width: '83%' } }} + screenOptions={{ + headerShown: false, + drawerPosition: "right", + drawerStyle: { width: "83%" }, + }} > + @@ -227,19 +252,19 @@ export const AuthenticatedNavigator = observer(function AuthenticatedNavigator() - ); -}); + ) +}) const $tabBarItem: ViewStyle = { - paddingTop: spacing.medium -}; + paddingTop: spacing.medium, +} const $tabBarLabel: TextStyle = { fontSize: 12, fontFamily: typography.fonts.PlusJakartaSans.semiBold, lineHeight: 16, - fontWeight: '500', - flex: 1 -}; + fontWeight: "500", + flex: 1, +} // @demo remove-file diff --git a/apps/mobile/app/screens/Authenticated/TaskScreen/index.tsx b/apps/mobile/app/screens/Authenticated/TaskScreen/index.tsx new file mode 100644 index 000000000..db3592e6c --- /dev/null +++ b/apps/mobile/app/screens/Authenticated/TaskScreen/index.tsx @@ -0,0 +1,84 @@ +/* eslint-disable react-native/no-inline-styles */ +import { View, Text, ViewStyle, TouchableOpacity, StyleSheet } from "react-native" +import React, { FC, useEffect } from "react" +import { AuthenticatedDrawerScreenProps } from "../../../navigators/AuthenticatedNavigator" +import { Screen } from "../../../components" +import Animated from "react-native-reanimated" +import { typography, useAppTheme } from "../../../theme" +import { AntDesign } from "@expo/vector-icons" +import { useTeamTasks } from "../../../services/hooks/features/useTeamTasks" +import TaskTitleBlock from "../../../components/Task/TitleBlock" +// import { translate } from "../../../i18n" + +export const AuthenticatedTaskScreen: FC> = ( + _props, +) => { + const { colors } = useAppTheme() + const { navigation, route } = _props + const { taskId } = route.params + const fall = new Animated.Value(1) + const { getTaskById, detailedTask: task } = useTeamTasks() + + useEffect(() => { + if (route.params.taskId) { + getTaskById(taskId) + } + }, [getTaskById, route, task]) + + return ( + + + + + navigation.navigate("AuthenticatedTab")}> + + + Task Screen + + + + + + + + ) +} + +const $container: ViewStyle = { + flex: 1, +} + +const $headerContainer: ViewStyle = { + padding: 20, + paddingVertical: 16, + shadowColor: "rgba(0, 0, 0, 0.6)", + shadowOffset: { + width: 0, + height: 2, + }, + shadowOpacity: 0.07, + shadowRadius: 1.0, + elevation: 1, + zIndex: 10, +} + +const styles = StyleSheet.create({ + container: { + alignItems: "center", + flexDirection: "row", + width: "100%", + }, + + title: { + alignSelf: "center", + fontFamily: typography.primary.semiBold, + fontSize: 16, + textAlign: "center", + width: "80%", + }, +}) diff --git a/apps/mobile/app/screens/Authenticated/TeamScreen/components/ListCardItem.tsx b/apps/mobile/app/screens/Authenticated/TeamScreen/components/ListCardItem.tsx index b83ac0ac6..d9b1bee76 100644 --- a/apps/mobile/app/screens/Authenticated/TeamScreen/components/ListCardItem.tsx +++ b/apps/mobile/app/screens/Authenticated/TeamScreen/components/ListCardItem.tsx @@ -1,143 +1,173 @@ /* eslint-disable camelcase */ /* eslint-disable react-native/no-color-literals */ /* eslint-disable react-native/no-inline-styles */ -import React, { useState } from 'react'; -import { View, ViewStyle, TouchableOpacity, StyleSheet, TouchableWithoutFeedback } from 'react-native'; -import { Ionicons, Entypo } from '@expo/vector-icons'; +import React, { useState } from "react" +import { + View, + ViewStyle, + TouchableOpacity, + StyleSheet, + TouchableWithoutFeedback, +} from "react-native" +import { Ionicons, Entypo } from "@expo/vector-icons" // COMPONENTS -import { Card, ListItem } from '../../../../components'; +import { Card, ListItem } from "../../../../components" // STYLES -import { GLOBAL_STYLE as GS } from '../../../../../assets/ts/styles'; -import { spacing, typography, useAppTheme } from '../../../../theme'; -import EstimateTime from '../../TimerScreen/components/EstimateTime'; -import AllTaskStatuses from '../../../../components/AllTaskStatuses'; -import { IOrganizationTeamWithMStatus, OT_Member } from '../../../../services/interfaces/IOrganizationTeam'; +import { GLOBAL_STYLE as GS } from "../../../../../assets/ts/styles" +import { spacing, typography, useAppTheme } from "../../../../theme" +import EstimateTime from "../../TimerScreen/components/EstimateTime" +import AllTaskStatuses from "../../../../components/AllTaskStatuses" +import { + IOrganizationTeamWithMStatus, + OT_Member, +} from "../../../../services/interfaces/IOrganizationTeam" import { I_TeamMemberCardHook, I_TMCardTaskEditHook, useTeamMemberCard, - useTMCardTaskEdit -} from '../../../../services/hooks/features/useTeamMemberCard'; -import UserHeaderCard from './UserHeaderCard'; -import TaskInfo from './TaskInfo'; -import { observer } from 'mobx-react-lite'; -import { TodayWorkedTime } from './TodayWorkTime'; -import { TimeProgressBar } from './TimeProgressBar'; -import { useNavigation } from '@react-navigation/native'; -import { WorkedOnTask } from './WorkedOnTask'; -import UnassignedTasksList from './UnassignedTaskList'; -import { translate } from '../../../../i18n'; -import { useTimer } from '../../../../services/hooks/useTimer'; -import { SettingScreenNavigationProp } from '../../../../navigators/AuthenticatedNavigator'; -import { getTimerStatusValue } from '../../../../helpers/get-timer-status'; + useTMCardTaskEdit, +} from "../../../../services/hooks/features/useTeamMemberCard" +import UserHeaderCard from "./UserHeaderCard" +import TaskInfo from "./TaskInfo" +import { observer } from "mobx-react-lite" +import { TodayWorkedTime } from "./TodayWorkTime" +import { TimeProgressBar } from "./TimeProgressBar" +import { useNavigation } from "@react-navigation/native" +import { WorkedOnTask } from "./WorkedOnTask" +import UnassignedTasksList from "./UnassignedTaskList" +import { translate } from "../../../../i18n" +import { useTimer } from "../../../../services/hooks/useTimer" +import { SettingScreenNavigationProp } from "../../../../navigators/AuthenticatedNavigator" +import { getTimerStatusValue } from "../../../../helpers/get-timer-status" export type ListItemProps = { - member: OT_Member; -}; + member: OT_Member +} interface IcontentProps { - memberInfo: I_TeamMemberCardHook; - taskEdition: I_TMCardTaskEditHook; - onPressIn?: () => unknown; + memberInfo: I_TeamMemberCardHook + taskEdition: I_TMCardTaskEditHook + onPressIn?: (isTaskScreen?: boolean) => void } export interface Props extends ListItemProps { - index: number; - openMenuIndex: number | null; - setOpenMenuIndex: React.Dispatch>; - currentTeam: IOrganizationTeamWithMStatus | null; + index: number + openMenuIndex: number | null + setOpenMenuIndex: React.Dispatch> + currentTeam: IOrganizationTeamWithMStatus | null } -export const ListItemContent: React.FC = observer(({ memberInfo, taskEdition, onPressIn }) => { - // HOOKS - const { colors, dark } = useAppTheme(); - return ( - onPressIn()}> - - - - - +export const ListItemContent: React.FC = observer( + ({ memberInfo, taskEdition, onPressIn }) => { + // HOOKS + const { colors, dark } = useAppTheme() + return ( + + + onPressIn()}> + + + + - - - - {memberInfo.memberTask ? : null} - - onPressIn(true)} > - - - + + {memberInfo.memberTask ? ( + + ) : null} + + + + + + - - - + + + - {memberInfo.memberTask && taskEdition.estimateEditMode ? ( - - + + + ) : ( + taskEdition.setEstimateEditMode(true)} /> - - ) : ( - taskEdition.setEstimateEditMode(true)} - /> - )} + )} + - - - ); -}); + + ) + }, +) const ListCardItem: React.FC = observer((props) => { - const { colors } = useAppTheme(); + const { colors } = useAppTheme() // // STATS - const memberInfo = useTeamMemberCard(props.member); - const taskEdition = useTMCardTaskEdit(memberInfo.memberTask); - const { timerStatus } = useTimer(); - const [showUnassignedList, setShowUnassignedList] = useState(false); + const memberInfo = useTeamMemberCard(props.member) + const taskEdition = useTMCardTaskEdit(memberInfo.memberTask) + const { timerStatus } = useTimer() + const [showUnassignedList, setShowUnassignedList] = useState(false) - const navigation = useNavigation>(); + const navigation = useNavigation>() - const onPressIn = () => { - taskEdition.setEditMode(false); - taskEdition.setEstimateEditMode(false); - props.setOpenMenuIndex(null); - navigation.navigate('Profile', { userId: memberInfo.memberUser.id, activeTab: 'worked' }); - }; - const currentMember = props.currentTeam?.members.find((currentMember) => currentMember.id === props.member.id); + const onPressIn = (isTaskScreen?: boolean) => { + taskEdition.setEditMode(false) + taskEdition.setEstimateEditMode(false) + props.setOpenMenuIndex(null) + isTaskScreen + ? navigation.navigate("TaskScreen", { taskId: memberInfo?.memberTask.id }) + : navigation.navigate("Profile", { + userId: memberInfo.memberUser.id, + activeTab: "worked", + }) + } + const currentMember = props.currentTeam?.members.find( + (currentMember) => currentMember.id === props.member.id, + ) - const timerStatusValue = getTimerStatusValue(timerStatus, currentMember, props.currentTeam?.public); + const timerStatusValue = getTimerStatusValue( + timerStatus, + currentMember, + props.currentTeam?.public, + ) return ( = observer((props) => { ...GS.mt5, paddingTop: 4, backgroundColor: - timerStatusValue === 'idle' - ? '#F1A2A2' - : timerStatusValue === 'pause' - ? '#EBC386' - : timerStatusValue === 'online' - ? '#88D1A5' - : '#DCD6D6' + timerStatusValue === "idle" + ? "#F1A2A2" + : timerStatusValue === "pause" + ? "#EBC386" + : timerStatusValue === "online" + ? "#88D1A5" + : "#DCD6D6", }} HeadingComponent={ = observer((props) => { ...GS.r0, ...GS.pt5, ...GS.pr3, - ...GS.zIndexFront + ...GS.zIndexFront, }} > = observer((props) => { ...GS.r0, ...GS.zIndexFront, ...GS.shadowLg, - shadowColor: 'rgba(0, 0, 0, 0.52)', + shadowColor: "rgba(0, 0, 0, 0.52)", borderRadius: 14, width: 172, marginTop: -5, marginRight: 17, backgroundColor: colors.background, minWidth: spacing.huge * 2, - ...(props.index !== props.openMenuIndex ? { display: 'none' } : {}) + ...(props.index !== props.openMenuIndex ? { display: "none" } : {}), }} > - {(memberInfo.isAuthTeamManager || memberInfo.isAuthUser) && taskEdition.task && ( - { - taskEdition.setEditMode(true); - props.setOpenMenuIndex(null); - }} - > - {translate('tasksScreen.editTaskLabel')} - - )} - {(memberInfo.isAuthTeamManager || memberInfo.isAuthUser) && taskEdition.task && ( - { - taskEdition.setEstimateEditMode(true); - props.setOpenMenuIndex(null); - }} - > - {translate('myWorkScreen.estimateLabel')} - - )} + {(memberInfo.isAuthTeamManager || memberInfo.isAuthUser) && + taskEdition.task && ( + { + taskEdition.setEditMode(true) + props.setOpenMenuIndex(null) + }} + > + {translate("tasksScreen.editTaskLabel")} + + )} + {(memberInfo.isAuthTeamManager || memberInfo.isAuthUser) && + taskEdition.task && ( + { + taskEdition.setEstimateEditMode(true) + props.setOpenMenuIndex(null) + }} + > + {translate("myWorkScreen.estimateLabel")} + + )} {(memberInfo.isAuthTeamManager || memberInfo.isAuthUser) && memberInfo.memberUnassignTasks.length > 0 && ( { - setShowUnassignedList(true); - props.setOpenMenuIndex(null); + setShowUnassignedList(true) + props.setOpenMenuIndex(null) }} > - {translate('tasksScreen.assignTaskButton')} + {translate("tasksScreen.assignTaskButton")} + + )} + {(memberInfo.isAuthTeamManager || memberInfo.isAuthUser) && + !!memberInfo.memberTask && ( + { + memberInfo.unassignTask(taskEdition.task) + props.setOpenMenuIndex(null) + }} + > + {translate("tasksScreen.unassignTaskLabel")} )} - {(memberInfo.isAuthTeamManager || memberInfo.isAuthUser) && !!memberInfo.memberTask && ( - { - memberInfo.unassignTask(taskEdition.task); - props.setOpenMenuIndex(null); - }} - > - {translate('tasksScreen.unassignTaskLabel')} - - )} {memberInfo.isAuthTeamManager && !memberInfo.isAuthUser && @@ -243,37 +288,43 @@ const ListCardItem: React.FC = observer((props) => { <> {memberInfo.isTeamManager ? ( { - props.setOpenMenuIndex(null); - memberInfo.unMakeMemberManager(); + props.setOpenMenuIndex(null) + memberInfo.unMakeMemberManager() }} > - {translate('tasksScreen.unMakeManager')} + {translate("tasksScreen.unMakeManager")} ) : ( { - props.setOpenMenuIndex(null); - memberInfo.makeMemberManager(); + props.setOpenMenuIndex(null) + memberInfo.makeMemberManager() }} > - {translate('tasksScreen.makeManager')} + {translate("tasksScreen.makeManager")} )} )} {!memberInfo.isTeamOwner && ( { - props.setOpenMenuIndex(null); - memberInfo.removeMemberFromTeam(); + props.setOpenMenuIndex(null) + memberInfo.removeMemberFromTeam() }} > - {translate('tasksScreen.remove')} + {translate("tasksScreen.remove")} )} @@ -281,7 +332,7 @@ const ListCardItem: React.FC = observer((props) => { {showUnassignedList ? ( { - setShowUnassignedList(false); + setShowUnassignedList(false) }} > @@ -289,11 +340,17 @@ const ListCardItem: React.FC = observer((props) => { ) : ( - props.setOpenMenuIndex(props.openMenuIndex === props.index ? null : props.index) + props.setOpenMenuIndex( + props.openMenuIndex === props.index ? null : props.index, + ) } > {props.openMenuIndex !== props.index ? ( - + ) : ( )} @@ -305,17 +362,24 @@ const ListCardItem: React.FC = observer((props) => { ContentComponent={ <> {!showUnassignedList ? ( - + onPressIn(isTaskScreen)} + /> ) : ( - + )} } /> - ); -}); + ) +}) -export default ListCardItem; +export default ListCardItem const $listCard: ViewStyle = { ...GS.flex1, @@ -324,52 +388,52 @@ const $listCard: ViewStyle = { ...GS.shadowSm, ...GS.roundedMd, minHeight: null, - shadowOffset: { width: 0, height: 0 } -}; + shadowOffset: { width: 0, height: 0 }, +} const styles = StyleSheet.create({ dropdownTxt: { - color: '#282048', + color: "#282048", fontFamily: typography.primary.semiBold, fontSize: 14, height: 38, - width: '100%' + width: "100%", }, estimate: { - alignItems: 'center', - backgroundColor: '#E8EBF8', + alignItems: "center", + backgroundColor: "#E8EBF8", borderRadius: 5, - flexDirection: 'row', - justifyContent: 'space-between', - marginLeft: 'auto', + flexDirection: "row", + justifyContent: "space-between", + marginLeft: "auto", marginRight: 10, - paddingVertical: 2 + paddingVertical: 2, }, firstContainer: { - alignItems: 'center', - flexDirection: 'row', - width: '95%' + alignItems: "center", + flexDirection: "row", + width: "95%", }, times: { - alignItems: 'center', + alignItems: "center", borderTopWidth: 1, - flexDirection: 'row', - justifyContent: 'space-between', - paddingTop: 16 + flexDirection: "row", + justifyContent: "space-between", + paddingTop: 16, }, wrapTaskTitle: { borderTopWidth: 1, marginTop: 16, paddingVertical: 16, - width: '98%' + width: "98%", }, wrapTotalTime: { - alignItems: 'center', - justifyContent: 'center', + alignItems: "center", + justifyContent: "center", marginRight: 30, - position: 'absolute', - right: 0 - } -}); + position: "absolute", + right: 0, + }, +}) diff --git a/apps/mobile/app/screens/index.ts b/apps/mobile/app/screens/index.ts index 912d6f123..523cf83c5 100644 --- a/apps/mobile/app/screens/index.ts +++ b/apps/mobile/app/screens/index.ts @@ -1,18 +1,19 @@ -export * from './WelcomeScreen'; +export * from "./WelcomeScreen" // @demo remove-block-start -export * from './LoginScreen'; -export * from './DemoCommunityScreen'; -export * from './DemoDebugScreen'; -export * from './DemoShowroomScreen/DemoShowroomScreen'; +export * from "./LoginScreen" +export * from "./DemoCommunityScreen" +export * from "./DemoDebugScreen" +export * from "./DemoShowroomScreen/DemoShowroomScreen" // @demo remove-block-end -export * from './ErrorScreen/ErrorBoundary'; +export * from "./ErrorScreen/ErrorBoundary" // export other screens here -export * from './Authenticated/TimerScreen'; -export * from './Authenticated/TeamScreen'; -export * from './Authenticated/ProfileScreen'; -export * from './Authenticated/SettingScreen'; -export * from './Authenticated/TaskStatusScreen'; -export * from './Authenticated/TaskPrioritiesScreen'; -export * from './Authenticated/TaskLabelScreen'; -export * from './Authenticated/TaskSizeScreen'; -export * from './Authenticated/MembersSettingsScreen'; +export * from "./Authenticated/TimerScreen" +export * from "./Authenticated/TeamScreen" +export * from "./Authenticated/ProfileScreen" +export * from "./Authenticated/SettingScreen" +export * from "./Authenticated/TaskStatusScreen" +export * from "./Authenticated/TaskPrioritiesScreen" +export * from "./Authenticated/TaskLabelScreen" +export * from "./Authenticated/TaskSizeScreen" +export * from "./Authenticated/MembersSettingsScreen" +export * from "./Authenticated/TaskScreen" diff --git a/apps/mobile/app/services/client/requests/tasks.ts b/apps/mobile/app/services/client/requests/tasks.ts index 48dd550b6..06a0df130 100644 --- a/apps/mobile/app/services/client/requests/tasks.ts +++ b/apps/mobile/app/services/client/requests/tasks.ts @@ -1,91 +1,147 @@ /* eslint-disable camelcase */ -import { DeleteReponse, PaginationResponse } from '../../interfaces/IDataResponse'; -import { ICreateTask, ITeamTask } from '../../interfaces/ITask'; -import { serverFetch } from '../fetch'; +import { DeleteReponse, PaginationResponse, CreateReponse } from "../../interfaces/IDataResponse" +import { ICreateTask, ITeamTask } from "../../interfaces/ITask" +import { serverFetch } from "../fetch" export function getTeamTasksRequest({ tenantId, organizationId, bearer_token, - relations = ['tags', 'teams', 'members', 'members.user', 'creator'] + relations = ["tags", "teams", "members", "members.user", "creator"], }: { - tenantId: string; - organizationId: string; - bearer_token: string; - relations?: string[]; + tenantId: string + organizationId: string + bearer_token: string + relations?: string[] }) { const params = { - 'where[organizationId]': organizationId, - 'where[tenantId]': tenantId, - 'join[alias]': 'task', - 'join[leftJoinAndSelect][members]': 'task.members', - 'join[leftJoinAndSelect][user]': 'members.user' - } as { [x: string]: string }; + "where[organizationId]": organizationId, + "where[tenantId]": tenantId, + "join[alias]": "task", + "join[leftJoinAndSelect][members]": "task.members", + "join[leftJoinAndSelect][user]": "members.user", + } as { [x: string]: string } relations.forEach((rl, i) => { - params[`relations[${i}]`] = rl; - }); + params[`relations[${i}]`] = rl + }) - const query = new URLSearchParams(params); + const query = new URLSearchParams(params) return serverFetch>({ path: `/tasks/team?${query.toString()}`, - method: 'GET', + method: "GET", bearer_token, - tenantId - }); + tenantId, + }) +} + +export function getTaskByIdRequest({ + tenantId, + organizationId, + bearer_token, + relations = [ + "tags", + "teams", + "members", + "members.user", + "creator", + "linkedIssues", + "linkedIssues.taskTo", + "linkedIssues.taskFrom", + "parent", + "children", + ], + taskId, +}: { + tenantId: string + organizationId: string + bearer_token: string + taskId: string + relations?: string[] +}) { + const obj = { + "where[organizationId]": organizationId, + "where[tenantId]": tenantId, + "join[alias]": "task", + "join[leftJoinAndSelect][members]": "task.members", + "join[leftJoinAndSelect][user]": "members.user", + includeRootEpic: "true", + } as Record + + relations.forEach((rl, i) => { + obj[`relations[${i}]`] = rl + }) + + const query = new URLSearchParams(obj) + + return serverFetch>({ + path: `/tasks/${taskId}?${query.toString()}`, + method: "GET", + bearer_token, + tenantId, + }) } export function deleteTaskRequest({ tenantId, taskId, - bearer_token + bearer_token, }: { - tenantId: string; - taskId: string; - bearer_token: string; + tenantId: string + taskId: string + bearer_token: string }) { return serverFetch({ path: `/tasks/${taskId}?tenantId=${tenantId}`, - method: 'DELETE', + method: "DELETE", bearer_token, - tenantId - }); + tenantId, + }) } -export function createTaskRequest({ data, bearer_token }: { data: ICreateTask; bearer_token: string }) { +export function createTaskRequest({ + data, + bearer_token, +}: { + data: ICreateTask + bearer_token: string +}) { return serverFetch({ - path: '/tasks', - method: 'POST', + path: "/tasks", + method: "POST", body: data, - bearer_token - }); + bearer_token, + }) } -export function updateTaskRequest({ data, id }: { data: ITeamTask; id: string }, bearer_token: string) { +export function updateTaskRequest( + { data, id }: { data: ITeamTask; id: string }, + bearer_token: string, +) { return serverFetch({ path: `/tasks/${id}`, - method: 'PUT', + method: "PUT", body: data, - bearer_token - }); + bearer_token, + }) } export function deleteEmployeeFromTasksRequest({ tenantId, employeeId, organizationTeamId, - bearer_token + bearer_token, }: { - tenantId: string; - employeeId: string; - organizationTeamId: string; - bearer_token: string; + tenantId: string + employeeId: string + organizationTeamId: string + bearer_token: string }) { return serverFetch({ path: `/tasks/employee/${employeeId}?organizationTeamId=${organizationTeamId}`, - method: 'DELETE', + method: "DELETE", bearer_token, - tenantId - }); + tenantId, + }) } diff --git a/apps/mobile/app/services/hooks/features/useTeamTasks.ts b/apps/mobile/app/services/hooks/features/useTeamTasks.ts index 1c63e2cac..47c90e3b5 100644 --- a/apps/mobile/app/services/hooks/features/useTeamTasks.ts +++ b/apps/mobile/app/services/hooks/features/useTeamTasks.ts @@ -6,6 +6,7 @@ import { createTaskRequest, deleteEmployeeFromTasksRequest, deleteTaskRequest, + getTaskByIdRequest, updateTaskRequest, } from "../../client/requests/tasks" import { ICreateTask, ITeamTask } from "../../interfaces/ITask" @@ -25,6 +26,8 @@ export function useTeamTasks() { activeTaskId, setActiveTaskId, activeTask, + detailedTask, + setDetailedTask, }, } = useStores() @@ -103,6 +106,20 @@ export function useTeamTasks() { }) }, [activeTeamId, firstLoad]) + const getTaskById = useCallback( + async (taskId: string) => { + const { data } = await getTaskByIdRequest({ + tenantId, + taskId, + bearer_token: authToken, + organizationId, + }) + + setDetailedTask(data) + }, + [setDetailedTask], + ) + // Delete a Task const deleteTask = useCallback( async (task: (typeof teamTasks)[0]) => { @@ -287,6 +304,8 @@ export function useTeamTasks() { return { createNewTask, + getTaskById, + detailedTask, deleteTask, updateTask, setActiveTeamTask, diff --git a/apps/mobile/app/services/interfaces/IDataResponse.ts b/apps/mobile/app/services/interfaces/IDataResponse.ts index c9e7162f6..67b7743ca 100644 --- a/apps/mobile/app/services/interfaces/IDataResponse.ts +++ b/apps/mobile/app/services/interfaces/IDataResponse.ts @@ -1,22 +1,27 @@ interface IResponseMetadata { - status: ResStatusEnum; - message: string; - error: Error | null; + status: ResStatusEnum + message: string + error: Error | null } -export type IDataResponse = IResponseMetadata & T; +export type IDataResponse = IResponseMetadata & T export enum ResStatusEnum { - error = 'error', - success = 'success' + error = "error", + success = "success", } export type PaginationResponse = { - items: T[]; - total: number; -}; + items: T[] + total: number +} + +export type CreateReponse = { + data: T + response: any +} export type DeleteReponse = { - raw: string[]; - affected: number; -}; + raw: string[] + affected: number +}