From 4697f249da6b62412e4e37c295472fc0f83893ac Mon Sep 17 00:00:00 2001
From: Syntax <2079305+TheUltDev@users.noreply.github.com>
Date: Sun, 14 Jul 2024 14:45:46 -0500
Subject: [PATCH] Misc
---
client/package.json | 1 +
client/src/app/base/Menu.tsx | 2 +-
client/src/app/base/MenuItem.tsx | 2 +-
client/src/app/base/Page.tsx | 2 +-
client/src/app/data/index.tsx | 24 +-
client/src/app/data/schema.ts | 3 -
client/src/events/routes/ScreenCalendar.tsx | 77 ++++++-
client/src/home/base/AiPrompt.tsx | 18 +-
client/src/home/hooks/useAI.tsx | 52 ++---
client/src/home/hooks/useClock.ts | 5 +-
client/src/home/hooks/useLocation.ts | 31 ++-
client/src/home/hooks/useWeather.ts | 6 +-
client/src/home/routes/ScreenHome.tsx | 7 +-
client/src/settings/hooks/useSettings.ts | 74 +++++++
client/src/settings/routes/ScreenSettings.tsx | 94 ++------
pnpm-lock.yaml | 14 ++
translations/ar.po | 208 ++++++++++--------
translations/en.po | 122 ++++++----
translations/ja.po | 172 +++++++++------
translations/ru.po | 172 +++++++++------
20 files changed, 656 insertions(+), 430 deletions(-)
create mode 100644 client/src/settings/hooks/useSettings.ts
diff --git a/client/package.json b/client/package.json
index a343b78..db8340a 100644
--- a/client/package.json
+++ b/client/package.json
@@ -40,6 +40,7 @@
"@lingui/react": "^4.11.2",
"@marceloterreiro/flash-calendar": "^1.0.0",
"@react-native-community/checkbox": "^0.5.17",
+ "@react-native-community/geolocation": "^3.3.0",
"@react-native-community/netinfo": "^11.3.2",
"@react-native-community/slider": "^4.5.2",
"@react-native-picker/picker": "^2.7.7",
diff --git a/client/src/app/base/Menu.tsx b/client/src/app/base/Menu.tsx
index 69c2dfa..958d4b0 100644
--- a/client/src/app/base/Menu.tsx
+++ b/client/src/app/base/Menu.tsx
@@ -80,7 +80,7 @@ export function Menu(props: MenuProps) {
const stylesheet = createStyleSheet(theme => ({
bg: {
flex: 1,
- backgroundColor: theme.colors.secondary,
+ backgroundColor: theme.colors.background,
},
root: {
flex: 1,
diff --git a/client/src/app/base/MenuItem.tsx b/client/src/app/base/MenuItem.tsx
index 2b5bff1..cd28852 100644
--- a/client/src/app/base/MenuItem.tsx
+++ b/client/src/app/base/MenuItem.tsx
@@ -21,7 +21,7 @@ export function MenuItem(props: MenuItemProps) {
const itemActive = props.path === decodeURIComponent(pathname);
const isDarkMode = scheme === 'dark';
const backgroundColor = isDarkMode
- ? 'rgba(255, 255, 255, 0.15)'
+ ? 'rgba(255, 255, 255, 0.09)'
: 'rgba(0, 0, 0, 0.07)';
return (
diff --git a/client/src/app/base/Page.tsx b/client/src/app/base/Page.tsx
index 9084bc0..37e4d07 100644
--- a/client/src/app/base/Page.tsx
+++ b/client/src/app/base/Page.tsx
@@ -45,7 +45,6 @@ const stylesheet = createStyleSheet(theme => ({
alignSelf: 'center',
gap: theme.display.space5,
padding: theme.display.space5,
- backgroundColor: theme.colors.background,
minWidth: {
initial: '100%',
md: 900,
@@ -67,6 +66,7 @@ const stylesheet = createStyleSheet(theme => ({
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'flex-start',
+ marginTop: theme.display.space5,
marginBottom: theme.display.space3,
},
title: {
diff --git a/client/src/app/data/index.tsx b/client/src/app/data/index.tsx
index 045fdcb..32ed087 100644
--- a/client/src/app/data/index.tsx
+++ b/client/src/app/data/index.tsx
@@ -6,7 +6,9 @@ export * from './schema';
export const createDatabase = () => _.createEvolu($.Database, {
indexes: $.indexes,
- ...(__DEV__ && {syncUrl: 'http://localhost:4000'}),
+ syncUrl: __DEV__
+ ? 'http://localhost:4000'
+ : 'https://evolu.world',
initialData: (evolu) => {
// Initial profile for new account
evolu.create('profile', {
@@ -36,7 +38,7 @@ export function Database(props: React.PropsWithChildren) {
)
}
-export const profile = evolu.createQuery((db) => db
+export const profile = evolu.createQuery(db => db
.selectFrom('profile')
.select(['id', 'name', 'groqKey', 'groqModel'])
.where('isDeleted', 'is not', _.cast(true))
@@ -44,7 +46,7 @@ export const profile = evolu.createQuery((db) => db
.limit(1)
);
-export const label = evolu.createQuery((db) => db
+export const label = evolu.createQuery(db => db
.selectFrom('label')
.select(['id', 'name', 'data'])
.where('isDeleted', 'is not', _.cast(true))
@@ -54,7 +56,21 @@ export const label = evolu.createQuery((db) => db
.orderBy('createdAt')
);
-export const note = evolu.createQuery((db) => db
+export const prompts = evolu.createQuery(db => db
+ .selectFrom('aiPrompt')
+ .select(['id'])
+ .where('isDeleted', 'is not', _.cast(true))
+ .orderBy('createdAt')
+);
+
+export const prompt = evolu.createQuery(db => db
+ .selectFrom('aiPrompt')
+ .select(['id', 'model', 'prompt', 'response', 'isMultiline', 'createdAt'])
+ .where('isDeleted', 'is not', _.cast(true))
+ .limit(1)
+);
+
+export const note = evolu.createQuery(db => db
.selectFrom('todo')
.select(['id', 'title', 'isCompleted', 'labelId'])
.where('isDeleted', 'is not', _.cast(true))
diff --git a/client/src/app/data/schema.ts b/client/src/app/data/schema.ts
index 7efee27..2530715 100644
--- a/client/src/app/data/schema.ts
+++ b/client/src/app/data/schema.ts
@@ -15,7 +15,6 @@ export const NonEmptyString50 = _.String.pipe(
export type LabelData = typeof LabelData.Type;
export const LabelData = S.Struct({icon: S.String, color: S.String});
-
/**
* Ids
*/
@@ -68,7 +67,6 @@ export const LabelTable = _.table({
data: S.NullOr(LabelData),
});
-
/**
* Databases
*/
@@ -81,7 +79,6 @@ export const Database = _.database({
todo: TodoTable,
});
-
/**
* Indexes
*
diff --git a/client/src/events/routes/ScreenCalendar.tsx b/client/src/events/routes/ScreenCalendar.tsx
index 6265818..2e8c2e1 100644
--- a/client/src/events/routes/ScreenCalendar.tsx
+++ b/client/src/events/routes/ScreenCalendar.tsx
@@ -1,26 +1,63 @@
-import {View} from 'react-native';
+import {Trans} from '@lingui/macro';
+import {Icon} from 'react-exo/icon';
+import {View, Text} from 'react-native';
import {useStyles, createStyleSheet} from 'react-native-unistyles';
import {useDateRange, toDateId, Calendar} from 'react-exo/calendar';
import {useCalendarTheme} from 'events/hooks/useCalendarTheme';
import {useLocale} from 'settings/hooks/useLocale';
+import {Alert} from 'design';
const today = toDateId(new Date());
export default function ScreenCalendar() {
const {styles} = useStyles(stylesheet);
+ const calendarTheme = useCalendarTheme();
const [locale] = useLocale();
const range = useDateRange();
- const theme = useCalendarTheme();
+
+ const hasEvent = false;
+ const demoEventStartDate = new Date('2024-07-28T12:00:00');
+ const demoEventEndDate = new Date('2024-07-28T14:00:00');
+ const demoEventTitle = 'Birthday – Shiner, TX';
+ const demoEventDesc = demoEventStartDate.toLocaleDateString(locale, {
+ weekday: 'short',
+ month: 'long',
+ day: 'numeric',
+ }) + ' • ' + demoEventStartDate.toLocaleTimeString(locale, {
+ hour: 'numeric',
+ minute: '2-digit',
+ }) + ' - ' + demoEventEndDate.toLocaleTimeString(locale, {
+ hour: 'numeric',
+ minute: '2-digit',
+ });
return (
+
+ {hasEvent
+ ?
+ }
+ />
+ :
+
+ No events scheduled.
+
+
+ }
+
);
}
@@ -28,7 +65,37 @@ export default function ScreenCalendar() {
const stylesheet = createStyleSheet(theme => ({
root: {
flex: 1,
- maxWidth: 800,
- paddingHorizontal: theme.display.space5,
+ flexDirection: {
+ initial: 'column',
+ xs: 'row',
+ },
+ },
+ panel: {
+ flex: 1,
+ gap: theme.display.space3,
+ flexWrap: 'wrap',
+ padding: theme.display.space5,
+ borderColor: theme.colors.secondary,
+ borderLeftWidth: {
+ initial: 0,
+ xs: 1,
+ },
+ borderTopWidth: {
+ initial: 1,
+ xs: 0,
+ },
+ },
+ empty: {
+ flex: 1,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ emptyText: {
+ fontFamily: theme.font.family,
+ fontSize: theme.font.contentSize,
+ fontWeight: theme.font.contentWeight,
+ lineHeight: theme.font.contentHeight,
+ letterSpacing: theme.font.contentSpacing,
+ color: theme.colors.mutedForeground,
},
}));
diff --git a/client/src/home/base/AiPrompt.tsx b/client/src/home/base/AiPrompt.tsx
index 3fb8a60..ee5cf5c 100644
--- a/client/src/home/base/AiPrompt.tsx
+++ b/client/src/home/base/AiPrompt.tsx
@@ -5,11 +5,11 @@ import {useRef, useState} from 'react';
import {useStyles, createStyleSheet} from 'react-native-unistyles';
import {Text, View, TextInput, Pressable} from 'react-native';
import {Link} from 'react-exo/navigation';
+import {Icon} from 'react-exo/icon';
import {Markdown} from 'app/base/Markdown';
import {PageLoading} from 'app/base/PageLoading';
import {formatDate} from 'home/utils/time';
import {useAI} from 'home/hooks/useAI';
-import {Icon} from 'react-exo/icon';
import {profile} from 'app/data';
const DEFAULT_MODEL = 'llama3-8b-8192';
@@ -22,7 +22,7 @@ export function AiPrompt() {
const apiKey = row?.groqKey || '';
const model = row?.groqModel || DEFAULT_MODEL;
const input = useRef(null);
- const ai = useAI(apiKey, model, input);
+ const ai = useAI(input, model, apiKey);
return (
<>
@@ -31,15 +31,15 @@ export function AiPrompt() {
ai.navigate(e)}
autoFocus
readOnly
/>
- {`${formatDate(new Date(ai.response?.[2]))} (${ai.response?.[4] ?? DEFAULT_MODEL})`}
+ {`${formatDate(new Date(ai.response?.createdAt ?? ''))} (${ai.response?.model ?? DEFAULT_MODEL})`}
}
@@ -50,7 +50,7 @@ export function AiPrompt() {
style={styles.input}
placeholder={apiKey ? t(i18n)`Ask anything...` : t(i18n)`Please set your Groq API Key`}
placeholderTextColor={theme.colors.mutedForeground}
- onSubmitEditing={(e) => e.nativeEvent.text && ai.prompt(e.nativeEvent.text, multiline)}
+ onSubmitEditing={(e) => e.nativeEvent.text && ai.promptText(e.nativeEvent.text, multiline)}
onKeyPress={(e) => ai.navigate(e, multiline ? () => setMultiline(false) : undefined)}
blurOnSubmit={false}
multiline={multiline}
@@ -89,7 +89,7 @@ export function AiPrompt() {
onPress={() => {
// @ts-ignore
const text = input.current?.value;
- if (text) ai.prompt(text, true);
+ if (text) ai.promptText(text, true);
}}>
{ai.dirty && ai.response && !ai.loading &&
-
+
}
{ai.loading &&
diff --git a/client/src/home/hooks/useAI.tsx b/client/src/home/hooks/useAI.tsx
index ad11b85..b2b438d 100644
--- a/client/src/home/hooks/useAI.tsx
+++ b/client/src/home/hooks/useAI.tsx
@@ -1,55 +1,49 @@
+import {t} from '@lingui/macro';
import {generateText} from 'ai';
import {createOpenAI} from '@ai-sdk/openai';
import {useState, useMemo, useCallback} from 'react';
-import {useDispatch, useSelector} from 'react-redux';
+import {useQuery, useEvolu, cast} from '@evolu/react-native';
+import {useLingui} from '@lingui/react';
+import {prompts, prompt} from 'app/data';
import {toast} from 'react-exo/toast';
-import home from 'home/store';
-
const baseURL = 'https://api.groq.com/openai/v1';
-import type {State} from 'app/store';
import type {TextInput, NativeSyntheticEvent, TextInputKeyPressEventData} from 'react-native';
export function useAI(
- apiKey: string,
- model: string,
input: React.RefObject,
+ model: string,
+ apiKey: string,
) {
const [index, setIndex] = useState(null);
const [dirty, setDirty] = useState(false);
const [loading, setLoading] = useState(false);
- const dispatch = useDispatch();
const provider = useMemo(() => createOpenAI({baseURL, apiKey}), [apiKey]);
- const response = useSelector((state: State) => home.selectors.getPrompt(state, index ?? 1));
- const history = useSelector(home.selectors.getPromptCount);
+ const apiModel = useMemo(() => provider(model), [model, provider]);
+ //const response = useSelector((state: State) => home.selectors.getPrompt(state, index ?? 1));
+ const {create} = useEvolu();
+ const {rows} = useQuery(prompts);
+ const {row} = useQuery(prompt);
+ const {i18n} = useLingui();
- const prompt = useCallback(async (prompt: string, multiLine?: boolean) => {
+ const promptText = useCallback(async (prompt: string, multi: boolean = false) => {
setLoading(true);
if (prompt.length > 0) {
try {
- const {text} = await generateText({
- model: provider(model),
- prompt,
- });
- dispatch(home.actions.addPrompt([
- prompt,
- text,
- Date.now(),
- multiLine ?? false,
- model,
- ]));
+ const {text} = await generateText({model: apiModel, prompt});
+ create('prompts', {prompt, text, model, isMultiLine: cast(multi)});
setDirty(true);
} catch (e) {
toast({
- title: 'Groq Failure',
- message: (e as Error).message,
preset: 'error',
+ title: t(i18n)`Groq Failure`,
+ message: (e as Error).message,
});
}
}
setLoading(false);
- }, [model]);
+ }, [apiModel]);
const navigate = useCallback((
e: NativeSyntheticEvent,
@@ -66,7 +60,7 @@ export function useAI(
e.preventDefault();
} else if (key === 'ArrowUp') {
if (clearMulti) return;
- if (i >= history) return;
+ if (i >= rows.length) return;
setDirty(true);
setIndex(i + 1);
e.preventDefault();
@@ -78,14 +72,14 @@ export function useAI(
input.current?.clear();
input.current?.focus();
}
- }, [index, history]);
+ }, [index, rows]);
return {
- response,
loading,
- prompt,
+ promptText,
dirty,
navigate,
- archive: response && index !== null,
+ response: row,
+ archive: row && index !== null,
};
}
diff --git a/client/src/home/hooks/useClock.ts b/client/src/home/hooks/useClock.ts
index b236f84..67f4d46 100644
--- a/client/src/home/hooks/useClock.ts
+++ b/client/src/home/hooks/useClock.ts
@@ -1,11 +1,8 @@
import {useEffect, useState} from 'react';
import {getCurrentTime} from 'home/utils/time';
-export function useClock() {
- const timeFormat: 'short' | 'medium' | 'long' = 'short';
+export function useClock(timeFormat: 'short' | 'medium' | 'long' = 'short') {
const [clock, setClock] = useState(getCurrentTime(timeFormat));
-
- // Update every minute
useEffect(() => {
const i = setInterval(() =>
setClock(getCurrentTime(timeFormat)), 1000);
diff --git a/client/src/home/hooks/useLocation.ts b/client/src/home/hooks/useLocation.ts
index b60cb2b..75abef6 100644
--- a/client/src/home/hooks/useLocation.ts
+++ b/client/src/home/hooks/useLocation.ts
@@ -1,21 +1,36 @@
+import {t} from '@lingui/macro';
+import {toast} from 'react-exo/toast';
+import {useLingui} from '@lingui/react';
import {useEffect, useState} from 'react';
+import Geolocation from '@react-native-community/geolocation';
export type Location = [number, number];
export function useLocation() {
const [location, setLocation] = useState([0,0]);
+ const {i18n} = useLingui();
useEffect(() => {
- const query = () => {
- navigator.geolocation.getCurrentPosition((position) => {
- console.log(position);
+ const watchId = Geolocation.watchPosition(
+ (position) => {
const {latitude, longitude} = position.coords;
setLocation([latitude, longitude]);
- });
- }
- query();
- const i = setInterval(query, 1000);
- return () => clearInterval(i);
+ },
+ (error) => {
+ toast({
+ preset: 'error',
+ title: t(i18n)`Geo Location Failure`,
+ message: error.message,
+ });
+ },
+ {
+ enableHighAccuracy: true,
+ interval: 2000,
+ distanceFilter: 2,
+ fastestInterval: 1000,
+ },
+ );
+ return () => Geolocation.clearWatch(watchId);
}, []);
return location;
diff --git a/client/src/home/hooks/useWeather.ts b/client/src/home/hooks/useWeather.ts
index 961d7f9..94de71d 100644
--- a/client/src/home/hooks/useWeather.ts
+++ b/client/src/home/hooks/useWeather.ts
@@ -1,6 +1,6 @@
import {useEffect, useState} from 'react';
import {getCurrentWeather} from 'home/utils/weather';
-import {useLocation} from './useLocation';
+import {useLocation} from 'home/hooks/useLocation';
import type {Weather} from 'home/utils/weather';
@@ -10,16 +10,14 @@ export function useWeather() {
// Update when location changes
useEffect(() => {
- console.log(lat, lon);
if (!lat || !lon) return;
(async () => {
const current = await getCurrentWeather(lat, lon);
- console.log(current);
setWeather(current);
})();
}, [lat, lon]);
return weather
? `${weather.apparentTemperature}°F ${weather.relativeHumidity2m}% H`
- : '';
+ : 'Loading...';
}
diff --git a/client/src/home/routes/ScreenHome.tsx b/client/src/home/routes/ScreenHome.tsx
index dd35239..b2c76da 100644
--- a/client/src/home/routes/ScreenHome.tsx
+++ b/client/src/home/routes/ScreenHome.tsx
@@ -1,5 +1,5 @@
-import {Trans as T} from '@lingui/macro';
import {Trans} from '@lingui/react';
+import {Trans as T} from '@lingui/macro';
import {Text, View} from 'react-native';
import {useStyles, createStyleSheet} from 'react-native-unistyles';
import {useQuery} from '@evolu/react-native';
@@ -14,14 +14,15 @@ export default function ScreenHome() {
const {row} = useQuery(profile);
const {styles} = useStyles(stylesheet);
const weather = useWeather();
- const clock = useClock();
+ const clock = useClock('medium');
return (
}
message={row?.name
? {`Welcome, ${row.name}`}
- : {`Welcome, Human`}}
+ : {`Welcome, Human`}
+ }
widget={
diff --git a/client/src/settings/hooks/useSettings.ts b/client/src/settings/hooks/useSettings.ts
new file mode 100644
index 0000000..104523a
--- /dev/null
+++ b/client/src/settings/hooks/useSettings.ts
@@ -0,0 +1,74 @@
+import {t} from '@lingui/macro';
+import {alert} from 'react-exo/toast';
+import {useLingui} from '@lingui/react';
+import {useEvolu, useOwner, useQuery, parseMnemonic, NonEmptyString1000} from '@evolu/react-native';
+import {Effect, Either, Function} from 'effect';
+import {profile} from 'app/data';
+import * as S from '@effect/schema/Schema';
+
+import {Database, NonEmptyString50} from 'app/data/schema';
+
+export function useSettings() {
+ const evolu = useEvolu();
+ const owner = useOwner();
+ const {row} = useQuery(profile);
+ const {i18n} = useLingui();
+
+ const updateName = (text: string) => {
+ if (!row?.id) return;
+ Either.match(S.decodeUnknownEither(NonEmptyString50)(text), {
+ onLeft: Function.constVoid,
+ onRight: (name) => evolu.update('profile', {name, id: row.id}),
+ });
+ };
+
+ const updateGroqKey = (text: string) => {
+ if (!row?.id) return;
+ Either.match(S.decodeUnknownEither(NonEmptyString1000)(text), {
+ onLeft: Function.constVoid,
+ onRight: (groqKey) => evolu.update('profile', {groqKey, id: row.id}),
+ });
+ };
+
+ const updateGroqModel = (text: string) => {
+ if (!row?.id) return;
+ Either.match(S.decodeUnknownEither(NonEmptyString50)(text), {
+ onLeft: Function.constVoid,
+ onRight: (groqModel) => evolu.update('profile', {groqModel, id: row.id}),
+ });
+ };
+
+ const resetPrompts = () => {
+ if (!window.confirm(t(i18n)`Are you sure you want to reset your prompt history?`)) return;
+ // dispatch(home.actions.clearPrompts());
+ alert({
+ title: t(i18n)`Prompt History Reset`,
+ message: t(i18n)`Your prompt history has been reset.`,
+ preset: 'done',
+ });
+ };
+
+ const resetOwner = () => {
+ if (!window.confirm(t(i18n)`Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone.`)) return;
+ evolu.resetOwner();
+ };
+
+ const changeOwner = (key: string) => {
+ if (!key || key === owner?.mnemonic) return;
+ if (!window.confirm(t(i18n)`Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone.`)) return;
+ Effect.runPromise(parseMnemonic(key))
+ .then(parsed => evolu.restoreOwner(parsed, {reload: true}))
+ .catch(error => alert(error));
+ };
+
+ return {
+ owner,
+ profile: row,
+ updateName,
+ updateGroqKey,
+ updateGroqModel,
+ resetPrompts,
+ resetOwner,
+ changeOwner,
+ };
+}
diff --git a/client/src/settings/routes/ScreenSettings.tsx b/client/src/settings/routes/ScreenSettings.tsx
index e3c0644..562ce9e 100644
--- a/client/src/settings/routes/ScreenSettings.tsx
+++ b/client/src/settings/routes/ScreenSettings.tsx
@@ -1,84 +1,25 @@
-import * as S from '@effect/schema/Schema';
import {View, Text, TextInput, Platform} from 'react-native';
-import {Effect, Either, Function} from 'effect';
import {Trans, t} from '@lingui/macro';
-import {alert} from 'react-exo/toast';
import {Picker} from 'react-exo/picker';
import {useState} from 'react';
import {useLingui} from '@lingui/react';
-import {useDispatch} from 'react-redux';
-import {useEvolu, useOwner, useQuery, parseMnemonic, NonEmptyString1000} from '@evolu/react-native';
import {useStyles, createStyleSheet} from 'react-native-unistyles';
+import {useSettings} from 'settings/hooks/useSettings';
import {useScheme} from 'settings/hooks/useScheme';
import {useLocale} from 'settings/hooks/useLocale';
import {Identicon} from 'app/base/Identicon';
import {Page} from 'app/base/Page';
import {Button} from 'design';
import {locales} from 'config/locales';
-import {profile} from 'app/data';
-import home from 'home/store';
-
-import {Database, NonEmptyString50} from 'app/data/schema';
export default function ScreenSettings() {
- const evolu = useEvolu();
- const owner = useOwner();
- const {row} = useQuery(profile);
+ const settings = useSettings();
const {i18n} = useLingui();
const {styles, theme} = useStyles(stylesheet);
const [locale, setLocale] = useLocale(true);
const [scheme, setScheme] = useScheme(true);
const [isKeyVisible, setKeyVisible] = useState(false);
- const dispatch = useDispatch();
-
- const resetPrompts = () => {
- if (!window.confirm(t(i18n)`Are you sure you want to reset your prompt history?`)) return;
- dispatch(home.actions.clearPrompts());
- alert({
- title: t(i18n)`Prompt History Reset`,
- message: t(i18n)`Your prompt history has been reset.`,
- preset: 'done',
- });
- };
-
- const resetOwner = () => {
- if (!window.confirm(t(i18n)`Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone.`)) return;
- evolu.resetOwner();
- };
-
- const changeOwner = (key: string) => {
- if (!key || key === owner?.mnemonic) return;
- if (!window.confirm(t(i18n)`Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone.`)) return;
- Effect.runPromise(parseMnemonic(key))
- .then(parsed => evolu.restoreOwner(parsed, {reload: true}))
- .catch(error => alert(error));
- };
-
- const updateName = (text: string) => {
- if (!row?.id) return;
- Either.match(S.decodeUnknownEither(NonEmptyString50)(text), {
- onLeft: Function.constVoid,
- onRight: (name) => evolu.update('profile', {name, id: row.id}),
- });
- };
-
- const updateGroqKey = (text: string) => {
- if (!row?.id) return;
- Either.match(S.decodeUnknownEither(NonEmptyString1000)(text), {
- onLeft: Function.constVoid,
- onRight: (groqKey) => evolu.update('profile', {groqKey, id: row.id}),
- });
- };
-
- const updateGroqModel = (text: string) => {
- if (!row?.id) return;
- Either.match(S.decodeUnknownEither(NonEmptyString50)(text), {
- onLeft: Function.constVoid,
- onRight: (groqModel) => evolu.update('profile', {groqModel, id: row.id}),
- });
- };
-
return (
Settings}
@@ -87,7 +28,7 @@ export default function ScreenSettings() {
- Account
+ Profile
@@ -102,8 +43,8 @@ export default function ScreenSettings() {
@@ -123,7 +64,7 @@ export default function ScreenSettings() {
style={styles.input}
selectTextOnFocus
secureTextEntry={!isKeyVisible}
- defaultValue={owner?.mnemonic}
+ defaultValue={settings.owner?.mnemonic}
placeholder={t(i18n)`Enter your mnemonic phrase`}
placeholderTextColor={theme.colors.mutedForeground}
importantForAutofill="no"
@@ -133,7 +74,7 @@ export default function ScreenSettings() {
onFocus={() => setKeyVisible(true)}
onBlur={e => {
setKeyVisible(false);
- changeOwner(e.nativeEvent.text);
+ settings.changeOwner(e.nativeEvent.text);
}}
/>
@@ -211,8 +152,8 @@ export default function ScreenSettings() {
dropdownIconColor={theme.colors.foreground}
selectedValue={undefined}
onValueChange={undefined}>
-
-
+
+
@@ -232,8 +173,8 @@ export default function ScreenSettings() {
dropdownIconColor={theme.colors.foreground}
selectedValue={undefined}
onValueChange={undefined}>
-
-
+
+
@@ -256,9 +197,9 @@ export default function ScreenSettings() {
style={styles.input}
selectTextOnFocus
placeholder={t(i18n)`Enter api key`}
- defaultValue={row?.groqKey?.toString()}
+ defaultValue={settings.profile?.groqKey?.toString()}
placeholderTextColor={theme.colors.mutedForeground}
- onBlur={e => updateGroqKey(e.nativeEvent.text)}
+ onBlur={e => settings.updateGroqKey(e.nativeEvent.text)}
/>
@@ -276,8 +217,8 @@ export default function ScreenSettings() {
style={styles.select}
itemStyle={styles.selectItem}
dropdownIconColor={theme.colors.foreground}
- selectedValue={row?.groqModel?.toString()}
- onValueChange={updateGroqModel}>
+ selectedValue={settings.profile?.groqModel?.toString()}
+ onValueChange={settings.updateGroqModel}>
@@ -304,7 +245,7 @@ export default function ScreenSettings() {
label={t(i18n)`Delete Prompts`}
mode="Destructive"
state="Default"
- onPress={resetPrompts}
+ onPress={settings.resetPrompts}
/>
@@ -322,7 +263,7 @@ export default function ScreenSettings() {
label={t(i18n)`Delete Database`}
mode="Destructive"
state="Default"
- onPress={resetOwner}
+ onPress={settings.resetOwner}
/>
@@ -332,7 +273,6 @@ export default function ScreenSettings() {
);
}
-
const stylesheet = createStyleSheet(theme => ({
content: {
...Platform.select({
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 893e66a..4cfec06 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -64,6 +64,9 @@ importers:
'@react-native-community/checkbox':
specifier: ^0.5.17
version: 0.5.17(react-native-windows@0.74.11)(react-native@0.74.3)(react@18.2.0)
+ '@react-native-community/geolocation':
+ specifier: ^3.3.0
+ version: 3.3.0(react-native@0.74.3)(react@18.2.0)
'@react-native-community/netinfo':
specifier: ^11.3.2
version: 11.3.2(react-native@0.74.3)
@@ -7617,6 +7620,17 @@ packages:
- supports-color
- utf-8-validate
+ /@react-native-community/geolocation@3.3.0(react-native@0.74.3)(react@18.2.0):
+ resolution: {integrity: sha512-7DFeuotH7m7ImoXffN3TmlGSFn1XjvsaphPort0XZKipssYbdHiKhVVWG+jzisvDhcXikUc6nbUJgddVBL6RDg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+ dependencies:
+ react: 18.2.0
+ react-native: 0.74.3(@babel/core@7.24.8)(@babel/preset-env@7.24.8)(@types/react@18.2.79)(react@18.2.0)
+ dev: false
+
/@react-native-community/netinfo@11.3.2(react-native@0.74.3):
resolution: {integrity: sha512-YsaS3Dutnzqd1BEoeC+DEcuNJedYRkN6Ef3kftT5Sm8ExnCF94C/nl4laNxuvFli3+Jz8Df3jO25Jn8A9S0h4w==}
peerDependencies:
diff --git a/translations/ar.po b/translations/ar.po
index 06e3f2c..67b47e4 100644
--- a/translations/ar.po
+++ b/translations/ar.po
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"POT-Creation-Date: 2024-07-01 21:00-0500\n"
+"POT-Creation-Date: 2024-07-13 12:42-0500\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -16,74 +16,78 @@ msgstr ""
#: ../../client/src/dev/routes/ScreenDesign.tsx:12
#: ../../client/src/dev/routes/ScreenLibrary.tsx:16
msgid "{0} components"
-msgstr "{0} مكونت"
+msgstr "{0} مكونات"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:101
+#: ../../client/src/settings/routes/ScreenSettings.tsx:59
msgid "A mnemonic phrase for authentication."
-msgstr ""
+msgstr "عبارة تذكيرية للمصادقة."
#: ../../client/src/tasks/base/TasksInput.tsx:21
msgid "Add a task"
-msgstr "إضافة تسجيل"
+msgstr "أضف مهمة"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:229
+#: ../../client/src/settings/routes/ScreenSettings.tsx:184
msgid "AI"
-msgstr "ذكاء الصوت"
+msgstr "الذكاء الاصطناعي"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:300
+#: ../../client/src/settings/routes/ScreenSettings.tsx:255
msgid "All Data"
msgstr "كل البيانات"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:57
+#: ../../client/src/settings/hooks/useSettings.ts:58
msgid "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone."
-msgstr ""
+msgstr "هل أنت متأكد أنك تريد تغيير مفتاح المالك؟ سيؤدي ذلك إلى إعادة تعيين قاعدة البيانات المحلية. لا يمكن التراجع عن هذا الإجراء."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:49
+#: ../../client/src/settings/hooks/useSettings.ts:52
msgid "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone."
-msgstr ""
+msgstr "هل أنت متأكد أنك تريد إعادة تعيين قاعدة البيانات المحلية؟ إذا لم يتم نسخ البيانات احتياطيًا على جهاز آخر، فسيتم فقدها. لا يمكن التراجع عن هذا الإجراء."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:36
+#: ../../client/src/settings/hooks/useSettings.ts:42
msgid "Are you sure you want to reset your prompt history?"
-msgstr "هل أنت متأكد أنك تريد إعادة تعيين سجل الاستعلامات؟"
+msgstr "هل أنت متأكد أنك تريد إعادة تعيين سجل المطالبات الخاص بك؟"
-#: ../../client/src/home/base/AiPrompt.tsx:49
+#: ../../client/src/home/base/AiPrompt.tsx:51
msgid "Ask anything..."
-msgstr "استعلام أي شيء..."
+msgstr "اسأل أي شيء..."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:150
-#: ../../client/src/settings/routes/ScreenSettings.tsx:178
+#: ../../client/src/settings/routes/ScreenSettings.tsx:105
+#: ../../client/src/settings/routes/ScreenSettings.tsx:133
msgid "Auto"
msgstr "تلقائي"
#: ../../client/src/app/base/Menu.tsx:32
msgid "Calendar"
-msgstr "تقويم"
+msgstr "التقويم"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:180
+#: ../../client/src/settings/routes/ScreenSettings.tsx:155
+msgid "Celsius"
+msgstr "درجة مئوية"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:135
msgid "Dark"
msgstr "داكن"
#: ../../client/src/app/base/Menu.tsx:26
msgid "Dashboard"
-msgstr "لوحة المعلومات"
+msgstr "لوحة القيادة"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:277
+#: ../../client/src/settings/routes/ScreenSettings.tsx:232
msgid "Data"
-msgstr "بيانات"
+msgstr "البيانات"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:285
+#: ../../client/src/settings/routes/ScreenSettings.tsx:240
msgid "Delete all prompt data."
-msgstr "حذف كل بيانات المسجيل."
+msgstr "حذف جميع بيانات المطالبات."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:308
+#: ../../client/src/settings/routes/ScreenSettings.tsx:263
msgid "Delete Database"
msgstr "حذف قاعدة البيانات"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:290
+#: ../../client/src/settings/routes/ScreenSettings.tsx:245
msgid "Delete Prompts"
-msgstr "حذف المسجيلات"
+msgstr "حذف المطالبات"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:303
+#: ../../client/src/settings/routes/ScreenSettings.tsx:258
msgid "Delete the local database."
msgstr "حذف قاعدة البيانات المحلية."
@@ -92,157 +96,181 @@ msgstr "حذف قاعدة البيانات المحلية."
msgid "Design"
msgstr "تصميم"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:130
+#: ../../client/src/settings/routes/ScreenSettings.tsx:85
msgid "Display"
msgstr "عرض"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:208
+#: ../../client/src/settings/routes/ScreenSettings.tsx:163
msgid "Distance"
-msgstr "مسافة"
+msgstr "المسافة"
#: ../../client/src/home/utils/time.ts:14
msgid "Enjoy the day"
-msgstr "استمتع باليوم"
+msgstr "استمتع بيومك"
#: ../../client/src/home/utils/time.ts:12
msgid "Enjoy the night"
-msgstr "استمتع بالنهاية العصرية"
+msgstr "استمتع بليلتك"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:244
+#: ../../client/src/settings/routes/ScreenSettings.tsx:199
msgid "Enter api key"
msgstr "أدخل مفتاح API"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:110
+#: ../../client/src/settings/routes/ScreenSettings.tsx:68
msgid "Enter your mnemonic phrase"
-msgstr ""
+msgstr "أدخل العبارة التذكيرية الخاصة بك"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:89
+#: ../../client/src/settings/routes/ScreenSettings.tsx:48
msgid "Enter your name"
+msgstr "أدخل اسمك"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:156
+msgid "Fahrenheit"
+msgstr "فهرنهايت"
+
+#: ../../client/src/home/hooks/useLocation.ts:22
+msgid "Geo Location Failure"
msgstr ""
#: ../../client/src/home/utils/time.ts:8
msgid "Good afternoon"
-msgstr "صعود مسائي"
+msgstr "مساء الخير"
#: ../../client/src/home/utils/time.ts:10
msgid "Good evening"
-msgstr "صعود مسائي"
+msgstr "مساء الخير"
#: ../../client/src/home/utils/time.ts:6
msgid "Good morning"
-msgstr "صعود مسائي"
+msgstr "صباح الخير"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:234
+#: ../../client/src/settings/routes/ScreenSettings.tsx:189
msgid "Groq API Key"
-msgstr "مفتاح API Groq"
+msgstr "مفتاح Groq API"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:254
+#: ../../client/src/home/hooks/useAI.tsx:40
+msgid "Groq Failure"
+msgstr ""
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:209
msgid "Groq Model ID"
-msgstr "معرف النموذج Groq"
+msgstr "معرف نموذج Groq"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:135
+#: ../../client/src/settings/routes/ScreenSettings.tsx:176
+msgid "Kilometers"
+msgstr "كيلومترات"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:90
msgid "Language"
-msgstr "لغة"
+msgstr "اللغة"
#: ../../client/src/app/base/Menu.tsx:62
#: ../../client/src/dev/routes/ScreenLibrary.tsx:15
msgid "Library"
msgstr "مكتبة"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:179
+#: ../../client/src/settings/routes/ScreenSettings.tsx:134
msgid "Light"
msgstr "فاتح"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:68
+#: ../../client/src/settings/routes/ScreenSettings.tsx:26
msgid "Manage your settings"
msgstr "إدارة إعداداتك"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:98
-msgid "Owner Key"
+#: ../../client/src/settings/routes/ScreenSettings.tsx:177
+msgid "Miles"
+msgstr "أميال"
+
+#: ../../client/src/events/routes/ScreenCalendar.tsx:56
+msgid "No events scheduled."
msgstr ""
-#: ../../client/src/home/base/AiPrompt.tsx:49
+#: ../../client/src/settings/routes/ScreenSettings.tsx:56
+msgid "Owner Key"
+msgstr "مفتاح المالك"
+
+#: ../../client/src/home/base/AiPrompt.tsx:51
msgid "Please set your Groq API Key"
-msgstr "يرجى تعيين مفتاح API Groq الخاص بك"
+msgstr "يرجى تعيين مفتاح Groq API الخاص بك"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:72
+#: ../../client/src/settings/routes/ScreenSettings.tsx:31
msgid "Profile"
msgstr ""
-#: ../../client/src/settings/routes/ScreenSettings.tsx:40
+#: ../../client/src/settings/hooks/useSettings.ts:45
msgid "Prompt History Reset"
-msgstr "إعادة تعيين سجل الاستعلامات"
+msgstr "إعادة تعيين سجل المطالبات"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:282
+#: ../../client/src/settings/routes/ScreenSettings.tsx:237
msgid "Prompts"
-msgstr "مسجيلات"
+msgstr "المطالبات"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:237
+#: ../../client/src/settings/routes/ScreenSettings.tsx:192
msgid "Provide a key to use AI features."
-msgstr "يرجى تعيين مفتاح لاستخدام ميزات الذكاء الصوتي."
+msgstr "قدم مفتاحًا لاستخدام ميزات الذكاء الاصطناعي."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:257
+#: ../../client/src/settings/routes/ScreenSettings.tsx:212
msgid "Select the AI model to use."
-msgstr "إختر نموذج الذكاء الصوتي المستخدم."
+msgstr "حدد نموذج الذكاء الاصطناعي للاستخدام."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:211
+#: ../../client/src/settings/routes/ScreenSettings.tsx:166
msgid "Select the distance unit for the app."
-msgstr "إختر وحد المسافة للتطبيق."
+msgstr "حدد وحدة المسافة للتطبيق."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:139
+#: ../../client/src/settings/routes/ScreenSettings.tsx:94
msgid "Select the language for the app."
-msgstr "إختر لغة التطبيق."
+msgstr "حدد لغة التطبيق."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:190
+#: ../../client/src/settings/routes/ScreenSettings.tsx:145
msgid "Select the temperature unit for the app."
-msgstr "إختر وحد الحرارة للتطبيق."
+msgstr "حدد وحدة درجة الحرارة للتطبيق."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:168
+#: ../../client/src/settings/routes/ScreenSettings.tsx:123
msgid "Select the theme for the app."
-msgstr "إختر وضع التطبيق."
+msgstr "حدد سمة التطبيق."
#: ../../client/src/app/base/Menu.tsx:70
-#: ../../client/src/settings/routes/ScreenSettings.tsx:67
+#: ../../client/src/settings/routes/ScreenSettings.tsx:25
msgid "Settings"
-msgstr "إعدادات"
+msgstr "الإعدادات"
#: ../../client/src/app/base/Menu.tsx:38
#: ../../client/src/tasks/routes/TaskList.tsx:13
msgid "Tasks"
-msgstr "مسجيلات"
+msgstr "المهام"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:187
+#: ../../client/src/settings/routes/ScreenSettings.tsx:142
msgid "Temperature"
-msgstr "حرارة"
+msgstr "درجة الحرارة"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:165
+#: ../../client/src/settings/routes/ScreenSettings.tsx:120
msgid "Theme"
-msgstr "وضع"
+msgstr "السمة"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:77
+#: ../../client/src/settings/routes/ScreenSettings.tsx:36
msgid "User Name"
-msgstr ""
-
-#: ../../client/src/home/routes/ScreenHome.tsx:22
-msgid "Welcome, {displayName}"
-msgstr "مرحبا بك {displayName}"
+msgstr "اسم المستخدم"
#: ../../client/src/home/routes/ScreenHome.tsx:23
+msgid "Welcome, {0}"
+msgstr "مرحبًا، {0}"
+
+#: ../../client/src/home/routes/ScreenHome.tsx:24
msgid "Welcome, Human"
-msgstr "مرحبا بك الشخص"
+msgstr "مرحبًا، أيها الإنسان"
#: ../../client/src/app/hooks/useOnline.ts:15
msgid "You are offline"
-msgstr "ليس لديك إنترنت"
+msgstr "أنت غير متصل"
#: ../../client/src/app/hooks/useOnline.ts:13
msgid "You are online"
-msgstr "لديك إنترنت"
+msgstr "أنت متصل"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:80
+#: ../../client/src/settings/routes/ScreenSettings.tsx:39
msgid "Your name to display in the app."
-msgstr ""
+msgstr "اسمك للعرض في التطبيق."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:41
+#: ../../client/src/settings/hooks/useSettings.ts:46
msgid "Your prompt history has been reset."
-msgstr "تم إعادة تعيين سجل الاستعلامات الخاص بك."
+msgstr "تمت إعادة تعيين سجل المطالبات الخاص بك."
diff --git a/translations/en.po b/translations/en.po
index 70e8e2c..ec07da4 100644
--- a/translations/en.po
+++ b/translations/en.po
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"POT-Creation-Date: 2024-07-01 21:00-0500\n"
+"POT-Creation-Date: 2024-07-13 12:42-0500\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,7 +18,7 @@ msgstr ""
msgid "{0} components"
msgstr "{0} components"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:101
+#: ../../client/src/settings/routes/ScreenSettings.tsx:59
msgid "A mnemonic phrase for authentication."
msgstr "A mnemonic phrase for authentication."
@@ -26,32 +26,32 @@ msgstr "A mnemonic phrase for authentication."
msgid "Add a task"
msgstr "Add a task"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:229
+#: ../../client/src/settings/routes/ScreenSettings.tsx:184
msgid "AI"
msgstr "AI"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:300
+#: ../../client/src/settings/routes/ScreenSettings.tsx:255
msgid "All Data"
msgstr "All Data"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:57
+#: ../../client/src/settings/hooks/useSettings.ts:58
msgid "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone."
msgstr "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:49
+#: ../../client/src/settings/hooks/useSettings.ts:52
msgid "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone."
msgstr "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:36
+#: ../../client/src/settings/hooks/useSettings.ts:42
msgid "Are you sure you want to reset your prompt history?"
msgstr "Are you sure you want to reset your prompt history?"
-#: ../../client/src/home/base/AiPrompt.tsx:49
+#: ../../client/src/home/base/AiPrompt.tsx:51
msgid "Ask anything..."
msgstr "Ask anything..."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:150
-#: ../../client/src/settings/routes/ScreenSettings.tsx:178
+#: ../../client/src/settings/routes/ScreenSettings.tsx:105
+#: ../../client/src/settings/routes/ScreenSettings.tsx:133
msgid "Auto"
msgstr "Auto"
@@ -59,7 +59,11 @@ msgstr "Auto"
msgid "Calendar"
msgstr "Calendar"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:180
+#: ../../client/src/settings/routes/ScreenSettings.tsx:155
+msgid "Celsius"
+msgstr "Celsius"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:135
msgid "Dark"
msgstr "Dark"
@@ -67,23 +71,23 @@ msgstr "Dark"
msgid "Dashboard"
msgstr "Dashboard"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:277
+#: ../../client/src/settings/routes/ScreenSettings.tsx:232
msgid "Data"
msgstr "Data"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:285
+#: ../../client/src/settings/routes/ScreenSettings.tsx:240
msgid "Delete all prompt data."
msgstr "Delete all prompt data."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:308
+#: ../../client/src/settings/routes/ScreenSettings.tsx:263
msgid "Delete Database"
msgstr "Delete Database"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:290
+#: ../../client/src/settings/routes/ScreenSettings.tsx:245
msgid "Delete Prompts"
msgstr "Delete Prompts"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:303
+#: ../../client/src/settings/routes/ScreenSettings.tsx:258
msgid "Delete the local database."
msgstr "Delete the local database."
@@ -92,11 +96,11 @@ msgstr "Delete the local database."
msgid "Design"
msgstr "Design"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:130
+#: ../../client/src/settings/routes/ScreenSettings.tsx:85
msgid "Display"
msgstr "Display"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:208
+#: ../../client/src/settings/routes/ScreenSettings.tsx:163
msgid "Distance"
msgstr "Distance"
@@ -108,18 +112,26 @@ msgstr "Enjoy the day"
msgid "Enjoy the night"
msgstr "Enjoy the night"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:244
+#: ../../client/src/settings/routes/ScreenSettings.tsx:199
msgid "Enter api key"
msgstr "Enter api key"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:110
+#: ../../client/src/settings/routes/ScreenSettings.tsx:68
msgid "Enter your mnemonic phrase"
msgstr "Enter your mnemonic phrase"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:89
+#: ../../client/src/settings/routes/ScreenSettings.tsx:48
msgid "Enter your name"
msgstr "Enter your name"
+#: ../../client/src/settings/routes/ScreenSettings.tsx:156
+msgid "Fahrenheit"
+msgstr "Fahrenheit"
+
+#: ../../client/src/home/hooks/useLocation.ts:22
+msgid "Geo Location Failure"
+msgstr "Geo Location Failure"
+
#: ../../client/src/home/utils/time.ts:8
msgid "Good afternoon"
msgstr "Good afternoon"
@@ -132,15 +144,23 @@ msgstr "Good evening"
msgid "Good morning"
msgstr "Good morning"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:234
+#: ../../client/src/settings/routes/ScreenSettings.tsx:189
msgid "Groq API Key"
msgstr "Groq API Key"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:254
+#: ../../client/src/home/hooks/useAI.tsx:40
+msgid "Groq Failure"
+msgstr "Groq Failure"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:209
msgid "Groq Model ID"
msgstr "Groq Model ID"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:135
+#: ../../client/src/settings/routes/ScreenSettings.tsx:176
+msgid "Kilometers"
+msgstr "Kilometers"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:90
msgid "Language"
msgstr "Language"
@@ -149,60 +169,68 @@ msgstr "Language"
msgid "Library"
msgstr "Library"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:179
+#: ../../client/src/settings/routes/ScreenSettings.tsx:134
msgid "Light"
msgstr "Light"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:68
+#: ../../client/src/settings/routes/ScreenSettings.tsx:26
msgid "Manage your settings"
msgstr "Manage your settings"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:98
+#: ../../client/src/settings/routes/ScreenSettings.tsx:177
+msgid "Miles"
+msgstr "Miles"
+
+#: ../../client/src/events/routes/ScreenCalendar.tsx:56
+msgid "No events scheduled."
+msgstr "No events scheduled."
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:56
msgid "Owner Key"
msgstr "Owner Key"
-#: ../../client/src/home/base/AiPrompt.tsx:49
+#: ../../client/src/home/base/AiPrompt.tsx:51
msgid "Please set your Groq API Key"
msgstr "Please set your Groq API Key"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:72
+#: ../../client/src/settings/routes/ScreenSettings.tsx:31
msgid "Profile"
msgstr "Profile"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:40
+#: ../../client/src/settings/hooks/useSettings.ts:45
msgid "Prompt History Reset"
msgstr "Prompt History Reset"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:282
+#: ../../client/src/settings/routes/ScreenSettings.tsx:237
msgid "Prompts"
msgstr "Prompts"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:237
+#: ../../client/src/settings/routes/ScreenSettings.tsx:192
msgid "Provide a key to use AI features."
msgstr "Provide a key to use AI features."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:257
+#: ../../client/src/settings/routes/ScreenSettings.tsx:212
msgid "Select the AI model to use."
msgstr "Select the AI model to use."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:211
+#: ../../client/src/settings/routes/ScreenSettings.tsx:166
msgid "Select the distance unit for the app."
msgstr "Select the distance unit for the app."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:139
+#: ../../client/src/settings/routes/ScreenSettings.tsx:94
msgid "Select the language for the app."
msgstr "Select the language for the app."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:190
+#: ../../client/src/settings/routes/ScreenSettings.tsx:145
msgid "Select the temperature unit for the app."
msgstr "Select the temperature unit for the app."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:168
+#: ../../client/src/settings/routes/ScreenSettings.tsx:123
msgid "Select the theme for the app."
msgstr "Select the theme for the app."
#: ../../client/src/app/base/Menu.tsx:70
-#: ../../client/src/settings/routes/ScreenSettings.tsx:67
+#: ../../client/src/settings/routes/ScreenSettings.tsx:25
msgid "Settings"
msgstr "Settings"
@@ -211,23 +239,23 @@ msgstr "Settings"
msgid "Tasks"
msgstr "Tasks"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:187
+#: ../../client/src/settings/routes/ScreenSettings.tsx:142
msgid "Temperature"
msgstr "Temperature"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:165
+#: ../../client/src/settings/routes/ScreenSettings.tsx:120
msgid "Theme"
msgstr "Theme"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:77
+#: ../../client/src/settings/routes/ScreenSettings.tsx:36
msgid "User Name"
msgstr "User Name"
-#: ../../client/src/home/routes/ScreenHome.tsx:22
-msgid "Welcome, {displayName}"
-msgstr "Welcome, {displayName}"
-
#: ../../client/src/home/routes/ScreenHome.tsx:23
+msgid "Welcome, {0}"
+msgstr "Welcome, {0}"
+
+#: ../../client/src/home/routes/ScreenHome.tsx:24
msgid "Welcome, Human"
msgstr "Welcome, Human"
@@ -239,10 +267,10 @@ msgstr "You are offline"
msgid "You are online"
msgstr "You are online"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:80
+#: ../../client/src/settings/routes/ScreenSettings.tsx:39
msgid "Your name to display in the app."
msgstr "Your name to display in the app."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:41
+#: ../../client/src/settings/hooks/useSettings.ts:46
msgid "Your prompt history has been reset."
msgstr "Your prompt history has been reset."
diff --git a/translations/ja.po b/translations/ja.po
index ab2807b..a2d58e5 100644
--- a/translations/ja.po
+++ b/translations/ja.po
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"POT-Creation-Date: 2024-07-01 21:00-0500\n"
+"POT-Creation-Date: 2024-07-13 12:42-0500\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,40 +18,40 @@ msgstr ""
msgid "{0} components"
msgstr "{0} コンポーネント"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:101
+#: ../../client/src/settings/routes/ScreenSettings.tsx:59
msgid "A mnemonic phrase for authentication."
-msgstr ""
+msgstr "認証のためのニーモニックフレーズ。"
#: ../../client/src/tasks/base/TasksInput.tsx:21
msgid "Add a task"
msgstr "タスクを追加"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:229
+#: ../../client/src/settings/routes/ScreenSettings.tsx:184
msgid "AI"
msgstr "AI"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:300
+#: ../../client/src/settings/routes/ScreenSettings.tsx:255
msgid "All Data"
msgstr "すべてのデータ"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:57
+#: ../../client/src/settings/hooks/useSettings.ts:58
msgid "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone."
-msgstr ""
+msgstr "オーナーキーを変更してもよろしいですか?これによりローカルデータベースがリセットされます。この操作は元に戻せません。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:49
+#: ../../client/src/settings/hooks/useSettings.ts:52
msgid "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone."
-msgstr ""
+msgstr "ローカルデータベースをリセットしてもよろしいですか?データが他のデバイスにバックアップされていない場合、失われます。この操作は元に戻せません。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:36
+#: ../../client/src/settings/hooks/useSettings.ts:42
msgid "Are you sure you want to reset your prompt history?"
-msgstr "プロンプト履歴をリセットしますか?"
+msgstr "プロンプト履歴をリセットしてもよろしいですか?"
-#: ../../client/src/home/base/AiPrompt.tsx:49
+#: ../../client/src/home/base/AiPrompt.tsx:51
msgid "Ask anything..."
-msgstr "なにか聞いてみましょう..."
+msgstr "何でも聞いてください..."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:150
-#: ../../client/src/settings/routes/ScreenSettings.tsx:178
+#: ../../client/src/settings/routes/ScreenSettings.tsx:105
+#: ../../client/src/settings/routes/ScreenSettings.tsx:133
msgid "Auto"
msgstr "自動"
@@ -59,7 +59,11 @@ msgstr "自動"
msgid "Calendar"
msgstr "カレンダー"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:180
+#: ../../client/src/settings/routes/ScreenSettings.tsx:155
+msgid "Celsius"
+msgstr "摂氏"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:135
msgid "Dark"
msgstr "ダーク"
@@ -67,23 +71,23 @@ msgstr "ダーク"
msgid "Dashboard"
msgstr "ダッシュボード"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:277
+#: ../../client/src/settings/routes/ScreenSettings.tsx:232
msgid "Data"
msgstr "データ"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:285
+#: ../../client/src/settings/routes/ScreenSettings.tsx:240
msgid "Delete all prompt data."
-msgstr "すべてのプロンプトデータを削除"
+msgstr "すべてのプロンプトデータを削除。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:308
+#: ../../client/src/settings/routes/ScreenSettings.tsx:263
msgid "Delete Database"
msgstr "データベースを削除"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:290
+#: ../../client/src/settings/routes/ScreenSettings.tsx:245
msgid "Delete Prompts"
msgstr "プロンプトを削除"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:303
+#: ../../client/src/settings/routes/ScreenSettings.tsx:258
msgid "Delete the local database."
msgstr "ローカルデータベースを削除"
@@ -92,55 +96,71 @@ msgstr "ローカルデータベースを削除"
msgid "Design"
msgstr "デザイン"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:130
+#: ../../client/src/settings/routes/ScreenSettings.tsx:85
msgid "Display"
msgstr "表示"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:208
+#: ../../client/src/settings/routes/ScreenSettings.tsx:163
msgid "Distance"
msgstr "距離"
#: ../../client/src/home/utils/time.ts:14
msgid "Enjoy the day"
-msgstr "おつかみにくだけど"
+msgstr "良い一日を"
#: ../../client/src/home/utils/time.ts:12
msgid "Enjoy the night"
-msgstr "おつかみにくだけど"
+msgstr "良い夜を"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:244
+#: ../../client/src/settings/routes/ScreenSettings.tsx:199
msgid "Enter api key"
msgstr "APIキーを入力"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:110
+#: ../../client/src/settings/routes/ScreenSettings.tsx:68
msgid "Enter your mnemonic phrase"
-msgstr ""
+msgstr "ニーモニックフレーズを入力"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:89
+#: ../../client/src/settings/routes/ScreenSettings.tsx:48
msgid "Enter your name"
+msgstr "名前を入力"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:156
+msgid "Fahrenheit"
+msgstr "華氏"
+
+#: ../../client/src/home/hooks/useLocation.ts:22
+msgid "Geo Location Failure"
msgstr ""
#: ../../client/src/home/utils/time.ts:8
msgid "Good afternoon"
-msgstr "おつかみにくだけど"
+msgstr "こんにちは"
#: ../../client/src/home/utils/time.ts:10
msgid "Good evening"
-msgstr "おつかみにくだけど"
+msgstr "こんばんは"
#: ../../client/src/home/utils/time.ts:6
msgid "Good morning"
-msgstr "おつかみにくだけど"
+msgstr "おはようございます"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:234
+#: ../../client/src/settings/routes/ScreenSettings.tsx:189
msgid "Groq API Key"
msgstr "Groq APIキー"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:254
+#: ../../client/src/home/hooks/useAI.tsx:40
+msgid "Groq Failure"
+msgstr ""
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:209
msgid "Groq Model ID"
msgstr "GroqモデルID"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:135
+#: ../../client/src/settings/routes/ScreenSettings.tsx:176
+msgid "Kilometers"
+msgstr "キロメートル"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:90
msgid "Language"
msgstr "言語"
@@ -149,60 +169,68 @@ msgstr "言語"
msgid "Library"
msgstr "ライブラリ"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:179
+#: ../../client/src/settings/routes/ScreenSettings.tsx:134
msgid "Light"
msgstr "ライト"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:68
+#: ../../client/src/settings/routes/ScreenSettings.tsx:26
msgid "Manage your settings"
msgstr "設定を管理"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:98
-msgid "Owner Key"
+#: ../../client/src/settings/routes/ScreenSettings.tsx:177
+msgid "Miles"
+msgstr "マイル"
+
+#: ../../client/src/events/routes/ScreenCalendar.tsx:56
+msgid "No events scheduled."
msgstr ""
-#: ../../client/src/home/base/AiPrompt.tsx:49
+#: ../../client/src/settings/routes/ScreenSettings.tsx:56
+msgid "Owner Key"
+msgstr "オーナーキー"
+
+#: ../../client/src/home/base/AiPrompt.tsx:51
msgid "Please set your Groq API Key"
-msgstr "Groq APIキーを設定"
+msgstr "Groq APIキーを設定してください"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:72
+#: ../../client/src/settings/routes/ScreenSettings.tsx:31
msgid "Profile"
msgstr ""
-#: ../../client/src/settings/routes/ScreenSettings.tsx:40
+#: ../../client/src/settings/hooks/useSettings.ts:45
msgid "Prompt History Reset"
-msgstr "プロンプト履歴をリセット"
+msgstr "プロンプト履歴のリセット"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:282
+#: ../../client/src/settings/routes/ScreenSettings.tsx:237
msgid "Prompts"
msgstr "プロンプト"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:237
+#: ../../client/src/settings/routes/ScreenSettings.tsx:192
msgid "Provide a key to use AI features."
-msgstr "AI機能を使用するためのキーを提供"
+msgstr "AI機能を使用するためのキーを提供。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:257
+#: ../../client/src/settings/routes/ScreenSettings.tsx:212
msgid "Select the AI model to use."
-msgstr "使用するAIモデルを選択"
+msgstr "使用するAIモデルを選択。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:211
+#: ../../client/src/settings/routes/ScreenSettings.tsx:166
msgid "Select the distance unit for the app."
-msgstr "アプリの距離単位を選択"
+msgstr "アプリの距離単位を選択。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:139
+#: ../../client/src/settings/routes/ScreenSettings.tsx:94
msgid "Select the language for the app."
-msgstr "アプリの言語を選択"
+msgstr "アプリの言語を選択。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:190
+#: ../../client/src/settings/routes/ScreenSettings.tsx:145
msgid "Select the temperature unit for the app."
-msgstr "アプリの温度単位を選択"
+msgstr "アプリの温度単位を選択。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:168
+#: ../../client/src/settings/routes/ScreenSettings.tsx:123
msgid "Select the theme for the app."
-msgstr "アプリのテーマを選択"
+msgstr "アプリのテーマを選択。"
#: ../../client/src/app/base/Menu.tsx:70
-#: ../../client/src/settings/routes/ScreenSettings.tsx:67
+#: ../../client/src/settings/routes/ScreenSettings.tsx:25
msgid "Settings"
msgstr "設定"
@@ -211,38 +239,38 @@ msgstr "設定"
msgid "Tasks"
msgstr "タスク"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:187
+#: ../../client/src/settings/routes/ScreenSettings.tsx:142
msgid "Temperature"
msgstr "温度"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:165
+#: ../../client/src/settings/routes/ScreenSettings.tsx:120
msgid "Theme"
msgstr "テーマ"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:77
+#: ../../client/src/settings/routes/ScreenSettings.tsx:36
msgid "User Name"
-msgstr ""
-
-#: ../../client/src/home/routes/ScreenHome.tsx:22
-msgid "Welcome, {displayName}"
-msgstr "ようこそ、{displayName}"
+msgstr "ユーザー名"
#: ../../client/src/home/routes/ScreenHome.tsx:23
+msgid "Welcome, {0}"
+msgstr "ようこそ、{0}"
+
+#: ../../client/src/home/routes/ScreenHome.tsx:24
msgid "Welcome, Human"
msgstr "ようこそ、人間"
#: ../../client/src/app/hooks/useOnline.ts:15
msgid "You are offline"
-msgstr "オフライン"
+msgstr "オフラインです"
#: ../../client/src/app/hooks/useOnline.ts:13
msgid "You are online"
-msgstr "オンライン"
+msgstr "オンラインです"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:80
+#: ../../client/src/settings/routes/ScreenSettings.tsx:39
msgid "Your name to display in the app."
-msgstr ""
+msgstr "アプリに表示する名前。"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:41
+#: ../../client/src/settings/hooks/useSettings.ts:46
msgid "Your prompt history has been reset."
msgstr "プロンプト履歴がリセットされました。"
diff --git a/translations/ru.po b/translations/ru.po
index b462925..83118b6 100644
--- a/translations/ru.po
+++ b/translations/ru.po
@@ -1,6 +1,6 @@
msgid ""
msgstr ""
-"POT-Creation-Date: 2024-07-01 21:00-0500\n"
+"POT-Creation-Date: 2024-07-13 12:42-0500\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -18,40 +18,40 @@ msgstr ""
msgid "{0} components"
msgstr "{0} компонентов"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:101
+#: ../../client/src/settings/routes/ScreenSettings.tsx:59
msgid "A mnemonic phrase for authentication."
-msgstr ""
+msgstr "Мнемоническая фраза для аутентификации."
#: ../../client/src/tasks/base/TasksInput.tsx:21
msgid "Add a task"
msgstr "Добавить задачу"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:229
+#: ../../client/src/settings/routes/ScreenSettings.tsx:184
msgid "AI"
msgstr "ИИ"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:300
+#: ../../client/src/settings/routes/ScreenSettings.tsx:255
msgid "All Data"
msgstr "Все данные"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:57
+#: ../../client/src/settings/hooks/useSettings.ts:58
msgid "Are you sure you want to change the owner key? This will reset the local database. This action cannot be undone."
-msgstr ""
+msgstr "Вы уверены, что хотите изменить ключ владельца? Это сбросит локальную базу данных. Это действие нельзя отменить."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:49
+#: ../../client/src/settings/hooks/useSettings.ts:52
msgid "Are you sure you want to reset your local database? If data is not backed up on another device, it will be lost. This action cannot be undone."
-msgstr ""
+msgstr "Вы уверены, что хотите сбросить локальную базу данных? Если данные не будут сохранены на другом устройстве, они будут потеряны. Это действие нельзя отменить."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:36
+#: ../../client/src/settings/hooks/useSettings.ts:42
msgid "Are you sure you want to reset your prompt history?"
-msgstr "Вы уверены, что хотите сбросить историю приглашений?"
+msgstr "Вы уверены, что хотите сбросить историю запросов?"
-#: ../../client/src/home/base/AiPrompt.tsx:49
+#: ../../client/src/home/base/AiPrompt.tsx:51
msgid "Ask anything..."
-msgstr "Задайте любой вопрос..."
+msgstr "Спросите что угодно..."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:150
-#: ../../client/src/settings/routes/ScreenSettings.tsx:178
+#: ../../client/src/settings/routes/ScreenSettings.tsx:105
+#: ../../client/src/settings/routes/ScreenSettings.tsx:133
msgid "Auto"
msgstr "Авто"
@@ -59,31 +59,35 @@ msgstr "Авто"
msgid "Calendar"
msgstr "Календарь"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:180
+#: ../../client/src/settings/routes/ScreenSettings.tsx:155
+msgid "Celsius"
+msgstr "Цельсий"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:135
msgid "Dark"
-msgstr "Тёмное"
+msgstr "Темный"
#: ../../client/src/app/base/Menu.tsx:26
msgid "Dashboard"
msgstr "Панель"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:277
+#: ../../client/src/settings/routes/ScreenSettings.tsx:232
msgid "Data"
msgstr "Данные"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:285
+#: ../../client/src/settings/routes/ScreenSettings.tsx:240
msgid "Delete all prompt data."
-msgstr "Удалить все данные приглашений."
+msgstr "Удалить все данные запросов."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:308
+#: ../../client/src/settings/routes/ScreenSettings.tsx:263
msgid "Delete Database"
msgstr "Удалить базу данных"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:290
+#: ../../client/src/settings/routes/ScreenSettings.tsx:245
msgid "Delete Prompts"
-msgstr "Удалить приглашения"
+msgstr "Удалить запросы"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:303
+#: ../../client/src/settings/routes/ScreenSettings.tsx:258
msgid "Delete the local database."
msgstr "Удалить локальную базу данных."
@@ -92,32 +96,40 @@ msgstr "Удалить локальную базу данных."
msgid "Design"
msgstr "Дизайн"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:130
+#: ../../client/src/settings/routes/ScreenSettings.tsx:85
msgid "Display"
-msgstr "Отображение"
+msgstr "Дисплей"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:208
+#: ../../client/src/settings/routes/ScreenSettings.tsx:163
msgid "Distance"
msgstr "Расстояние"
#: ../../client/src/home/utils/time.ts:14
msgid "Enjoy the day"
-msgstr "Наслаждайтесь днём"
+msgstr "Наслаждайтесь днем"
#: ../../client/src/home/utils/time.ts:12
msgid "Enjoy the night"
msgstr "Наслаждайтесь ночью"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:244
+#: ../../client/src/settings/routes/ScreenSettings.tsx:199
msgid "Enter api key"
msgstr "Введите ключ API"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:110
+#: ../../client/src/settings/routes/ScreenSettings.tsx:68
msgid "Enter your mnemonic phrase"
-msgstr ""
+msgstr "Введите свою мнемоническую фразу"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:89
+#: ../../client/src/settings/routes/ScreenSettings.tsx:48
msgid "Enter your name"
+msgstr "Введите ваше имя"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:156
+msgid "Fahrenheit"
+msgstr "Фаренгейт"
+
+#: ../../client/src/home/hooks/useLocation.ts:22
+msgid "Geo Location Failure"
msgstr ""
#: ../../client/src/home/utils/time.ts:8
@@ -132,15 +144,23 @@ msgstr "Добрый вечер"
msgid "Good morning"
msgstr "Доброе утро"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:234
+#: ../../client/src/settings/routes/ScreenSettings.tsx:189
msgid "Groq API Key"
msgstr "Ключ API Groq"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:254
+#: ../../client/src/home/hooks/useAI.tsx:40
+msgid "Groq Failure"
+msgstr ""
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:209
msgid "Groq Model ID"
-msgstr "Идентификатор модели Groq"
+msgstr "ID модели Groq"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:135
+#: ../../client/src/settings/routes/ScreenSettings.tsx:176
+msgid "Kilometers"
+msgstr "Километры"
+
+#: ../../client/src/settings/routes/ScreenSettings.tsx:90
msgid "Language"
msgstr "Язык"
@@ -149,60 +169,68 @@ msgstr "Язык"
msgid "Library"
msgstr "Библиотека"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:179
+#: ../../client/src/settings/routes/ScreenSettings.tsx:134
msgid "Light"
-msgstr "Светлое"
+msgstr "Светлый"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:68
+#: ../../client/src/settings/routes/ScreenSettings.tsx:26
msgid "Manage your settings"
-msgstr "Управление настройками"
+msgstr "Управляйте своими настройками"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:98
-msgid "Owner Key"
+#: ../../client/src/settings/routes/ScreenSettings.tsx:177
+msgid "Miles"
+msgstr "Мили"
+
+#: ../../client/src/events/routes/ScreenCalendar.tsx:56
+msgid "No events scheduled."
msgstr ""
-#: ../../client/src/home/base/AiPrompt.tsx:49
+#: ../../client/src/settings/routes/ScreenSettings.tsx:56
+msgid "Owner Key"
+msgstr "Ключ владельца"
+
+#: ../../client/src/home/base/AiPrompt.tsx:51
msgid "Please set your Groq API Key"
-msgstr "Пожалуйста, установите ключ API Groq"
+msgstr "Пожалуйста, установите ваш ключ API Groq"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:72
+#: ../../client/src/settings/routes/ScreenSettings.tsx:31
msgid "Profile"
msgstr ""
-#: ../../client/src/settings/routes/ScreenSettings.tsx:40
+#: ../../client/src/settings/hooks/useSettings.ts:45
msgid "Prompt History Reset"
-msgstr "Сброс истории приглашений"
+msgstr "Сброс истории запросов"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:282
+#: ../../client/src/settings/routes/ScreenSettings.tsx:237
msgid "Prompts"
-msgstr "Приглашения"
+msgstr "Запросы"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:237
+#: ../../client/src/settings/routes/ScreenSettings.tsx:192
msgid "Provide a key to use AI features."
msgstr "Предоставьте ключ для использования функций ИИ."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:257
+#: ../../client/src/settings/routes/ScreenSettings.tsx:212
msgid "Select the AI model to use."
msgstr "Выберите модель ИИ для использования."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:211
+#: ../../client/src/settings/routes/ScreenSettings.tsx:166
msgid "Select the distance unit for the app."
-msgstr "Выберите единицу измерения для приложения."
+msgstr "Выберите единицу измерения расстояния для приложения."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:139
+#: ../../client/src/settings/routes/ScreenSettings.tsx:94
msgid "Select the language for the app."
msgstr "Выберите язык для приложения."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:190
+#: ../../client/src/settings/routes/ScreenSettings.tsx:145
msgid "Select the temperature unit for the app."
msgstr "Выберите единицу измерения температуры для приложения."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:168
+#: ../../client/src/settings/routes/ScreenSettings.tsx:123
msgid "Select the theme for the app."
msgstr "Выберите тему для приложения."
#: ../../client/src/app/base/Menu.tsx:70
-#: ../../client/src/settings/routes/ScreenSettings.tsx:67
+#: ../../client/src/settings/routes/ScreenSettings.tsx:25
msgid "Settings"
msgstr "Настройки"
@@ -211,38 +239,38 @@ msgstr "Настройки"
msgid "Tasks"
msgstr "Задачи"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:187
+#: ../../client/src/settings/routes/ScreenSettings.tsx:142
msgid "Temperature"
msgstr "Температура"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:165
+#: ../../client/src/settings/routes/ScreenSettings.tsx:120
msgid "Theme"
msgstr "Тема"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:77
+#: ../../client/src/settings/routes/ScreenSettings.tsx:36
msgid "User Name"
-msgstr ""
-
-#: ../../client/src/home/routes/ScreenHome.tsx:22
-msgid "Welcome, {displayName}"
-msgstr "Добро пожаловать, {displayName}"
+msgstr "Имя пользователя"
#: ../../client/src/home/routes/ScreenHome.tsx:23
+msgid "Welcome, {0}"
+msgstr "Добро пожаловать, {0}"
+
+#: ../../client/src/home/routes/ScreenHome.tsx:24
msgid "Welcome, Human"
-msgstr "Добро пожаловать, Человек"
+msgstr "Добро пожаловать, человек"
#: ../../client/src/app/hooks/useOnline.ts:15
msgid "You are offline"
-msgstr "Вы оффлайн"
+msgstr "Вы не в сети"
#: ../../client/src/app/hooks/useOnline.ts:13
msgid "You are online"
-msgstr "Вы онлайн"
+msgstr "Вы в сети"
-#: ../../client/src/settings/routes/ScreenSettings.tsx:80
+#: ../../client/src/settings/routes/ScreenSettings.tsx:39
msgid "Your name to display in the app."
-msgstr ""
+msgstr "Ваше имя для отображения в приложении."
-#: ../../client/src/settings/routes/ScreenSettings.tsx:41
+#: ../../client/src/settings/hooks/useSettings.ts:46
msgid "Your prompt history has been reset."
-msgstr "История приглашений была сброшена."
+msgstr "Ваша история запросов была сброшена."