feat(avatar): dress up any Oo in the Atelier on web and mobile (#143)
The Atelier replaces Avatar Studio: pick a species, colour, eyes, glasses, hats, neckwear, arms and temperament, with every option drawn as your own Oo wearing it. Onboarding's "Design your Oo" now offers species looks per vibe and opens the Atelier for the rest; mobile bot settings carry the same editor instead of a bare colour row, so picking a colour there no longer throws away the rest of the look. Claude-Session: https://claude.ai/code/session_01EKuME5CgL1ddGGN7LGvtBj Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
This commit is contained in:
parent
6fd136e944
commit
63578bb645
@ -12,6 +12,7 @@ import { useEffect, useMemo, useState } from "react";
|
||||
import { Pressable, ScrollView, Text, TextInput, View } from "react-native";
|
||||
import { BotAvatar } from "../components/bot-avatar";
|
||||
import { ComputerModePicker } from "../components/computer-mode-picker";
|
||||
import { OoAtelier } from "../components/oo-atelier";
|
||||
import {
|
||||
type MobileBot,
|
||||
type MobileMe,
|
||||
@ -348,33 +349,9 @@ export default function BotSettingsScreen() {
|
||||
textAlignVertical: "top",
|
||||
}}
|
||||
/>
|
||||
<Text style={{ color: tokens.mutedForeground, marginTop: 16, fontSize: 14 }}>
|
||||
{t("Color")}
|
||||
</Text>
|
||||
<ScrollView
|
||||
horizontal
|
||||
showsHorizontalScrollIndicator={false}
|
||||
contentContainerStyle={{ gap: 10, marginTop: 8 }}
|
||||
accessibilityRole="radiogroup"
|
||||
>
|
||||
{BOT_COLORS.map((option, index) => (
|
||||
<Pressable
|
||||
key={option}
|
||||
accessibilityRole="radio"
|
||||
accessibilityLabel={t("Color {number}", { number: index + 1 })}
|
||||
accessibilityState={{ checked: color === option }}
|
||||
onPress={() => setColor(option)}
|
||||
style={{
|
||||
width: 36,
|
||||
height: 36,
|
||||
borderRadius: 18,
|
||||
backgroundColor: option,
|
||||
borderWidth: 3,
|
||||
borderColor: color === option ? tokens.foreground : "transparent",
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
</ScrollView>
|
||||
<View style={{ marginTop: 4 }}>
|
||||
<OoAtelier value={color} identity={bot?.id ?? ""} onChange={setColor} />
|
||||
</View>
|
||||
<ComputerModePicker value={computerMode} onChange={setComputerMode} />
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
|
||||
410
apps/mobile/components/oo-atelier.tsx
Normal file
410
apps/mobile/components/oo-atelier.tsx
Normal file
@ -0,0 +1,410 @@
|
||||
import type { OoAvatar } from "@rakazo/core";
|
||||
import {
|
||||
encodeOoAvatar,
|
||||
OO_ARMS,
|
||||
OO_BROWS,
|
||||
OO_CHEEKS,
|
||||
OO_CLASSIC_SHAPE_COUNT,
|
||||
OO_EYESHADOWS,
|
||||
OO_EYEWEAR,
|
||||
OO_HEADWEAR,
|
||||
OO_IRISES,
|
||||
OO_LASHES,
|
||||
OO_LINERS,
|
||||
OO_NECKWEAR,
|
||||
OO_PALETTE_HEXES,
|
||||
OO_SPARKLES,
|
||||
OO_SPECIES,
|
||||
ooLookForEditing,
|
||||
ooRandomAvatar,
|
||||
} from "@rakazo/core";
|
||||
import { useState } from "react";
|
||||
import { Pressable, ScrollView, Text, View } from "react-native";
|
||||
import { useI18n } from "../lib/i18n";
|
||||
import { useMobileTokens } from "../lib/native";
|
||||
import { OoFigure } from "./oo-figure";
|
||||
|
||||
const THUMB = 52;
|
||||
|
||||
/** Temperament in three taps; web offers the same range as sliders. */
|
||||
const ENERGY_STEPS = [0.75, 1, 1.35] as const;
|
||||
const PLAYFUL_STEPS = [0.2, 0.5, 0.85] as const;
|
||||
|
||||
function nearest(steps: readonly number[], value: number): number {
|
||||
return steps.reduce((best, step) =>
|
||||
Math.abs(step - value) < Math.abs(best - value) ? step : best,
|
||||
);
|
||||
}
|
||||
|
||||
function useLabels() {
|
||||
const { t } = useI18n();
|
||||
const none = t("None");
|
||||
return {
|
||||
species: {
|
||||
classic: t("Classic"),
|
||||
cat: t("Cat"),
|
||||
dog: t("Dog"),
|
||||
bunny: t("Bunny"),
|
||||
bear: t("Bear"),
|
||||
robot: t("Robot"),
|
||||
ghost: t("Ghost"),
|
||||
frog: t("Frog"),
|
||||
penguin: t("Penguin"),
|
||||
},
|
||||
lashes: { none, soft: t("Soft"), full: t("Full"), flick: t("Flick") },
|
||||
liner: { none, wing: t("Winged") },
|
||||
eyeshadow: { none, rose: t("Rose"), lilac: t("Lilac"), gold: t("Gold"), mint: t("Mint") },
|
||||
iris: {
|
||||
classic: t("Classic"),
|
||||
brown: t("Brown"),
|
||||
blue: t("Blue"),
|
||||
green: t("Green"),
|
||||
violet: t("Violet"),
|
||||
},
|
||||
sparkle: { dot: t("Dot"), star: t("Star"), heart: t("Heart") },
|
||||
brows: { auto: t("When needed"), fine: t("Fine"), bushy: t("Bushy") },
|
||||
cheeks: { none, pink: t("Pink"), peach: t("Peach"), freckles: t("Freckles") },
|
||||
eyewear: {
|
||||
none,
|
||||
round: t("Round"),
|
||||
nerd: t("Nerd"),
|
||||
sun: t("Sunglasses"),
|
||||
heart: t("Heart"),
|
||||
monocle: t("Monocle"),
|
||||
reading: t("Reading glasses"),
|
||||
},
|
||||
head: {
|
||||
none,
|
||||
chef: t("Chef's hat"),
|
||||
crown: t("Crown"),
|
||||
headphones: t("Headphones"),
|
||||
bow: t("Bow"),
|
||||
beanie: t("Beanie"),
|
||||
flower: t("Flower"),
|
||||
party: t("Party hat"),
|
||||
},
|
||||
neck: { none, bowtie: t("Bow tie"), scarf: t("Scarf"), bell: t("Bell") },
|
||||
arms: { glass: t("Glass"), stub: t("Stub"), paw: t("Paw"), robot: t("Robot"), none },
|
||||
energy: [t("Calm"), t("Steady"), t("Lively")],
|
||||
} as const;
|
||||
}
|
||||
|
||||
function Row<T extends string | number>({
|
||||
title,
|
||||
values,
|
||||
selected,
|
||||
label,
|
||||
look,
|
||||
patch,
|
||||
focus = "body",
|
||||
onSelect,
|
||||
}: {
|
||||
title: string;
|
||||
values: readonly T[];
|
||||
selected: T;
|
||||
label: (value: T) => string;
|
||||
look: OoAvatar;
|
||||
patch: (value: T) => Partial<OoAvatar>;
|
||||
focus?: "body" | "face";
|
||||
onSelect: (value: T) => void;
|
||||
}) {
|
||||
const tokens = useMobileTokens();
|
||||
return (
|
||||
<View style={{ marginTop: 14 }}>
|
||||
<Text style={{ color: tokens.mutedForeground, fontSize: 13 }}>{title}</Text>
|
||||
<ScrollView
|
||||
horizontal
|
||||
showsHorizontalScrollIndicator={false}
|
||||
contentContainerStyle={{ gap: 8, marginTop: 6 }}
|
||||
accessibilityRole="radiogroup"
|
||||
accessibilityLabel={title}
|
||||
>
|
||||
{values.map((value) => {
|
||||
const next = { ...look, ...patch(value) };
|
||||
const active = value === selected;
|
||||
return (
|
||||
<Pressable
|
||||
key={value}
|
||||
accessibilityRole="radio"
|
||||
accessibilityLabel={label(value)}
|
||||
accessibilityState={{ checked: active }}
|
||||
onPress={() => onSelect(value)}
|
||||
style={{
|
||||
width: THUMB + 8,
|
||||
height: THUMB + 8,
|
||||
borderRadius: 14,
|
||||
alignItems: "center",
|
||||
justifyContent: "center",
|
||||
overflow: "hidden",
|
||||
backgroundColor: tokens.muted,
|
||||
borderWidth: 2,
|
||||
borderColor: active ? tokens.foreground : "transparent",
|
||||
}}
|
||||
>
|
||||
<OoFigure
|
||||
avatar={next}
|
||||
color={next.color}
|
||||
fallbackShape={next.shape ?? 0}
|
||||
moment="idle"
|
||||
size={THUMB}
|
||||
focus={focus}
|
||||
still
|
||||
/>
|
||||
</Pressable>
|
||||
);
|
||||
})}
|
||||
</ScrollView>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
/** The Oo look editor: species and colour first, everything else one tap further. */
|
||||
export function OoAtelier({
|
||||
value,
|
||||
identity,
|
||||
onChange,
|
||||
}: {
|
||||
value: string;
|
||||
identity: string;
|
||||
onChange: (value: string) => void;
|
||||
}) {
|
||||
const { t } = useI18n();
|
||||
const tokens = useMobileTokens();
|
||||
const labels = useLabels();
|
||||
const [moreOpen, setMoreOpen] = useState(false);
|
||||
const look = ooLookForEditing(value, identity);
|
||||
const set = <K extends keyof OoAvatar>(field: K, next: OoAvatar[K]) =>
|
||||
onChange(encodeOoAvatar({ ...look, [field]: next }));
|
||||
const chip = (active: boolean) => ({
|
||||
minHeight: 36,
|
||||
paddingHorizontal: 14,
|
||||
borderRadius: 18,
|
||||
justifyContent: "center" as const,
|
||||
backgroundColor: active ? tokens.foreground : tokens.muted,
|
||||
});
|
||||
const chipText = (active: boolean) => ({
|
||||
color: active ? tokens.background : tokens.foreground,
|
||||
fontSize: 14,
|
||||
});
|
||||
|
||||
return (
|
||||
<View>
|
||||
<Row
|
||||
title={t("Species")}
|
||||
values={OO_SPECIES}
|
||||
selected={look.species}
|
||||
label={(species) => labels.species[species]}
|
||||
look={look}
|
||||
patch={(species) => ({ species, arms: species === "robot" ? "robot" : look.arms })}
|
||||
onSelect={(species) =>
|
||||
onChange(
|
||||
encodeOoAvatar({
|
||||
...look,
|
||||
species,
|
||||
arms: species === "robot" ? "robot" : look.arms === "robot" ? "glass" : look.arms,
|
||||
}),
|
||||
)
|
||||
}
|
||||
/>
|
||||
{look.species === "classic" ? (
|
||||
<Row
|
||||
title={t("Shape")}
|
||||
values={Array.from({ length: OO_CLASSIC_SHAPE_COUNT }, (_, index) => index)}
|
||||
selected={look.shape ?? -1}
|
||||
label={(shape) => t("Shape {number}", { number: shape + 1 })}
|
||||
look={look}
|
||||
patch={(shape) => ({ shape })}
|
||||
onSelect={(shape) => set("shape", shape)}
|
||||
/>
|
||||
) : null}
|
||||
<Text style={{ color: tokens.mutedForeground, marginTop: 14, fontSize: 13 }}>
|
||||
{t("Color")}
|
||||
</Text>
|
||||
<ScrollView
|
||||
horizontal
|
||||
showsHorizontalScrollIndicator={false}
|
||||
contentContainerStyle={{ gap: 10, marginTop: 6 }}
|
||||
accessibilityRole="radiogroup"
|
||||
>
|
||||
{OO_PALETTE_HEXES.map((option, index) => {
|
||||
const checked = look.color.toLowerCase() === option.toLowerCase();
|
||||
return (
|
||||
<Pressable
|
||||
key={option}
|
||||
accessibilityRole="radio"
|
||||
accessibilityLabel={t("Color {number}", { number: index + 1 })}
|
||||
accessibilityState={{ checked }}
|
||||
onPress={() => set("color", option)}
|
||||
style={{
|
||||
width: 36,
|
||||
height: 36,
|
||||
borderRadius: 18,
|
||||
backgroundColor: option,
|
||||
borderWidth: 3,
|
||||
borderColor: checked ? tokens.foreground : tokens.border,
|
||||
}}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</ScrollView>
|
||||
<View style={{ flexDirection: "row", gap: 8, marginTop: 14 }}>
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
accessibilityState={{ expanded: moreOpen }}
|
||||
onPress={() => setMoreOpen((open) => !open)}
|
||||
style={chip(moreOpen)}
|
||||
>
|
||||
<Text style={chipText(moreOpen)}>{t("Customize")}</Text>
|
||||
</Pressable>
|
||||
<Pressable
|
||||
accessibilityRole="button"
|
||||
onPress={() => onChange(encodeOoAvatar(ooRandomAvatar()))}
|
||||
style={chip(false)}
|
||||
>
|
||||
<Text style={chipText(false)}>{t("Surprise me")}</Text>
|
||||
</Pressable>
|
||||
</View>
|
||||
{moreOpen ? (
|
||||
<View>
|
||||
<Row
|
||||
title={t("Lashes")}
|
||||
values={OO_LASHES}
|
||||
selected={look.lashes}
|
||||
label={(lashes) => labels.lashes[lashes]}
|
||||
look={look}
|
||||
patch={(lashes) => ({ lashes })}
|
||||
focus="face"
|
||||
onSelect={(lashes) => set("lashes", lashes)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Eyeliner")}
|
||||
values={OO_LINERS}
|
||||
selected={look.liner}
|
||||
label={(liner) => labels.liner[liner]}
|
||||
look={look}
|
||||
patch={(liner) => ({ liner })}
|
||||
focus="face"
|
||||
onSelect={(liner) => set("liner", liner)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Eyeshadow")}
|
||||
values={OO_EYESHADOWS}
|
||||
selected={look.eyeshadow}
|
||||
label={(eyeshadow) => labels.eyeshadow[eyeshadow]}
|
||||
look={look}
|
||||
patch={(eyeshadow) => ({ eyeshadow })}
|
||||
focus="face"
|
||||
onSelect={(eyeshadow) => set("eyeshadow", eyeshadow)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Iris")}
|
||||
values={OO_IRISES}
|
||||
selected={look.iris}
|
||||
label={(iris) => labels.iris[iris]}
|
||||
look={look}
|
||||
patch={(iris) => ({ iris })}
|
||||
focus="face"
|
||||
onSelect={(iris) => set("iris", iris)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Sparkle")}
|
||||
values={OO_SPARKLES}
|
||||
selected={look.sparkle}
|
||||
label={(sparkle) => labels.sparkle[sparkle]}
|
||||
look={look}
|
||||
patch={(sparkle) => ({ sparkle })}
|
||||
focus="face"
|
||||
onSelect={(sparkle) => set("sparkle", sparkle)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Brows")}
|
||||
values={OO_BROWS}
|
||||
selected={look.brows}
|
||||
label={(brows) => labels.brows[brows]}
|
||||
look={look}
|
||||
patch={(brows) => ({ brows })}
|
||||
focus="face"
|
||||
onSelect={(brows) => set("brows", brows)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Cheeks")}
|
||||
values={OO_CHEEKS}
|
||||
selected={look.cheeks}
|
||||
label={(cheeks) => labels.cheeks[cheeks]}
|
||||
look={look}
|
||||
patch={(cheeks) => ({ cheeks })}
|
||||
focus="face"
|
||||
onSelect={(cheeks) => set("cheeks", cheeks)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Glasses")}
|
||||
values={OO_EYEWEAR}
|
||||
selected={look.eyewear}
|
||||
label={(eyewear) => labels.eyewear[eyewear]}
|
||||
look={look}
|
||||
patch={(eyewear) => ({ eyewear })}
|
||||
focus="face"
|
||||
onSelect={(eyewear) => set("eyewear", eyewear)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Hat")}
|
||||
values={OO_HEADWEAR}
|
||||
selected={look.head}
|
||||
label={(head) => labels.head[head]}
|
||||
look={look}
|
||||
patch={(head) => ({ head })}
|
||||
onSelect={(head) => set("head", head)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Neck")}
|
||||
values={OO_NECKWEAR}
|
||||
selected={look.neck}
|
||||
label={(neck) => labels.neck[neck]}
|
||||
look={look}
|
||||
patch={(neck) => ({ neck })}
|
||||
onSelect={(neck) => set("neck", neck)}
|
||||
/>
|
||||
<Row
|
||||
title={t("Arms")}
|
||||
values={OO_ARMS}
|
||||
selected={look.arms}
|
||||
label={(arms) => labels.arms[arms]}
|
||||
look={look}
|
||||
patch={(arms) => ({ arms })}
|
||||
onSelect={(arms) => set("arms", arms)}
|
||||
/>
|
||||
{(
|
||||
[
|
||||
["energy", t("Energy"), ENERGY_STEPS],
|
||||
["playful", t("Playful"), PLAYFUL_STEPS],
|
||||
] as const
|
||||
).map(([field, title, steps]) => {
|
||||
const current = nearest(steps, look[field]);
|
||||
return (
|
||||
<View key={field} style={{ marginTop: 14 }}>
|
||||
<Text style={{ color: tokens.mutedForeground, fontSize: 13 }}>{title}</Text>
|
||||
<View
|
||||
accessibilityRole="radiogroup"
|
||||
accessibilityLabel={title}
|
||||
style={{ flexDirection: "row", gap: 8, marginTop: 6 }}
|
||||
>
|
||||
{steps.map((step, index) => (
|
||||
<Pressable
|
||||
key={step}
|
||||
accessibilityRole="radio"
|
||||
accessibilityState={{ checked: step === current }}
|
||||
onPress={() => set(field, step)}
|
||||
style={chip(step === current)}
|
||||
>
|
||||
<Text style={chipText(step === current)}>{labels.energy[index]}</Text>
|
||||
</Pressable>
|
||||
))}
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
})}
|
||||
</View>
|
||||
) : null}
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@ -26,6 +26,7 @@ import Svg, {
|
||||
} from "react-native-svg";
|
||||
|
||||
const VIEWBOX = `${OO_RIG_INSET} ${OO_RIG_INSET + 4} ${OO_RIG_SIZE - 2 * OO_RIG_INSET} ${OO_RIG_SIZE - 2 * OO_RIG_INSET}`;
|
||||
const FACE_VIEWBOX = "47 62 112 112";
|
||||
/** Native frames redraw the SVG tree, so they run at half the display rate. */
|
||||
const FRAME_SECONDS = 1 / 30;
|
||||
/** Above this size an Oo always moves; smaller ones only for list moments. */
|
||||
@ -151,6 +152,7 @@ export function OoFigure({
|
||||
moment,
|
||||
size,
|
||||
still = false,
|
||||
focus = "body",
|
||||
}: {
|
||||
avatar: OoAvatar;
|
||||
color: string;
|
||||
@ -158,6 +160,8 @@ export function OoFigure({
|
||||
moment: OoMoment;
|
||||
size: number;
|
||||
still?: boolean;
|
||||
/** `face` crops to the eyes, for pickers of eye styles and eyewear. */
|
||||
focus?: "body" | "face";
|
||||
}) {
|
||||
const gradient = `oo${useId().replace(/[^a-zA-Z0-9-_]/g, "")}`;
|
||||
const lod = ooLodForSize(size);
|
||||
@ -200,7 +204,7 @@ export function OoFigure({
|
||||
const shown = frame ?? stillFrame;
|
||||
const { colors } = rig;
|
||||
return (
|
||||
<Svg width={size} height={size} viewBox={VIEWBOX}>
|
||||
<Svg width={size} height={size} viewBox={focus === "face" ? FACE_VIEWBOX : VIEWBOX}>
|
||||
<Defs>
|
||||
<LinearGradient id={`${gradient}-body`} x1="0" y1="0" x2="1" y2="1">
|
||||
<Stop offset="0" stopColor={colors.light} />
|
||||
|
||||
@ -616,6 +616,76 @@ export const RU_MESSAGES: Record<string, string> = {
|
||||
"Start timer": "Запустить таймер",
|
||||
"Step {position} of {total}": "Шаг {position} из {total}",
|
||||
"Stop timer": "Остановить таймер",
|
||||
Arms: "Руки",
|
||||
Beanie: "Шапка",
|
||||
Bear: "Медведь",
|
||||
Bell: "Колокольчик",
|
||||
Blue: "Синий",
|
||||
Bow: "Бантик",
|
||||
"Bow tie": "Бабочка",
|
||||
Brown: "Карий",
|
||||
Brows: "Брови",
|
||||
Bunny: "Зайчик",
|
||||
Bushy: "Густые",
|
||||
Calm: "Спокойный",
|
||||
Cat: "Кошка",
|
||||
Cheeks: "Щёки",
|
||||
"Chef's hat": "Колпак повара",
|
||||
Classic: "Классика",
|
||||
Crown: "Корона",
|
||||
Customize: "Настроить",
|
||||
Dog: "Собака",
|
||||
Dot: "Точка",
|
||||
Energy: "Энергия",
|
||||
Eyeliner: "Подводка",
|
||||
Eyeshadow: "Тени",
|
||||
Fine: "Тонкие",
|
||||
Flick: "Взмах",
|
||||
Flower: "Цветок",
|
||||
Freckles: "Веснушки",
|
||||
Frog: "Лягушка",
|
||||
Full: "Пышные",
|
||||
Ghost: "Призрак",
|
||||
Glass: "Стекло",
|
||||
Glasses: "Очки",
|
||||
Gold: "Золото",
|
||||
Green: "Зелёный",
|
||||
Hat: "Голова",
|
||||
Headphones: "Наушники",
|
||||
Heart: "Сердце",
|
||||
Iris: "Радужка",
|
||||
Lashes: "Ресницы",
|
||||
Lilac: "Сирень",
|
||||
Lively: "Живой",
|
||||
Mint: "Мята",
|
||||
Monocle: "Монокль",
|
||||
Neck: "Шея",
|
||||
Nerd: "Ботаник",
|
||||
None: "Нет",
|
||||
"Party hat": "Колпак",
|
||||
Paw: "Лапка",
|
||||
Peach: "Персик",
|
||||
Penguin: "Пингвин",
|
||||
Pink: "Розовый",
|
||||
Playful: "Игривость",
|
||||
"Reading glasses": "Очки для чтения",
|
||||
Robot: "Робот",
|
||||
Rose: "Роза",
|
||||
Round: "Круглые",
|
||||
Scarf: "Шарф",
|
||||
Shape: "Форма",
|
||||
"Shape {number}": "Форма {number}",
|
||||
Soft: "Мягкие",
|
||||
Sparkle: "Блик",
|
||||
Species: "Существо",
|
||||
Star: "Звезда",
|
||||
Steady: "Ровный",
|
||||
Stub: "Коротышки",
|
||||
Sunglasses: "Солнечные очки",
|
||||
"Surprise me": "Удиви меня",
|
||||
Violet: "Фиолетовый",
|
||||
"When needed": "По ситуации",
|
||||
Winged: "Стрелка",
|
||||
Accept: "Принять",
|
||||
Dismissed: "Отклонено",
|
||||
Expired: "Истекло",
|
||||
|
||||
@ -600,6 +600,76 @@ export const ZH_MESSAGES: Record<string, string> = {
|
||||
"Start timer": "开始计时",
|
||||
"Step {position} of {total}": "第 {position} 步,共 {total} 步",
|
||||
"Stop timer": "停止计时",
|
||||
Arms: "手臂",
|
||||
Beanie: "毛线帽",
|
||||
Bear: "熊",
|
||||
Bell: "铃铛",
|
||||
Blue: "蓝色",
|
||||
Bow: "蝴蝶结",
|
||||
"Bow tie": "领结",
|
||||
Brown: "棕色",
|
||||
Brows: "眉毛",
|
||||
Bunny: "兔子",
|
||||
Bushy: "浓密",
|
||||
Calm: "安静",
|
||||
Cat: "猫",
|
||||
Cheeks: "脸颊",
|
||||
"Chef's hat": "厨师帽",
|
||||
Classic: "经典",
|
||||
Crown: "皇冠",
|
||||
Customize: "自定义",
|
||||
Dog: "狗",
|
||||
Dot: "圆点",
|
||||
Energy: "活力",
|
||||
Eyeliner: "眼线",
|
||||
Eyeshadow: "眼影",
|
||||
Fine: "细",
|
||||
Flick: "上挑",
|
||||
Flower: "花朵",
|
||||
Freckles: "雀斑",
|
||||
Frog: "青蛙",
|
||||
Full: "浓密",
|
||||
Ghost: "幽灵",
|
||||
Glass: "玻璃",
|
||||
Glasses: "眼镜",
|
||||
Gold: "金色",
|
||||
Green: "绿色",
|
||||
Hat: "头饰",
|
||||
Headphones: "耳机",
|
||||
Heart: "爱心",
|
||||
Iris: "虹膜",
|
||||
Lashes: "睫毛",
|
||||
Lilac: "丁香",
|
||||
Lively: "活泼",
|
||||
Mint: "薄荷",
|
||||
Monocle: "单片眼镜",
|
||||
Neck: "颈部",
|
||||
Nerd: "书呆子",
|
||||
None: "无",
|
||||
"Party hat": "派对帽",
|
||||
Paw: "爪子",
|
||||
Peach: "桃色",
|
||||
Penguin: "企鹅",
|
||||
Pink: "粉色",
|
||||
Playful: "俏皮",
|
||||
"Reading glasses": "老花镜",
|
||||
Robot: "机器人",
|
||||
Rose: "玫瑰",
|
||||
Round: "圆形",
|
||||
Scarf: "围巾",
|
||||
Shape: "形状",
|
||||
"Shape {number}": "形状 {number}",
|
||||
Soft: "柔和",
|
||||
Sparkle: "高光",
|
||||
Species: "物种",
|
||||
Star: "星星",
|
||||
Steady: "平稳",
|
||||
Stub: "短短",
|
||||
Sunglasses: "墨镜",
|
||||
"Surprise me": "给我惊喜",
|
||||
Violet: "紫色",
|
||||
"When needed": "需要时",
|
||||
Winged: "上扬",
|
||||
Accept: "接受",
|
||||
Dismissed: "已忽略",
|
||||
Expired: "已过期",
|
||||
|
||||
@ -1,27 +0,0 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
import { captureScreenshot, completeOnboarding, signup } from "./helpers";
|
||||
|
||||
test("bot settings open Avatar Studio on the Bot tab", async ({ page }, testInfo) => {
|
||||
const stamp = Date.now();
|
||||
await signup(page, `avatar-studio-${stamp}@rakazo.test`, "password12", "Avatar Studio");
|
||||
await completeOnboarding(page);
|
||||
await page.goto("/app");
|
||||
await page.waitForURL(/\/app\/[^/]+$/);
|
||||
|
||||
await page.getByTestId("bot-settings-trigger").click();
|
||||
const settings = page.getByTestId("bot-settings");
|
||||
await expect(settings).toBeVisible();
|
||||
|
||||
await settings.getByTestId("avatar-studio-trigger").click();
|
||||
const studio = page.getByTestId("avatar-studio");
|
||||
await expect(studio).toBeVisible();
|
||||
await expect(studio.getByText("Avatar Studio", { exact: true })).toBeVisible();
|
||||
await expect(studio.getByRole("button", { name: "Bot", exact: true })).toBeVisible();
|
||||
await expect(studio.getByRole("button", { name: "Upload", exact: true })).toBeVisible();
|
||||
await expect(studio.getByRole("button", { name: "Generate" })).toHaveCount(0);
|
||||
await expect(studio.getByTestId("avatar-studio-bot-tab")).toBeVisible();
|
||||
await expect(studio.getByText("Shape", { exact: true })).toBeVisible();
|
||||
await expect(studio.getByText("Color", { exact: true })).toBeVisible();
|
||||
|
||||
await captureScreenshot(page, testInfo, "avatar-studio-bot-tab");
|
||||
});
|
||||
@ -73,10 +73,10 @@ test("bot creation, editing, and deletion persist", async ({ page }, testInfo) =
|
||||
await nameInput.fill("Researcher");
|
||||
await titleInput.fill(longTitle);
|
||||
await descriptionInput.fill("Finds reliable sources and turns them into concise briefs.");
|
||||
await page.getByTestId("avatar-studio-trigger").click();
|
||||
const studio = page.getByTestId("avatar-studio");
|
||||
await page.getByTestId("oo-atelier-trigger").click();
|
||||
const studio = page.getByTestId("oo-atelier");
|
||||
await expect(studio).toBeVisible();
|
||||
await expect(studio.getByTestId("avatar-studio-bot-tab")).toBeVisible();
|
||||
await expect(studio.getByTestId("oo-atelier-body")).toBeVisible();
|
||||
await studio.getByRole("button", { name: "Color #EAB308" }).click();
|
||||
await studio.getByRole("button", { name: "Done", exact: true }).click();
|
||||
await expect(studio).toBeHidden();
|
||||
@ -91,7 +91,7 @@ test("bot creation, editing, and deletion persist", async ({ page }, testInfo) =
|
||||
"Finds reliable sources and turns them into concise briefs.",
|
||||
);
|
||||
const settings = page.getByTestId("bot-settings");
|
||||
await settings.getByTestId("avatar-studio-trigger").click();
|
||||
await settings.getByTestId("oo-atelier-trigger").click();
|
||||
await expect(studio).toBeVisible();
|
||||
await expect(studio.getByRole("button", { name: "Color #EAB308" })).toHaveClass(/ring-2/);
|
||||
await studio.getByRole("button", { name: "Done", exact: true }).click();
|
||||
|
||||
12
apps/web/e2e/fixtures/oo-atelier.html
Normal file
12
apps/web/e2e/fixtures/oo-atelier.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Oo atelier</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/e2e/fixtures/oo-atelier.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
32
apps/web/e2e/fixtures/oo-atelier.tsx
Normal file
32
apps/web/e2e/fixtures/oo-atelier.tsx
Normal file
@ -0,0 +1,32 @@
|
||||
import { setupI18n } from "@lingui/core";
|
||||
import { I18nProvider } from "@lingui/react";
|
||||
import { useState } from "react";
|
||||
import { createRoot } from "react-dom/client";
|
||||
import { OoAtelierDialog } from "../../src/components/OoAtelier";
|
||||
import "../../src/styles.css";
|
||||
|
||||
const params = new URLSearchParams(location.search);
|
||||
document.documentElement.dataset.theme = params.get("theme") === "dark" ? "dark" : "light";
|
||||
const i18n = setupI18n({ locale: "en", messages: { en: {} } });
|
||||
|
||||
function Atelier() {
|
||||
const [value, setValue] = useState("oo1:c=FF781C;sp=cat;la=soft;ir=green;ew=round;hd=chef");
|
||||
return (
|
||||
<OoAtelierDialog
|
||||
open
|
||||
onOpenChange={() => undefined}
|
||||
value={value}
|
||||
identity="fixture"
|
||||
onChange={setValue}
|
||||
allowUpload
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
createRoot(document.getElementById("root")!).render(
|
||||
<I18nProvider i18n={i18n}>
|
||||
<main className="min-h-screen bg-background text-foreground">
|
||||
<Atelier />
|
||||
</main>
|
||||
</I18nProvider>,
|
||||
);
|
||||
59
apps/web/e2e/oo-atelier.spec.ts
Normal file
59
apps/web/e2e/oo-atelier.spec.ts
Normal file
@ -0,0 +1,59 @@
|
||||
import { expect, test } from "@playwright/test";
|
||||
import { captureScreenshot, completeOnboarding, signup } from "./helpers";
|
||||
|
||||
test("bot settings open the Atelier and dress the Oo", async ({ page }, testInfo) => {
|
||||
const stamp = Date.now();
|
||||
await signup(page, `oo-atelier-${stamp}@rakazo.test`, "password12", "Atelier");
|
||||
await completeOnboarding(page);
|
||||
await page.goto("/app");
|
||||
await page.waitForURL(/\/app\/[^/]+$/);
|
||||
|
||||
await page.getByTestId("bot-settings-trigger").click();
|
||||
const settings = page.getByTestId("bot-settings");
|
||||
await expect(settings).toBeVisible();
|
||||
|
||||
await settings.getByTestId("oo-atelier-trigger").click();
|
||||
const atelier = page.getByTestId("oo-atelier");
|
||||
await expect(atelier).toBeVisible();
|
||||
await expect(atelier.getByTestId("oo-atelier-body")).toBeVisible();
|
||||
|
||||
await atelier.getByRole("button", { name: "Cat", exact: true }).click();
|
||||
await expect(
|
||||
atelier.locator('[data-testid="oo-atelier-preview"] svg[data-oo-species="cat"]'),
|
||||
).toBeVisible();
|
||||
await captureScreenshot(page, testInfo, "oo-atelier-body");
|
||||
|
||||
await atelier.getByRole("tab", { name: "Eyes" }).click();
|
||||
await atelier.getByRole("button", { name: "Full", exact: true }).click();
|
||||
await atelier.getByRole("button", { name: "Green", exact: true }).click();
|
||||
await captureScreenshot(page, testInfo, "oo-atelier-eyes");
|
||||
|
||||
await atelier.getByRole("tab", { name: "Extras" }).click();
|
||||
await atelier.getByRole("button", { name: "Round", exact: true }).click();
|
||||
await atelier.getByRole("button", { name: "Chef's hat", exact: true }).click();
|
||||
await captureScreenshot(page, testInfo, "oo-atelier-extras");
|
||||
|
||||
await atelier.getByRole("button", { name: "Done", exact: true }).click();
|
||||
await expect(atelier).toBeHidden();
|
||||
const avatar = settings.locator('[data-testid="oo-atelier-trigger"] svg[data-oo-species="cat"]');
|
||||
await expect(avatar).toBeVisible();
|
||||
|
||||
await page.reload();
|
||||
await page.getByTestId("bot-settings-trigger").click();
|
||||
await expect(
|
||||
page.locator(
|
||||
'[data-testid="bot-settings"] [data-testid="oo-atelier-trigger"] svg[data-oo-species="cat"]',
|
||||
),
|
||||
).toBeVisible();
|
||||
});
|
||||
|
||||
for (const theme of ["light", "dark"] as const) {
|
||||
test(`Atelier reads well in ${theme} mode`, async ({ page }, testInfo) => {
|
||||
await page.emulateMedia({ colorScheme: theme });
|
||||
await page.goto(`/e2e/fixtures/oo-atelier.html?theme=${theme}`);
|
||||
const atelier = page.getByTestId("oo-atelier");
|
||||
await expect(atelier).toBeVisible();
|
||||
await expect(atelier.locator("svg[data-oo-species]").first()).toBeVisible();
|
||||
await captureScreenshot(page, testInfo, `oo-atelier-${theme}`);
|
||||
});
|
||||
}
|
||||
616
apps/web/src/components/OoAtelier.tsx
Normal file
616
apps/web/src/components/OoAtelier.tsx
Normal file
@ -0,0 +1,616 @@
|
||||
import { Trans, useLingui } from "@lingui/react/macro";
|
||||
import type { OoAvatar, OoMoment } from "@rakazo/core";
|
||||
import {
|
||||
DEFAULT_OO_AVATAR,
|
||||
encodeOoAvatar,
|
||||
OO_ARMS,
|
||||
OO_BROWS,
|
||||
OO_CHEEKS,
|
||||
OO_CLASSIC_SHAPE_COUNT,
|
||||
OO_ENERGY_RANGE,
|
||||
OO_EYESHADOWS,
|
||||
OO_EYEWEAR,
|
||||
OO_HEADWEAR,
|
||||
OO_IRISES,
|
||||
OO_LASHES,
|
||||
OO_LINERS,
|
||||
OO_NECKWEAR,
|
||||
OO_PALETTE_HEXES,
|
||||
OO_SPARKLES,
|
||||
OO_SPECIES,
|
||||
ooLookForEditing,
|
||||
ooRandomAvatar,
|
||||
} from "@rakazo/core";
|
||||
import {
|
||||
BotAvatar,
|
||||
Dialog,
|
||||
DialogContent,
|
||||
DialogDescription,
|
||||
DialogFooter,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
OoFigure,
|
||||
Tabs,
|
||||
TabsContent,
|
||||
TabsList,
|
||||
TabsTrigger,
|
||||
} from "@rakazo/ui-web";
|
||||
import { Check, Dices, Pencil, Upload, X } from "lucide-react";
|
||||
import type { ClipboardEvent, DragEvent, ReactNode } from "react";
|
||||
import { useRef, useState } from "react";
|
||||
|
||||
type Field = keyof OoAvatar;
|
||||
|
||||
/** Option rows of the Atelier; every value is drawn as the Oo wearing it. */
|
||||
function useOptionLabels() {
|
||||
const { t } = useLingui();
|
||||
const none = t`None`;
|
||||
return {
|
||||
species: {
|
||||
classic: t`Classic`,
|
||||
cat: t`Cat`,
|
||||
dog: t`Dog`,
|
||||
bunny: t`Bunny`,
|
||||
bear: t`Bear`,
|
||||
robot: t`Robot`,
|
||||
ghost: t`Ghost`,
|
||||
frog: t`Frog`,
|
||||
penguin: t`Penguin`,
|
||||
},
|
||||
lashes: { none, soft: t`Soft`, full: t`Full`, flick: t`Flick` },
|
||||
liner: { none, wing: t`Winged` },
|
||||
eyeshadow: { none, rose: t`Rose`, lilac: t`Lilac`, gold: t`Gold`, mint: t`Mint` },
|
||||
iris: {
|
||||
classic: t`Classic`,
|
||||
brown: t`Brown`,
|
||||
blue: t`Blue`,
|
||||
green: t`Green`,
|
||||
violet: t`Violet`,
|
||||
},
|
||||
sparkle: { dot: t`Dot`, star: t`Star`, heart: t`Heart` },
|
||||
brows: { auto: t`When needed`, fine: t`Fine`, bushy: t`Bushy` },
|
||||
cheeks: { none, pink: t`Pink`, peach: t`Peach`, freckles: t`Freckles` },
|
||||
eyewear: {
|
||||
none,
|
||||
round: t`Round`,
|
||||
nerd: t`Nerd`,
|
||||
sun: t`Sunglasses`,
|
||||
heart: t`Heart`,
|
||||
monocle: t`Monocle`,
|
||||
reading: t`Reading glasses`,
|
||||
},
|
||||
head: {
|
||||
none,
|
||||
chef: t`Chef's hat`,
|
||||
crown: t`Crown`,
|
||||
headphones: t`Headphones`,
|
||||
bow: t`Bow`,
|
||||
beanie: t`Beanie`,
|
||||
flower: t`Flower`,
|
||||
party: t`Party hat`,
|
||||
},
|
||||
neck: { none, bowtie: t`Bow tie`, scarf: t`Scarf`, bell: t`Bell` },
|
||||
arms: { glass: t`Glass`, stub: t`Stub`, paw: t`Paw`, robot: t`Robot`, none },
|
||||
} as const;
|
||||
}
|
||||
|
||||
function OptionGroup<T extends string | number>({
|
||||
title,
|
||||
values,
|
||||
selected,
|
||||
label,
|
||||
render,
|
||||
onSelect,
|
||||
}: {
|
||||
title: string;
|
||||
values: readonly T[];
|
||||
selected: T;
|
||||
label: (value: T) => string;
|
||||
render: (value: T) => ReactNode;
|
||||
onSelect: (value: T) => void;
|
||||
}) {
|
||||
return (
|
||||
<fieldset>
|
||||
<legend className="mb-1.5 text-ui-label font-medium text-muted-foreground">{title}</legend>
|
||||
<div className="flex flex-wrap gap-1.5">
|
||||
{values.map((value) => {
|
||||
const active = value === selected;
|
||||
return (
|
||||
<button
|
||||
key={value}
|
||||
type="button"
|
||||
aria-label={label(value)}
|
||||
title={label(value)}
|
||||
aria-pressed={active}
|
||||
onClick={() => onSelect(value)}
|
||||
className={`grid size-12 place-items-center overflow-hidden rounded-xl transition-transform hover:scale-105 active:scale-95 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring ${
|
||||
active ? "bg-foreground/10 ring-2 ring-primary" : "bg-muted/60 hover:bg-muted"
|
||||
}`}
|
||||
>
|
||||
{render(value)}
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</fieldset>
|
||||
);
|
||||
}
|
||||
|
||||
export interface OoAtelierDialogProps {
|
||||
open: boolean;
|
||||
onOpenChange: (open: boolean) => void;
|
||||
value: string;
|
||||
identity: string;
|
||||
status?: string;
|
||||
onChange: (value: string) => void;
|
||||
/** Bots may wear an uploaded picture instead of an Oo. */
|
||||
allowUpload?: boolean;
|
||||
}
|
||||
|
||||
export function OoAtelierDialog({
|
||||
open,
|
||||
onOpenChange,
|
||||
value,
|
||||
identity,
|
||||
status,
|
||||
onChange,
|
||||
allowUpload = false,
|
||||
}: OoAtelierDialogProps) {
|
||||
const { t } = useLingui();
|
||||
const labels = useOptionLabels();
|
||||
const [draft, setDraft] = useState<OoAvatar | null>(null);
|
||||
const [preview, setPreview] = useState<OoMoment | undefined>(undefined);
|
||||
const [dragOver, setDragOver] = useState(false);
|
||||
const fileInputRef = useRef<HTMLInputElement>(null);
|
||||
const isPicture = value.startsWith("data:image/");
|
||||
const look = draft ?? ooLookForEditing(value, identity);
|
||||
const encoded = encodeOoAvatar(look);
|
||||
|
||||
function commit(next: OoAvatar) {
|
||||
setDraft(null);
|
||||
onChange(encodeOoAvatar(next));
|
||||
}
|
||||
|
||||
function set<K extends Field>(field: K, next: OoAvatar[K]) {
|
||||
commit({ ...look, [field]: next });
|
||||
}
|
||||
|
||||
function slide(field: "energy" | "playful", next: number) {
|
||||
setDraft({ ...look, [field]: next });
|
||||
setPreview(field === "energy" ? "working" : "greeting");
|
||||
}
|
||||
|
||||
function settle() {
|
||||
if (draft) commit(draft);
|
||||
setPreview(undefined);
|
||||
}
|
||||
|
||||
function thumb(next: Partial<OoAvatar>, focus: "body" | "face" = "body") {
|
||||
return (
|
||||
<OoFigure
|
||||
avatar={{ ...look, ...next }}
|
||||
color={next.color ?? look.color}
|
||||
fallbackShape={next.shape ?? look.shape ?? 0}
|
||||
moment="idle"
|
||||
size={44}
|
||||
focus={focus}
|
||||
still
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function processImageFile(file: File) {
|
||||
if (!file.type.startsWith("image/")) return;
|
||||
const reader = new FileReader();
|
||||
reader.onload = (event) => {
|
||||
const src = event.target?.result as string;
|
||||
if (!src) return;
|
||||
const img = new Image();
|
||||
img.onload = () => {
|
||||
const canvas = document.createElement("canvas");
|
||||
const ctx = canvas.getContext("2d");
|
||||
const targetSize = 256;
|
||||
canvas.width = targetSize;
|
||||
canvas.height = targetSize;
|
||||
if (!ctx) return;
|
||||
ctx.beginPath();
|
||||
ctx.arc(targetSize / 2, targetSize / 2, targetSize / 2, 0, Math.PI * 2);
|
||||
ctx.clip();
|
||||
const minDim = Math.min(img.width, img.height);
|
||||
const sx = (img.width - minDim) / 2;
|
||||
const sy = (img.height - minDim) / 2;
|
||||
ctx.drawImage(img, sx, sy, minDim, minDim, 0, 0, targetSize, targetSize);
|
||||
onChange(canvas.toDataURL("image/webp", 0.9));
|
||||
onOpenChange(false);
|
||||
};
|
||||
img.src = src;
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
|
||||
function handleDrop(event: DragEvent<HTMLButtonElement>) {
|
||||
event.preventDefault();
|
||||
setDragOver(false);
|
||||
const file = event.dataTransfer.files?.[0];
|
||||
if (file) processImageFile(file);
|
||||
}
|
||||
|
||||
function handlePaste(event: ClipboardEvent<HTMLButtonElement>) {
|
||||
const items = event.clipboardData?.items;
|
||||
if (!items) return;
|
||||
for (let index = 0; index < items.length; index += 1) {
|
||||
const item = items[index];
|
||||
if (!item?.type.startsWith("image/")) continue;
|
||||
const file = item.getAsFile();
|
||||
if (file) {
|
||||
processImageFile(file);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const sliderClass = "w-full accent-primary";
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||
<DialogContent
|
||||
showCloseButton={false}
|
||||
className="max-h-[92vh] w-[420px] max-w-full gap-3 overflow-y-auto rounded-3xl p-5 sm:max-w-[420px]"
|
||||
data-testid="oo-atelier"
|
||||
>
|
||||
<DialogHeader className="flex-row items-center justify-between space-y-0">
|
||||
<DialogTitle className="text-ui-body font-semibold tracking-tight">
|
||||
<Trans>Atelier</Trans>
|
||||
</DialogTitle>
|
||||
<DialogDescription className="sr-only">
|
||||
<Trans>Choose how your Oo looks and moves</Trans>
|
||||
</DialogDescription>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => onOpenChange(false)}
|
||||
className="flex size-7 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"
|
||||
aria-label={t`Close`}
|
||||
>
|
||||
<X className="size-icon-md" />
|
||||
</button>
|
||||
</DialogHeader>
|
||||
|
||||
<div className="flex justify-center py-1" data-testid="oo-atelier-preview">
|
||||
<BotAvatar
|
||||
color={isPicture && !draft ? value : encoded}
|
||||
identity={identity}
|
||||
status={status}
|
||||
size={128}
|
||||
moment={preview}
|
||||
interactive
|
||||
/>
|
||||
</div>
|
||||
|
||||
<Tabs defaultValue="body">
|
||||
<TabsList className="w-full">
|
||||
<TabsTrigger value="body">
|
||||
<Trans>Body</Trans>
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="eyes">
|
||||
<Trans>Eyes</Trans>
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value="extras">
|
||||
<Trans>Extras</Trans>
|
||||
</TabsTrigger>
|
||||
{allowUpload ? (
|
||||
<TabsTrigger value="upload">
|
||||
<Trans>Upload</Trans>
|
||||
</TabsTrigger>
|
||||
) : null}
|
||||
</TabsList>
|
||||
|
||||
<TabsContent value="body" className="space-y-4 pt-2" data-testid="oo-atelier-body">
|
||||
<OptionGroup
|
||||
title={t`Species`}
|
||||
values={OO_SPECIES}
|
||||
selected={look.species}
|
||||
label={(species) => labels.species[species]}
|
||||
render={(species) =>
|
||||
thumb({ species, arms: species === "robot" ? "robot" : look.arms })
|
||||
}
|
||||
onSelect={(species) =>
|
||||
commit({
|
||||
...look,
|
||||
species,
|
||||
arms: species === "robot" ? "robot" : look.arms === "robot" ? "glass" : look.arms,
|
||||
})
|
||||
}
|
||||
/>
|
||||
{look.species === "classic" ? (
|
||||
<OptionGroup
|
||||
title={t`Shape`}
|
||||
values={Array.from({ length: OO_CLASSIC_SHAPE_COUNT }, (_, index) => index)}
|
||||
selected={look.shape ?? -1}
|
||||
label={(shape) => t`Shape ${shape + 1}`}
|
||||
render={(shape) => thumb({ shape })}
|
||||
onSelect={(shape) => set("shape", shape)}
|
||||
/>
|
||||
) : null}
|
||||
<fieldset>
|
||||
<legend className="mb-1.5 text-ui-label font-medium text-muted-foreground">
|
||||
<Trans>Color</Trans>
|
||||
</legend>
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
{OO_PALETTE_HEXES.map((color) => {
|
||||
const selected = !isPicture && look.color.toLowerCase() === color.toLowerCase();
|
||||
return (
|
||||
<button
|
||||
key={color}
|
||||
type="button"
|
||||
onClick={() => set("color", color)}
|
||||
aria-label={t`Color ${color}`}
|
||||
aria-pressed={selected}
|
||||
className={`size-7 rounded-full border transition-transform hover:scale-110 active:scale-95 focus-visible:ring-2 focus-visible:ring-ring ${
|
||||
selected
|
||||
? "scale-105 border-transparent ring-2 ring-foreground ring-offset-2 ring-offset-popover"
|
||||
: "border-border"
|
||||
}`}
|
||||
style={{ backgroundColor: color }}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
<input
|
||||
type="color"
|
||||
aria-label={t`Custom color`}
|
||||
value={look.color.length === 7 ? look.color : DEFAULT_OO_AVATAR.color}
|
||||
onChange={(event) => setDraft({ ...look, color: event.target.value })}
|
||||
onBlur={settle}
|
||||
className="size-7 cursor-pointer rounded-full border border-border bg-transparent p-0"
|
||||
/>
|
||||
</div>
|
||||
</fieldset>
|
||||
<div className="grid grid-cols-2 gap-4">
|
||||
<label className="text-ui-label font-medium text-muted-foreground">
|
||||
<Trans>Energy</Trans>
|
||||
<input
|
||||
type="range"
|
||||
min={OO_ENERGY_RANGE.min}
|
||||
max={OO_ENERGY_RANGE.max}
|
||||
step={0.05}
|
||||
value={look.energy}
|
||||
onChange={(event) => slide("energy", Number(event.target.value))}
|
||||
onPointerUp={settle}
|
||||
onKeyUp={settle}
|
||||
onBlur={settle}
|
||||
className={sliderClass}
|
||||
/>
|
||||
</label>
|
||||
<label className="text-ui-label font-medium text-muted-foreground">
|
||||
<Trans>Playful</Trans>
|
||||
<input
|
||||
type="range"
|
||||
min={0}
|
||||
max={1}
|
||||
step={0.05}
|
||||
value={look.playful}
|
||||
onChange={(event) => slide("playful", Number(event.target.value))}
|
||||
onPointerUp={settle}
|
||||
onKeyUp={settle}
|
||||
onBlur={settle}
|
||||
className={sliderClass}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="eyes" className="space-y-4 pt-2" data-testid="oo-atelier-eyes">
|
||||
<OptionGroup
|
||||
title={t`Lashes`}
|
||||
values={OO_LASHES}
|
||||
selected={look.lashes}
|
||||
label={(lashes) => labels.lashes[lashes]}
|
||||
render={(lashes) => thumb({ lashes }, "face")}
|
||||
onSelect={(lashes) => set("lashes", lashes)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Eyeliner`}
|
||||
values={OO_LINERS}
|
||||
selected={look.liner}
|
||||
label={(liner) => labels.liner[liner]}
|
||||
render={(liner) => thumb({ liner }, "face")}
|
||||
onSelect={(liner) => set("liner", liner)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Eyeshadow`}
|
||||
values={OO_EYESHADOWS}
|
||||
selected={look.eyeshadow}
|
||||
label={(eyeshadow) => labels.eyeshadow[eyeshadow]}
|
||||
render={(eyeshadow) => thumb({ eyeshadow }, "face")}
|
||||
onSelect={(eyeshadow) => set("eyeshadow", eyeshadow)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Iris`}
|
||||
values={OO_IRISES}
|
||||
selected={look.iris}
|
||||
label={(iris) => labels.iris[iris]}
|
||||
render={(iris) => thumb({ iris }, "face")}
|
||||
onSelect={(iris) => set("iris", iris)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Sparkle`}
|
||||
values={OO_SPARKLES}
|
||||
selected={look.sparkle}
|
||||
label={(sparkle) => labels.sparkle[sparkle]}
|
||||
render={(sparkle) => thumb({ sparkle }, "face")}
|
||||
onSelect={(sparkle) => set("sparkle", sparkle)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Brows`}
|
||||
values={OO_BROWS}
|
||||
selected={look.brows}
|
||||
label={(brows) => labels.brows[brows]}
|
||||
render={(brows) => thumb({ brows }, "face")}
|
||||
onSelect={(brows) => set("brows", brows)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Cheeks`}
|
||||
values={OO_CHEEKS}
|
||||
selected={look.cheeks}
|
||||
label={(cheeks) => labels.cheeks[cheeks]}
|
||||
render={(cheeks) => thumb({ cheeks }, "face")}
|
||||
onSelect={(cheeks) => set("cheeks", cheeks)}
|
||||
/>
|
||||
</TabsContent>
|
||||
|
||||
<TabsContent value="extras" className="space-y-4 pt-2" data-testid="oo-atelier-extras">
|
||||
<OptionGroup
|
||||
title={t`Glasses`}
|
||||
values={OO_EYEWEAR}
|
||||
selected={look.eyewear}
|
||||
label={(eyewear) => labels.eyewear[eyewear]}
|
||||
render={(eyewear) => thumb({ eyewear }, "face")}
|
||||
onSelect={(eyewear) => set("eyewear", eyewear)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Hat`}
|
||||
values={OO_HEADWEAR}
|
||||
selected={look.head}
|
||||
label={(head) => labels.head[head]}
|
||||
render={(head) => thumb({ head })}
|
||||
onSelect={(head) => set("head", head)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Neck`}
|
||||
values={OO_NECKWEAR}
|
||||
selected={look.neck}
|
||||
label={(neck) => labels.neck[neck]}
|
||||
render={(neck) => thumb({ neck })}
|
||||
onSelect={(neck) => set("neck", neck)}
|
||||
/>
|
||||
<OptionGroup
|
||||
title={t`Arms`}
|
||||
values={OO_ARMS}
|
||||
selected={look.arms}
|
||||
label={(arms) => labels.arms[arms]}
|
||||
render={(arms) => thumb({ arms })}
|
||||
onSelect={(arms) => set("arms", arms)}
|
||||
/>
|
||||
</TabsContent>
|
||||
|
||||
{allowUpload ? (
|
||||
<TabsContent value="upload" className="pt-2">
|
||||
<button
|
||||
type="button"
|
||||
aria-label={t`Image upload area`}
|
||||
onDragOver={(event) => {
|
||||
event.preventDefault();
|
||||
setDragOver(true);
|
||||
}}
|
||||
onDragLeave={() => setDragOver(false)}
|
||||
onDrop={handleDrop}
|
||||
onPaste={handlePaste}
|
||||
onClick={() => fileInputRef.current?.click()}
|
||||
className={`flex w-full flex-col items-center justify-center rounded-xl border border-dashed p-6 text-center transition-colors ${
|
||||
dragOver
|
||||
? "border-primary bg-primary/10"
|
||||
: "border-border bg-muted hover:border-foreground/30"
|
||||
}`}
|
||||
>
|
||||
<input
|
||||
ref={fileInputRef}
|
||||
type="file"
|
||||
accept="image/*"
|
||||
className="hidden"
|
||||
onChange={(event) => {
|
||||
const file = event.target.files?.[0];
|
||||
if (file) processImageFile(file);
|
||||
}}
|
||||
/>
|
||||
<div className="mb-2 grid size-10 place-items-center rounded-full bg-secondary text-muted-foreground">
|
||||
<Upload strokeWidth={1.8} className="size-icon-lg" />
|
||||
</div>
|
||||
<p className="text-ui-body-sm font-medium text-muted-foreground">
|
||||
<Trans>Drag, drop, or paste an image</Trans>
|
||||
</p>
|
||||
<span className="mt-3 rounded-lg bg-secondary px-3 py-1.5 text-ui-label font-medium text-foreground">
|
||||
<Trans>Choose file</Trans>
|
||||
</span>
|
||||
</button>
|
||||
</TabsContent>
|
||||
) : null}
|
||||
</Tabs>
|
||||
|
||||
<DialogFooter className="flex-row items-center justify-between border-border sm:justify-between">
|
||||
<div className="flex items-center gap-1">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => commit(ooRandomAvatar())}
|
||||
aria-label={t`Surprise me`}
|
||||
title={t`Surprise me`}
|
||||
className="flex size-8 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"
|
||||
>
|
||||
<Dices className="size-icon-md" />
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => commit({ ...DEFAULT_OO_AVATAR, color: look.color })}
|
||||
className="px-2 py-1 text-ui-label font-medium text-muted-foreground transition-colors hover:text-foreground"
|
||||
>
|
||||
<Trans>Reset</Trans>
|
||||
</button>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => onOpenChange(false)}
|
||||
className="flex items-center gap-1.5 rounded-xl bg-secondary px-4 py-1.5 text-ui-body-sm font-medium text-foreground transition-colors hover:bg-accent"
|
||||
>
|
||||
<Check className="size-icon-md" />
|
||||
<Trans>Done</Trans>
|
||||
</button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
}
|
||||
|
||||
export interface OoAtelierProps {
|
||||
value: string;
|
||||
identity?: string;
|
||||
status?: string;
|
||||
size?: number;
|
||||
onChange: (value: string) => void;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
/** The bot's avatar; tapping it opens the Atelier. */
|
||||
export function OoAtelier({
|
||||
value,
|
||||
identity = "",
|
||||
status,
|
||||
size = 72,
|
||||
onChange,
|
||||
disabled = false,
|
||||
}: OoAtelierProps) {
|
||||
const { t } = useLingui();
|
||||
const [open, setOpen] = useState(false);
|
||||
return (
|
||||
<>
|
||||
<button
|
||||
type="button"
|
||||
disabled={disabled}
|
||||
onClick={() => setOpen(true)}
|
||||
className="group relative cursor-pointer rounded-2xl outline-none transition-transform hover:scale-[1.03] focus-visible:ring-2 focus-visible:ring-ring"
|
||||
aria-label={t`Customize bot avatar`}
|
||||
data-testid="oo-atelier-trigger"
|
||||
>
|
||||
<BotAvatar color={value} identity={identity} size={size} status={status} />
|
||||
<div className="absolute -right-1 -bottom-1 flex size-6 items-center justify-center rounded-full border-2 border-background bg-secondary text-foreground shadow-md transition-transform group-hover:scale-110">
|
||||
<Pencil strokeWidth={2.2} className="size-icon-sm" />
|
||||
</div>
|
||||
</button>
|
||||
<OoAtelierDialog
|
||||
open={open}
|
||||
onOpenChange={setOpen}
|
||||
value={value}
|
||||
identity={identity}
|
||||
status={status}
|
||||
onChange={onChange}
|
||||
allowUpload
|
||||
/>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
import { Trans, useLingui } from "@lingui/react/macro";
|
||||
import type { EvooPose } from "@rakazo/ui-web";
|
||||
import { BotAvatar, Button } from "@rakazo/ui-web";
|
||||
import { type ReactNode, useCallback, useEffect, useMemo, useState } from "react";
|
||||
import {
|
||||
@ -8,12 +9,10 @@ import {
|
||||
type LookPreset,
|
||||
lookPresetToAvatarValue,
|
||||
} from "../../lib/onboarding-look-categories";
|
||||
import { OoAtelierDialog } from "../OoAtelier";
|
||||
import { LookPreviewCarousel } from "./LookPreviewCarousel";
|
||||
|
||||
export interface OnboardingEmojiConfig {
|
||||
color: string;
|
||||
shapeIndex: number;
|
||||
accessory: string;
|
||||
pose: string;
|
||||
avatarValue: string;
|
||||
}
|
||||
@ -43,23 +42,8 @@ function categoryLabel(id: LookCategoryId): ReactNode {
|
||||
}
|
||||
}
|
||||
|
||||
function presetFromConfig(config: OnboardingEmojiConfig): LookPreset {
|
||||
return {
|
||||
id: "custom",
|
||||
color: config.color,
|
||||
shapeIndex: config.shapeIndex,
|
||||
pose: config.pose as LookPreset["pose"],
|
||||
};
|
||||
}
|
||||
|
||||
function configFromPreset(preset: LookPreset): OnboardingEmojiConfig {
|
||||
return {
|
||||
color: preset.color,
|
||||
shapeIndex: preset.shapeIndex,
|
||||
accessory: "none",
|
||||
pose: preset.pose,
|
||||
avatarValue: lookPresetToAvatarValue(preset),
|
||||
};
|
||||
return { pose: preset.pose, avatarValue: lookPresetToAvatarValue(preset) };
|
||||
}
|
||||
|
||||
export function OnboardingOoDesigner({ config, onChange, onContinue }: OnboardingOoDesignerProps) {
|
||||
@ -80,29 +64,19 @@ export function OnboardingOoDesigner({ config, onChange, onContinue }: Onboardin
|
||||
[onChange],
|
||||
);
|
||||
|
||||
const [atelierOpen, setAtelierOpen] = useState(false);
|
||||
|
||||
useEffect(() => {
|
||||
const match = LOOK_CATEGORIES.find((entry) =>
|
||||
entry.looks.some(
|
||||
(look) =>
|
||||
look.color.toLowerCase() === config.color.toLowerCase() &&
|
||||
look.shapeIndex === config.shapeIndex &&
|
||||
look.pose === config.pose,
|
||||
),
|
||||
entry.looks.some((look) => look.avatar === config.avatarValue),
|
||||
);
|
||||
if (match) {
|
||||
const index = match.looks.findIndex(
|
||||
(look) =>
|
||||
look.color.toLowerCase() === config.color.toLowerCase() &&
|
||||
look.shapeIndex === config.shapeIndex &&
|
||||
look.pose === config.pose,
|
||||
);
|
||||
const index = match.looks.findIndex((look) => look.avatar === config.avatarValue);
|
||||
setCategoryId(match.id);
|
||||
setLookIndex(index >= 0 ? index : 0);
|
||||
}
|
||||
}, []);
|
||||
|
||||
const activeLook = category.looks[lookIndex] ?? presetFromConfig(config);
|
||||
|
||||
const handleLookIndexChange = useCallback(
|
||||
(index: number) => {
|
||||
const preset = category.looks[index];
|
||||
@ -132,10 +106,11 @@ export function OnboardingOoDesigner({ config, onChange, onContinue }: Onboardin
|
||||
onIndexChange={handleLookIndexChange}
|
||||
preview={
|
||||
<BotAvatar
|
||||
color={lookPresetToAvatarValue(activeLook)}
|
||||
color={config.avatarValue}
|
||||
size={168}
|
||||
identity="onboarding-preview"
|
||||
pose={activeLook.pose}
|
||||
pose={config.pose as EvooPose}
|
||||
interactive
|
||||
/>
|
||||
}
|
||||
/>
|
||||
@ -174,13 +149,30 @@ export function OnboardingOoDesigner({ config, onChange, onContinue }: Onboardin
|
||||
</div>
|
||||
|
||||
<div className="mt-8 flex items-center justify-between">
|
||||
<div className="flex items-center gap-1">
|
||||
<Button variant="ghost" size="sm" onClick={resetLook}>
|
||||
<Trans>Reset</Trans>
|
||||
</Button>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="sm"
|
||||
onClick={() => setAtelierOpen(true)}
|
||||
data-testid="onboarding-oo-customize"
|
||||
>
|
||||
<Trans>Customize</Trans>
|
||||
</Button>
|
||||
</div>
|
||||
<Button onClick={onContinue}>
|
||||
<Trans>Continue</Trans>
|
||||
</Button>
|
||||
</div>
|
||||
<OoAtelierDialog
|
||||
open={atelierOpen}
|
||||
onOpenChange={setAtelierOpen}
|
||||
value={config.avatarValue}
|
||||
identity="onboarding-preview"
|
||||
onChange={(avatarValue) => onChange({ ...config, avatarValue })}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { isValidAvatarValue } from "@rakazo/core";
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
buildAvatarValue,
|
||||
findLookCategory,
|
||||
LOOK_CATEGORIES,
|
||||
lookPresetToAvatarValue,
|
||||
@ -14,10 +14,13 @@ describe("onboarding-look-categories", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("builds avatar values in color::shape format", () => {
|
||||
const look = findLookCategory("coder").looks[0]!;
|
||||
expect(lookPresetToAvatarValue(look)).toBe(buildAvatarValue(look.color, look.shapeIndex));
|
||||
expect(buildAvatarValue("#8B5CF6", 2)).toBe("#8B5CF6::shape_2");
|
||||
it("stores every look as a valid avatar value", () => {
|
||||
for (const category of LOOK_CATEGORIES) {
|
||||
for (const look of category.looks) {
|
||||
expect(isValidAvatarValue(lookPresetToAvatarValue(look)), look.id).toBe(true);
|
||||
expect(look.avatar.startsWith("oo1:"), look.id).toBe(true);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
it("falls back to the first category for unknown ids", () => {
|
||||
|
||||
@ -4,8 +4,8 @@ export type LookCategoryId = "work" | "hobby" | "scene" | "coder" | "calm";
|
||||
|
||||
export interface LookPreset {
|
||||
id: string;
|
||||
color: string;
|
||||
shapeIndex: number;
|
||||
/** Encoded `oo1:` look. */
|
||||
avatar: string;
|
||||
pose: EvooPose;
|
||||
}
|
||||
|
||||
@ -14,51 +14,59 @@ export interface LookCategory {
|
||||
looks: LookPreset[];
|
||||
}
|
||||
|
||||
/** Curated look families built from existing shape, color, and pose taxonomies. */
|
||||
/** Curated looks per vibe; each starts a different species so the first swipe shows the range. */
|
||||
export const LOOK_CATEGORIES: LookCategory[] = [
|
||||
{
|
||||
id: "work",
|
||||
looks: [
|
||||
{ id: "work-violet-hex", color: "#8B5CF6", shapeIndex: 0, pose: "working" },
|
||||
{ id: "work-blue-tablet", color: "#3B82F6", shapeIndex: 3, pose: "analyzing" },
|
||||
{ id: "work-white-squircle", color: "#FFFFFF", shapeIndex: 2, pose: "listening" },
|
||||
{ id: "work-green-wedge", color: "#10B981", shapeIndex: 1, pose: "reading" },
|
||||
{ id: "work-violet", avatar: "oo1:c=8B5CF6;ew=round;nk=bowtie", pose: "working" },
|
||||
{ id: "work-penguin", avatar: "oo1:c=3B82F6;sp=penguin;ew=reading", pose: "analyzing" },
|
||||
{
|
||||
id: "work-robot",
|
||||
avatar: "oo1:c=FFFFFF;sp=robot;ar=robot;hd=headphones",
|
||||
pose: "listening",
|
||||
},
|
||||
{ id: "work-bear", avatar: "oo1:c=8D6E63;sp=bear;ar=paw;ew=nerd", pose: "reading" },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: "hobby",
|
||||
looks: [
|
||||
{ id: "hobby-orange-blob", color: "#F97316", shapeIndex: 5, pose: "delighted" },
|
||||
{ id: "hobby-yellow-pebble", color: "#EAB308", shapeIndex: 4, pose: "curious" },
|
||||
{ id: "hobby-red-teardrop", color: "#EF4444", shapeIndex: 6, pose: "greeting" },
|
||||
{ id: "hobby-cyan-cloud", color: "#06B6D4", shapeIndex: 7, pose: "speaking" },
|
||||
{ id: "hobby-dog", avatar: "oo1:c=F97316;sp=dog;ar=paw;nk=scarf", pose: "delighted" },
|
||||
{ id: "hobby-frog", avatar: "oo1:c=10B981;sp=frog;hd=flower", pose: "curious" },
|
||||
{ id: "hobby-cat", avatar: "oo1:c=EAB308;sp=cat;ar=paw;hd=beanie", pose: "greeting" },
|
||||
{ id: "hobby-chef", avatar: "oo1:c=EF4444;sh=6;hd=chef", pose: "speaking" },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: "scene",
|
||||
looks: [
|
||||
{ id: "scene-red-wedge", color: "#EF4444", shapeIndex: 1, pose: "speaking" },
|
||||
{ id: "scene-violet-teardrop", color: "#8B5CF6", shapeIndex: 6, pose: "delighted" },
|
||||
{ id: "scene-cyan-hex", color: "#06B6D4", shapeIndex: 0, pose: "collaborating" },
|
||||
{ id: "scene-orange-squircle", color: "#F97316", shapeIndex: 2, pose: "success" },
|
||||
{ id: "scene-cat", avatar: "oo1:c=EC4899;sp=cat;la=full;li=wing;ew=sun", pose: "speaking" },
|
||||
{
|
||||
id: "scene-bunny",
|
||||
avatar: "oo1:c=FFFFFF;sp=bunny;la=full;es=rose;sk=heart;ew=heart",
|
||||
pose: "delighted",
|
||||
},
|
||||
{ id: "scene-ghost", avatar: "oo1:c=8B5CF6;sp=ghost;hd=party", pose: "collaborating" },
|
||||
{ id: "scene-crown", avatar: "oo1:c=06B6D4;sh=2;hd=crown;sk=star", pose: "success" },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: "coder",
|
||||
looks: [
|
||||
{ id: "coder-cyan-hex", color: "#06B6D4", shapeIndex: 0, pose: "working" },
|
||||
{ id: "coder-green-squircle", color: "#10B981", shapeIndex: 2, pose: "analyzing" },
|
||||
{ id: "coder-blue-tablet", color: "#3B82F6", shapeIndex: 3, pose: "thinking" },
|
||||
{ id: "coder-violet-pebble", color: "#8B5CF6", shapeIndex: 4, pose: "collaborating" },
|
||||
{ id: "coder-robot", avatar: "oo1:c=06B6D4;sp=robot;ar=robot;sk=star", pose: "working" },
|
||||
{ id: "coder-cat", avatar: "oo1:c=10B981;sp=cat;ew=nerd;hd=headphones", pose: "analyzing" },
|
||||
{ id: "coder-hex", avatar: "oo1:c=3B82F6;sh=0;ew=round;hd=beanie", pose: "thinking" },
|
||||
{ id: "coder-ghost", avatar: "oo1:c=8B5CF6;sp=ghost;ew=reading", pose: "collaborating" },
|
||||
],
|
||||
},
|
||||
{
|
||||
id: "calm",
|
||||
looks: [
|
||||
{ id: "calm-green-cloud", color: "#10B981", shapeIndex: 7, pose: "greeting" },
|
||||
{ id: "calm-violet-blob", color: "#8B5CF6", shapeIndex: 5, pose: "listening" },
|
||||
{ id: "calm-white-pebble", color: "#FFFFFF", shapeIndex: 4, pose: "idle" },
|
||||
{ id: "calm-cyan-squircle", color: "#06B6D4", shapeIndex: 2, pose: "curious" },
|
||||
{ id: "calm-cloud", avatar: "oo1:c=10B981;sh=7;ck=pink", pose: "greeting" },
|
||||
{ id: "calm-bear", avatar: "oo1:c=8B5CF6;sp=bear;ar=paw;nk=scarf", pose: "listening" },
|
||||
{ id: "calm-bunny", avatar: "oo1:c=FFFFFF;sp=bunny;la=soft;ck=peach", pose: "idle" },
|
||||
{ id: "calm-penguin", avatar: "oo1:c=06B6D4;sp=penguin;nk=bell", pose: "curious" },
|
||||
],
|
||||
},
|
||||
];
|
||||
@ -73,10 +81,6 @@ export function findLookCategory(id: LookCategoryId): LookCategory {
|
||||
return category;
|
||||
}
|
||||
|
||||
export function buildAvatarValue(color: string, shapeIndex: number): string {
|
||||
return `${color}::shape_${shapeIndex}`;
|
||||
}
|
||||
|
||||
export function lookPresetToAvatarValue(look: LookPreset): string {
|
||||
return buildAvatarValue(look.color, look.shapeIndex);
|
||||
return look.avatar;
|
||||
}
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr "Möchtest du dein Konto wirklich löschen? Das kann nicht rückgängig g
|
||||
msgid "Arguments"
|
||||
msgstr "Argumente"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr "Arme"
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "um {0}"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "um {timeSelect}"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr "Atelier"
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "Datei anhängen"
|
||||
@ -756,10 +764,6 @@ msgstr "Automatische Absender erscheinen, sobald sie hier etwas posten."
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr "Verfügbar, sobald die Routine gespeichert ist"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "Avatar-Studio"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr "Zurück zur Zeitleiste"
|
||||
msgid "Base URL"
|
||||
msgstr "Basis-URL"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr "Mütze"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr "Bär"
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "Bearer-Token"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr "Glöckchen"
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr "In deinen Browser-Einstellungen blockiert"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr "Blau"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr "Körper"
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "Live-Desktop wird gestartet…"
|
||||
@ -810,7 +834,6 @@ msgstr "Bot"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "Bot"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "Bots handeln standardmäßig ohne Nachfrage. Füge nur dann eine Ausnahm
|
||||
msgid "Bots are working"
|
||||
msgstr "Bots arbeiten"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr "Schleife"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr "Fliege"
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr "Brain-Bezeichnung"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr "Braun"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr "Brauen"
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr "MCP-Server durchsuchen"
|
||||
@ -846,6 +885,14 @@ msgstr "MCP-Server durchsuchen"
|
||||
msgid "Browser"
|
||||
msgstr "Browser"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr "Hase"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr "Buschig"
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr "Beschäftigt"
|
||||
@ -911,6 +958,10 @@ msgstr "Abgebrochen"
|
||||
msgid "Cancelled"
|
||||
msgstr "Abgebrochen"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr "Katze"
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr "Kategorie"
|
||||
@ -1006,9 +1057,13 @@ msgstr "Wird geprüft…"
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr "Der Checkout hat lokale Änderungen. Bereinige ihn vor dem Update."
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "Wähle eine Bot-Form und Farbe oder lade ein Bild hoch"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr "Wangen"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr "Kochmütze"
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "Wähle ein neues Passwort"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr "Wähle einen vorhandenen Ordner auf diesem Computer. Git-Remotes werden automatisch verknüpft, wenn ein Repository vorhanden ist."
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "Datei wählen"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "Datei wählen"
|
||||
msgid "Choose folder"
|
||||
msgstr "Ordner wählen"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr "Wähle, wie dein Oo aussieht und sich bewegt"
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "Wähle das verbundene Modell aus, das Rakazo verwendet."
|
||||
@ -1046,6 +1105,10 @@ msgstr "Wähle deine Sprache"
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr "Wähle die richtige Form…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr "Klassisch"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "Leeren"
|
||||
@ -1076,12 +1139,12 @@ msgstr "Client-ID"
|
||||
msgid "Client secret"
|
||||
msgstr "Client-Secret"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "Schließen"
|
||||
@ -1165,11 +1228,11 @@ msgstr "Coder"
|
||||
msgid "Collapse {0}"
|
||||
msgstr "{0} einklappen"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "Farbe"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "Farbe {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Cron"
|
||||
msgid "Cron expression"
|
||||
msgstr "Cron-Ausdruck"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr "Krone"
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Aktuelles Passwort"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr "Eigene Farbe"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr "Kundensupport"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr "Anpassen"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "Bot-Avatar anpassen"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "Docker begrenzt für mehr Sicherheit den Zugriff auf deinen Computer. We
|
||||
msgid "Does not speak"
|
||||
msgstr "Spricht nicht"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr "Hund"
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr "In Arbeit"
|
||||
@ -2071,10 +2150,10 @@ msgstr "Kein Stress — wir sind jetzt da."
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "Fertig"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "Fertig"
|
||||
msgid "Done"
|
||||
msgstr "Erledigt"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr "Punkt"
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr "Entwerfe die Spezifikation…"
|
||||
msgid "Drag to reorder"
|
||||
msgstr "Ziehen zum Umsortieren"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "Bild ziehen, ablegen oder einfügen"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "E-Mail"
|
||||
msgid "Embeddings URL"
|
||||
msgstr "Embeddings-URL"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr "Energie"
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr "Reagieren, wenn ... Ignorieren ..."
|
||||
@ -2288,6 +2375,22 @@ msgstr "Externe Unterhaltung"
|
||||
msgid "Extra high"
|
||||
msgstr "Sehr hoch"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr "Extras"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr "Lidstrich"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr "Augen"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr "Lidschatten"
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr "Fakt"
|
||||
@ -2345,6 +2448,10 @@ msgstr "Suche den richtigen Ton…"
|
||||
msgid "Finding…"
|
||||
msgstr "Suche läuft…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr "Fein"
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr "Erste {shownRows} Zeilen"
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr "Unerwartete Aktionen markieren"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr "Schwung"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr "Blume"
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr "Schriften lokal geladen"
|
||||
@ -2395,10 +2510,22 @@ msgstr "Passwort vergessen?"
|
||||
msgid "Forward"
|
||||
msgstr "Vorwärts"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr "Sommersprossen"
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr "Kostenlos"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr "Frosch"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr "Voll"
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "Vollbild"
|
||||
@ -2427,10 +2554,22 @@ msgstr "Wird vorbereitet"
|
||||
msgid "Getting ready…"
|
||||
msgstr "Wird vorbereitet…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr "Geist"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr "Git-Ereignis"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr "Glas"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr "Brille"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr "Ziel"
|
||||
@ -2445,6 +2584,14 @@ msgstr "Ziele"
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr "Ziele für dieses Projekt, unabhängig von Chat-Nachrichten. Unterhaltungen findest du weiter unten."
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr "Gold"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr "Grün"
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr "Lege zuerst auf und gib dann den Code auf dem Bildschirm ein."
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr "Lege auf und gib dann den Code auf dem Bildschirm ein."
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr "Kopf"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr "Header"
|
||||
@ -2503,6 +2654,10 @@ msgstr "Header-Name"
|
||||
msgid "Header value"
|
||||
msgstr "Header-Wert"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr "Kopfhörer"
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr "Gesundheit"
|
||||
@ -2511,6 +2666,10 @@ msgstr "Gesundheit"
|
||||
msgid "Hear a sample"
|
||||
msgstr "Beispiel anhören"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr "Herz"
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr "Meine Einschätzung…"
|
||||
@ -2597,7 +2756,7 @@ msgstr "Ignorieren"
|
||||
msgid "Image model"
|
||||
msgstr "Bildmodell"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "Bild-Upload-Bereich"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "Intervallwert"
|
||||
msgid "Interval unit"
|
||||
msgstr "Intervalleinheit"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr "Iris"
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "Wissen"
|
||||
msgid "Language"
|
||||
msgstr "Sprache"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr "Wimpern"
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr "Später"
|
||||
@ -2726,6 +2893,10 @@ msgstr "Privatkanal — ich bin da."
|
||||
msgid "Light"
|
||||
msgstr "Hell"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr "Flieder"
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr "Integrierte Tools einschränken"
|
||||
@ -3031,6 +3202,10 @@ msgstr "Minimieren"
|
||||
msgid "Minimize bots"
|
||||
msgstr "Bots minimieren"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr "Mint"
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "Minute"
|
||||
@ -3080,6 +3255,10 @@ msgstr "Modelle für den Standard-Space des Serverbesitzers."
|
||||
msgid "Models from server"
|
||||
msgstr "Modelle vom Server"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr "Monokel"
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "Monatlich"
|
||||
@ -3145,6 +3324,10 @@ msgstr "Gruppe benennen"
|
||||
msgid "Name this routine"
|
||||
msgstr "Routine benennen"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr "Hals"
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr "Braucht Aufmerksamkeit"
|
||||
@ -3168,6 +3351,10 @@ msgstr "Braucht dich"
|
||||
msgid "Needs your reply"
|
||||
msgstr "Braucht deine Antwort"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr "Nerd"
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "Neuer Bot"
|
||||
@ -3359,6 +3546,10 @@ msgstr "Kein Trigger"
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr "Es werden keine Nutzungsdaten an Dritte gesendet"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr "Keine"
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "Noch keine"
|
||||
@ -3555,6 +3746,10 @@ msgstr "PagerDuty-Vorfall"
|
||||
msgid "Park"
|
||||
msgstr "Zurückstellen"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr "Partyhut"
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "Füge deinen API-Schlüssel ein"
|
||||
msgid "Paused"
|
||||
msgstr "Pausiert"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr "Pfote"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr "Pfirsich"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr "Pinguin"
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr "Menschen"
|
||||
@ -3615,6 +3822,14 @@ msgstr "Wähle eine Stimme"
|
||||
msgid "Pin"
|
||||
msgstr "Anheften"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr "Rosa"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr "Verspielt"
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "Wiedergabe…"
|
||||
@ -3762,6 +3977,10 @@ msgstr "Antworten vorlesen"
|
||||
msgid "read-only"
|
||||
msgstr "schreibgeschützt"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr "Lesebrille"
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr "Lese den Stacktrace…"
|
||||
@ -3976,7 +4195,7 @@ msgstr "Recherche, Schreiben"
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Zurücksetzen"
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr "Widerrufen"
|
||||
msgid "Riffing"
|
||||
msgstr "Am Riffen"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr "Roboter"
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr "Hinweise für diesen Raum"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr "Rosé"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr "Schlüssel erneuern"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr "Rund"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "Antworte mit Ja oder Nein oder in einem Satz."
|
||||
msgid "Scanning exposure…"
|
||||
msgstr "Prüfe das Risiko…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr "Schal"
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr "Szene"
|
||||
@ -4294,10 +4529,15 @@ msgstr "Einrichtungshilfe"
|
||||
msgid "Setup progress"
|
||||
msgstr "Einrichtungsfortschritt"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "Form"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr "Form {0}"
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr "Erzähl, was dir vorschwebt — oder nenn mir eine Sache, die ich verfeinern soll."
|
||||
@ -4415,6 +4655,10 @@ msgstr "Slack-Nachricht"
|
||||
msgid "Slack not enabled"
|
||||
msgstr "Slack nicht aktiviert"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr "Zart"
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr "Software-Update"
|
||||
@ -4444,6 +4688,10 @@ msgstr "Space-Standard"
|
||||
msgid "Spaces"
|
||||
msgstr "Spaces"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr "Glanz"
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "Vorlesen"
|
||||
@ -4478,10 +4726,18 @@ msgstr "Spreche mit Bedacht…"
|
||||
msgid "Specialist crew"
|
||||
msgstr "Spezialisten-Team"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr "Wesen"
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr "Standard"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr "Stern"
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr "Starten"
|
||||
@ -4585,6 +4841,10 @@ msgstr "Stresstest fürs Portfolio…"
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr "Stärker zusammen — {0} Spezialisten"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr "Stummel"
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "Subagent"
|
||||
@ -4597,6 +4857,10 @@ msgstr "Absenden"
|
||||
msgid "Summary"
|
||||
msgstr "Zusammenfassung"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr "Sonnenbrille"
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr "Unterstützt Bilder"
|
||||
@ -4605,6 +4869,10 @@ msgstr "Unterstützt Bilder"
|
||||
msgid "Supports thinking"
|
||||
msgstr "Unterstützt Denkmodus"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr "Überrasch mich"
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr "Wische für weitere Looks"
|
||||
@ -4921,7 +5189,7 @@ msgstr "Team-Computer wird aktualisiert"
|
||||
msgid "Updating…"
|
||||
msgstr "Wird aktualisiert…"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "Hochladen"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "Wird geprüft…"
|
||||
msgid "Video workflow"
|
||||
msgstr "Video-Workflow"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr "Violett"
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr "Um welche Aufgabe geht es?"
|
||||
msgid "When a webhook fires"
|
||||
msgstr "Wenn ein Webhook auslöst"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr "Bei Bedarf"
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr "Wann soll ich mich bei dir melden?"
|
||||
@ -5133,6 +5409,10 @@ msgstr "Einsatzzeitpunkt"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "Wo sollen Bots ausgeführt werden?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr "Geschwungen"
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr "Mit:"
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr "Are you sure you want to delete your account? This cannot be undone."
|
||||
msgid "Arguments"
|
||||
msgstr "Arguments"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr "Arms"
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "at {0}"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "at {timeSelect}"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr "Atelier"
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "Attach file"
|
||||
@ -756,10 +764,6 @@ msgstr "Automated senders will appear after they post here."
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr "Available after the routine is saved"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "Avatar Studio"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr "Back to timeline"
|
||||
msgid "Base URL"
|
||||
msgstr "Base URL"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr "Beanie"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr "Bear"
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "Bearer token"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr "Bell"
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr "Blocked in your browser settings"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr "Blue"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr "Body"
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "Booting live desktop…"
|
||||
@ -810,7 +834,6 @@ msgstr "Bot"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "Bot"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "Bots act without asking by default. Add an exception only when you want
|
||||
msgid "Bots are working"
|
||||
msgstr "Bots are working"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr "Bow"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr "Bow tie"
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr "Brain label"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr "Brown"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr "Brows"
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr "Browse MCP servers"
|
||||
@ -846,6 +885,14 @@ msgstr "Browse MCP servers"
|
||||
msgid "Browser"
|
||||
msgstr "Browser"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr "Bunny"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr "Bushy"
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr "Busy"
|
||||
@ -911,6 +958,10 @@ msgstr "Cancelled"
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelled"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr "Cat"
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr "Category"
|
||||
@ -1006,9 +1057,13 @@ msgstr "Checking…"
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr "Checkout has local changes. Clean it before updating."
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "Choose a bot shape, color, or upload an image"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr "Cheeks"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr "Chef's hat"
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "Choose a new password"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "Choose file"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "Choose file"
|
||||
msgid "Choose folder"
|
||||
msgstr "Choose folder"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr "Choose how your Oo looks and moves"
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "Choose which connected model Rakazo uses."
|
||||
@ -1046,6 +1105,10 @@ msgstr "Choose your language"
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr "Choosing the right shape…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr "Classic"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "Clear"
|
||||
@ -1076,12 +1139,12 @@ msgstr "Client ID"
|
||||
msgid "Client secret"
|
||||
msgstr "Client secret"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "Close"
|
||||
@ -1165,11 +1228,11 @@ msgstr "Coder"
|
||||
msgid "Collapse {0}"
|
||||
msgstr "Collapse {0}"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "Color"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "Color {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Cron"
|
||||
msgid "Cron expression"
|
||||
msgstr "Cron expression"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr "Crown"
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Current password"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr "Custom color"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr "Customer support"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr "Customize"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "Customize bot avatar"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "Docker limits access to your computer for added security. Using {hostLab
|
||||
msgid "Does not speak"
|
||||
msgstr "Does not speak"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr "Dog"
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr "Doing"
|
||||
@ -2071,10 +2150,10 @@ msgstr "Don't stress — we're here now."
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "Done"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "Done"
|
||||
msgid "Done"
|
||||
msgstr "Done"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr "Dot"
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr "Drafting the spec…"
|
||||
msgid "Drag to reorder"
|
||||
msgstr "Drag to reorder"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "Drag, drop, or paste an image"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "Email"
|
||||
msgid "Embeddings URL"
|
||||
msgstr "Embeddings URL"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr "Energy"
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr "Engage when... Ignore..."
|
||||
@ -2288,6 +2375,22 @@ msgstr "External conversation"
|
||||
msgid "Extra high"
|
||||
msgstr "Extra high"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr "Extras"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr "Eyeliner"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr "Eyes"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr "Eyeshadow"
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr "Fact"
|
||||
@ -2345,6 +2448,10 @@ msgstr "Finding the right tone…"
|
||||
msgid "Finding…"
|
||||
msgstr "Finding…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr "Fine"
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr "First {shownRows} rows"
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr "Flag unexpected actions"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr "Flick"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr "Flower"
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr "Fonts loaded locally"
|
||||
@ -2395,10 +2510,22 @@ msgstr "Forgot password?"
|
||||
msgid "Forward"
|
||||
msgstr "Forward"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr "Freckles"
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr "Free"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr "Frog"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr "Full"
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "Fullscreen"
|
||||
@ -2427,10 +2554,22 @@ msgstr "Getting ready"
|
||||
msgid "Getting ready…"
|
||||
msgstr "Getting ready…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr "Ghost"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr "Git event"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr "Glass"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr "Glasses"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr "Goal"
|
||||
@ -2445,6 +2584,14 @@ msgstr "Goals"
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr "Goals for this project, separate from chat messages. Conversations are below."
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr "Gold"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr "Green"
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr "Hang up first, then enter the code on screen."
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr "Hang up, then enter the code on screen."
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr "Hat"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr "header"
|
||||
@ -2503,6 +2654,10 @@ msgstr "Header name"
|
||||
msgid "Header value"
|
||||
msgstr "Header value"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr "Headphones"
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr "Health"
|
||||
@ -2511,6 +2666,10 @@ msgstr "Health"
|
||||
msgid "Hear a sample"
|
||||
msgstr "Hear a sample"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr "Heart"
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr "Here's the read…"
|
||||
@ -2597,7 +2756,7 @@ msgstr "Ignore"
|
||||
msgid "Image model"
|
||||
msgstr "Image model"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "Image upload area"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "Interval amount"
|
||||
msgid "Interval unit"
|
||||
msgstr "Interval unit"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr "Iris"
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "Knowledge"
|
||||
msgid "Language"
|
||||
msgstr "Language"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr "Lashes"
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr "Later"
|
||||
@ -2726,6 +2893,10 @@ msgstr "Life channel — I'm here."
|
||||
msgid "Light"
|
||||
msgstr "Light"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr "Lilac"
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr "Limit built-in tools"
|
||||
@ -3031,6 +3202,10 @@ msgstr "Minimize"
|
||||
msgid "Minimize bots"
|
||||
msgstr "Minimize bots"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr "Mint"
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "minute"
|
||||
@ -3080,6 +3255,10 @@ msgstr "Models for the server owner’s default space."
|
||||
msgid "Models from server"
|
||||
msgstr "Models from server"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr "Monocle"
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "Monthly"
|
||||
@ -3145,6 +3324,10 @@ msgstr "Name this group"
|
||||
msgid "Name this routine"
|
||||
msgstr "Name this routine"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr "Neck"
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr "Needs attention"
|
||||
@ -3168,6 +3351,10 @@ msgstr "Needs you"
|
||||
msgid "Needs your reply"
|
||||
msgstr "Needs your reply"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr "Nerd"
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "New bot"
|
||||
@ -3359,6 +3546,10 @@ msgstr "No trigger"
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr "No usage data is sent to third parties"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr "None"
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "None yet"
|
||||
@ -3555,6 +3746,10 @@ msgstr "PagerDuty incident"
|
||||
msgid "Park"
|
||||
msgstr "Park"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr "Party hat"
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "Paste your API key"
|
||||
msgid "Paused"
|
||||
msgstr "Paused"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr "Paw"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr "Peach"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr "Penguin"
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr "People"
|
||||
@ -3615,6 +3822,14 @@ msgstr "Pick a voice"
|
||||
msgid "Pin"
|
||||
msgstr "Pin"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr "Pink"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr "Playful"
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "Playing…"
|
||||
@ -3762,6 +3977,10 @@ msgstr "Read replies aloud"
|
||||
msgid "read-only"
|
||||
msgstr "read-only"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr "Reading glasses"
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr "Reading the stack trace…"
|
||||
@ -3976,7 +4195,7 @@ msgstr "research, writing"
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Reset"
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr "Revoke"
|
||||
msgid "Riffing"
|
||||
msgstr "Riffing"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr "Robot"
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr "Room guidance"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr "Rose"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr "Rotate key"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr "Round"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "Say yes or no, or answer in a sentence."
|
||||
msgid "Scanning exposure…"
|
||||
msgstr "Scanning exposure…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr "Scarf"
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr "Scene"
|
||||
@ -4294,10 +4529,15 @@ msgstr "Setup help"
|
||||
msgid "Setup progress"
|
||||
msgstr "Setup progress"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "Shape"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr "Shape {0}"
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr "Share what you're imagining — or tell me one thing to refine."
|
||||
@ -4415,6 +4655,10 @@ msgstr "Slack message"
|
||||
msgid "Slack not enabled"
|
||||
msgstr "Slack not enabled"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr "Soft"
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr "Software update"
|
||||
@ -4444,6 +4688,10 @@ msgstr "Space default"
|
||||
msgid "Spaces"
|
||||
msgstr "Spaces"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr "Sparkle"
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "Speak"
|
||||
@ -4478,10 +4726,18 @@ msgstr "Speaking with intent…"
|
||||
msgid "Specialist crew"
|
||||
msgstr "Specialist crew"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr "Species"
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr "Standard"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr "Star"
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr "Start"
|
||||
@ -4585,6 +4841,10 @@ msgstr "Stress-testing the book…"
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr "Stronger together — {0} specialists"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr "Stub"
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "subagent"
|
||||
@ -4597,6 +4857,10 @@ msgstr "Submit"
|
||||
msgid "Summary"
|
||||
msgstr "Summary"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr "Sunglasses"
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr "Supports images"
|
||||
@ -4605,6 +4869,10 @@ msgstr "Supports images"
|
||||
msgid "Supports thinking"
|
||||
msgstr "Supports thinking"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr "Surprise me"
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr "Swipe for more looks"
|
||||
@ -4921,7 +5189,7 @@ msgstr "Updating Team Computer"
|
||||
msgid "Updating…"
|
||||
msgstr "Updating…"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "Upload"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "Verifying…"
|
||||
msgid "Video workflow"
|
||||
msgstr "Video workflow"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr "Violet"
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr "What's the work item?"
|
||||
msgid "When a webhook fires"
|
||||
msgstr "When a webhook fires"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr "When needed"
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr "When should I check in with you?"
|
||||
@ -5133,6 +5409,10 @@ msgstr "When to use"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "Where should bots run?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr "Winged"
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr "With:"
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr ""
|
||||
msgid "Arguments"
|
||||
msgstr "Argumentos"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "a las {0}"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "a las {timeSelect}"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "Adjuntar archivo"
|
||||
@ -756,10 +764,6 @@ msgstr ""
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr "Disponible después de guardar la rutina"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "Estudio de avatares"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr ""
|
||||
msgid "Base URL"
|
||||
msgstr "URL base"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "Token Bearer"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "Iniciando escritorio en vivo…"
|
||||
@ -810,7 +834,6 @@ msgstr "Bot"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "Bot"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "Los bots actúan sin preguntar de forma predeterminada. Agrega una excep
|
||||
msgid "Bots are working"
|
||||
msgstr "Los bots están trabajando"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr ""
|
||||
@ -846,6 +885,14 @@ msgstr ""
|
||||
msgid "Browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr ""
|
||||
@ -911,6 +958,10 @@ msgstr "Cancelado"
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
@ -1006,9 +1057,13 @@ msgstr "Comprobando…"
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr "El checkout tiene cambios locales. Límpialo antes de actualizar."
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "Elige una forma y color del bot, o sube una imagen"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "Elige una contraseña nueva"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "Elegir archivo"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "Elegir archivo"
|
||||
msgid "Choose folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "Elige qué modelo conectado usa Rakazo."
|
||||
@ -1046,6 +1105,10 @@ msgstr ""
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "Borrar"
|
||||
@ -1076,12 +1139,12 @@ msgstr ""
|
||||
msgid "Client secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "Cerrar"
|
||||
@ -1165,11 +1228,11 @@ msgstr ""
|
||||
msgid "Collapse {0}"
|
||||
msgstr "Contraer {0}"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "Color"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "Color {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Cron"
|
||||
msgid "Cron expression"
|
||||
msgstr "Expresión cron"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Contraseña actual"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr "Atención al cliente"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "Personalizar avatar del bot"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "Docker limita el acceso a tu computadora para mayor seguridad. Usar {hos
|
||||
msgid "Does not speak"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr ""
|
||||
@ -2071,10 +2150,10 @@ msgstr ""
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "Listo"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "Listo"
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr ""
|
||||
msgid "Drag to reorder"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "Arrastra, suelta o pega una imagen"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "Correo"
|
||||
msgid "Embeddings URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr ""
|
||||
@ -2288,6 +2375,22 @@ msgstr ""
|
||||
msgid "Extra high"
|
||||
msgstr "Extra alto"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr ""
|
||||
@ -2345,6 +2448,10 @@ msgstr ""
|
||||
msgid "Finding…"
|
||||
msgstr "Buscando…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr ""
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr "Marcar acciones inesperadas"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr ""
|
||||
@ -2395,10 +2510,22 @@ msgstr "¿Olvidaste la contraseña?"
|
||||
msgid "Forward"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr "Gratis"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "Pantalla completa"
|
||||
@ -2427,10 +2554,22 @@ msgstr ""
|
||||
msgid "Getting ready…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr "Evento de Git"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
@ -2445,6 +2584,14 @@ msgstr ""
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr "Cuelga primero y luego ingresa el código en pantalla."
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr "Cuelga y luego ingresa el código en pantalla."
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr "Encabezado"
|
||||
@ -2503,6 +2654,10 @@ msgstr "Nombre del encabezado"
|
||||
msgid "Header value"
|
||||
msgstr "Valor del encabezado"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr ""
|
||||
@ -2511,6 +2666,10 @@ msgstr ""
|
||||
msgid "Hear a sample"
|
||||
msgstr "Escuchar una muestra"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr ""
|
||||
@ -2597,7 +2756,7 @@ msgstr ""
|
||||
msgid "Image model"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "Área de carga de imagen"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "Cantidad del intervalo"
|
||||
msgid "Interval unit"
|
||||
msgstr "Unidad del intervalo"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "Conocimientos"
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr ""
|
||||
@ -2726,6 +2893,10 @@ msgstr ""
|
||||
msgid "Light"
|
||||
msgstr "Claro"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr ""
|
||||
@ -3031,6 +3202,10 @@ msgstr "Minimizar"
|
||||
msgid "Minimize bots"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "minuto"
|
||||
@ -3080,6 +3255,10 @@ msgstr ""
|
||||
msgid "Models from server"
|
||||
msgstr "Modelos del servidor"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "Mensual"
|
||||
@ -3145,6 +3324,10 @@ msgstr "Nombra este grupo"
|
||||
msgid "Name this routine"
|
||||
msgstr "Nombra esta rutina"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr ""
|
||||
@ -3168,6 +3351,10 @@ msgstr ""
|
||||
msgid "Needs your reply"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "Nuevo bot"
|
||||
@ -3359,6 +3546,10 @@ msgstr "Sin disparador"
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "Ninguno aún"
|
||||
@ -3555,6 +3746,10 @@ msgstr "Incidente de PagerDuty"
|
||||
msgid "Park"
|
||||
msgstr "Aparcar"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "Pega tu clave de API"
|
||||
msgid "Paused"
|
||||
msgstr "En pausa"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr ""
|
||||
@ -3615,6 +3822,14 @@ msgstr ""
|
||||
msgid "Pin"
|
||||
msgstr "Fijar"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "Reproduciendo…"
|
||||
@ -3762,6 +3977,10 @@ msgstr "Leer respuestas en voz alta"
|
||||
msgid "read-only"
|
||||
msgstr "Solo lectura"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr ""
|
||||
@ -3976,7 +4195,7 @@ msgstr ""
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Restablecer"
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr "Revocar"
|
||||
msgid "Riffing"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr "Rotar clave"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "Di sí o no, o responde en una frase."
|
||||
msgid "Scanning exposure…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr ""
|
||||
@ -4294,10 +4529,15 @@ msgstr "Ayuda de configuración"
|
||||
msgid "Setup progress"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "Forma"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr ""
|
||||
@ -4415,6 +4655,10 @@ msgstr "Mensaje de Slack"
|
||||
msgid "Slack not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr "Actualización de software"
|
||||
@ -4444,6 +4688,10 @@ msgstr "Predeterminado del Space"
|
||||
msgid "Spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "Hablar"
|
||||
@ -4478,10 +4726,18 @@ msgstr ""
|
||||
msgid "Specialist crew"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
@ -4585,6 +4841,10 @@ msgstr ""
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "subagente"
|
||||
@ -4597,6 +4857,10 @@ msgstr "Enviar"
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr "Admite imágenes"
|
||||
@ -4605,6 +4869,10 @@ msgstr "Admite imágenes"
|
||||
msgid "Supports thinking"
|
||||
msgstr "Admite razonamiento"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr ""
|
||||
@ -4921,7 +5189,7 @@ msgstr ""
|
||||
msgid "Updating…"
|
||||
msgstr "Actualizando…"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "Subir"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "Verificando…"
|
||||
msgid "Video workflow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr ""
|
||||
msgid "When a webhook fires"
|
||||
msgstr "Cuando se dispara un webhook"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr ""
|
||||
@ -5133,6 +5409,10 @@ msgstr "Cuándo usar"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "¿Dónde deben ejecutarse los bots?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr ""
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr ""
|
||||
msgid "Arguments"
|
||||
msgstr "आर्ग्युमेंट"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "{0} बजे"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "{timeSelect} बजे"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "फ़ाइल संलग्न करें"
|
||||
@ -756,10 +764,6 @@ msgstr ""
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "अवतार स्टूडियो"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr ""
|
||||
msgid "Base URL"
|
||||
msgstr "बेस URL"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "बियरर टोकन"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "लाइव डेस्कटॉप शुरू हो रहा है…"
|
||||
@ -810,7 +834,6 @@ msgstr "बॉट"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "बॉट"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "बॉट डिफ़ॉल्ट रूप से बिना पू
|
||||
msgid "Bots are working"
|
||||
msgstr "बॉट काम कर रहे हैं"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr ""
|
||||
@ -846,6 +885,14 @@ msgstr ""
|
||||
msgid "Browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr ""
|
||||
@ -911,6 +958,10 @@ msgstr "रद्द किया गया"
|
||||
msgid "Cancelled"
|
||||
msgstr "रद्द किया गया"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
@ -1006,9 +1057,13 @@ msgstr ""
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "बॉट का आकार और रंग चुनें, या छवि अपलोड करें"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "नया पासवर्ड चुनें"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "फ़ाइल चुनें"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "फ़ाइल चुनें"
|
||||
msgid "Choose folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "चुनें कि Rakazo किस कनेक्टेड मॉडल का उपयोग करे।"
|
||||
@ -1046,6 +1105,10 @@ msgstr ""
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "साफ़ करें"
|
||||
@ -1076,12 +1139,12 @@ msgstr ""
|
||||
msgid "Client secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "बंद करें"
|
||||
@ -1165,11 +1228,11 @@ msgstr ""
|
||||
msgid "Collapse {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "रंग"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "रंग {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Cron"
|
||||
msgid "Cron expression"
|
||||
msgstr "Cron एक्सप्रेशन"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "वर्तमान पासवर्ड"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "बॉट अवतार अनुकूलित करें"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "Docker अतिरिक्त सुरक्षा के लिए
|
||||
msgid "Does not speak"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr ""
|
||||
@ -2071,10 +2150,10 @@ msgstr ""
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "पूर्ण"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "पूर्ण"
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr ""
|
||||
msgid "Drag to reorder"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "छवि खींचें, छोड़ें या पेस्ट करें"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "ईमेल"
|
||||
msgid "Embeddings URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr ""
|
||||
@ -2288,6 +2375,22 @@ msgstr ""
|
||||
msgid "Extra high"
|
||||
msgstr "अतिरिक्त उच्च"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr ""
|
||||
@ -2345,6 +2448,10 @@ msgstr ""
|
||||
msgid "Finding…"
|
||||
msgstr "खोजा जा रहा है…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr ""
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr ""
|
||||
@ -2395,10 +2510,22 @@ msgstr "पासवर्ड भूल गए?"
|
||||
msgid "Forward"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "फ़ुलस्क्रीन"
|
||||
@ -2427,10 +2554,22 @@ msgstr ""
|
||||
msgid "Getting ready…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
@ -2445,6 +2584,14 @@ msgstr ""
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr ""
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr ""
|
||||
@ -2503,6 +2654,10 @@ msgstr "हेडर नाम"
|
||||
msgid "Header value"
|
||||
msgstr "हेडर मान"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr ""
|
||||
@ -2511,6 +2666,10 @@ msgstr ""
|
||||
msgid "Hear a sample"
|
||||
msgstr "एक नमूना सुनें"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr ""
|
||||
@ -2597,7 +2756,7 @@ msgstr ""
|
||||
msgid "Image model"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "छवि अपलोड क्षेत्र"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "अंतराल मात्रा"
|
||||
msgid "Interval unit"
|
||||
msgstr "अंतराल इकाई"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "ज्ञान"
|
||||
msgid "Language"
|
||||
msgstr "भाषा"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr ""
|
||||
@ -2726,6 +2893,10 @@ msgstr ""
|
||||
msgid "Light"
|
||||
msgstr "लाइट"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr ""
|
||||
@ -3031,6 +3202,10 @@ msgstr "छोटा करें"
|
||||
msgid "Minimize bots"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "मिनट"
|
||||
@ -3080,6 +3255,10 @@ msgstr ""
|
||||
msgid "Models from server"
|
||||
msgstr "सर्वर से मॉडल"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "मासिक"
|
||||
@ -3145,6 +3324,10 @@ msgstr "इस समूह को नाम दें"
|
||||
msgid "Name this routine"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr ""
|
||||
@ -3168,6 +3351,10 @@ msgstr ""
|
||||
msgid "Needs your reply"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "नया बॉट"
|
||||
@ -3359,6 +3546,10 @@ msgstr ""
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "अभी तक कोई नहीं"
|
||||
@ -3555,6 +3746,10 @@ msgstr ""
|
||||
msgid "Park"
|
||||
msgstr "पार्क करें"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "अपनी API कुंजी पेस्ट करें"
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr ""
|
||||
@ -3615,6 +3822,14 @@ msgstr ""
|
||||
msgid "Pin"
|
||||
msgstr "पिन करें"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "प्ले हो रहा है…"
|
||||
@ -3762,6 +3977,10 @@ msgstr "उत्तर पढ़कर सुनाएं"
|
||||
msgid "read-only"
|
||||
msgstr "केवल पढ़ने योग्य"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr ""
|
||||
@ -3976,7 +4195,7 @@ msgstr ""
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr "रीसेट करें"
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr ""
|
||||
msgid "Riffing"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "हां या ना कहें, या एक वाक्य म
|
||||
msgid "Scanning exposure…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr ""
|
||||
@ -4294,10 +4529,15 @@ msgstr "सेटअप सहायता"
|
||||
msgid "Setup progress"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "आकार"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr ""
|
||||
@ -4415,6 +4655,10 @@ msgstr ""
|
||||
msgid "Slack not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr ""
|
||||
@ -4444,6 +4688,10 @@ msgstr "स्पेस डिफ़ॉल्ट"
|
||||
msgid "Spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "बोलें"
|
||||
@ -4478,10 +4726,18 @@ msgstr ""
|
||||
msgid "Specialist crew"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
@ -4585,6 +4841,10 @@ msgstr ""
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "सबएजेंट"
|
||||
@ -4597,6 +4857,10 @@ msgstr "सबमिट करें"
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr "छवियों का समर्थन"
|
||||
@ -4605,6 +4869,10 @@ msgstr "छवियों का समर्थन"
|
||||
msgid "Supports thinking"
|
||||
msgstr "सोचने की क्षमता का समर्थन करता है"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr ""
|
||||
@ -4921,7 +5189,7 @@ msgstr ""
|
||||
msgid "Updating…"
|
||||
msgstr "अपडेट हो रहा है…"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "अपलोड"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "पुष्टि की जा रही है…"
|
||||
msgid "Video workflow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr ""
|
||||
msgid "When a webhook fires"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr ""
|
||||
@ -5133,6 +5409,10 @@ msgstr "कब उपयोग करें"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "बॉट कहां चलने चाहिए?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr ""
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr ""
|
||||
msgid "Arguments"
|
||||
msgstr "인자"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "{0}에"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "{timeSelect}에"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "파일 첨부"
|
||||
@ -756,10 +764,6 @@ msgstr ""
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr "루틴을 저장한 후 사용할 수 있습니다"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "아바타 스튜디오"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr ""
|
||||
msgid "Base URL"
|
||||
msgstr "서버 주소"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "Bearer 토큰"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "라이브 데스크톱 시작 중…"
|
||||
@ -810,7 +834,6 @@ msgstr "Bot"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "봇"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "Bot은 기본적으로 묻지 않고 작업합니다. 먼저 확인하
|
||||
msgid "Bots are working"
|
||||
msgstr "봇 작업 중"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr ""
|
||||
@ -846,6 +885,14 @@ msgstr ""
|
||||
msgid "Browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr ""
|
||||
@ -911,6 +958,10 @@ msgstr "취소됨"
|
||||
msgid "Cancelled"
|
||||
msgstr "취소됨"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
@ -1006,9 +1057,13 @@ msgstr "확인 중…"
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr "체크아웃에 로컬 변경 사항이 있습니다. 업데이트하기 전에 정리하세요."
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "봇 모양과 색을 고르거나 이미지를 업로드하세요"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "새 비밀번호 선택"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "파일 선택"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "파일 선택"
|
||||
msgid "Choose folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "Rakazo에서 기본으로 사용할 연결된 모델을 선택하세요."
|
||||
@ -1046,6 +1105,10 @@ msgstr ""
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "비우기"
|
||||
@ -1076,12 +1139,12 @@ msgstr ""
|
||||
msgid "Client secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "닫기"
|
||||
@ -1165,11 +1228,11 @@ msgstr ""
|
||||
msgid "Collapse {0}"
|
||||
msgstr "{0} 접기"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "색상"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "색상 {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Cron"
|
||||
msgid "Cron expression"
|
||||
msgstr "Cron 표현식"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "현재 비밀번호"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr "고객 지원"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "봇 아바타 맞춤설정"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "Docker는 보안을 위해 컴퓨터 접근을 제한합니다. {hostLab
|
||||
msgid "Does not speak"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr ""
|
||||
@ -2071,10 +2150,10 @@ msgstr ""
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "완료"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "완료"
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr ""
|
||||
msgid "Drag to reorder"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "이미지를 끌어다 놓거나 붙여넣으세요"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "이메일"
|
||||
msgid "Embeddings URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr ""
|
||||
@ -2288,6 +2375,22 @@ msgstr ""
|
||||
msgid "Extra high"
|
||||
msgstr "매우 높음"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr ""
|
||||
@ -2345,6 +2448,10 @@ msgstr ""
|
||||
msgid "Finding…"
|
||||
msgstr "찾는 중…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr ""
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr "예상하지 못한 작업 표시"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr ""
|
||||
@ -2395,10 +2510,22 @@ msgstr "비밀번호를 잊으셨나요?"
|
||||
msgid "Forward"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr "무료"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "전체 화면"
|
||||
@ -2427,10 +2554,22 @@ msgstr ""
|
||||
msgid "Getting ready…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr "Git 이벤트"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
@ -2445,6 +2584,14 @@ msgstr ""
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr "먼저 전화를 끊은 다음 화면에 표시된 코드를 입력하
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr "전화를 끊은 다음 화면에 표시된 코드를 입력하세요."
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr "header"
|
||||
@ -2503,6 +2654,10 @@ msgstr "헤더 이름"
|
||||
msgid "Header value"
|
||||
msgstr "헤더 값"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr ""
|
||||
@ -2511,6 +2666,10 @@ msgstr ""
|
||||
msgid "Hear a sample"
|
||||
msgstr "샘플 듣기"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr ""
|
||||
@ -2597,7 +2756,7 @@ msgstr ""
|
||||
msgid "Image model"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "이미지 업로드 영역"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "간격 숫자"
|
||||
msgid "Interval unit"
|
||||
msgstr "간격 단위"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "지식"
|
||||
msgid "Language"
|
||||
msgstr "언어"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr ""
|
||||
@ -2726,6 +2893,10 @@ msgstr ""
|
||||
msgid "Light"
|
||||
msgstr "라이트"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr ""
|
||||
@ -3031,6 +3202,10 @@ msgstr "최소화"
|
||||
msgid "Minimize bots"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "분"
|
||||
@ -3080,6 +3255,10 @@ msgstr ""
|
||||
msgid "Models from server"
|
||||
msgstr "서버에서 찾은 모델"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "매월"
|
||||
@ -3145,6 +3324,10 @@ msgstr "그룹 이름"
|
||||
msgid "Name this routine"
|
||||
msgstr "이 루틴의 이름을 정하세요"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr ""
|
||||
@ -3168,6 +3351,10 @@ msgstr ""
|
||||
msgid "Needs your reply"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "새 Bot 만들기"
|
||||
@ -3359,6 +3546,10 @@ msgstr "트리거 없음"
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "아직 없음"
|
||||
@ -3555,6 +3746,10 @@ msgstr "PagerDuty 인시던트"
|
||||
msgid "Park"
|
||||
msgstr "보류"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "API 키를 붙여넣으세요"
|
||||
msgid "Paused"
|
||||
msgstr "일시 중지됨"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr ""
|
||||
@ -3615,6 +3822,14 @@ msgstr ""
|
||||
msgid "Pin"
|
||||
msgstr "고정"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "재생 중…"
|
||||
@ -3762,6 +3977,10 @@ msgstr "답변을 자동으로 읽기"
|
||||
msgid "read-only"
|
||||
msgstr "읽기 전용"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr ""
|
||||
@ -3976,7 +4195,7 @@ msgstr ""
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr "재설정"
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr "연결 해제"
|
||||
msgid "Riffing"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr "key 교체"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "예 또는 아니요로 답하거나 문장으로 답해 주세요."
|
||||
msgid "Scanning exposure…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr ""
|
||||
@ -4294,10 +4529,15 @@ msgstr "설정 도움말"
|
||||
msgid "Setup progress"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "모양"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr ""
|
||||
@ -4415,6 +4655,10 @@ msgstr "Slack 메시지"
|
||||
msgid "Slack not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr "소프트웨어 업데이트"
|
||||
@ -4444,6 +4688,10 @@ msgstr "스페이스 기본값"
|
||||
msgid "Spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "읽기"
|
||||
@ -4478,10 +4726,18 @@ msgstr ""
|
||||
msgid "Specialist crew"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
@ -4585,6 +4841,10 @@ msgstr ""
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "보조 에이전트"
|
||||
@ -4597,6 +4857,10 @@ msgstr "확인"
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr "이미지 지원"
|
||||
@ -4605,6 +4869,10 @@ msgstr "이미지 지원"
|
||||
msgid "Supports thinking"
|
||||
msgstr "사고 모드 지원"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr ""
|
||||
@ -4921,7 +5189,7 @@ msgstr ""
|
||||
msgid "Updating…"
|
||||
msgstr "업데이트 중…"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "업로드"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "확인 중…"
|
||||
msgid "Video workflow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr ""
|
||||
msgid "When a webhook fires"
|
||||
msgstr "웹훅이 실행될 때"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr ""
|
||||
@ -5133,6 +5409,10 @@ msgstr "언제 사용할지"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "Bot을 어디에서 실행할까요?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr ""
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr ""
|
||||
msgid "Arguments"
|
||||
msgstr "Argumentos:"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "em {0}"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "em {timeSelect}"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "Escolher arquivo"
|
||||
@ -756,10 +764,6 @@ msgstr ""
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "Estúdio de avatar"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr ""
|
||||
msgid "Base URL"
|
||||
msgstr "URL Base"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "Token portador"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "Iniciando a área de trabalho ao vivo..."
|
||||
@ -810,7 +834,6 @@ msgstr "Bot"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "Bot"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "Os bots agem sem perguntar por padrão. Adicione uma exceção apenas qu
|
||||
msgid "Bots are working"
|
||||
msgstr "Bots estão trabalhando"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr ""
|
||||
@ -846,6 +885,14 @@ msgstr ""
|
||||
msgid "Browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr ""
|
||||
@ -911,6 +958,10 @@ msgstr "Cancelado"
|
||||
msgid "Cancelled"
|
||||
msgstr "Cancelado"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
@ -1006,9 +1057,13 @@ msgstr ""
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "Escolha uma forma e cor do bot, ou envie uma imagem"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "Escolha uma nova senha"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "Escolher arquivo"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "Escolher arquivo"
|
||||
msgid "Choose folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "Escolha qual modelo conectado a Rakazo usa."
|
||||
@ -1046,6 +1105,10 @@ msgstr ""
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
@ -1076,12 +1139,12 @@ msgstr ""
|
||||
msgid "Client secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
@ -1165,11 +1228,11 @@ msgstr ""
|
||||
msgid "Collapse {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "Cor"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "Cor {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Cron"
|
||||
msgid "Cron expression"
|
||||
msgstr "Expressão cron"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Senha atual"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "Personalizar avatar do bot"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "O Docker limita o acesso ao seu computador para maior segurança. Usar {
|
||||
msgid "Does not speak"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr ""
|
||||
@ -2071,10 +2150,10 @@ msgstr ""
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "Concluído"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "Concluído"
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr ""
|
||||
msgid "Drag to reorder"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "Arraste, solte ou cole uma imagem"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "E-mail"
|
||||
msgid "Embeddings URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr ""
|
||||
@ -2288,6 +2375,22 @@ msgstr ""
|
||||
msgid "Extra high"
|
||||
msgstr "Extra alta"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr ""
|
||||
@ -2345,6 +2448,10 @@ msgstr ""
|
||||
msgid "Finding…"
|
||||
msgstr "Localizando…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr ""
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr ""
|
||||
@ -2395,10 +2510,22 @@ msgstr "Esqueceu a senha?"
|
||||
msgid "Forward"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "Tela Cheia"
|
||||
@ -2427,10 +2554,22 @@ msgstr ""
|
||||
msgid "Getting ready…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
@ -2445,6 +2584,14 @@ msgstr ""
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr ""
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr ""
|
||||
@ -2503,6 +2654,10 @@ msgstr "Nome do Cabeçalho"
|
||||
msgid "Header value"
|
||||
msgstr "Valor do cabeçalho"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr ""
|
||||
@ -2511,6 +2666,10 @@ msgstr ""
|
||||
msgid "Hear a sample"
|
||||
msgstr "Ouvir uma amostra"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr ""
|
||||
@ -2597,7 +2756,7 @@ msgstr ""
|
||||
msgid "Image model"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "Área de envio de imagem"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "Quantidade Intervalo"
|
||||
msgid "Interval unit"
|
||||
msgstr "Unidade do intervalo:"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "Conhecimento"
|
||||
msgid "Language"
|
||||
msgstr "Idioma"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr ""
|
||||
@ -2726,6 +2893,10 @@ msgstr ""
|
||||
msgid "Light"
|
||||
msgstr "Claro"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr ""
|
||||
@ -3031,6 +3202,10 @@ msgstr "Minimizar"
|
||||
msgid "Minimize bots"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "minuto"
|
||||
@ -3080,6 +3255,10 @@ msgstr ""
|
||||
msgid "Models from server"
|
||||
msgstr "Modelos do servidor"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "Mensalmente"
|
||||
@ -3145,6 +3324,10 @@ msgstr "Dar nome ao grupo"
|
||||
msgid "Name this routine"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr ""
|
||||
@ -3168,6 +3351,10 @@ msgstr ""
|
||||
msgid "Needs your reply"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "Novo bot"
|
||||
@ -3359,6 +3546,10 @@ msgstr ""
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "Nenhuma ainda"
|
||||
@ -3555,6 +3746,10 @@ msgstr ""
|
||||
msgid "Park"
|
||||
msgstr "Suspender"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "Cole sua chave API"
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr ""
|
||||
@ -3615,6 +3822,14 @@ msgstr ""
|
||||
msgid "Pin"
|
||||
msgstr "Fixar"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "Reproduzindo"
|
||||
@ -3762,6 +3977,10 @@ msgstr "Leia as respostas em voz alta"
|
||||
msgid "read-only"
|
||||
msgstr "somente leitura"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr ""
|
||||
@ -3976,7 +4195,7 @@ msgstr ""
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Redefinir"
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr ""
|
||||
msgid "Riffing"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "Diga sim ou não, ou responda em uma frase."
|
||||
msgid "Scanning exposure…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr ""
|
||||
@ -4294,10 +4529,15 @@ msgstr "Ajuda"
|
||||
msgid "Setup progress"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "Forma"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr ""
|
||||
@ -4415,6 +4655,10 @@ msgstr ""
|
||||
msgid "Slack not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr ""
|
||||
@ -4444,6 +4688,10 @@ msgstr "Padrão do espaço"
|
||||
msgid "Spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "Falar"
|
||||
@ -4478,10 +4726,18 @@ msgstr ""
|
||||
msgid "Specialist crew"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
@ -4585,6 +4841,10 @@ msgstr ""
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "subagente"
|
||||
@ -4597,6 +4857,10 @@ msgstr "Enviar"
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr "Suporta imagens"
|
||||
@ -4605,6 +4869,10 @@ msgstr "Suporta imagens"
|
||||
msgid "Supports thinking"
|
||||
msgstr "Suporta raciocínio"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr ""
|
||||
@ -4921,7 +5189,7 @@ msgstr ""
|
||||
msgid "Updating…"
|
||||
msgstr "Atualizando…"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "Enviar"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "Verificando…"
|
||||
msgid "Video workflow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr ""
|
||||
msgid "When a webhook fires"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr ""
|
||||
@ -5133,6 +5409,10 @@ msgstr "Quando usar"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "Onde os bots devem ser executados?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr ""
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr ""
|
||||
msgid "Arguments"
|
||||
msgstr "Аргументы"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "в {0}"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "в {timeSelect}"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "Прикрепить файл"
|
||||
@ -756,10 +764,6 @@ msgstr "Автоматические отправители появятся п
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr "Доступно после сохранения задачи"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "Студия аватаров"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr ""
|
||||
msgid "Base URL"
|
||||
msgstr "Базовый URL"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "Bearer-токен"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "Загрузка рабочего стола…"
|
||||
@ -810,7 +834,6 @@ msgstr "Бот"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "Бот"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "По умолчанию боты действуют, не спрашив
|
||||
msgid "Bots are working"
|
||||
msgstr "Боты работают"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr "Просмотреть MCP-серверы"
|
||||
@ -846,6 +885,14 @@ msgstr "Просмотреть MCP-серверы"
|
||||
msgid "Browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr ""
|
||||
@ -911,6 +958,10 @@ msgstr "Отменено"
|
||||
msgid "Cancelled"
|
||||
msgstr "Отменено"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
@ -1006,9 +1057,13 @@ msgstr "Проверка…"
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr "В checkout есть локальные изменения. Очистите его перед обновлением."
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "Выберите форму и цвет бота или загрузите изображение"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "Выберите новый пароль"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "Выбрать файл"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "Выбрать файл"
|
||||
msgid "Choose folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "Выберите, какую подключенную модель использует Rakazo."
|
||||
@ -1046,6 +1105,10 @@ msgstr ""
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "Очистить"
|
||||
@ -1076,12 +1139,12 @@ msgstr "ID клиента"
|
||||
msgid "Client secret"
|
||||
msgstr "Секрет клиента"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "Закрыть"
|
||||
@ -1165,11 +1228,11 @@ msgstr ""
|
||||
msgid "Collapse {0}"
|
||||
msgstr "Свернуть {0}"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "Цвет"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "Цвет {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Крон"
|
||||
msgid "Cron expression"
|
||||
msgstr "Выражение Cron"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Текущий пароль"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr "Поддержка клиентов"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "Настроить аватар бота"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "Docker ограничивает доступ к вашему компь
|
||||
msgid "Does not speak"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr ""
|
||||
@ -2071,10 +2150,10 @@ msgstr ""
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "Готово"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "Готово"
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr ""
|
||||
msgid "Drag to reorder"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "Перетащите или вставьте изображение"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "Электронная почта"
|
||||
msgid "Embeddings URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr "Включайтесь, когда... Игнорируйте..."
|
||||
@ -2288,6 +2375,22 @@ msgstr "Внешний диалог"
|
||||
msgid "Extra high"
|
||||
msgstr "Очень высокий"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr ""
|
||||
@ -2345,6 +2448,10 @@ msgstr ""
|
||||
msgid "Finding…"
|
||||
msgstr "Поиск…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr ""
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr "Пометить неожиданные действия"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr ""
|
||||
@ -2395,10 +2510,22 @@ msgstr "Забыли пароль?"
|
||||
msgid "Forward"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr "Бесплатно"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "Полноэкранный"
|
||||
@ -2427,10 +2554,22 @@ msgstr "Подготовка"
|
||||
msgid "Getting ready…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr "Git-событие"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
@ -2445,6 +2584,14 @@ msgstr ""
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr "Сначала повесьте трубку, затем введите
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr "Повесьте трубку, затем введите код на экране."
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr "заголовок"
|
||||
@ -2503,6 +2654,10 @@ msgstr "Название заголовка"
|
||||
msgid "Header value"
|
||||
msgstr "Значение заголовка"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr ""
|
||||
@ -2511,6 +2666,10 @@ msgstr ""
|
||||
msgid "Hear a sample"
|
||||
msgstr "Прослушать образец"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr ""
|
||||
@ -2597,7 +2756,7 @@ msgstr "игнорировать"
|
||||
msgid "Image model"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "Область загрузки изображения"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "Значение интервала"
|
||||
msgid "Interval unit"
|
||||
msgstr "Единица интервала"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "Знание"
|
||||
msgid "Language"
|
||||
msgstr "Язык"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr "Позже"
|
||||
@ -2726,6 +2893,10 @@ msgstr ""
|
||||
msgid "Light"
|
||||
msgstr "Светлая"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr ""
|
||||
@ -3031,6 +3202,10 @@ msgstr "Свернуть"
|
||||
msgid "Minimize bots"
|
||||
msgstr "Свернуть ботов"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "минута"
|
||||
@ -3080,6 +3255,10 @@ msgstr "Модели для пространства владельца серв
|
||||
msgid "Models from server"
|
||||
msgstr "Модели с сервера"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "Ежемесячно"
|
||||
@ -3145,6 +3324,10 @@ msgstr "Назовите эту группу"
|
||||
msgid "Name this routine"
|
||||
msgstr "Назовите эту задачу"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr ""
|
||||
@ -3168,6 +3351,10 @@ msgstr "Требуется ваше участие"
|
||||
msgid "Needs your reply"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "Новый бот"
|
||||
@ -3359,6 +3546,10 @@ msgstr "Нет триггера"
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "Пока нет"
|
||||
@ -3555,6 +3746,10 @@ msgstr "Инцидент PagerDuty"
|
||||
msgid "Park"
|
||||
msgstr "Приостановить"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "Вставьте свой ключ API"
|
||||
msgid "Paused"
|
||||
msgstr "Приостановлено"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr ""
|
||||
@ -3615,6 +3822,14 @@ msgstr ""
|
||||
msgid "Pin"
|
||||
msgstr "Закрепить"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "Воспроизведение…"
|
||||
@ -3762,6 +3977,10 @@ msgstr "Читать ответы вслух"
|
||||
msgid "read-only"
|
||||
msgstr "только для чтения"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr ""
|
||||
@ -3976,7 +4195,7 @@ msgstr ""
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr "Сбросить"
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr "Отозвать"
|
||||
msgid "Riffing"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr "Инструкции для комнаты"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr "Сменить ключ"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "Скажите «да» или «нет» или ответьте пре
|
||||
msgid "Scanning exposure…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr ""
|
||||
@ -4294,10 +4529,15 @@ msgstr "Помощь по настройке"
|
||||
msgid "Setup progress"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "Форма"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr ""
|
||||
@ -4415,6 +4655,10 @@ msgstr "Сообщение Slack"
|
||||
msgid "Slack not enabled"
|
||||
msgstr "Slack не включен"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr "Обновление программного обеспечения"
|
||||
@ -4444,6 +4688,10 @@ msgstr "Пространство по умолчанию"
|
||||
msgid "Spaces"
|
||||
msgstr "Пространства"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "Озвучить"
|
||||
@ -4478,10 +4726,18 @@ msgstr ""
|
||||
msgid "Specialist crew"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
@ -4585,6 +4841,10 @@ msgstr ""
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "субагент"
|
||||
@ -4597,6 +4857,10 @@ msgstr "Отправить"
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr ""
|
||||
@ -4605,6 +4869,10 @@ msgstr ""
|
||||
msgid "Supports thinking"
|
||||
msgstr "Поддерживает рассуждения"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr ""
|
||||
@ -4921,7 +5189,7 @@ msgstr "Обновление компьютера команды"
|
||||
msgid "Updating…"
|
||||
msgstr "Обновление…"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "Загрузить"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "Проверка…"
|
||||
msgid "Video workflow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr ""
|
||||
msgid "When a webhook fires"
|
||||
msgstr "Когда срабатывает вебхук"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr ""
|
||||
@ -5133,6 +5409,10 @@ msgstr "Когда использовать"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "Где должны работать боты?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr ""
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr ""
|
||||
msgid "Arguments"
|
||||
msgstr "Argümanlar"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "saat {0}"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "saat {timeSelect}"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "Dosya ekle"
|
||||
@ -756,10 +764,6 @@ msgstr ""
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "Avatar Stüdyosu"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr ""
|
||||
msgid "Base URL"
|
||||
msgstr "Temel URL"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "Bearer token"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "Canlı masaüstü başlatılıyor…"
|
||||
@ -810,7 +834,6 @@ msgstr "Bot"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "Bot"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "Botlar varsayılan olarak sormadan hareket eder. Yalnızca belirli bir i
|
||||
msgid "Bots are working"
|
||||
msgstr "Botlar çalışıyor"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr ""
|
||||
@ -846,6 +885,14 @@ msgstr ""
|
||||
msgid "Browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr ""
|
||||
@ -911,6 +958,10 @@ msgstr "İptal edildi"
|
||||
msgid "Cancelled"
|
||||
msgstr "İptal edildi"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
@ -1006,9 +1057,13 @@ msgstr ""
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "Bir bot şekli ve rengi seçin veya görüntü yükleyin"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "Yeni bir parola seçin"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "Dosya seç"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "Dosya seç"
|
||||
msgid "Choose folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "Rakazo'nun hangi bağlı modeli kullanacağını seç."
|
||||
@ -1046,6 +1105,10 @@ msgstr ""
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "Temizle"
|
||||
@ -1076,12 +1139,12 @@ msgstr ""
|
||||
msgid "Client secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "Kapat"
|
||||
@ -1165,11 +1228,11 @@ msgstr ""
|
||||
msgid "Collapse {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "Renk"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "Renk {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Cron"
|
||||
msgid "Cron expression"
|
||||
msgstr "Cron ifadesi"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "Mevcut parola"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "Bot avatarını özelleştir"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "Docker, ek güvenlik için bilgisayarına erişimi sınırlar. {hostLabe
|
||||
msgid "Does not speak"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr ""
|
||||
@ -2071,10 +2150,10 @@ msgstr ""
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "Bitti"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "Bitti"
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr ""
|
||||
msgid "Drag to reorder"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "Görüntüyü sürükleyip bırakın veya yapıştırın"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "E-posta"
|
||||
msgid "Embeddings URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr ""
|
||||
@ -2288,6 +2375,22 @@ msgstr ""
|
||||
msgid "Extra high"
|
||||
msgstr "Çok yüksek"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr ""
|
||||
@ -2345,6 +2448,10 @@ msgstr ""
|
||||
msgid "Finding…"
|
||||
msgstr "Aranıyor…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr ""
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr ""
|
||||
@ -2395,10 +2510,22 @@ msgstr "Parolanızı mı unuttunuz?"
|
||||
msgid "Forward"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "Tam ekran"
|
||||
@ -2427,10 +2554,22 @@ msgstr ""
|
||||
msgid "Getting ready…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
@ -2445,6 +2584,14 @@ msgstr ""
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr ""
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr ""
|
||||
@ -2503,6 +2654,10 @@ msgstr "Üstbilgi adı"
|
||||
msgid "Header value"
|
||||
msgstr "Üstbilgi değeri"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr ""
|
||||
@ -2511,6 +2666,10 @@ msgstr ""
|
||||
msgid "Hear a sample"
|
||||
msgstr "Örnek dinle"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr ""
|
||||
@ -2597,7 +2756,7 @@ msgstr ""
|
||||
msgid "Image model"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "Görüntü yükleme alanı"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "Aralık miktarı"
|
||||
msgid "Interval unit"
|
||||
msgstr "Aralık birimi"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "Bilgi"
|
||||
msgid "Language"
|
||||
msgstr "Dil"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr ""
|
||||
@ -2726,6 +2893,10 @@ msgstr ""
|
||||
msgid "Light"
|
||||
msgstr "Açık"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr ""
|
||||
@ -3031,6 +3202,10 @@ msgstr "Küçült"
|
||||
msgid "Minimize bots"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "dakika"
|
||||
@ -3080,6 +3255,10 @@ msgstr ""
|
||||
msgid "Models from server"
|
||||
msgstr "Sunucudan gelen modeller"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "Aylık"
|
||||
@ -3145,6 +3324,10 @@ msgstr "Gruba bir ad ver"
|
||||
msgid "Name this routine"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr ""
|
||||
@ -3168,6 +3351,10 @@ msgstr ""
|
||||
msgid "Needs your reply"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "Yeni bot"
|
||||
@ -3359,6 +3546,10 @@ msgstr ""
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "Henüz yok"
|
||||
@ -3555,6 +3746,10 @@ msgstr ""
|
||||
msgid "Park"
|
||||
msgstr "Beklet"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "API anahtarını yapıştır"
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr ""
|
||||
@ -3615,6 +3822,14 @@ msgstr ""
|
||||
msgid "Pin"
|
||||
msgstr "Sabitle"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "Çalınıyor…"
|
||||
@ -3762,6 +3977,10 @@ msgstr "Yanıtları sesli oku"
|
||||
msgid "read-only"
|
||||
msgstr "salt okunur"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr ""
|
||||
@ -3976,7 +4195,7 @@ msgstr ""
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr "İptal et"
|
||||
msgid "Riffing"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "Evet ya da hayır de veya bir cümleyle yanıtla."
|
||||
msgid "Scanning exposure…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr ""
|
||||
@ -4294,10 +4529,15 @@ msgstr "Kurulum yardımı"
|
||||
msgid "Setup progress"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "Şekil"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr ""
|
||||
@ -4415,6 +4655,10 @@ msgstr ""
|
||||
msgid "Slack not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr ""
|
||||
@ -4444,6 +4688,10 @@ msgstr "Alan varsayılanı"
|
||||
msgid "Spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "Seslendir"
|
||||
@ -4478,10 +4726,18 @@ msgstr ""
|
||||
msgid "Specialist crew"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
@ -4585,6 +4841,10 @@ msgstr ""
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "alt ajan"
|
||||
@ -4597,6 +4857,10 @@ msgstr "Gönder"
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr "Görüntüleri destekler"
|
||||
@ -4605,6 +4869,10 @@ msgstr "Görüntüleri destekler"
|
||||
msgid "Supports thinking"
|
||||
msgstr "Düşünmeyi destekler"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr ""
|
||||
@ -4921,7 +5189,7 @@ msgstr ""
|
||||
msgid "Updating…"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "Yükle"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "Doğrulanıyor…"
|
||||
msgid "Video workflow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr ""
|
||||
msgid "When a webhook fires"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr ""
|
||||
@ -5133,6 +5409,10 @@ msgstr "Ne zaman kullanılır"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "Botlar nerede çalışsın?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr ""
|
||||
|
||||
@ -668,6 +668,10 @@ msgstr ""
|
||||
msgid "Arguments"
|
||||
msgstr "参数"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Arms"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: rule.matchValue
|
||||
#: src/components/ApprovalRulesSettings.tsx
|
||||
msgid "Ask before {0}"
|
||||
@ -716,6 +720,10 @@ msgstr "{0}"
|
||||
msgid "at {timeSelect}"
|
||||
msgstr "{timeSelect}"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Atelier"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/composer.tsx
|
||||
msgid "Attach file"
|
||||
msgstr "附加文件"
|
||||
@ -756,10 +764,6 @@ msgstr ""
|
||||
msgid "Available after the routine is saved"
|
||||
msgstr "保存例行任务后可用"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Avatar Studio"
|
||||
msgstr "头像工作室"
|
||||
|
||||
#: src/components/browser/InAppBrowser.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/onboarding/OnboardingVoiceStep.tsx
|
||||
@ -781,15 +785,35 @@ msgstr ""
|
||||
msgid "Base URL"
|
||||
msgstr "Base URL"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Beanie"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bear"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Bearer token"
|
||||
msgstr "Bearer token"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bell"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/NotificationSettingsPanel.tsx
|
||||
msgid "Blocked in your browser settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Blue"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Body"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/computer-screen.tsx
|
||||
msgid "Booting live desktop…"
|
||||
msgstr "正在启动实时桌面…"
|
||||
@ -810,7 +834,6 @@ msgstr "Bot"
|
||||
|
||||
#: src/pages/IntegrationSetup.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Bot"
|
||||
msgstr "Bot"
|
||||
|
||||
@ -834,10 +857,26 @@ msgstr "默认情况下 Bot 会直接执行。只有当你想先审核某类操
|
||||
msgid "Bots are working"
|
||||
msgstr "Bot 正在工作"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow tie"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/memory-providers/SerenitySettingsForm.tsx
|
||||
msgid "Brain label"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brown"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Brows"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PluginsOverlay.tsx
|
||||
msgid "Browse MCP servers"
|
||||
msgstr ""
|
||||
@ -846,6 +885,14 @@ msgstr ""
|
||||
msgid "Browser"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bunny"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bushy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Busy"
|
||||
msgstr ""
|
||||
@ -911,6 +958,10 @@ msgstr "已取消"
|
||||
msgid "Cancelled"
|
||||
msgstr "已取消"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Category"
|
||||
msgstr ""
|
||||
@ -1006,9 +1057,13 @@ msgstr "正在检查…"
|
||||
msgid "Checkout has local changes. Clean it before updating."
|
||||
msgstr "工作副本有本地更改。请先清理再更新。"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Choose a bot shape, color, or upload an image"
|
||||
msgstr "选择机器人形状和颜色,或上传图片"
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Cheeks"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Chef's hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
msgid "Choose a bot…"
|
||||
@ -1026,7 +1081,7 @@ msgstr "设置新密码"
|
||||
msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose file"
|
||||
msgstr "选择文件"
|
||||
|
||||
@ -1034,6 +1089,10 @@ msgstr "选择文件"
|
||||
msgid "Choose folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Choose how your Oo looks and moves"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Choose which connected model Rakazo uses."
|
||||
msgstr "选择 Rakazo 使用的已连接模型。"
|
||||
@ -1046,6 +1105,10 @@ msgstr ""
|
||||
msgid "Choosing the right shape…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Classic"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Clear"
|
||||
msgstr "清空"
|
||||
@ -1076,12 +1139,12 @@ msgstr ""
|
||||
msgid "Client secret"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/pages/KnowledgeSection.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/PeerMessagesOverlay.tsx
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Close"
|
||||
msgstr "关闭"
|
||||
@ -1165,11 +1228,11 @@ msgstr ""
|
||||
msgid "Collapse {0}"
|
||||
msgstr "折叠 {0}"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color"
|
||||
msgstr "颜色"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Color {color}"
|
||||
msgstr "颜色 {color}"
|
||||
|
||||
@ -1846,15 +1909,27 @@ msgstr "Cron"
|
||||
msgid "Cron expression"
|
||||
msgstr "Cron 表达式"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Crown"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
msgid "Current password"
|
||||
msgstr "当前密码"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Custom color"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
msgid "Customer support"
|
||||
msgstr "客户支持"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Customize"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Customize bot avatar"
|
||||
msgstr "自定义机器人头像"
|
||||
|
||||
@ -2056,6 +2131,10 @@ msgstr "Docker 限制对你电脑的访问,以提高安全性。使用{hostLab
|
||||
msgid "Does not speak"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dog"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
msgid "Doing"
|
||||
msgstr ""
|
||||
@ -2071,10 +2150,10 @@ msgstr ""
|
||||
#: src/components/ai/DelegatedTaskCard.tsx
|
||||
#: src/components/CookingMode.tsx
|
||||
#: src/components/media/MediaCard.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
#: src/components/ThreadCard.tsx
|
||||
#: src/pages/HeuteBrief.tsx
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
msgid "Done"
|
||||
msgstr "完成"
|
||||
|
||||
@ -2083,6 +2162,10 @@ msgstr "完成"
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Dot"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: props.name
|
||||
#: src/components/ArtifactFileCard.tsx
|
||||
msgid "Download {0}"
|
||||
@ -2120,7 +2203,7 @@ msgstr ""
|
||||
msgid "Drag to reorder"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Drag, drop, or paste an image"
|
||||
msgstr "拖放或粘贴图片"
|
||||
|
||||
@ -2161,6 +2244,10 @@ msgstr "邮箱"
|
||||
msgid "Embeddings URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Energy"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Engage when... Ignore..."
|
||||
msgstr ""
|
||||
@ -2288,6 +2375,22 @@ msgstr ""
|
||||
msgid "Extra high"
|
||||
msgstr "极高"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Extras"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeliner"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Eyeshadow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserFactEditor.tsx
|
||||
msgid "Fact"
|
||||
msgstr ""
|
||||
@ -2345,6 +2448,10 @@ msgstr ""
|
||||
msgid "Finding…"
|
||||
msgstr "正在查找…"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Fine"
|
||||
msgstr ""
|
||||
|
||||
#. placeholder {0}: new URL(oauth.verificationUri).hostname
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Finish signing in at <0>{0}</0>. The final page may not load; paste its URL or code here."
|
||||
@ -2371,6 +2478,14 @@ msgstr ""
|
||||
msgid "Flag unexpected actions"
|
||||
msgstr "标记异常操作"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flick"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Flower"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/PrivacySettingsOverlay.tsx
|
||||
msgid "Fonts loaded locally"
|
||||
msgstr ""
|
||||
@ -2395,10 +2510,22 @@ msgstr "忘记密码?"
|
||||
msgid "Forward"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Freckles"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Free"
|
||||
msgstr "免费"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Frog"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Full"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/WindowChrome.tsx
|
||||
msgid "Fullscreen"
|
||||
msgstr "全屏"
|
||||
@ -2427,10 +2554,22 @@ msgstr ""
|
||||
msgid "Getting ready…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Ghost"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Git event"
|
||||
msgstr "Git 事件"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glass"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
msgid "Goal"
|
||||
msgstr ""
|
||||
@ -2445,6 +2584,14 @@ msgstr ""
|
||||
msgid "Goals for this project, separate from chat messages. Conversations are below."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Green"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/MessagingSettingsOverlay.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
@ -2490,6 +2637,10 @@ msgstr "请先挂断,然后输入屏幕上的代码。"
|
||||
msgid "Hang up, then enter the code on screen."
|
||||
msgstr "请挂断,然后输入屏幕上的代码。"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "header"
|
||||
msgstr "请求头"
|
||||
@ -2503,6 +2654,10 @@ msgstr "请求头名称"
|
||||
msgid "Header value"
|
||||
msgstr "请求头值"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Headphones"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "Health"
|
||||
msgstr ""
|
||||
@ -2511,6 +2666,10 @@ msgstr ""
|
||||
msgid "Hear a sample"
|
||||
msgstr "试听"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Heart"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Here's the read…"
|
||||
msgstr ""
|
||||
@ -2597,7 +2756,7 @@ msgstr ""
|
||||
msgid "Image model"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Image upload area"
|
||||
msgstr "图片上传区域"
|
||||
|
||||
@ -2671,6 +2830,10 @@ msgstr "间隔数量"
|
||||
msgid "Interval unit"
|
||||
msgstr "间隔单位"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Iris"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/MemorySettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "Isolated"
|
||||
@ -2710,6 +2873,10 @@ msgstr "知识"
|
||||
msgid "Language"
|
||||
msgstr "语言"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lashes"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/DesktopUpdates.tsx
|
||||
msgid "Later"
|
||||
msgstr ""
|
||||
@ -2726,6 +2893,10 @@ msgstr ""
|
||||
msgid "Light"
|
||||
msgstr "浅色"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Lilac"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-capabilities.tsx
|
||||
msgid "Limit built-in tools"
|
||||
msgstr ""
|
||||
@ -3031,6 +3202,10 @@ msgstr "最小化"
|
||||
msgid "Minimize bots"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Mint"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "minute"
|
||||
msgstr "分钟"
|
||||
@ -3080,6 +3255,10 @@ msgstr ""
|
||||
msgid "Models from server"
|
||||
msgstr "来自服务器的模型"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Monocle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineSchedule.tsx
|
||||
msgid "Monthly"
|
||||
msgstr "每月"
|
||||
@ -3145,6 +3324,10 @@ msgstr "给这个群组命名"
|
||||
msgid "Name this routine"
|
||||
msgstr "给这个例行任务命名"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Neck"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
msgid "Needs attention"
|
||||
msgstr ""
|
||||
@ -3168,6 +3351,10 @@ msgstr ""
|
||||
msgid "Needs your reply"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Nerd"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
msgid "New bot"
|
||||
msgstr "新建 Bot"
|
||||
@ -3359,6 +3546,10 @@ msgstr "无触发器"
|
||||
msgid "No usage data is sent to third parties"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ScratchpadSection.tsx
|
||||
msgid "None yet"
|
||||
msgstr "暂无"
|
||||
@ -3555,6 +3746,10 @@ msgstr "PagerDuty 事件"
|
||||
msgid "Park"
|
||||
msgstr "搁置"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Party hat"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/AskCard.tsx
|
||||
#: src/pages/AccountSettingsOverlay.tsx
|
||||
#: src/pages/Auth.tsx
|
||||
@ -3591,6 +3786,18 @@ msgstr "粘贴你的 API 密钥"
|
||||
msgid "Paused"
|
||||
msgstr "已暂停"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Paw"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Peach"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Penguin"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
msgid "People"
|
||||
msgstr ""
|
||||
@ -3615,6 +3822,14 @@ msgstr ""
|
||||
msgid "Pin"
|
||||
msgstr "置顶"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Pink"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Playful"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Playing…"
|
||||
msgstr "播放中…"
|
||||
@ -3762,6 +3977,10 @@ msgstr "朗读回复"
|
||||
msgid "read-only"
|
||||
msgstr "只读"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reading glasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Reading the stack trace…"
|
||||
msgstr ""
|
||||
@ -3976,7 +4195,7 @@ msgstr ""
|
||||
|
||||
#: src/components/ComputerMaintenanceActions.tsx
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Reset"
|
||||
msgstr "重置"
|
||||
|
||||
@ -4042,14 +4261,26 @@ msgstr "撤销"
|
||||
msgid "Riffing"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Robot"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ExternalConversationSettings.tsx
|
||||
msgid "Room guidance"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Rose"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
msgid "Rotate key"
|
||||
msgstr "轮换密钥"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Round"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
@ -4164,6 +4395,10 @@ msgstr "回答是或否,或一句话说明。"
|
||||
msgid "Scanning exposure…"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Scarf"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/OnboardingOoDesigner.tsx
|
||||
msgid "Scene"
|
||||
msgstr ""
|
||||
@ -4294,10 +4529,15 @@ msgstr "设置帮助"
|
||||
msgid "Setup progress"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape"
|
||||
msgstr "形状"
|
||||
|
||||
#. placeholder {0}: shape + 1
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Shape {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/voice-persona-copy.ts
|
||||
msgid "Share what you're imagining — or tell me one thing to refine."
|
||||
msgstr ""
|
||||
@ -4415,6 +4655,10 @@ msgstr "Slack 消息"
|
||||
msgid "Slack not enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Soft"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/SoftwareUpdateSection.tsx
|
||||
msgid "Software update"
|
||||
msgstr "软件更新"
|
||||
@ -4444,6 +4688,10 @@ msgstr "工作区默认"
|
||||
msgid "Spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sparkle"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Speak"
|
||||
msgstr "朗读"
|
||||
@ -4478,10 +4726,18 @@ msgstr ""
|
||||
msgid "Specialist crew"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Species"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/model-tier-label.ts
|
||||
msgid "Standard"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
@ -4585,6 +4841,10 @@ msgstr ""
|
||||
msgid "Stronger together — {0} specialists"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Stub"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "subagent"
|
||||
msgstr "子 Agent"
|
||||
@ -4597,6 +4857,10 @@ msgstr "提交"
|
||||
msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Sunglasses"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Supports images"
|
||||
msgstr "支持图片"
|
||||
@ -4605,6 +4869,10 @@ msgstr "支持图片"
|
||||
msgid "Supports thinking"
|
||||
msgstr "支持思考"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Surprise me"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/onboarding/LookPreviewCarousel.tsx
|
||||
msgid "Swipe for more looks"
|
||||
msgstr ""
|
||||
@ -4921,7 +5189,7 @@ msgstr ""
|
||||
msgid "Updating…"
|
||||
msgstr "正在更新…"
|
||||
|
||||
#: src/pages/shell/avatar-studio-popover.tsx
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Upload"
|
||||
msgstr "上传"
|
||||
|
||||
@ -4967,6 +5235,10 @@ msgstr "正在校验…"
|
||||
msgid "Video workflow"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Violet"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/SettingsOverlay.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/composer.tsx
|
||||
@ -5113,6 +5385,10 @@ msgstr ""
|
||||
msgid "When a webhook fires"
|
||||
msgstr "当 Webhook 触发时"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "When needed"
|
||||
msgstr ""
|
||||
|
||||
#: src/lib/onboarding-copy.ts
|
||||
msgid "When should I check in with you?"
|
||||
msgstr ""
|
||||
@ -5133,6 +5409,10 @@ msgstr "何时使用"
|
||||
msgid "Where should bots run?"
|
||||
msgstr "Bot 应在哪里运行?"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Winged"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/bot-picker.tsx
|
||||
msgid "With:"
|
||||
msgstr ""
|
||||
|
||||
@ -34,21 +34,9 @@ function enterMainConversation(main: MainConversationRef): string {
|
||||
|
||||
function defaultEmojiConfig(): OnboardingEmojiConfig {
|
||||
const preset = findLookCategory("calm").looks[0];
|
||||
if (!preset) {
|
||||
return {
|
||||
color: "#8B5CF6",
|
||||
shapeIndex: 0,
|
||||
accessory: "none",
|
||||
pose: "idle",
|
||||
avatarValue: "#8B5CF6::shape_0",
|
||||
};
|
||||
}
|
||||
return {
|
||||
color: preset.color,
|
||||
shapeIndex: preset.shapeIndex,
|
||||
accessory: "none",
|
||||
pose: preset.pose,
|
||||
avatarValue: lookPresetToAvatarValue(preset),
|
||||
pose: preset?.pose ?? "idle",
|
||||
avatarValue: preset ? lookPresetToAvatarValue(preset) : "oo1:c=8B5CF6",
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -1,289 +0,0 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
import { OO_DEFAULT_COLOR, OO_PALETTE_HEXES } from "@rakazo/core";
|
||||
import {
|
||||
BotAvatar,
|
||||
Dialog,
|
||||
DialogContent,
|
||||
DialogDescription,
|
||||
DialogFooter,
|
||||
DialogHeader,
|
||||
DialogTitle,
|
||||
OoShapePreview,
|
||||
parseBotAvatar,
|
||||
} from "@rakazo/ui-web";
|
||||
import { Check, Pencil, Upload, X } from "lucide-react";
|
||||
import { type ClipboardEvent, type DragEvent, useRef, useState } from "react";
|
||||
|
||||
export interface AvatarStudioPopoverProps {
|
||||
value: string;
|
||||
identity?: string;
|
||||
status?: string;
|
||||
size?: number;
|
||||
onChange: (value: string) => void;
|
||||
disabled?: boolean;
|
||||
}
|
||||
|
||||
export function AvatarStudioPopover({
|
||||
value,
|
||||
identity,
|
||||
status,
|
||||
size = 72,
|
||||
onChange,
|
||||
disabled = false,
|
||||
}: AvatarStudioPopoverProps) {
|
||||
const [open, setOpen] = useState(false);
|
||||
const [activeTab, setActiveTab] = useState<"bot" | "upload">("bot");
|
||||
const [dragOver, setDragOver] = useState(false);
|
||||
const fileInputRef = useRef<HTMLInputElement>(null);
|
||||
|
||||
const parsed = parseBotAvatar(value, identity);
|
||||
const currentColor = parsed.color || OO_DEFAULT_COLOR;
|
||||
const currentShape = parsed.shapeIndex ?? 0;
|
||||
|
||||
function selectShape(shapeIndex: number) {
|
||||
onChange(`${currentColor}::shape_${shapeIndex}`);
|
||||
}
|
||||
|
||||
function selectColor(color: string) {
|
||||
onChange(`${color}::shape_${currentShape}`);
|
||||
}
|
||||
|
||||
function resetAvatar() {
|
||||
onChange(`${OO_DEFAULT_COLOR}::shape_0`);
|
||||
}
|
||||
|
||||
function processImageFile(file: File) {
|
||||
if (!file.type.startsWith("image/")) return;
|
||||
const reader = new FileReader();
|
||||
reader.onload = (event) => {
|
||||
const src = event.target?.result as string;
|
||||
if (!src) return;
|
||||
const img = new Image();
|
||||
img.onload = () => {
|
||||
const canvas = document.createElement("canvas");
|
||||
const ctx = canvas.getContext("2d");
|
||||
const targetSize = 256;
|
||||
canvas.width = targetSize;
|
||||
canvas.height = targetSize;
|
||||
if (!ctx) return;
|
||||
|
||||
ctx.beginPath();
|
||||
ctx.arc(targetSize / 2, targetSize / 2, targetSize / 2, 0, Math.PI * 2);
|
||||
ctx.clip();
|
||||
|
||||
const minDim = Math.min(img.width, img.height);
|
||||
const sx = (img.width - minDim) / 2;
|
||||
const sy = (img.height - minDim) / 2;
|
||||
ctx.drawImage(img, sx, sy, minDim, minDim, 0, 0, targetSize, targetSize);
|
||||
|
||||
onChange(canvas.toDataURL("image/webp", 0.9));
|
||||
setOpen(false);
|
||||
};
|
||||
img.src = src;
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
|
||||
function handleDrop(event: DragEvent<HTMLButtonElement>) {
|
||||
event.preventDefault();
|
||||
setDragOver(false);
|
||||
const file = event.dataTransfer.files?.[0];
|
||||
if (file) processImageFile(file);
|
||||
}
|
||||
|
||||
function handlePaste(event: ClipboardEvent<HTMLButtonElement>) {
|
||||
const items = event.clipboardData?.items;
|
||||
if (!items) return;
|
||||
for (let index = 0; index < items.length; index += 1) {
|
||||
const item = items[index];
|
||||
if (!item?.type.startsWith("image/")) continue;
|
||||
const file = item.getAsFile();
|
||||
if (file) {
|
||||
processImageFile(file);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<button
|
||||
type="button"
|
||||
disabled={disabled}
|
||||
onClick={() => setOpen(true)}
|
||||
className="group relative cursor-pointer rounded-2xl outline-none transition-transform hover:scale-[1.03] focus-visible:ring-2 focus-visible:ring-ring"
|
||||
aria-label={t`Customize bot avatar`}
|
||||
data-testid="avatar-studio-trigger"
|
||||
>
|
||||
<BotAvatar color={value} identity={identity} size={size} status={status} />
|
||||
<div className="absolute -right-1 -bottom-1 flex size-6 items-center justify-center rounded-full border-2 border-background bg-secondary text-foreground shadow-md transition-transform group-hover:scale-110">
|
||||
<Pencil strokeWidth={2.2} className="size-icon-sm" />
|
||||
</div>
|
||||
</button>
|
||||
|
||||
<Dialog open={open} onOpenChange={setOpen}>
|
||||
<DialogContent
|
||||
showCloseButton={false}
|
||||
className="w-[360px] max-w-full gap-4 rounded-3xl p-5 sm:max-w-[360px]"
|
||||
data-testid="avatar-studio"
|
||||
>
|
||||
<DialogHeader className="flex-row items-center justify-between space-y-0">
|
||||
<DialogTitle className="text-ui-body font-semibold tracking-tight">
|
||||
<Trans>Avatar Studio</Trans>
|
||||
</DialogTitle>
|
||||
<DialogDescription className="sr-only">
|
||||
<Trans>Choose a bot shape, color, or upload an image</Trans>
|
||||
</DialogDescription>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setOpen(false)}
|
||||
className="flex size-7 items-center justify-center rounded-full text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"
|
||||
aria-label={t`Close`}
|
||||
>
|
||||
<X className="size-icon-md" />
|
||||
</button>
|
||||
</DialogHeader>
|
||||
|
||||
<div className="flex flex-col items-center justify-center py-2">
|
||||
<BotAvatar color={value} identity={identity} size={78} status={status} />
|
||||
</div>
|
||||
|
||||
<div className="flex items-center justify-between border-b border-border pb-1">
|
||||
<div className="flex items-center rounded-full bg-muted p-1 text-ui-label">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setActiveTab("bot")}
|
||||
aria-pressed={activeTab === "bot"}
|
||||
className={`rounded-full px-3 py-1 font-medium transition-colors ${
|
||||
activeTab === "bot"
|
||||
? "bg-card text-foreground shadow-sm"
|
||||
: "text-muted-foreground hover:text-foreground"
|
||||
}`}
|
||||
>
|
||||
<Trans>Bot</Trans>
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setActiveTab("upload")}
|
||||
aria-pressed={activeTab === "upload"}
|
||||
className={`rounded-full px-3 py-1 font-medium transition-colors ${
|
||||
activeTab === "upload"
|
||||
? "bg-card text-foreground shadow-sm"
|
||||
: "text-muted-foreground hover:text-foreground"
|
||||
}`}
|
||||
>
|
||||
<Trans>Upload</Trans>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<button
|
||||
type="button"
|
||||
onClick={resetAvatar}
|
||||
className="px-2 py-1 text-ui-label font-medium text-muted-foreground transition-colors hover:text-foreground"
|
||||
>
|
||||
<Trans>Reset</Trans>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{activeTab === "bot" ? (
|
||||
<div className="space-y-4 pt-1" data-testid="avatar-studio-bot-tab">
|
||||
<div>
|
||||
<div className="mb-2 text-ui-label font-medium tracking-wider text-muted-foreground uppercase">
|
||||
<Trans>Shape</Trans>
|
||||
</div>
|
||||
<div className="grid grid-cols-4 place-items-center gap-2">
|
||||
{[0, 1, 2, 3, 4, 5, 6, 7].map((shapeIndex) => (
|
||||
<OoShapePreview
|
||||
key={shapeIndex}
|
||||
shapeIndex={shapeIndex}
|
||||
color={currentColor}
|
||||
selected={!parsed.isImage && currentShape === shapeIndex}
|
||||
onClick={() => selectShape(shapeIndex)}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="border-t border-border pt-2">
|
||||
<div className="mb-2 text-ui-label font-medium tracking-wider text-muted-foreground uppercase">
|
||||
<Trans>Color</Trans>
|
||||
</div>
|
||||
<div className="grid grid-cols-6 place-items-center gap-2">
|
||||
{OO_PALETTE_HEXES.map((color) => {
|
||||
const selected =
|
||||
currentColor.toLowerCase() === color.toLowerCase() && !parsed.isImage;
|
||||
return (
|
||||
<button
|
||||
key={color}
|
||||
type="button"
|
||||
onClick={() => selectColor(color)}
|
||||
aria-label={t`Color ${color}`}
|
||||
aria-pressed={selected}
|
||||
className={`size-6 rounded-full border transition-transform hover:scale-110 active:scale-95 focus-visible:ring-2 focus-visible:ring-ring ${
|
||||
selected
|
||||
? "scale-105 border-transparent ring-2 ring-foreground ring-offset-2 ring-offset-popover"
|
||||
: "border-border"
|
||||
}`}
|
||||
style={{ backgroundColor: color }}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
) : (
|
||||
<button
|
||||
type="button"
|
||||
aria-label={t`Image upload area`}
|
||||
onDragOver={(event) => {
|
||||
event.preventDefault();
|
||||
setDragOver(true);
|
||||
}}
|
||||
onDragLeave={() => setDragOver(false)}
|
||||
onDrop={handleDrop}
|
||||
onPaste={handlePaste}
|
||||
onClick={() => fileInputRef.current?.click()}
|
||||
className={`flex w-full flex-col items-center justify-center rounded-xl border border-dashed p-6 text-center transition-colors ${
|
||||
dragOver
|
||||
? "border-primary bg-primary/10"
|
||||
: "border-border bg-muted hover:border-foreground/30"
|
||||
}`}
|
||||
>
|
||||
<input
|
||||
ref={fileInputRef}
|
||||
type="file"
|
||||
accept="image/*"
|
||||
className="hidden"
|
||||
onChange={(event) => {
|
||||
const file = event.target.files?.[0];
|
||||
if (file) processImageFile(file);
|
||||
}}
|
||||
/>
|
||||
<div className="mb-2 grid size-10 place-items-center rounded-full bg-secondary text-muted-foreground">
|
||||
<Upload strokeWidth={1.8} className="size-icon-lg" />
|
||||
</div>
|
||||
<p className="text-ui-body-sm font-medium text-muted-foreground">
|
||||
<Trans>Drag, drop, or paste an image</Trans>
|
||||
</p>
|
||||
<span className="mt-3 rounded-lg bg-secondary px-3 py-1.5 text-ui-label font-medium text-foreground">
|
||||
<Trans>Choose file</Trans>
|
||||
</span>
|
||||
</button>
|
||||
)}
|
||||
|
||||
<DialogFooter className="border-border sm:justify-end">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setOpen(false)}
|
||||
className="flex items-center gap-1.5 rounded-xl bg-secondary px-4 py-1.5 text-ui-body-sm font-medium text-foreground transition-colors hover:bg-accent"
|
||||
>
|
||||
<Check className="size-icon-md" />
|
||||
<Trans>Done</Trans>
|
||||
</button>
|
||||
</DialogFooter>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -32,11 +32,11 @@ import {
|
||||
} from "@rakazo/ui-web";
|
||||
import { Upload, X } from "lucide-react";
|
||||
import { Suspense, useEffect, useId, useRef, useState } from "react";
|
||||
import { OoAtelier } from "../../components/OoAtelier";
|
||||
import { connectedModelOptions } from "../../lib/connected-models";
|
||||
import { lazyWithRecovery } from "../../lib/lazy-recovery";
|
||||
import { modelTierLabel } from "../../lib/model-tier-label";
|
||||
import { rpc } from "../../lib/rpc";
|
||||
import { AvatarStudioPopover } from "./avatar-studio-popover";
|
||||
import { BotCapabilitiesFields } from "./bot-capabilities";
|
||||
|
||||
const ScratchpadSection = lazyWithRecovery("ScratchpadSection", () =>
|
||||
@ -470,7 +470,7 @@ export function BotSettings({
|
||||
return (
|
||||
<div data-testid="bot-settings">
|
||||
<div className="flex justify-center py-4">
|
||||
<AvatarStudioPopover
|
||||
<OoAtelier
|
||||
value={color}
|
||||
identity={bot.id}
|
||||
status={bot.status}
|
||||
|
||||
@ -3,6 +3,21 @@
|
||||
* every avatar renderer. Bots without an explicit colour or shape get one from a hash
|
||||
* of their identity, so they look the same on web and mobile.
|
||||
*/
|
||||
import type { OoAvatar } from "./oo-avatar.js";
|
||||
import {
|
||||
DEFAULT_OO_AVATAR,
|
||||
decodeOoAvatar,
|
||||
OO_CHEEKS,
|
||||
OO_CLASSIC_SHAPE_COUNT,
|
||||
OO_EYESHADOWS,
|
||||
OO_EYEWEAR,
|
||||
OO_HEADWEAR,
|
||||
OO_IRISES,
|
||||
OO_LASHES,
|
||||
OO_NECKWEAR,
|
||||
OO_SPARKLES,
|
||||
OO_SPECIES,
|
||||
} from "./oo-avatar.js";
|
||||
|
||||
export const OO_CLASSIC_SHAPES: Record<string, string> = {
|
||||
blob: "M228.541 114.228C228.541 130.133 225.184 145.994 218.738 160.534C212.674 174.217 203.904 186.669 193.065 196.988C155.933 232.34 99.497 238.596 55.5255 212.24C45.097 205.99 35.6851 198.072 27.7451 188.866C19.1926 178.953 12.3686 167.569 7.65781 155.351C2.60712 142.264 0 128.257 0 114.228C0 98.3219 3.35751 82.4611 9.80315 67.9215C15.8672 54.2382 24.6377 41.7862 35.4767 31.4668C72.6081 -3.88483 129.044 -10.1413 173.016 16.2153C183.444 22.4653 192.856 30.3829 200.796 39.5896C209.349 49.5018 216.173 60.8859 220.883 73.1037C225.934 86.1906 228.541 100.198 228.541 114.228Z",
|
||||
@ -231,3 +246,41 @@ function darkenHex(hex: string, percent: number): string {
|
||||
const b = Math.max(0, Math.floor((num & 255) * factor));
|
||||
return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;
|
||||
}
|
||||
|
||||
/** The look an avatar value shows, with a plain hex colour, ready to edit and re-encode. */
|
||||
export function ooLookForEditing(value: string, identity: string): OoAvatar {
|
||||
const look = decodeOoAvatar(value) ?? DEFAULT_OO_AVATAR;
|
||||
return { ...look, color: resolveOoColor(identity, look.color || null).hex };
|
||||
}
|
||||
|
||||
function pick<T>(values: readonly T[], random: () => number): T {
|
||||
return values[Math.floor(random() * values.length) % values.length] as T;
|
||||
}
|
||||
|
||||
/** Half the time an optional extra stays off, so random looks are not overloaded. */
|
||||
function maybe<T>(values: readonly T[], random: () => number): T {
|
||||
return random() < 0.5 ? (values[0] as T) : pick(values.slice(1), random);
|
||||
}
|
||||
|
||||
/** A random but tidy look for “surprise me”. */
|
||||
export function ooRandomAvatar(random: () => number = Math.random): OoAvatar {
|
||||
const species = pick(OO_SPECIES, random);
|
||||
return {
|
||||
species,
|
||||
color: pick(OO_PALETTE_HEXES, random),
|
||||
shape: species === "classic" ? Math.floor(random() * OO_CLASSIC_SHAPE_COUNT) : null,
|
||||
arms: species === "robot" ? "robot" : pick(["glass", "stub", "paw"] as const, random),
|
||||
lashes: maybe(OO_LASHES, random),
|
||||
liner: random() < 0.2 ? "wing" : "none",
|
||||
eyeshadow: random() < 0.25 ? pick(OO_EYESHADOWS.slice(1), random) : "none",
|
||||
iris: maybe(OO_IRISES, random),
|
||||
sparkle: pick(OO_SPARKLES, random),
|
||||
brows: "auto",
|
||||
cheeks: maybe(OO_CHEEKS, random),
|
||||
eyewear: random() < 0.35 ? pick(OO_EYEWEAR.slice(1), random) : "none",
|
||||
head: random() < 0.35 ? pick(OO_HEADWEAR.slice(1), random) : "none",
|
||||
neck: random() < 0.25 ? pick(OO_NECKWEAR.slice(1), random) : "none",
|
||||
energy: Number((0.7 + random() * 0.7).toFixed(2)),
|
||||
playful: Number(random().toFixed(2)),
|
||||
};
|
||||
}
|
||||
|
||||
@ -2,6 +2,8 @@ import { describe, expect, it } from "vitest";
|
||||
import type { OoAvatar } from "./oo-avatar.js";
|
||||
import {
|
||||
DEFAULT_OO_AVATAR,
|
||||
decodeOoAvatar,
|
||||
encodeOoAvatar,
|
||||
OO_EYE_ASYMMETRY_MIN_RATIO,
|
||||
OO_EYEWEAR,
|
||||
OO_RIG_EYES,
|
||||
@ -18,6 +20,8 @@ import {
|
||||
OO_DEFAULT_COLOR,
|
||||
OO_PALETTE_HEXES,
|
||||
ooIdentityShapeIndex,
|
||||
ooLookForEditing,
|
||||
ooRandomAvatar,
|
||||
resolveOoClassicShape,
|
||||
resolveOoColor,
|
||||
} from "./oo-palette.js";
|
||||
@ -218,3 +222,22 @@ describe("oo moments after a status change", () => {
|
||||
expect(ooMomentAfterStatus(undefined, "idle")).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe("oo atelier helpers", () => {
|
||||
it("edits legacy values with a hex colour", () => {
|
||||
expect(ooLookForEditing("violet", "bot").color).toBe(resolveOoColor("bot", "violet").hex);
|
||||
expect(ooLookForEditing("#8B5CF6::shape_2", "bot")).toMatchObject({
|
||||
color: "#8B5CF6",
|
||||
shape: 2,
|
||||
});
|
||||
expect(ooLookForEditing("data:image/png;base64,AAAA", "bot").species).toBe("classic");
|
||||
});
|
||||
|
||||
it("surprises with looks that always encode", () => {
|
||||
const random = ooSeededRandom(5);
|
||||
for (let i = 0; i < 50; i++) {
|
||||
const look = ooRandomAvatar(random);
|
||||
expect(decodeOoAvatar(encodeOoAvatar(look))).not.toBeNull();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@ -26,12 +26,16 @@ export interface OoFigureProps {
|
||||
still?: boolean;
|
||||
/** Eyes follow the pointer and a tap boops the Oo. */
|
||||
interactive?: boolean;
|
||||
/** `face` crops to the eyes, for pickers of eye styles and eyewear. */
|
||||
focus?: "body" | "face";
|
||||
className?: string;
|
||||
}
|
||||
|
||||
/** The body fills the avatar box; ears, hats and effects may reach past it. */
|
||||
const OO_VIEWBOX = `${OO_RIG_INSET} ${OO_RIG_INSET + 4} ${OO_RIG_SIZE - 2 * OO_RIG_INSET} ${OO_RIG_SIZE - 2 * OO_RIG_INSET}`;
|
||||
|
||||
const OO_FACE_VIEWBOX = "47 62 112 112";
|
||||
|
||||
/** Above this size an Oo always moves; smaller ones only for list moments. */
|
||||
const LIVELY_SIZE = 56;
|
||||
|
||||
@ -208,6 +212,7 @@ export function OoFigure({
|
||||
size,
|
||||
still = false,
|
||||
interactive = false,
|
||||
focus = "body",
|
||||
className,
|
||||
}: OoFigureProps) {
|
||||
const gradient = `oo${useId().replace(/[^a-zA-Z0-9-_]/g, "")}`;
|
||||
@ -289,14 +294,14 @@ export function OoFigure({
|
||||
return (
|
||||
<svg
|
||||
ref={svgRef}
|
||||
viewBox={OO_VIEWBOX}
|
||||
viewBox={focus === "face" ? OO_FACE_VIEWBOX : OO_VIEWBOX}
|
||||
width={size}
|
||||
height={size}
|
||||
aria-hidden="true"
|
||||
className={className}
|
||||
data-oo-species={avatar.species}
|
||||
data-oo-moment={moment}
|
||||
overflow="visible"
|
||||
overflow={focus === "face" ? "hidden" : "visible"}
|
||||
{...pointerHandlers}
|
||||
>
|
||||
<defs>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user