mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-22 15:06:32 +00:00
fix(assistant): readable cards for any tool, and the CI round
- A card for a tool without one of its own names what it works on: the place of an assignment, the day, the note, the booking; its arguments sit under the labels the other cards use, a new order reads as the names in order. 28 frequent tools carry their own action name in every language. - The server's own steps without a card still refuse, as before. - Tests: the rate limit is asked one request after another, the mention list closes on the caret move a browser reports, the place factory hands its category over as a plain id, eleven files formatted.
This commit is contained in:
@@ -152,7 +152,10 @@ function useInstanceConnection(onChanged: () => void) {
|
||||
live,
|
||||
provider,
|
||||
models: live
|
||||
? modelOptions(models, live.model, { free: t('assistant.model.free'), recommended: t('assistant.model.recommended') })
|
||||
? modelOptions(models, live.model, {
|
||||
free: t('assistant.model.free'),
|
||||
recommended: t('assistant.model.recommended'),
|
||||
})
|
||||
: [],
|
||||
busy,
|
||||
setModel,
|
||||
|
||||
@@ -125,13 +125,20 @@ function KindTile({
|
||||
}
|
||||
|
||||
/** The verb as a quiet line over the name of what it touches. */
|
||||
/** What the change does: the tool's own action where TREK names it, else add, change or remove. */
|
||||
function verbLabel(preview: AssistantChangePreview, t: (key: string) => string): string {
|
||||
const own = preview.tool ? `assistant.tool.${preview.tool}` : null;
|
||||
const named = own ? t(own) : null;
|
||||
return named && named !== own ? named : t(`assistant.change.verb.${preview.verbKey}`);
|
||||
}
|
||||
|
||||
function ChangeHead({ preview, struck = false }: { preview: AssistantChangePreview | null; struck?: boolean }) {
|
||||
const { t } = useTranslation();
|
||||
if (!preview) return <span className="trek-skeleton inline-block h-4 w-40" aria-hidden="true" />;
|
||||
return (
|
||||
<span className="flex min-w-0 flex-col">
|
||||
<span className="flex min-w-0 items-center gap-1.5 text-caption text-content-muted">
|
||||
<span className="truncate">{t(`assistant.change.verb.${preview.verbKey}`)}</span>
|
||||
<span className="truncate">{verbLabel(preview, t)}</span>
|
||||
{preview.domain && (
|
||||
// Where in TREK a change outside the trip plan lands: the vacation planner, the journal.
|
||||
<span className="flex-shrink-0 rounded-full bg-surface-secondary px-1.5 font-medium text-content-secondary">
|
||||
|
||||
@@ -80,6 +80,8 @@ describe('AssistantComposer mentions', () => {
|
||||
fireEvent.keyDown(field, { key: 'Enter' });
|
||||
await waitFor(() => expect(field.value).toBe('Is @Louvre '));
|
||||
expect(send).not.toHaveBeenCalled();
|
||||
// A browser reports where the caret went after the pick; jsdom does not on its own.
|
||||
fireEvent.select(field);
|
||||
await waitFor(() => expect(screen.queryByRole('listbox')).toBeNull());
|
||||
expect(mentions()).toEqual([{ kind: 'place', id: 21, label: 'Louvre' }]);
|
||||
expect(chatOf(useAssistantStore.getState(), TRIP).draft).toBe('Is @Louvre ');
|
||||
|
||||
@@ -98,7 +98,14 @@ describe('AssistantError', () => {
|
||||
it('FE-AI-ERR-006: an own key that stopped working says so before anything is sent', () => {
|
||||
withError(null, {
|
||||
...STATUS,
|
||||
own: { scope: 'user', kind: 'anthropic', model: 'claude', hint: '…a1b2', status: 'error', host: 'api.anthropic.com' },
|
||||
own: {
|
||||
scope: 'user',
|
||||
kind: 'anthropic',
|
||||
model: 'claude',
|
||||
hint: '…a1b2',
|
||||
status: 'error',
|
||||
host: 'api.anthropic.com',
|
||||
},
|
||||
});
|
||||
renderLine();
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Replace key' }));
|
||||
|
||||
@@ -103,7 +103,7 @@ function HintRow({
|
||||
className={`absolute grid place-items-center rounded-lg text-content-faint transition-opacity hover:bg-surface-hover hover:text-content ${
|
||||
phone
|
||||
? 'end-0.5 top-0.5 h-10 w-10'
|
||||
: 'end-1 top-1 h-7 w-7 [@media(hover:hover)]:opacity-0 focus-visible:opacity-100 group-focus-within:opacity-100 group-hover:opacity-100'
|
||||
: 'end-1 top-1 h-7 w-7 focus-visible:opacity-100 group-focus-within:opacity-100 group-hover:opacity-100 [@media(hover:hover)]:opacity-0'
|
||||
}`}
|
||||
>
|
||||
<X size={13} aria-hidden="true" />
|
||||
|
||||
@@ -35,7 +35,9 @@ export default function AssistantLauncher({
|
||||
const open = useAssistantStore((s) => s.window.open && !s.window.minimized);
|
||||
const toggle = useAssistantStore((s) => s.toggle);
|
||||
// An answer still being written in a closed window: the floating button breathes until it is opened.
|
||||
const busy = useAssistantStore((s) => !s.window.open || s.window.minimized ? Object.values(s.byTrip).some((c) => c?.isRunning) : false);
|
||||
const busy = useAssistantStore((s) =>
|
||||
!s.window.open || s.window.minimized ? Object.values(s.byTrip).some((c) => c?.isRunning) : false
|
||||
);
|
||||
const keys = useAssistantShortcutKeys();
|
||||
const hints = useAssistantHints(variant === 'floating' ? tripId : null, { withStays: false });
|
||||
const floating = useRef<HTMLButtonElement>(null);
|
||||
@@ -86,7 +88,10 @@ export default function AssistantLauncher({
|
||||
}}
|
||||
>
|
||||
{busy && (
|
||||
<span aria-hidden="true" className="trek-assistant-busy absolute inset-0 rounded-full border-2 border-current opacity-40" />
|
||||
<span
|
||||
aria-hidden="true"
|
||||
className="trek-assistant-busy absolute inset-0 rounded-full border-2 border-current opacity-40"
|
||||
/>
|
||||
)}
|
||||
<Sparkles size={20} aria-hidden="true" />
|
||||
{hints.unseenWarn > 0 && (
|
||||
|
||||
@@ -9,7 +9,14 @@ import { splitMentions } from './assistantMentionModel';
|
||||
* the question's own mentions part, so a stray `@` in the text stays text.
|
||||
*/
|
||||
export default function AssistantMentionText({ text, items }: { text: string; items: AssistantMentions['items'] }) {
|
||||
const segments = useMemo(() => splitMentions(text, items.map((i) => i.label)), [text, items]);
|
||||
const segments = useMemo(
|
||||
() =>
|
||||
splitMentions(
|
||||
text,
|
||||
items.map((i) => i.label)
|
||||
),
|
||||
[text, items]
|
||||
);
|
||||
return (
|
||||
<>
|
||||
{segments.map((s) =>
|
||||
|
||||
@@ -144,9 +144,7 @@ export function splitMentions(text: string, labels: readonly string[]): MentionS
|
||||
let i = 0;
|
||||
while (i < text.length) {
|
||||
const token =
|
||||
text[i] === '@'
|
||||
? tokens.find((tk) => text.startsWith(tk, i) && endsWord(text, i + tk.length))
|
||||
: undefined;
|
||||
text[i] === '@' ? tokens.find((tk) => text.startsWith(tk, i) && endsWord(text, i + tk.length)) : undefined;
|
||||
if (token) {
|
||||
if (i > start) out.push({ text: text.slice(start, i), at: start, mention: false });
|
||||
out.push({ text: token, at: i, mention: true });
|
||||
|
||||
@@ -251,6 +251,7 @@ export function undoLeftMs(applied: AssistantApplied | null, now: number): numbe
|
||||
export const CHANGE_LABELS: Record<AssistantChangeLabelKey, { labelKey: string }> = {
|
||||
// A tool's own argument: the row names it in `field`, this is only its fallback.
|
||||
field: { labelKey: 'assistant.change.label.field' },
|
||||
order: { labelKey: 'assistant.change.label.order' },
|
||||
name: { labelKey: 'assistant.change.label.name' },
|
||||
description: { labelKey: 'assistant.change.label.description' },
|
||||
address: { labelKey: 'assistant.change.label.address' },
|
||||
|
||||
@@ -68,7 +68,10 @@ export function markdownToText(markdown: string): string {
|
||||
const text = plainLine(line);
|
||||
if (text !== null) lines.push(text.trimEnd());
|
||||
}
|
||||
return lines.join('\n').replace(/\n{3,}/g, '\n\n').trim();
|
||||
return lines
|
||||
.join('\n')
|
||||
.replace(/\n{3,}/g, '\n\n')
|
||||
.trim();
|
||||
}
|
||||
|
||||
/** The text cut to `max` characters at the last line or word end before it, marked with an ellipsis. */
|
||||
|
||||
@@ -10,9 +10,7 @@ import { useAssistantStore } from '../../store/assistantStore';
|
||||
*/
|
||||
export function useChangeHover(tripId: number, toolCallId: string | null) {
|
||||
const hovered = useAssistantStore((s) =>
|
||||
toolCallId !== null && s.mapLink?.tripId === tripId && s.mapLink.hoveredId === toolCallId
|
||||
? s.mapLink.source
|
||||
: null
|
||||
toolCallId !== null && s.mapLink?.tripId === tripId && s.mapLink.hoveredId === toolCallId ? s.mapLink.source : null
|
||||
);
|
||||
const setMapHover = useAssistantStore((s) => s.setMapHover);
|
||||
|
||||
|
||||
@@ -107,7 +107,9 @@ function ProviderChips({
|
||||
const { t } = useTranslation();
|
||||
const tile = (kind: AiApiKeyKind) =>
|
||||
`flex min-w-0 items-center gap-2 rounded-lg border px-2 py-1.5 text-start transition-colors hover:bg-surface-hover ${
|
||||
picked === kind ? 'border-accent bg-surface-card ring-1 ring-accent' : 'border-edge-faint bg-surface-card hover:border-edge'
|
||||
picked === kind
|
||||
? 'border-accent bg-surface-card ring-1 ring-accent'
|
||||
: 'border-edge-faint bg-surface-card hover:border-edge'
|
||||
}`;
|
||||
return (
|
||||
<div className="flex flex-col gap-1.5">
|
||||
|
||||
@@ -97,7 +97,7 @@ describe('useKeyConnect', () => {
|
||||
});
|
||||
expect(taken).toBe(true);
|
||||
await waitFor(() =>
|
||||
expect(repo.connectKey).toHaveBeenCalledWith({ kind: 'openrouter', apiKey: 'unknown-format-key' }),
|
||||
expect(repo.connectKey).toHaveBeenCalledWith({ kind: 'openrouter', apiKey: 'unknown-format-key' })
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -42,7 +42,9 @@ const REMOVE: AssistantChangeEffect = { ...MOVE, kind: 'remove', fromDayId: null
|
||||
type Approval = { approved?: boolean; resolution?: 'cancelled' | 'expired' };
|
||||
|
||||
function call(toolCallId: string, approval: Approval, result?: unknown): AssistantMessagePart[] {
|
||||
return [{ type: 'tool-call', toolCallId, toolName: 'x', args: {}, approval: { id: toolCallId, ...approval }, result }];
|
||||
return [
|
||||
{ type: 'tool-call', toolCallId, toolName: 'x', args: {}, approval: { id: toolCallId, ...approval }, result },
|
||||
];
|
||||
}
|
||||
|
||||
function change(toolCallId: string, effect: AssistantChangeEffect): AssistantMessagePart {
|
||||
|
||||
@@ -1,27 +1,84 @@
|
||||
import type { TripCard } from './assistant-context';
|
||||
import type { ToolHint } from './assistant-tools.service';
|
||||
import type { AssistantChangePreview, AssistantChangeRow, AssistantChangeVerbKey } from '@trek/shared';
|
||||
import type {
|
||||
AssistantChangeLabelKey,
|
||||
AssistantChangePreview,
|
||||
AssistantChangeRow,
|
||||
AssistantChangeVerbKey,
|
||||
} from '@trek/shared';
|
||||
|
||||
/**
|
||||
* The change card of a writing tool without a card of its own: a verb read
|
||||
* from what the tool says it does (removes, creates, changes), a subject from
|
||||
* the name or title it is given, and one row per argument, with the trip's
|
||||
* days, places and people named where an argument holds their id. It is never
|
||||
* undoable: only the tools with a matching removal are.
|
||||
* The change card of a writing tool without a card of its own, in the words
|
||||
* of the planner rather than of the tool: its subject is the place, day, note
|
||||
* or booking it works on, named from the trip card (an assignment reads as its
|
||||
* place), or the name or title it is given; its rows are the arguments under
|
||||
* the labels the other cards use (time, end, notes, day …), with ids named and
|
||||
* lists of ids read as the names in their order. The verb comes from what the
|
||||
* tool says it does; the client names the tool's action where it knows it. It
|
||||
* is never undoable: only the tools with a matching removal are.
|
||||
*/
|
||||
|
||||
type Args = Record<string, unknown>;
|
||||
|
||||
const MAX_ROWS = 12;
|
||||
const MAX_VALUE_CHARS = 160;
|
||||
const SUBJECT_KEYS = ['name', 'title', 'text', 'label', 'content', 'region', 'country_code', 'date'] as const;
|
||||
const NAME_KEYS = ['name', 'title', 'text', 'label', 'question', 'content', 'region', 'country_code'] as const;
|
||||
|
||||
/** Arguments that mean what a label of the other cards means. */
|
||||
const LABEL_OF: Readonly<Record<string, AssistantChangeLabelKey>> = {
|
||||
name: 'name',
|
||||
title: 'name',
|
||||
description: 'description',
|
||||
address: 'address',
|
||||
category: 'category',
|
||||
category_id: 'category',
|
||||
time: 'time',
|
||||
place_time: 'time',
|
||||
start_time: 'time',
|
||||
assignment_time: 'time',
|
||||
reservation_time: 'time',
|
||||
end_time: 'endTime',
|
||||
assignment_end_time: 'endTime',
|
||||
reservation_end_time: 'endTime',
|
||||
notes: 'notes',
|
||||
note: 'notes',
|
||||
website: 'website',
|
||||
url: 'link',
|
||||
phone: 'phone',
|
||||
email: 'email',
|
||||
price: 'price',
|
||||
total_price: 'price',
|
||||
currency: 'currency',
|
||||
quantity: 'quantity',
|
||||
dayId: 'day',
|
||||
day_id: 'day',
|
||||
end_day_id: 'day',
|
||||
date: 'day',
|
||||
due_date: 'dueDate',
|
||||
priority: 'priority',
|
||||
assigned_user_id: 'assignee',
|
||||
location: 'location',
|
||||
confirmation_number: 'confirmation',
|
||||
check_in: 'checkIn',
|
||||
check_out: 'checkOut',
|
||||
member_ids: 'members',
|
||||
assignmentIds: 'order',
|
||||
assignment_ids: 'order',
|
||||
dayIds: 'order',
|
||||
day_ids: 'order',
|
||||
orderedIds: 'order',
|
||||
type: 'type',
|
||||
};
|
||||
|
||||
/** Arguments the card never shows: positions on the map, looks, and switches only the tool needs. */
|
||||
const HIDDEN_KEYS: ReadonlySet<string> = new Set(['lat', 'lng', 'color', 'icon', 'expected_revision', 'force']);
|
||||
|
||||
function clip(value: string): string {
|
||||
const line = value.replace(/\s+/g, ' ').trim();
|
||||
return line.length > MAX_VALUE_CHARS ? `${line.slice(0, MAX_VALUE_CHARS - 1)}…` : line;
|
||||
}
|
||||
|
||||
/** "update_vacay_plan" reads as "update vacay plan". */
|
||||
/** "update_vacay_plan" reads as "update vacay plan"; only shown where nothing better is known. */
|
||||
export function humanToolName(name: string): string {
|
||||
return name.replace(/_/g, ' ');
|
||||
}
|
||||
@@ -34,30 +91,79 @@ function verbOf(hint: ToolHint | null, name: string): AssistantChangeVerbKey {
|
||||
return 'genericUpdate';
|
||||
}
|
||||
|
||||
/** An argument holding the id of a day, place or member, named as the trip names it. */
|
||||
function named(card: TripCard, key: string, value: unknown): string | null {
|
||||
if (typeof value !== 'number') return null;
|
||||
if (/^day_?id$/i.test(key)) {
|
||||
const day = card.days.find((d) => d.id === value);
|
||||
return day ? (day.title ?? day.date ?? `#${day.number}`) : null;
|
||||
function dayName(card: TripCard, dayId: number): string | null {
|
||||
const day = card.days.find((d) => d.id === dayId);
|
||||
if (!day) return null;
|
||||
return day.title ?? day.date ?? `#${day.number}`;
|
||||
}
|
||||
|
||||
/** What one id argument names in the trip: a place, a day, a note, a booking, an item, a person. */
|
||||
function nameOf(card: TripCard, key: string, value: number, toolName: string): string | null {
|
||||
const k = key.toLowerCase().replace(/_/g, '');
|
||||
if (k === 'assignmentid') {
|
||||
const assignment = card.assignments.get(value);
|
||||
return assignment ? (card.places.get(assignment.placeId)?.name ?? null) : null;
|
||||
}
|
||||
if (/^place_?id$/i.test(key)) return card.places.get(value)?.name ?? null;
|
||||
if (/^(user_?id|member_?id|assigned_user_id)$/i.test(key)) return card.members.get(value) ?? null;
|
||||
if (k === 'placeid' || k === 'sourceplaceid') return card.places.get(value)?.name ?? null;
|
||||
if (k === 'dayid' || k === 'enddayid' || k === 'startdayid') return dayName(card, value);
|
||||
if (k === 'noteid') return card.notes.get(value)?.text ?? null;
|
||||
if (k === 'reservationid' || k === 'accommodationid') return card.reservations.get(value)?.title ?? null;
|
||||
if (k === 'itemid' && toolName.includes('packing')) return card.packing.get(value)?.name ?? null;
|
||||
if (k === 'userid' || k === 'memberid' || k === 'assigneduserid') return card.members.get(value) ?? null;
|
||||
return null;
|
||||
}
|
||||
|
||||
function valueText(card: TripCard, key: string, value: unknown): string {
|
||||
const name = named(card, key, value);
|
||||
if (name) return clip(name);
|
||||
if (typeof value === 'boolean') return value ? '✓' : '✗';
|
||||
if (Array.isArray(value)) {
|
||||
const items = value.map((item) => (typeof item === 'object' ? JSON.stringify(item) : String(item)));
|
||||
return clip(items.join(', '));
|
||||
/** An id list in its order, named where the card knows the ids (a new order of a day's places). */
|
||||
function namesOf(card: TripCard, key: string, values: unknown[], toolName: string): string | null {
|
||||
const singular = key.replace(/(Ids|_ids)$/, (m) => (m === 'Ids' ? 'Id' : '_id'));
|
||||
const names = values.map((v) => (typeof v === 'number' ? nameOf(card, singular, v, toolName) : null));
|
||||
return names.some((n) => n === null) ? null : names.join(', ');
|
||||
}
|
||||
|
||||
function valueText(card: TripCard, key: string, value: unknown, toolName: string): string {
|
||||
if (typeof value === 'number') {
|
||||
const name = nameOf(card, key, value, toolName);
|
||||
if (name) return clip(name);
|
||||
}
|
||||
if (Array.isArray(value)) {
|
||||
const names = namesOf(card, key, value, toolName);
|
||||
if (names) return clip(names);
|
||||
return clip(value.map((item) => (typeof item === 'object' ? JSON.stringify(item) : String(item))).join(', '));
|
||||
}
|
||||
if (typeof value === 'boolean') return value ? '✓' : '✗';
|
||||
if (value && typeof value === 'object') return clip(JSON.stringify(value));
|
||||
return clip(String(value));
|
||||
}
|
||||
|
||||
/** The subject: what the tool is given a name for, else the first thing of the trip it works on. */
|
||||
function subjectOf(card: TripCard, args: Args, toolName: string): { text: string; key: string | null } {
|
||||
const named = NAME_KEYS.find((key) => typeof args[key] === 'string' && (args[key] as string).trim());
|
||||
if (named) return { text: String(args[named]), key: named };
|
||||
const order = ['assignmentId', 'placeId', 'noteId', 'reservationId', 'itemId', 'dayId', 'day_id'];
|
||||
for (const key of order) {
|
||||
const value = args[key];
|
||||
const name = typeof value === 'number' ? nameOf(card, key, value, toolName) : null;
|
||||
if (name) return { text: name, key };
|
||||
}
|
||||
const list = Object.entries(args).find(([key, value]) => /(Ids|_ids)$/.test(key) && Array.isArray(value));
|
||||
if (list) {
|
||||
const names = namesOf(card, list[0], list[1] as unknown[], toolName);
|
||||
if (names) return { text: names, key: list[0] };
|
||||
}
|
||||
return { text: humanToolName(toolName), key: null };
|
||||
}
|
||||
|
||||
function rowOf(card: TripCard, key: string, value: unknown, toolName: string): AssistantChangeRow {
|
||||
const labelKey = LABEL_OF[key] ?? 'field';
|
||||
return {
|
||||
op: 'add',
|
||||
labelKey,
|
||||
...(labelKey === 'field' ? { field: key.slice(0, 60) } : {}),
|
||||
before: null,
|
||||
after: valueText(card, key, value, toolName),
|
||||
};
|
||||
}
|
||||
|
||||
export function describeGeneric(
|
||||
toolName: string,
|
||||
toolCallId: string,
|
||||
@@ -65,26 +171,23 @@ export function describeGeneric(
|
||||
card: TripCard,
|
||||
hint: ToolHint | null,
|
||||
): AssistantChangePreview {
|
||||
const subjectKey = SUBJECT_KEYS.find((key) => typeof args[key] === 'string' && (args[key] as string).trim());
|
||||
const rows: AssistantChangeRow[] = Object.entries(args)
|
||||
.filter(([key, value]) => key !== subjectKey && value !== undefined && value !== null && value !== '')
|
||||
const subject = subjectOf(card, args, toolName);
|
||||
const rows = Object.entries(args)
|
||||
.filter(([key]) => key !== subject.key && !HIDDEN_KEYS.has(key))
|
||||
.filter(([, value]) => value !== undefined && value !== null && value !== '')
|
||||
.slice(0, MAX_ROWS)
|
||||
.map(([key, value]) => ({
|
||||
op: 'add',
|
||||
labelKey: 'field',
|
||||
field: key.slice(0, 60),
|
||||
before: null,
|
||||
after: valueText(card, key, value),
|
||||
}));
|
||||
const dayId = typeof args.dayId === 'number' ? args.dayId : typeof args.day_id === 'number' ? args.day_id : null;
|
||||
const placeId = typeof args.placeId === 'number' ? args.placeId : null;
|
||||
.map(([key, value]) => rowOf(card, key, value, toolName));
|
||||
const dayArg = args.dayId ?? args.day_id;
|
||||
const assignment = typeof args.assignmentId === 'number' ? card.assignments.get(args.assignmentId) : undefined;
|
||||
const dayId = typeof dayArg === 'number' ? dayArg : (assignment?.dayId ?? null);
|
||||
const placeId = typeof args.placeId === 'number' ? args.placeId : (assignment?.placeId ?? null);
|
||||
return {
|
||||
toolCallId,
|
||||
verbKey: verbOf(hint, toolName),
|
||||
subject: clip(subjectKey ? String(args[subjectKey]) : humanToolName(toolName)),
|
||||
subject: clip(subject.text),
|
||||
rows,
|
||||
dayId: dayId && card.days.some((d) => d.id === dayId) ? dayId : null,
|
||||
placeIds: placeId && card.places.has(placeId) ? [placeId] : [],
|
||||
dayId: dayId !== null && card.days.some((d) => d.id === dayId) ? dayId : null,
|
||||
placeIds: placeId !== null && card.places.has(placeId) ? [placeId] : [],
|
||||
undoable: false,
|
||||
effect: null,
|
||||
tool: toolName,
|
||||
|
||||
@@ -498,6 +498,8 @@ export function describeToolCall(
|
||||
const runs = writeToolOf(toolName, args);
|
||||
const tool = writeTool(runs);
|
||||
const describe = DESCRIBERS[runs];
|
||||
// The server's own steps all have a card; one without is a call that names no real tool.
|
||||
if (tool && !describe) throw new Error(`No change card for tool "${toolName}"`);
|
||||
if (!tool || !describe) return describeGeneric(runs, toolCallId, args, ctx.card, ctx.hintOf?.(runs) ?? null);
|
||||
const described = describe(ctx, args);
|
||||
return {
|
||||
|
||||
@@ -567,14 +567,15 @@ describe('Trip assistant e2e', () => {
|
||||
|
||||
it('ASTE2E-011: turns are rate limited per user', async () => {
|
||||
const t = await travelerWithTrip();
|
||||
const responses = await Promise.all(
|
||||
Array.from({ length: TURNS_PER_MINUTE + 1 }, () =>
|
||||
request(nestApp.getHttpServer())
|
||||
.post(`${t.base}/tool-calls/missing/undo`)
|
||||
.set('Cookie', sessionCookie(t.userId))
|
||||
.send({}),
|
||||
),
|
||||
);
|
||||
// One after another, as a user would; a burst of requests at once only tests the test server.
|
||||
const undoOnce = () =>
|
||||
request(nestApp.getHttpServer())
|
||||
.post(`${t.base}/tool-calls/missing/undo`)
|
||||
.set('Cookie', sessionCookie(t.userId))
|
||||
.send({});
|
||||
const responses = await Array.from({ length: TURNS_PER_MINUTE + 1 }).reduce<
|
||||
Promise<Array<{ status: number; body: unknown }>>
|
||||
>(async (done, _unused) => [...(await done), await undoOnce()], Promise.resolve([]));
|
||||
const statuses = responses.map((res) => res.status);
|
||||
expect(statuses.filter((status) => status === 404)).toHaveLength(TURNS_PER_MINUTE);
|
||||
const limited = responses.filter((res) => res.status === 429);
|
||||
|
||||
@@ -51,7 +51,9 @@ export async function makePlace(
|
||||
tripId: number,
|
||||
overrides: EntityData<Places> = {},
|
||||
): Promise<PlaceRow> {
|
||||
const category = 'category' in overrides ? overrides.category : await firstCategoryId(orm);
|
||||
// A plain id (or null): the relation's own type, checked against the whole row, runs tsc past its depth.
|
||||
const given = 'category' in overrides ? overrides.category : await firstCategoryId(orm);
|
||||
const category = (given ?? null) as number | null;
|
||||
return createRow(
|
||||
orm,
|
||||
Places,
|
||||
|
||||
@@ -200,23 +200,37 @@ describe('describeToolCall', () => {
|
||||
...ctx,
|
||||
hintOf: () => ({ destructive, creates, group }),
|
||||
});
|
||||
// The time of a place on a day: the place is the subject, the time a row under its usual label.
|
||||
const time = describeToolCall(
|
||||
'update_assignment_time',
|
||||
'tc-7',
|
||||
{ assignmentId: 301, place_time: '10:00', end_time: '11:30' },
|
||||
hinted(false, false, null),
|
||||
);
|
||||
expect(assistantChangePreviewSchema.safeParse(time).success).toBe(true);
|
||||
expect(time).toMatchObject({ verbKey: 'genericUpdate', subject: 'Nishiki Market', dayId: 31, placeIds: [12] });
|
||||
expect(time.rows).toEqual([
|
||||
{ op: 'add', labelKey: 'time', before: null, after: '10:00' },
|
||||
{ op: 'add', labelKey: 'endTime', before: null, after: '11:30' },
|
||||
]);
|
||||
// A new order reads as the names in that order.
|
||||
const order = describeToolCall('reorder_day_assignments', 'tc-6', { dayId: 31, assignmentIds: [301] }, ctx);
|
||||
expect(order).toMatchObject({ subject: 'Arrival', tool: 'reorder_day_assignments' });
|
||||
expect(order.rows).toEqual([{ op: 'add', labelKey: 'order', before: null, after: 'Nishiki Market' }]);
|
||||
const gone = describeToolCall('delete_day_note', 'tc-8', { dayId: 31, noteId: 41 }, hinted(true, false, null));
|
||||
expect(gone).toMatchObject({ verbKey: 'genericRemove', subject: 'Rail pass', dayId: 31 });
|
||||
expect(gone.rows).toEqual([{ op: 'add', labelKey: 'day', before: null, after: 'Arrival' }]);
|
||||
const vacay = describeToolCall(
|
||||
'toggle_vacay_entry',
|
||||
'tc-9',
|
||||
{ date: '2026-07-01', half: true },
|
||||
hinted(false, false, 'vacay'),
|
||||
);
|
||||
expect(assistantChangePreviewSchema.safeParse(vacay).success).toBe(true);
|
||||
expect(vacay).toMatchObject({ verbKey: 'genericUpdate', subject: '2026-07-01', domain: 'vacay', undoable: false });
|
||||
expect(vacay.rows).toEqual([{ op: 'add', labelKey: 'field', field: 'half', before: null, after: '✓' }]);
|
||||
const gone = describeToolCall('delete_day_note', 'tc-8', { dayId: 31, noteId: 41 }, hinted(true, false, null));
|
||||
expect(gone).toMatchObject({
|
||||
verbKey: 'genericRemove',
|
||||
subject: 'delete day note',
|
||||
dayId: 31,
|
||||
tool: 'delete_day_note',
|
||||
});
|
||||
expect(gone.rows[0]).toMatchObject({ field: 'dayId', after: 'Arrival' });
|
||||
expect(vacay).toMatchObject({ subject: 'toggle vacay entry', domain: 'vacay', undoable: false });
|
||||
expect(vacay.rows).toEqual([
|
||||
{ op: 'add', labelKey: 'day', before: null, after: '2026-07-01' },
|
||||
{ op: 'add', labelKey: 'field', field: 'half', before: null, after: '✓' },
|
||||
]);
|
||||
// Without hints the name still tells a removal from an addition.
|
||||
expect(describe_('create_collab_poll', { question: 'Where?' }).verbKey).toBe('genericCreate');
|
||||
expect(describe_('unmark_country_visited', {}).verbKey).toBe('genericRemove');
|
||||
@@ -362,7 +376,8 @@ describe('appliedChange', () => {
|
||||
dayId: 31,
|
||||
});
|
||||
expect(appliedChange('create_todo', 'tc', {}, 'odd', null, null)).toMatchObject({ entity: 'todo', ids: [] });
|
||||
expect(appliedChange('list_places', 'tc', {}, {}, null, null)).toBeNull();
|
||||
// A tool without a card of its own leaves a receipt with nothing to show on the map.
|
||||
expect(appliedChange('list_places', 'tc', {}, {}, null, null)).toMatchObject({ entity: 'other', ids: [] });
|
||||
});
|
||||
|
||||
it('ASTPRV-021: a booking from a file is a reservation, on the day its card named or it landed on', () => {
|
||||
|
||||
@@ -113,6 +113,8 @@ export const ASSISTANT_CHANGE_LABEL_KEYS = [
|
||||
'stay',
|
||||
'members',
|
||||
'route',
|
||||
// A new order of a day's places or of the days, as the names in that order.
|
||||
'order',
|
||||
// An argument of a tool without a card of its own; the row names it in `field`.
|
||||
'field',
|
||||
] as const;
|
||||
|
||||
@@ -506,5 +506,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'الملفات',
|
||||
'assistant.domain.account': 'الحساب',
|
||||
'assistant.domain.plugins': 'الإضافات',
|
||||
'assistant.change.label.order': 'الترتيب',
|
||||
'assistant.tool.reorder_day_assignments': 'إعادة ترتيب اليوم',
|
||||
'assistant.tool.update_assignment_time': 'تغيير الوقت',
|
||||
'assistant.tool.update_assignment_notes': 'تغيير ملاحظة اليوم',
|
||||
'assistant.tool.set_leg_transport_mode': 'تغيير طريقة الوصول',
|
||||
'assistant.tool.set_assignment_end_day': 'تغيير اليوم الأخير',
|
||||
'assistant.tool.clear_day_assignments': 'إفراغ اليوم',
|
||||
'assistant.tool.set_assignment_participants': 'تغيير المشاركين',
|
||||
'assistant.tool.create_day': 'إضافة يوم',
|
||||
'assistant.tool.update_day': 'تغيير اليوم',
|
||||
'assistant.tool.delete_day': 'حذف اليوم',
|
||||
'assistant.tool.reorder_days': 'إعادة ترتيب الأيام',
|
||||
'assistant.tool.delete_place': 'حذف المكان',
|
||||
'assistant.tool.rate_place': 'تقييم المكان',
|
||||
'assistant.tool.bulk_update_places': 'تغيير عدة أماكن',
|
||||
'assistant.tool.delete_day_note': 'حذف الملاحظة',
|
||||
'assistant.tool.toggle_packing_item': 'وضع علامة',
|
||||
'assistant.tool.delete_packing_item': 'إزالة من قائمة الأمتعة',
|
||||
'assistant.tool.update_todo': 'تغيير المهمة',
|
||||
'assistant.tool.toggle_todo': 'وضع علامة على المهمة',
|
||||
'assistant.tool.delete_todo': 'حذف المهمة',
|
||||
'assistant.tool.delete_budget_item': 'حذف المصروف',
|
||||
'assistant.tool.update_reservation': 'تغيير الحجز',
|
||||
'assistant.tool.delete_reservation': 'حذف الحجز',
|
||||
'assistant.tool.create_accommodation': 'إضافة إقامة',
|
||||
'assistant.tool.create_transport': 'إضافة وسيلة نقل',
|
||||
'assistant.tool.toggle_vacay_entry': 'تحديد يوم إجازة',
|
||||
'assistant.tool.mark_country_visited': 'تحديد البلد كمُزار',
|
||||
'assistant.tool.send_collab_message': 'إرسال إلى محادثة الرحلة',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -414,5 +414,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Fayllar',
|
||||
'assistant.domain.account': 'Hesab',
|
||||
'assistant.domain.plugins': 'Əlavələr',
|
||||
'assistant.change.label.order': 'Sıra',
|
||||
'assistant.tool.reorder_day_assignments': 'Günü yenidən sırala',
|
||||
'assistant.tool.update_assignment_time': 'Vaxtı dəyiş',
|
||||
'assistant.tool.update_assignment_notes': 'Günün qeydini dəyiş',
|
||||
'assistant.tool.set_leg_transport_mode': 'Getmə üsulunu dəyiş',
|
||||
'assistant.tool.set_assignment_end_day': 'Son günü dəyiş',
|
||||
'assistant.tool.clear_day_assignments': 'Günü boşalt',
|
||||
'assistant.tool.set_assignment_participants': 'İştirakçıları dəyiş',
|
||||
'assistant.tool.create_day': 'Gün əlavə et',
|
||||
'assistant.tool.update_day': 'Günü dəyiş',
|
||||
'assistant.tool.delete_day': 'Günü sil',
|
||||
'assistant.tool.reorder_days': 'Günləri yenidən sırala',
|
||||
'assistant.tool.delete_place': 'Yeri sil',
|
||||
'assistant.tool.rate_place': 'Yeri qiymətləndir',
|
||||
'assistant.tool.bulk_update_places': 'Bir neçə yeri dəyiş',
|
||||
'assistant.tool.delete_day_note': 'Qeydi sil',
|
||||
'assistant.tool.toggle_packing_item': 'İşarələ',
|
||||
'assistant.tool.delete_packing_item': 'Yük siyahısından çıxar',
|
||||
'assistant.tool.update_todo': 'Tapşırığı dəyiş',
|
||||
'assistant.tool.toggle_todo': 'Tapşırığı işarələ',
|
||||
'assistant.tool.delete_todo': 'Tapşırığı sil',
|
||||
'assistant.tool.delete_budget_item': 'Xərci sil',
|
||||
'assistant.tool.update_reservation': 'Rezervasiyanı dəyiş',
|
||||
'assistant.tool.delete_reservation': 'Rezervasiyanı sil',
|
||||
'assistant.tool.create_accommodation': 'Yaşayış yeri əlavə et',
|
||||
'assistant.tool.create_transport': 'Nəqliyyat əlavə et',
|
||||
'assistant.tool.toggle_vacay_entry': 'Məzuniyyət günü təyin et',
|
||||
'assistant.tool.mark_country_visited': 'Ölkəni ziyarət edilmiş kimi işarələ',
|
||||
'assistant.tool.send_collab_message': 'Səyahət söhbətinə göndər',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -414,5 +414,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Restroù',
|
||||
'assistant.domain.account': 'Kont',
|
||||
'assistant.domain.plugins': 'Astennoù',
|
||||
'assistant.change.label.order': 'Urzh',
|
||||
'assistant.tool.reorder_day_assignments': 'Adurzhiañ an devezh',
|
||||
'assistant.tool.update_assignment_time': 'Kemmañ an eur',
|
||||
'assistant.tool.update_assignment_notes': 'Kemmañ an notenn war an devezh',
|
||||
'assistant.tool.set_leg_transport_mode': 'Kemmañ an doare da vont',
|
||||
'assistant.tool.set_assignment_end_day': 'Kemmañ an devezh diwezhañ',
|
||||
'assistant.tool.clear_day_assignments': 'Goullonderiñ an devezh',
|
||||
'assistant.tool.set_assignment_participants': 'Kemmañ piv a zeu',
|
||||
'assistant.tool.create_day': 'Ouzhpennañ un devezh',
|
||||
'assistant.tool.update_day': 'Kemmañ an devezh',
|
||||
'assistant.tool.delete_day': 'Dilemel an devezh',
|
||||
'assistant.tool.reorder_days': 'Adurzhiañ an devezhioù',
|
||||
'assistant.tool.delete_place': 'Dilemel al lec’h',
|
||||
'assistant.tool.rate_place': 'Notenniñ al lec’h',
|
||||
'assistant.tool.bulk_update_places': 'Kemmañ meur a lec’h',
|
||||
'assistant.tool.delete_day_note': 'Dilemel an notenn',
|
||||
'assistant.tool.toggle_packing_item': 'Merkañ',
|
||||
'assistant.tool.delete_packing_item': 'Lemel diwar ar roll pakadoù',
|
||||
'assistant.tool.update_todo': 'Kemmañ an trevell',
|
||||
'assistant.tool.toggle_todo': 'Merkañ an trevell',
|
||||
'assistant.tool.delete_todo': 'Dilemel an trevell',
|
||||
'assistant.tool.delete_budget_item': 'Dilemel an dispign',
|
||||
'assistant.tool.update_reservation': 'Kemmañ an erlerc’hadenn',
|
||||
'assistant.tool.delete_reservation': 'Dilemel an erlerc’hadenn',
|
||||
'assistant.tool.create_accommodation': 'Ouzhpennañ ul lojeiz',
|
||||
'assistant.tool.create_transport': 'Ouzhpennañ un treuzdougen',
|
||||
'assistant.tool.toggle_vacay_entry': 'Lakaat un devezh vakañsoù',
|
||||
'assistant.tool.mark_country_visited': 'Merkañ ar vro evel gweladennet',
|
||||
'assistant.tool.send_collab_message': 'Kas d’ar gaozeadenn veaj',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -417,5 +417,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Fitxers',
|
||||
'assistant.domain.account': 'Compte',
|
||||
'assistant.domain.plugins': 'Complements',
|
||||
'assistant.change.label.order': 'Ordre',
|
||||
'assistant.tool.reorder_day_assignments': 'Reordena el dia',
|
||||
'assistant.tool.update_assignment_time': 'Canvia l’hora',
|
||||
'assistant.tool.update_assignment_notes': 'Canvia la nota del dia',
|
||||
'assistant.tool.set_leg_transport_mode': 'Canvia com arribar-hi',
|
||||
'assistant.tool.set_assignment_end_day': 'Canvia l’últim dia',
|
||||
'assistant.tool.clear_day_assignments': 'Buida el dia',
|
||||
'assistant.tool.set_assignment_participants': 'Canvia qui hi va',
|
||||
'assistant.tool.create_day': 'Afegeix un dia',
|
||||
'assistant.tool.update_day': 'Canvia el dia',
|
||||
'assistant.tool.delete_day': 'Elimina el dia',
|
||||
'assistant.tool.reorder_days': 'Reordena els dies',
|
||||
'assistant.tool.delete_place': 'Elimina el lloc',
|
||||
'assistant.tool.rate_place': 'Valora el lloc',
|
||||
'assistant.tool.bulk_update_places': 'Canvia diversos llocs',
|
||||
'assistant.tool.delete_day_note': 'Elimina la nota',
|
||||
'assistant.tool.toggle_packing_item': 'Marca',
|
||||
'assistant.tool.delete_packing_item': 'Treu de la llista d’equipatge',
|
||||
'assistant.tool.update_todo': 'Canvia la tasca',
|
||||
'assistant.tool.toggle_todo': 'Marca la tasca',
|
||||
'assistant.tool.delete_todo': 'Elimina la tasca',
|
||||
'assistant.tool.delete_budget_item': 'Elimina la despesa',
|
||||
'assistant.tool.update_reservation': 'Canvia la reserva',
|
||||
'assistant.tool.delete_reservation': 'Elimina la reserva',
|
||||
'assistant.tool.create_accommodation': 'Afegeix allotjament',
|
||||
'assistant.tool.create_transport': 'Afegeix transport',
|
||||
'assistant.tool.toggle_vacay_entry': 'Marca un dia de vacances',
|
||||
'assistant.tool.mark_country_visited': 'Marca el país com a visitat',
|
||||
'assistant.tool.send_collab_message': 'Envia al xat del viatge',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -436,5 +436,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Soubory',
|
||||
'assistant.domain.account': 'Účet',
|
||||
'assistant.domain.plugins': 'Rozšíření',
|
||||
'assistant.change.label.order': 'Pořadí',
|
||||
'assistant.tool.reorder_day_assignments': 'Přeuspořádat den',
|
||||
'assistant.tool.update_assignment_time': 'Změnit čas',
|
||||
'assistant.tool.update_assignment_notes': 'Změnit poznámku ke dni',
|
||||
'assistant.tool.set_leg_transport_mode': 'Změnit způsob cesty',
|
||||
'assistant.tool.set_assignment_end_day': 'Změnit poslední den',
|
||||
'assistant.tool.clear_day_assignments': 'Vyprázdnit den',
|
||||
'assistant.tool.set_assignment_participants': 'Změnit účastníky',
|
||||
'assistant.tool.create_day': 'Přidat den',
|
||||
'assistant.tool.update_day': 'Změnit den',
|
||||
'assistant.tool.delete_day': 'Smazat den',
|
||||
'assistant.tool.reorder_days': 'Přeuspořádat dny',
|
||||
'assistant.tool.delete_place': 'Smazat místo',
|
||||
'assistant.tool.rate_place': 'Ohodnotit místo',
|
||||
'assistant.tool.bulk_update_places': 'Změnit více míst',
|
||||
'assistant.tool.delete_day_note': 'Smazat poznámku',
|
||||
'assistant.tool.toggle_packing_item': 'Odškrtnout',
|
||||
'assistant.tool.delete_packing_item': 'Odebrat ze seznamu balení',
|
||||
'assistant.tool.update_todo': 'Změnit úkol',
|
||||
'assistant.tool.toggle_todo': 'Odškrtnout úkol',
|
||||
'assistant.tool.delete_todo': 'Smazat úkol',
|
||||
'assistant.tool.delete_budget_item': 'Smazat výdaj',
|
||||
'assistant.tool.update_reservation': 'Změnit rezervaci',
|
||||
'assistant.tool.delete_reservation': 'Smazat rezervaci',
|
||||
'assistant.tool.create_accommodation': 'Přidat ubytování',
|
||||
'assistant.tool.create_transport': 'Přidat dopravu',
|
||||
'assistant.tool.toggle_vacay_entry': 'Nastavit den dovolené',
|
||||
'assistant.tool.mark_country_visited': 'Označit zemi jako navštívenou',
|
||||
'assistant.tool.send_collab_message': 'Poslat do chatu cesty',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -414,5 +414,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Dateien',
|
||||
'assistant.domain.account': 'Konto',
|
||||
'assistant.domain.plugins': 'Erweiterungen',
|
||||
'assistant.change.label.order': 'Reihenfolge',
|
||||
'assistant.tool.reorder_day_assignments': 'Tag umsortieren',
|
||||
'assistant.tool.update_assignment_time': 'Uhrzeit ändern',
|
||||
'assistant.tool.update_assignment_notes': 'Notiz am Tag ändern',
|
||||
'assistant.tool.set_leg_transport_mode': 'Anreise ändern',
|
||||
'assistant.tool.set_assignment_end_day': 'Letzten Tag ändern',
|
||||
'assistant.tool.clear_day_assignments': 'Tag leeren',
|
||||
'assistant.tool.set_assignment_participants': 'Teilnehmende ändern',
|
||||
'assistant.tool.create_day': 'Tag hinzufügen',
|
||||
'assistant.tool.update_day': 'Tag ändern',
|
||||
'assistant.tool.delete_day': 'Tag löschen',
|
||||
'assistant.tool.reorder_days': 'Tage umsortieren',
|
||||
'assistant.tool.delete_place': 'Ort löschen',
|
||||
'assistant.tool.rate_place': 'Ort bewerten',
|
||||
'assistant.tool.bulk_update_places': 'Mehrere Orte ändern',
|
||||
'assistant.tool.delete_day_note': 'Notiz löschen',
|
||||
'assistant.tool.toggle_packing_item': 'Abhaken',
|
||||
'assistant.tool.delete_packing_item': 'Von der Packliste entfernen',
|
||||
'assistant.tool.update_todo': 'Aufgabe ändern',
|
||||
'assistant.tool.toggle_todo': 'Aufgabe abhaken',
|
||||
'assistant.tool.delete_todo': 'Aufgabe löschen',
|
||||
'assistant.tool.delete_budget_item': 'Ausgabe löschen',
|
||||
'assistant.tool.update_reservation': 'Buchung ändern',
|
||||
'assistant.tool.delete_reservation': 'Buchung löschen',
|
||||
'assistant.tool.create_accommodation': 'Unterkunft hinzufügen',
|
||||
'assistant.tool.create_transport': 'Verbindung hinzufügen',
|
||||
'assistant.tool.toggle_vacay_entry': 'Urlaubstag setzen',
|
||||
'assistant.tool.mark_country_visited': 'Land als besucht markieren',
|
||||
'assistant.tool.send_collab_message': 'In den Trip-Chat senden',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -409,5 +409,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Files',
|
||||
'assistant.domain.account': 'Account',
|
||||
'assistant.domain.plugins': 'Plugins',
|
||||
'assistant.change.label.order': 'Order',
|
||||
'assistant.tool.reorder_day_assignments': 'Reorder the day',
|
||||
'assistant.tool.update_assignment_time': 'Change the time',
|
||||
'assistant.tool.update_assignment_notes': 'Change the note on the day',
|
||||
'assistant.tool.set_leg_transport_mode': 'Change how to get there',
|
||||
'assistant.tool.set_assignment_end_day': 'Change the last day',
|
||||
'assistant.tool.clear_day_assignments': 'Clear the day',
|
||||
'assistant.tool.set_assignment_participants': 'Change who joins',
|
||||
'assistant.tool.create_day': 'Add a day',
|
||||
'assistant.tool.update_day': 'Change the day',
|
||||
'assistant.tool.delete_day': 'Delete the day',
|
||||
'assistant.tool.reorder_days': 'Reorder the days',
|
||||
'assistant.tool.delete_place': 'Delete the place',
|
||||
'assistant.tool.rate_place': 'Rate the place',
|
||||
'assistant.tool.bulk_update_places': 'Change several places',
|
||||
'assistant.tool.delete_day_note': 'Delete the note',
|
||||
'assistant.tool.toggle_packing_item': 'Tick off',
|
||||
'assistant.tool.delete_packing_item': 'Remove from the packing list',
|
||||
'assistant.tool.update_todo': 'Change the to-do',
|
||||
'assistant.tool.toggle_todo': 'Tick off the to-do',
|
||||
'assistant.tool.delete_todo': 'Delete the to-do',
|
||||
'assistant.tool.delete_budget_item': 'Delete the expense',
|
||||
'assistant.tool.update_reservation': 'Change the booking',
|
||||
'assistant.tool.delete_reservation': 'Delete the booking',
|
||||
'assistant.tool.create_accommodation': 'Add accommodation',
|
||||
'assistant.tool.create_transport': 'Add transport',
|
||||
'assistant.tool.toggle_vacay_entry': 'Set a vacation day',
|
||||
'assistant.tool.mark_country_visited': 'Mark the country as visited',
|
||||
'assistant.tool.send_collab_message': 'Send to the trip chat',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -412,5 +412,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Archivos',
|
||||
'assistant.domain.account': 'Cuenta',
|
||||
'assistant.domain.plugins': 'Complementos',
|
||||
'assistant.change.label.order': 'Orden',
|
||||
'assistant.tool.reorder_day_assignments': 'Reordenar el día',
|
||||
'assistant.tool.update_assignment_time': 'Cambiar la hora',
|
||||
'assistant.tool.update_assignment_notes': 'Cambiar la nota del día',
|
||||
'assistant.tool.set_leg_transport_mode': 'Cambiar cómo llegar',
|
||||
'assistant.tool.set_assignment_end_day': 'Cambiar el último día',
|
||||
'assistant.tool.clear_day_assignments': 'Vaciar el día',
|
||||
'assistant.tool.set_assignment_participants': 'Cambiar quién va',
|
||||
'assistant.tool.create_day': 'Añadir un día',
|
||||
'assistant.tool.update_day': 'Cambiar el día',
|
||||
'assistant.tool.delete_day': 'Eliminar el día',
|
||||
'assistant.tool.reorder_days': 'Reordenar los días',
|
||||
'assistant.tool.delete_place': 'Eliminar el lugar',
|
||||
'assistant.tool.rate_place': 'Valorar el lugar',
|
||||
'assistant.tool.bulk_update_places': 'Cambiar varios lugares',
|
||||
'assistant.tool.delete_day_note': 'Eliminar la nota',
|
||||
'assistant.tool.toggle_packing_item': 'Marcar',
|
||||
'assistant.tool.delete_packing_item': 'Quitar de la lista de equipaje',
|
||||
'assistant.tool.update_todo': 'Cambiar la tarea',
|
||||
'assistant.tool.toggle_todo': 'Marcar la tarea',
|
||||
'assistant.tool.delete_todo': 'Eliminar la tarea',
|
||||
'assistant.tool.delete_budget_item': 'Eliminar el gasto',
|
||||
'assistant.tool.update_reservation': 'Cambiar la reserva',
|
||||
'assistant.tool.delete_reservation': 'Eliminar la reserva',
|
||||
'assistant.tool.create_accommodation': 'Añadir alojamiento',
|
||||
'assistant.tool.create_transport': 'Añadir transporte',
|
||||
'assistant.tool.toggle_vacay_entry': 'Marcar un día de vacaciones',
|
||||
'assistant.tool.mark_country_visited': 'Marcar el país como visitado',
|
||||
'assistant.tool.send_collab_message': 'Enviar al chat del viaje',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -413,5 +413,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Failid',
|
||||
'assistant.domain.account': 'Konto',
|
||||
'assistant.domain.plugins': 'Laiendused',
|
||||
'assistant.change.label.order': 'Järjestus',
|
||||
'assistant.tool.reorder_day_assignments': 'Muuda päeva järjestust',
|
||||
'assistant.tool.update_assignment_time': 'Muuda aega',
|
||||
'assistant.tool.update_assignment_notes': 'Muuda päeva märkust',
|
||||
'assistant.tool.set_leg_transport_mode': 'Muuda kohalesaamist',
|
||||
'assistant.tool.set_assignment_end_day': 'Muuda viimast päeva',
|
||||
'assistant.tool.clear_day_assignments': 'Tühjenda päev',
|
||||
'assistant.tool.set_assignment_participants': 'Muuda osalejaid',
|
||||
'assistant.tool.create_day': 'Lisa päev',
|
||||
'assistant.tool.update_day': 'Muuda päeva',
|
||||
'assistant.tool.delete_day': 'Kustuta päev',
|
||||
'assistant.tool.reorder_days': 'Muuda päevade järjestust',
|
||||
'assistant.tool.delete_place': 'Kustuta koht',
|
||||
'assistant.tool.rate_place': 'Hinda kohta',
|
||||
'assistant.tool.bulk_update_places': 'Muuda mitut kohta',
|
||||
'assistant.tool.delete_day_note': 'Kustuta märkus',
|
||||
'assistant.tool.toggle_packing_item': 'Märgi tehtuks',
|
||||
'assistant.tool.delete_packing_item': 'Eemalda pakkimisnimekirjast',
|
||||
'assistant.tool.update_todo': 'Muuda ülesannet',
|
||||
'assistant.tool.toggle_todo': 'Märgi ülesanne tehtuks',
|
||||
'assistant.tool.delete_todo': 'Kustuta ülesanne',
|
||||
'assistant.tool.delete_budget_item': 'Kustuta kulu',
|
||||
'assistant.tool.update_reservation': 'Muuda broneeringut',
|
||||
'assistant.tool.delete_reservation': 'Kustuta broneering',
|
||||
'assistant.tool.create_accommodation': 'Lisa majutus',
|
||||
'assistant.tool.create_transport': 'Lisa transport',
|
||||
'assistant.tool.toggle_vacay_entry': 'Määra puhkusepäev',
|
||||
'assistant.tool.mark_country_visited': 'Märgi riik külastatuks',
|
||||
'assistant.tool.send_collab_message': 'Saada reisivestlusesse',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -419,5 +419,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Fichiers',
|
||||
'assistant.domain.account': 'Compte',
|
||||
'assistant.domain.plugins': 'Extensions',
|
||||
'assistant.change.label.order': 'Ordre',
|
||||
'assistant.tool.reorder_day_assignments': 'Réordonner la journée',
|
||||
'assistant.tool.update_assignment_time': 'Changer l’heure',
|
||||
'assistant.tool.update_assignment_notes': 'Changer la note du jour',
|
||||
'assistant.tool.set_leg_transport_mode': 'Changer le moyen d’y aller',
|
||||
'assistant.tool.set_assignment_end_day': 'Changer le dernier jour',
|
||||
'assistant.tool.clear_day_assignments': 'Vider la journée',
|
||||
'assistant.tool.set_assignment_participants': 'Changer les participants',
|
||||
'assistant.tool.create_day': 'Ajouter un jour',
|
||||
'assistant.tool.update_day': 'Modifier le jour',
|
||||
'assistant.tool.delete_day': 'Supprimer le jour',
|
||||
'assistant.tool.reorder_days': 'Réordonner les jours',
|
||||
'assistant.tool.delete_place': 'Supprimer le lieu',
|
||||
'assistant.tool.rate_place': 'Noter le lieu',
|
||||
'assistant.tool.bulk_update_places': 'Modifier plusieurs lieux',
|
||||
'assistant.tool.delete_day_note': 'Supprimer la note',
|
||||
'assistant.tool.toggle_packing_item': 'Cocher',
|
||||
'assistant.tool.delete_packing_item': 'Retirer de la liste de bagages',
|
||||
'assistant.tool.update_todo': 'Modifier la tâche',
|
||||
'assistant.tool.toggle_todo': 'Cocher la tâche',
|
||||
'assistant.tool.delete_todo': 'Supprimer la tâche',
|
||||
'assistant.tool.delete_budget_item': 'Supprimer la dépense',
|
||||
'assistant.tool.update_reservation': 'Modifier la réservation',
|
||||
'assistant.tool.delete_reservation': 'Supprimer la réservation',
|
||||
'assistant.tool.create_accommodation': 'Ajouter un hébergement',
|
||||
'assistant.tool.create_transport': 'Ajouter un transport',
|
||||
'assistant.tool.toggle_vacay_entry': 'Poser un jour de congé',
|
||||
'assistant.tool.mark_country_visited': 'Marquer le pays comme visité',
|
||||
'assistant.tool.send_collab_message': 'Envoyer dans la discussion du voyage',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -418,5 +418,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Αρχεία',
|
||||
'assistant.domain.account': 'Λογαριασμός',
|
||||
'assistant.domain.plugins': 'Πρόσθετα',
|
||||
'assistant.change.label.order': 'Σειρά',
|
||||
'assistant.tool.reorder_day_assignments': 'Αναδιάταξη της ημέρας',
|
||||
'assistant.tool.update_assignment_time': 'Αλλαγή ώρας',
|
||||
'assistant.tool.update_assignment_notes': 'Αλλαγή σημείωσης ημέρας',
|
||||
'assistant.tool.set_leg_transport_mode': 'Αλλαγή τρόπου μετάβασης',
|
||||
'assistant.tool.set_assignment_end_day': 'Αλλαγή τελευταίας ημέρας',
|
||||
'assistant.tool.clear_day_assignments': 'Άδειασμα της ημέρας',
|
||||
'assistant.tool.set_assignment_participants': 'Αλλαγή συμμετεχόντων',
|
||||
'assistant.tool.create_day': 'Προσθήκη ημέρας',
|
||||
'assistant.tool.update_day': 'Αλλαγή ημέρας',
|
||||
'assistant.tool.delete_day': 'Διαγραφή ημέρας',
|
||||
'assistant.tool.reorder_days': 'Αναδιάταξη ημερών',
|
||||
'assistant.tool.delete_place': 'Διαγραφή τοποθεσίας',
|
||||
'assistant.tool.rate_place': 'Βαθμολόγηση τοποθεσίας',
|
||||
'assistant.tool.bulk_update_places': 'Αλλαγή πολλών τοποθεσιών',
|
||||
'assistant.tool.delete_day_note': 'Διαγραφή σημείωσης',
|
||||
'assistant.tool.toggle_packing_item': 'Τσεκάρισμα',
|
||||
'assistant.tool.delete_packing_item': 'Αφαίρεση από τη λίστα αποσκευών',
|
||||
'assistant.tool.update_todo': 'Αλλαγή εργασίας',
|
||||
'assistant.tool.toggle_todo': 'Τσεκάρισμα εργασίας',
|
||||
'assistant.tool.delete_todo': 'Διαγραφή εργασίας',
|
||||
'assistant.tool.delete_budget_item': 'Διαγραφή εξόδου',
|
||||
'assistant.tool.update_reservation': 'Αλλαγή κράτησης',
|
||||
'assistant.tool.delete_reservation': 'Διαγραφή κράτησης',
|
||||
'assistant.tool.create_accommodation': 'Προσθήκη καταλύματος',
|
||||
'assistant.tool.create_transport': 'Προσθήκη μεταφοράς',
|
||||
'assistant.tool.toggle_vacay_entry': 'Ορισμός ημέρας άδειας',
|
||||
'assistant.tool.mark_country_visited': 'Σήμανση χώρας ως επισκεφθείσας',
|
||||
'assistant.tool.send_collab_message': 'Αποστολή στη συνομιλία ταξιδιού',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -419,5 +419,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Fájlok',
|
||||
'assistant.domain.account': 'Fiók',
|
||||
'assistant.domain.plugins': 'Bővítmények',
|
||||
'assistant.change.label.order': 'Sorrend',
|
||||
'assistant.tool.reorder_day_assignments': 'Nap átrendezése',
|
||||
'assistant.tool.update_assignment_time': 'Időpont módosítása',
|
||||
'assistant.tool.update_assignment_notes': 'Napi megjegyzés módosítása',
|
||||
'assistant.tool.set_leg_transport_mode': 'Odajutás módosítása',
|
||||
'assistant.tool.set_assignment_end_day': 'Utolsó nap módosítása',
|
||||
'assistant.tool.clear_day_assignments': 'Nap kiürítése',
|
||||
'assistant.tool.set_assignment_participants': 'Résztvevők módosítása',
|
||||
'assistant.tool.create_day': 'Nap hozzáadása',
|
||||
'assistant.tool.update_day': 'Nap módosítása',
|
||||
'assistant.tool.delete_day': 'Nap törlése',
|
||||
'assistant.tool.reorder_days': 'Napok átrendezése',
|
||||
'assistant.tool.delete_place': 'Hely törlése',
|
||||
'assistant.tool.rate_place': 'Hely értékelése',
|
||||
'assistant.tool.bulk_update_places': 'Több hely módosítása',
|
||||
'assistant.tool.delete_day_note': 'Megjegyzés törlése',
|
||||
'assistant.tool.toggle_packing_item': 'Kipipálás',
|
||||
'assistant.tool.delete_packing_item': 'Eltávolítás a csomaglistáról',
|
||||
'assistant.tool.update_todo': 'Feladat módosítása',
|
||||
'assistant.tool.toggle_todo': 'Feladat kipipálása',
|
||||
'assistant.tool.delete_todo': 'Feladat törlése',
|
||||
'assistant.tool.delete_budget_item': 'Kiadás törlése',
|
||||
'assistant.tool.update_reservation': 'Foglalás módosítása',
|
||||
'assistant.tool.delete_reservation': 'Foglalás törlése',
|
||||
'assistant.tool.create_accommodation': 'Szállás hozzáadása',
|
||||
'assistant.tool.create_transport': 'Közlekedés hozzáadása',
|
||||
'assistant.tool.toggle_vacay_entry': 'Szabadnap beállítása',
|
||||
'assistant.tool.mark_country_visited': 'Ország megjelölése meglátogatottként',
|
||||
'assistant.tool.send_collab_message': 'Küldés az utazási csevegésbe',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -391,5 +391,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Berkas',
|
||||
'assistant.domain.account': 'Akun',
|
||||
'assistant.domain.plugins': 'Ekstensi',
|
||||
'assistant.change.label.order': 'Urutan',
|
||||
'assistant.tool.reorder_day_assignments': 'Atur ulang hari',
|
||||
'assistant.tool.update_assignment_time': 'Ubah waktu',
|
||||
'assistant.tool.update_assignment_notes': 'Ubah catatan hari',
|
||||
'assistant.tool.set_leg_transport_mode': 'Ubah cara ke sana',
|
||||
'assistant.tool.set_assignment_end_day': 'Ubah hari terakhir',
|
||||
'assistant.tool.clear_day_assignments': 'Kosongkan hari',
|
||||
'assistant.tool.set_assignment_participants': 'Ubah peserta',
|
||||
'assistant.tool.create_day': 'Tambah hari',
|
||||
'assistant.tool.update_day': 'Ubah hari',
|
||||
'assistant.tool.delete_day': 'Hapus hari',
|
||||
'assistant.tool.reorder_days': 'Atur ulang hari-hari',
|
||||
'assistant.tool.delete_place': 'Hapus tempat',
|
||||
'assistant.tool.rate_place': 'Beri nilai tempat',
|
||||
'assistant.tool.bulk_update_places': 'Ubah beberapa tempat',
|
||||
'assistant.tool.delete_day_note': 'Hapus catatan',
|
||||
'assistant.tool.toggle_packing_item': 'Centang',
|
||||
'assistant.tool.delete_packing_item': 'Hapus dari daftar bawaan',
|
||||
'assistant.tool.update_todo': 'Ubah tugas',
|
||||
'assistant.tool.toggle_todo': 'Centang tugas',
|
||||
'assistant.tool.delete_todo': 'Hapus tugas',
|
||||
'assistant.tool.delete_budget_item': 'Hapus pengeluaran',
|
||||
'assistant.tool.update_reservation': 'Ubah pemesanan',
|
||||
'assistant.tool.delete_reservation': 'Hapus pemesanan',
|
||||
'assistant.tool.create_accommodation': 'Tambah penginapan',
|
||||
'assistant.tool.create_transport': 'Tambah transportasi',
|
||||
'assistant.tool.toggle_vacay_entry': 'Tetapkan hari cuti',
|
||||
'assistant.tool.mark_country_visited': 'Tandai negara sebagai dikunjungi',
|
||||
'assistant.tool.send_collab_message': 'Kirim ke obrolan perjalanan',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -420,5 +420,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'File',
|
||||
'assistant.domain.account': 'Account', // same-as-en
|
||||
'assistant.domain.plugins': 'Estensioni',
|
||||
'assistant.change.label.order': 'Ordine',
|
||||
'assistant.tool.reorder_day_assignments': 'Riordina la giornata',
|
||||
'assistant.tool.update_assignment_time': 'Cambia l’orario',
|
||||
'assistant.tool.update_assignment_notes': 'Cambia la nota del giorno',
|
||||
'assistant.tool.set_leg_transport_mode': 'Cambia come arrivarci',
|
||||
'assistant.tool.set_assignment_end_day': 'Cambia l’ultimo giorno',
|
||||
'assistant.tool.clear_day_assignments': 'Svuota la giornata',
|
||||
'assistant.tool.set_assignment_participants': 'Cambia chi partecipa',
|
||||
'assistant.tool.create_day': 'Aggiungi un giorno',
|
||||
'assistant.tool.update_day': 'Modifica il giorno',
|
||||
'assistant.tool.delete_day': 'Elimina il giorno',
|
||||
'assistant.tool.reorder_days': 'Riordina i giorni',
|
||||
'assistant.tool.delete_place': 'Elimina il luogo',
|
||||
'assistant.tool.rate_place': 'Valuta il luogo',
|
||||
'assistant.tool.bulk_update_places': 'Modifica più luoghi',
|
||||
'assistant.tool.delete_day_note': 'Elimina la nota',
|
||||
'assistant.tool.toggle_packing_item': 'Spunta',
|
||||
'assistant.tool.delete_packing_item': 'Togli dalla lista bagagli',
|
||||
'assistant.tool.update_todo': 'Modifica l’attività',
|
||||
'assistant.tool.toggle_todo': 'Spunta l’attività',
|
||||
'assistant.tool.delete_todo': 'Elimina l’attività',
|
||||
'assistant.tool.delete_budget_item': 'Elimina la spesa',
|
||||
'assistant.tool.update_reservation': 'Modifica la prenotazione',
|
||||
'assistant.tool.delete_reservation': 'Elimina la prenotazione',
|
||||
'assistant.tool.create_accommodation': 'Aggiungi alloggio',
|
||||
'assistant.tool.create_transport': 'Aggiungi trasporto',
|
||||
'assistant.tool.toggle_vacay_entry': 'Segna un giorno di ferie',
|
||||
'assistant.tool.mark_country_visited': 'Segna il paese come visitato',
|
||||
'assistant.tool.send_collab_message': 'Invia nella chat del viaggio',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -386,5 +386,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'ファイル',
|
||||
'assistant.domain.account': 'アカウント',
|
||||
'assistant.domain.plugins': 'プラグイン',
|
||||
'assistant.change.label.order': '順番',
|
||||
'assistant.tool.reorder_day_assignments': '日の順番を変更',
|
||||
'assistant.tool.update_assignment_time': '時間を変更',
|
||||
'assistant.tool.update_assignment_notes': '日のメモを変更',
|
||||
'assistant.tool.set_leg_transport_mode': '移動手段を変更',
|
||||
'assistant.tool.set_assignment_end_day': '最終日を変更',
|
||||
'assistant.tool.clear_day_assignments': '日を空にする',
|
||||
'assistant.tool.set_assignment_participants': '参加者を変更',
|
||||
'assistant.tool.create_day': '日を追加',
|
||||
'assistant.tool.update_day': '日を変更',
|
||||
'assistant.tool.delete_day': '日を削除',
|
||||
'assistant.tool.reorder_days': '日の順番を変更する',
|
||||
'assistant.tool.delete_place': '場所を削除',
|
||||
'assistant.tool.rate_place': '場所を評価',
|
||||
'assistant.tool.bulk_update_places': '複数の場所を変更',
|
||||
'assistant.tool.delete_day_note': 'メモを削除',
|
||||
'assistant.tool.toggle_packing_item': 'チェックする',
|
||||
'assistant.tool.delete_packing_item': '持ち物リストから外す',
|
||||
'assistant.tool.update_todo': 'タスクを変更',
|
||||
'assistant.tool.toggle_todo': 'タスクをチェック',
|
||||
'assistant.tool.delete_todo': 'タスクを削除',
|
||||
'assistant.tool.delete_budget_item': '支出を削除',
|
||||
'assistant.tool.update_reservation': '予約を変更',
|
||||
'assistant.tool.delete_reservation': '予約を削除',
|
||||
'assistant.tool.create_accommodation': '宿泊先を追加',
|
||||
'assistant.tool.create_transport': '交通手段を追加',
|
||||
'assistant.tool.toggle_vacay_entry': '休暇日を設定',
|
||||
'assistant.tool.mark_country_visited': '国を訪問済みにする',
|
||||
'assistant.tool.send_collab_message': '旅行チャットに送信',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -383,5 +383,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': '파일',
|
||||
'assistant.domain.account': '계정',
|
||||
'assistant.domain.plugins': '플러그인',
|
||||
'assistant.change.label.order': '순서',
|
||||
'assistant.tool.reorder_day_assignments': '일정 순서 변경',
|
||||
'assistant.tool.update_assignment_time': '시간 변경',
|
||||
'assistant.tool.update_assignment_notes': '일정 메모 변경',
|
||||
'assistant.tool.set_leg_transport_mode': '이동 방법 변경',
|
||||
'assistant.tool.set_assignment_end_day': '마지막 날 변경',
|
||||
'assistant.tool.clear_day_assignments': '일정 비우기',
|
||||
'assistant.tool.set_assignment_participants': '참여자 변경',
|
||||
'assistant.tool.create_day': '날짜 추가',
|
||||
'assistant.tool.update_day': '날짜 변경',
|
||||
'assistant.tool.delete_day': '날짜 삭제',
|
||||
'assistant.tool.reorder_days': '날짜 순서 변경',
|
||||
'assistant.tool.delete_place': '장소 삭제',
|
||||
'assistant.tool.rate_place': '장소 평가',
|
||||
'assistant.tool.bulk_update_places': '여러 장소 변경',
|
||||
'assistant.tool.delete_day_note': '메모 삭제',
|
||||
'assistant.tool.toggle_packing_item': '체크',
|
||||
'assistant.tool.delete_packing_item': '짐 목록에서 제거',
|
||||
'assistant.tool.update_todo': '할 일 변경',
|
||||
'assistant.tool.toggle_todo': '할 일 체크',
|
||||
'assistant.tool.delete_todo': '할 일 삭제',
|
||||
'assistant.tool.delete_budget_item': '지출 삭제',
|
||||
'assistant.tool.update_reservation': '예약 변경',
|
||||
'assistant.tool.delete_reservation': '예약 삭제',
|
||||
'assistant.tool.create_accommodation': '숙소 추가',
|
||||
'assistant.tool.create_transport': '교통편 추가',
|
||||
'assistant.tool.toggle_vacay_entry': '휴가일 지정',
|
||||
'assistant.tool.mark_country_visited': '국가를 방문함으로 표시',
|
||||
'assistant.tool.send_collab_message': '여행 채팅으로 보내기',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -415,5 +415,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Bestanden',
|
||||
'assistant.domain.account': 'Account', // same-as-en
|
||||
'assistant.domain.plugins': 'Uitbreidingen',
|
||||
'assistant.change.label.order': 'Volgorde',
|
||||
'assistant.tool.reorder_day_assignments': 'Dag herordenen',
|
||||
'assistant.tool.update_assignment_time': 'Tijd wijzigen',
|
||||
'assistant.tool.update_assignment_notes': 'Notitie bij de dag wijzigen',
|
||||
'assistant.tool.set_leg_transport_mode': 'Vervoer wijzigen',
|
||||
'assistant.tool.set_assignment_end_day': 'Laatste dag wijzigen',
|
||||
'assistant.tool.clear_day_assignments': 'Dag leegmaken',
|
||||
'assistant.tool.set_assignment_participants': 'Deelnemers wijzigen',
|
||||
'assistant.tool.create_day': 'Dag toevoegen',
|
||||
'assistant.tool.update_day': 'Dag wijzigen',
|
||||
'assistant.tool.delete_day': 'Dag verwijderen',
|
||||
'assistant.tool.reorder_days': 'Dagen herordenen',
|
||||
'assistant.tool.delete_place': 'Plaats verwijderen',
|
||||
'assistant.tool.rate_place': 'Plaats beoordelen',
|
||||
'assistant.tool.bulk_update_places': 'Meerdere plaatsen wijzigen',
|
||||
'assistant.tool.delete_day_note': 'Notitie verwijderen',
|
||||
'assistant.tool.toggle_packing_item': 'Afvinken',
|
||||
'assistant.tool.delete_packing_item': 'Van de paklijst halen',
|
||||
'assistant.tool.update_todo': 'Taak wijzigen',
|
||||
'assistant.tool.toggle_todo': 'Taak afvinken',
|
||||
'assistant.tool.delete_todo': 'Taak verwijderen',
|
||||
'assistant.tool.delete_budget_item': 'Uitgave verwijderen',
|
||||
'assistant.tool.update_reservation': 'Boeking wijzigen',
|
||||
'assistant.tool.delete_reservation': 'Boeking verwijderen',
|
||||
'assistant.tool.create_accommodation': 'Verblijf toevoegen',
|
||||
'assistant.tool.create_transport': 'Vervoer toevoegen',
|
||||
'assistant.tool.toggle_vacay_entry': 'Vakantiedag instellen',
|
||||
'assistant.tool.mark_country_visited': 'Land als bezocht markeren',
|
||||
'assistant.tool.send_collab_message': 'Naar de reischat sturen',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -463,5 +463,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Pliki',
|
||||
'assistant.domain.account': 'Konto',
|
||||
'assistant.domain.plugins': 'Rozszerzenia',
|
||||
'assistant.change.label.order': 'Kolejność',
|
||||
'assistant.tool.reorder_day_assignments': 'Zmień kolejność dnia',
|
||||
'assistant.tool.update_assignment_time': 'Zmień godzinę',
|
||||
'assistant.tool.update_assignment_notes': 'Zmień notatkę dnia',
|
||||
'assistant.tool.set_leg_transport_mode': 'Zmień sposób dojazdu',
|
||||
'assistant.tool.set_assignment_end_day': 'Zmień ostatni dzień',
|
||||
'assistant.tool.clear_day_assignments': 'Wyczyść dzień',
|
||||
'assistant.tool.set_assignment_participants': 'Zmień uczestników',
|
||||
'assistant.tool.create_day': 'Dodaj dzień',
|
||||
'assistant.tool.update_day': 'Zmień dzień',
|
||||
'assistant.tool.delete_day': 'Usuń dzień',
|
||||
'assistant.tool.reorder_days': 'Zmień kolejność dni',
|
||||
'assistant.tool.delete_place': 'Usuń miejsce',
|
||||
'assistant.tool.rate_place': 'Oceń miejsce',
|
||||
'assistant.tool.bulk_update_places': 'Zmień kilka miejsc',
|
||||
'assistant.tool.delete_day_note': 'Usuń notatkę',
|
||||
'assistant.tool.toggle_packing_item': 'Odhacz',
|
||||
'assistant.tool.delete_packing_item': 'Usuń z listy pakowania',
|
||||
'assistant.tool.update_todo': 'Zmień zadanie',
|
||||
'assistant.tool.toggle_todo': 'Odhacz zadanie',
|
||||
'assistant.tool.delete_todo': 'Usuń zadanie',
|
||||
'assistant.tool.delete_budget_item': 'Usuń wydatek',
|
||||
'assistant.tool.update_reservation': 'Zmień rezerwację',
|
||||
'assistant.tool.delete_reservation': 'Usuń rezerwację',
|
||||
'assistant.tool.create_accommodation': 'Dodaj nocleg',
|
||||
'assistant.tool.create_transport': 'Dodaj transport',
|
||||
'assistant.tool.toggle_vacay_entry': 'Ustaw dzień urlopu',
|
||||
'assistant.tool.mark_country_visited': 'Oznacz kraj jako odwiedzony',
|
||||
'assistant.tool.send_collab_message': 'Wyślij na czat podróży',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -463,5 +463,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Файлы',
|
||||
'assistant.domain.account': 'Аккаунт',
|
||||
'assistant.domain.plugins': 'Плагины',
|
||||
'assistant.change.label.order': 'Порядок',
|
||||
'assistant.tool.reorder_day_assignments': 'Изменить порядок дня',
|
||||
'assistant.tool.update_assignment_time': 'Изменить время',
|
||||
'assistant.tool.update_assignment_notes': 'Изменить заметку дня',
|
||||
'assistant.tool.set_leg_transport_mode': 'Изменить способ добраться',
|
||||
'assistant.tool.set_assignment_end_day': 'Изменить последний день',
|
||||
'assistant.tool.clear_day_assignments': 'Очистить день',
|
||||
'assistant.tool.set_assignment_participants': 'Изменить участников',
|
||||
'assistant.tool.create_day': 'Добавить день',
|
||||
'assistant.tool.update_day': 'Изменить день',
|
||||
'assistant.tool.delete_day': 'Удалить день',
|
||||
'assistant.tool.reorder_days': 'Изменить порядок дней',
|
||||
'assistant.tool.delete_place': 'Удалить место',
|
||||
'assistant.tool.rate_place': 'Оценить место',
|
||||
'assistant.tool.bulk_update_places': 'Изменить несколько мест',
|
||||
'assistant.tool.delete_day_note': 'Удалить заметку',
|
||||
'assistant.tool.toggle_packing_item': 'Отметить',
|
||||
'assistant.tool.delete_packing_item': 'Убрать из списка вещей',
|
||||
'assistant.tool.update_todo': 'Изменить задачу',
|
||||
'assistant.tool.toggle_todo': 'Отметить задачу',
|
||||
'assistant.tool.delete_todo': 'Удалить задачу',
|
||||
'assistant.tool.delete_budget_item': 'Удалить расход',
|
||||
'assistant.tool.update_reservation': 'Изменить бронирование',
|
||||
'assistant.tool.delete_reservation': 'Удалить бронирование',
|
||||
'assistant.tool.create_accommodation': 'Добавить жильё',
|
||||
'assistant.tool.create_transport': 'Добавить транспорт',
|
||||
'assistant.tool.toggle_vacay_entry': 'Отметить день отпуска',
|
||||
'assistant.tool.mark_country_visited': 'Отметить страну как посещённую',
|
||||
'assistant.tool.send_collab_message': 'Отправить в чат поездки',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -436,5 +436,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Súbory',
|
||||
'assistant.domain.account': 'Účet',
|
||||
'assistant.domain.plugins': 'Rozšírenia',
|
||||
'assistant.change.label.order': 'Poradie',
|
||||
'assistant.tool.reorder_day_assignments': 'Preusporiadať deň',
|
||||
'assistant.tool.update_assignment_time': 'Zmeniť čas',
|
||||
'assistant.tool.update_assignment_notes': 'Zmeniť poznámku k dňu',
|
||||
'assistant.tool.set_leg_transport_mode': 'Zmeniť spôsob cesty',
|
||||
'assistant.tool.set_assignment_end_day': 'Zmeniť posledný deň',
|
||||
'assistant.tool.clear_day_assignments': 'Vyprázdniť deň',
|
||||
'assistant.tool.set_assignment_participants': 'Zmeniť účastníkov',
|
||||
'assistant.tool.create_day': 'Pridať deň',
|
||||
'assistant.tool.update_day': 'Zmeniť deň',
|
||||
'assistant.tool.delete_day': 'Odstrániť deň',
|
||||
'assistant.tool.reorder_days': 'Preusporiadať dni',
|
||||
'assistant.tool.delete_place': 'Odstrániť miesto',
|
||||
'assistant.tool.rate_place': 'Ohodnotiť miesto',
|
||||
'assistant.tool.bulk_update_places': 'Zmeniť viac miest',
|
||||
'assistant.tool.delete_day_note': 'Odstrániť poznámku',
|
||||
'assistant.tool.toggle_packing_item': 'Odškrtnúť',
|
||||
'assistant.tool.delete_packing_item': 'Odstrániť zo zoznamu balenia',
|
||||
'assistant.tool.update_todo': 'Zmeniť úlohu',
|
||||
'assistant.tool.toggle_todo': 'Odškrtnúť úlohu',
|
||||
'assistant.tool.delete_todo': 'Odstrániť úlohu',
|
||||
'assistant.tool.delete_budget_item': 'Odstrániť výdavok',
|
||||
'assistant.tool.update_reservation': 'Zmeniť rezerváciu',
|
||||
'assistant.tool.delete_reservation': 'Odstrániť rezerváciu',
|
||||
'assistant.tool.create_accommodation': 'Pridať ubytovanie',
|
||||
'assistant.tool.create_transport': 'Pridať dopravu',
|
||||
'assistant.tool.toggle_vacay_entry': 'Nastaviť deň dovolenky',
|
||||
'assistant.tool.mark_country_visited': 'Označiť krajinu ako navštívenú',
|
||||
'assistant.tool.send_collab_message': 'Poslať do chatu cesty',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -413,5 +413,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Filer',
|
||||
'assistant.domain.account': 'Konto',
|
||||
'assistant.domain.plugins': 'Tillägg',
|
||||
'assistant.change.label.order': 'Ordning',
|
||||
'assistant.tool.reorder_day_assignments': 'Ordna om dagen',
|
||||
'assistant.tool.update_assignment_time': 'Ändra tiden',
|
||||
'assistant.tool.update_assignment_notes': 'Ändra anteckningen på dagen',
|
||||
'assistant.tool.set_leg_transport_mode': 'Ändra hur man tar sig dit',
|
||||
'assistant.tool.set_assignment_end_day': 'Ändra sista dagen',
|
||||
'assistant.tool.clear_day_assignments': 'Töm dagen',
|
||||
'assistant.tool.set_assignment_participants': 'Ändra vilka som följer med',
|
||||
'assistant.tool.create_day': 'Lägg till en dag',
|
||||
'assistant.tool.update_day': 'Ändra dagen',
|
||||
'assistant.tool.delete_day': 'Radera dagen',
|
||||
'assistant.tool.reorder_days': 'Ordna om dagarna',
|
||||
'assistant.tool.delete_place': 'Radera platsen',
|
||||
'assistant.tool.rate_place': 'Betygsätt platsen',
|
||||
'assistant.tool.bulk_update_places': 'Ändra flera platser',
|
||||
'assistant.tool.delete_day_note': 'Radera anteckningen',
|
||||
'assistant.tool.toggle_packing_item': 'Bocka av',
|
||||
'assistant.tool.delete_packing_item': 'Ta bort från packlistan',
|
||||
'assistant.tool.update_todo': 'Ändra uppgiften',
|
||||
'assistant.tool.toggle_todo': 'Bocka av uppgiften',
|
||||
'assistant.tool.delete_todo': 'Radera uppgiften',
|
||||
'assistant.tool.delete_budget_item': 'Radera utgiften',
|
||||
'assistant.tool.update_reservation': 'Ändra bokningen',
|
||||
'assistant.tool.delete_reservation': 'Radera bokningen',
|
||||
'assistant.tool.create_accommodation': 'Lägg till boende',
|
||||
'assistant.tool.create_transport': 'Lägg till transport',
|
||||
'assistant.tool.toggle_vacay_entry': 'Sätt en semesterdag',
|
||||
'assistant.tool.mark_country_visited': 'Markera landet som besökt',
|
||||
'assistant.tool.send_collab_message': 'Skicka till reschatten',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -383,5 +383,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'ไฟล์',
|
||||
'assistant.domain.account': 'บัญชี',
|
||||
'assistant.domain.plugins': 'ปลั๊กอิน',
|
||||
'assistant.change.label.order': 'ลำดับ',
|
||||
'assistant.tool.reorder_day_assignments': 'จัดลำดับวันใหม่',
|
||||
'assistant.tool.update_assignment_time': 'เปลี่ยนเวลา',
|
||||
'assistant.tool.update_assignment_notes': 'เปลี่ยนโน้ตของวัน',
|
||||
'assistant.tool.set_leg_transport_mode': 'เปลี่ยนวิธีเดินทาง',
|
||||
'assistant.tool.set_assignment_end_day': 'เปลี่ยนวันสุดท้าย',
|
||||
'assistant.tool.clear_day_assignments': 'ล้างวัน',
|
||||
'assistant.tool.set_assignment_participants': 'เปลี่ยนผู้ร่วมทาง',
|
||||
'assistant.tool.create_day': 'เพิ่มวัน',
|
||||
'assistant.tool.update_day': 'เปลี่ยนวัน',
|
||||
'assistant.tool.delete_day': 'ลบวัน',
|
||||
'assistant.tool.reorder_days': 'จัดลำดับวันทั้งหมดใหม่',
|
||||
'assistant.tool.delete_place': 'ลบสถานที่',
|
||||
'assistant.tool.rate_place': 'ให้คะแนนสถานที่',
|
||||
'assistant.tool.bulk_update_places': 'เปลี่ยนหลายสถานที่',
|
||||
'assistant.tool.delete_day_note': 'ลบโน้ต',
|
||||
'assistant.tool.toggle_packing_item': 'ทำเครื่องหมาย',
|
||||
'assistant.tool.delete_packing_item': 'เอาออกจากรายการแพ็กของ',
|
||||
'assistant.tool.update_todo': 'เปลี่ยนงาน',
|
||||
'assistant.tool.toggle_todo': 'ทำเครื่องหมายงาน',
|
||||
'assistant.tool.delete_todo': 'ลบงาน',
|
||||
'assistant.tool.delete_budget_item': 'ลบค่าใช้จ่าย',
|
||||
'assistant.tool.update_reservation': 'เปลี่ยนการจอง',
|
||||
'assistant.tool.delete_reservation': 'ลบการจอง',
|
||||
'assistant.tool.create_accommodation': 'เพิ่มที่พัก',
|
||||
'assistant.tool.create_transport': 'เพิ่มการเดินทาง',
|
||||
'assistant.tool.toggle_vacay_entry': 'กำหนดวันลา',
|
||||
'assistant.tool.mark_country_visited': 'ทำเครื่องหมายว่าเคยไปประเทศนี้',
|
||||
'assistant.tool.send_collab_message': 'ส่งไปยังแชตทริป',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -413,5 +413,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Dosyalar',
|
||||
'assistant.domain.account': 'Hesap',
|
||||
'assistant.domain.plugins': 'Eklentiler',
|
||||
'assistant.change.label.order': 'Sıra',
|
||||
'assistant.tool.reorder_day_assignments': 'Günü yeniden sırala',
|
||||
'assistant.tool.update_assignment_time': 'Saati değiştir',
|
||||
'assistant.tool.update_assignment_notes': 'Günün notunu değiştir',
|
||||
'assistant.tool.set_leg_transport_mode': 'Ulaşımı değiştir',
|
||||
'assistant.tool.set_assignment_end_day': 'Son günü değiştir',
|
||||
'assistant.tool.clear_day_assignments': 'Günü boşalt',
|
||||
'assistant.tool.set_assignment_participants': 'Katılanları değiştir',
|
||||
'assistant.tool.create_day': 'Gün ekle',
|
||||
'assistant.tool.update_day': 'Günü değiştir',
|
||||
'assistant.tool.delete_day': 'Günü sil',
|
||||
'assistant.tool.reorder_days': 'Günleri yeniden sırala',
|
||||
'assistant.tool.delete_place': 'Yeri sil',
|
||||
'assistant.tool.rate_place': 'Yeri puanla',
|
||||
'assistant.tool.bulk_update_places': 'Birkaç yeri değiştir',
|
||||
'assistant.tool.delete_day_note': 'Notu sil',
|
||||
'assistant.tool.toggle_packing_item': 'İşaretle',
|
||||
'assistant.tool.delete_packing_item': 'Bavul listesinden çıkar',
|
||||
'assistant.tool.update_todo': 'Görevi değiştir',
|
||||
'assistant.tool.toggle_todo': 'Görevi işaretle',
|
||||
'assistant.tool.delete_todo': 'Görevi sil',
|
||||
'assistant.tool.delete_budget_item': 'Harcamayı sil',
|
||||
'assistant.tool.update_reservation': 'Rezervasyonu değiştir',
|
||||
'assistant.tool.delete_reservation': 'Rezervasyonu sil',
|
||||
'assistant.tool.create_accommodation': 'Konaklama ekle',
|
||||
'assistant.tool.create_transport': 'Ulaşım ekle',
|
||||
'assistant.tool.toggle_vacay_entry': 'İzin günü belirle',
|
||||
'assistant.tool.mark_country_visited': 'Ülkeyi ziyaret edildi olarak işaretle',
|
||||
'assistant.tool.send_collab_message': 'Gezi sohbetine gönder',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -461,5 +461,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Файли',
|
||||
'assistant.domain.account': 'Обліковий запис',
|
||||
'assistant.domain.plugins': 'Плагіни',
|
||||
'assistant.change.label.order': 'Порядок',
|
||||
'assistant.tool.reorder_day_assignments': 'Змінити порядок дня',
|
||||
'assistant.tool.update_assignment_time': 'Змінити час',
|
||||
'assistant.tool.update_assignment_notes': 'Змінити нотатку дня',
|
||||
'assistant.tool.set_leg_transport_mode': 'Змінити спосіб дістатися',
|
||||
'assistant.tool.set_assignment_end_day': 'Змінити останній день',
|
||||
'assistant.tool.clear_day_assignments': 'Очистити день',
|
||||
'assistant.tool.set_assignment_participants': 'Змінити учасників',
|
||||
'assistant.tool.create_day': 'Додати день',
|
||||
'assistant.tool.update_day': 'Змінити день',
|
||||
'assistant.tool.delete_day': 'Видалити день',
|
||||
'assistant.tool.reorder_days': 'Змінити порядок днів',
|
||||
'assistant.tool.delete_place': 'Видалити місце',
|
||||
'assistant.tool.rate_place': 'Оцінити місце',
|
||||
'assistant.tool.bulk_update_places': 'Змінити кілька місць',
|
||||
'assistant.tool.delete_day_note': 'Видалити нотатку',
|
||||
'assistant.tool.toggle_packing_item': 'Позначити',
|
||||
'assistant.tool.delete_packing_item': 'Прибрати зі списку речей',
|
||||
'assistant.tool.update_todo': 'Змінити завдання',
|
||||
'assistant.tool.toggle_todo': 'Позначити завдання',
|
||||
'assistant.tool.delete_todo': 'Видалити завдання',
|
||||
'assistant.tool.delete_budget_item': 'Видалити витрату',
|
||||
'assistant.tool.update_reservation': 'Змінити бронювання',
|
||||
'assistant.tool.delete_reservation': 'Видалити бронювання',
|
||||
'assistant.tool.create_accommodation': 'Додати житло',
|
||||
'assistant.tool.create_transport': 'Додати транспорт',
|
||||
'assistant.tool.toggle_vacay_entry': 'Позначити день відпустки',
|
||||
'assistant.tool.mark_country_visited': 'Позначити країну як відвідану',
|
||||
'assistant.tool.send_collab_message': 'Надіслати в чат подорожі',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -386,5 +386,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': 'Tệp',
|
||||
'assistant.domain.account': 'Tài khoản',
|
||||
'assistant.domain.plugins': 'Tiện ích',
|
||||
'assistant.change.label.order': 'Thứ tự',
|
||||
'assistant.tool.reorder_day_assignments': 'Sắp xếp lại ngày',
|
||||
'assistant.tool.update_assignment_time': 'Đổi giờ',
|
||||
'assistant.tool.update_assignment_notes': 'Đổi ghi chú của ngày',
|
||||
'assistant.tool.set_leg_transport_mode': 'Đổi cách di chuyển',
|
||||
'assistant.tool.set_assignment_end_day': 'Đổi ngày cuối',
|
||||
'assistant.tool.clear_day_assignments': 'Xóa trống ngày',
|
||||
'assistant.tool.set_assignment_participants': 'Đổi người tham gia',
|
||||
'assistant.tool.create_day': 'Thêm ngày',
|
||||
'assistant.tool.update_day': 'Đổi ngày',
|
||||
'assistant.tool.delete_day': 'Xóa ngày',
|
||||
'assistant.tool.reorder_days': 'Sắp xếp lại các ngày',
|
||||
'assistant.tool.delete_place': 'Xóa địa điểm',
|
||||
'assistant.tool.rate_place': 'Đánh giá địa điểm',
|
||||
'assistant.tool.bulk_update_places': 'Đổi nhiều địa điểm',
|
||||
'assistant.tool.delete_day_note': 'Xóa ghi chú',
|
||||
'assistant.tool.toggle_packing_item': 'Đánh dấu',
|
||||
'assistant.tool.delete_packing_item': 'Bỏ khỏi danh sách hành lý',
|
||||
'assistant.tool.update_todo': 'Đổi việc cần làm',
|
||||
'assistant.tool.toggle_todo': 'Đánh dấu việc cần làm',
|
||||
'assistant.tool.delete_todo': 'Xóa việc cần làm',
|
||||
'assistant.tool.delete_budget_item': 'Xóa khoản chi',
|
||||
'assistant.tool.update_reservation': 'Đổi đặt chỗ',
|
||||
'assistant.tool.delete_reservation': 'Xóa đặt chỗ',
|
||||
'assistant.tool.create_accommodation': 'Thêm chỗ ở',
|
||||
'assistant.tool.create_transport': 'Thêm phương tiện',
|
||||
'assistant.tool.toggle_vacay_entry': 'Đặt ngày nghỉ phép',
|
||||
'assistant.tool.mark_country_visited': 'Đánh dấu quốc gia đã đến',
|
||||
'assistant.tool.send_collab_message': 'Gửi vào trò chuyện chuyến đi',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -380,5 +380,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': '檔案',
|
||||
'assistant.domain.account': '帳戶',
|
||||
'assistant.domain.plugins': '外掛',
|
||||
'assistant.change.label.order': '順序',
|
||||
'assistant.tool.reorder_day_assignments': '調整當天順序',
|
||||
'assistant.tool.update_assignment_time': '變更時間',
|
||||
'assistant.tool.update_assignment_notes': '變更當天備註',
|
||||
'assistant.tool.set_leg_transport_mode': '變更交通方式',
|
||||
'assistant.tool.set_assignment_end_day': '變更最後一天',
|
||||
'assistant.tool.clear_day_assignments': '清空當天',
|
||||
'assistant.tool.set_assignment_participants': '變更同行者',
|
||||
'assistant.tool.create_day': '新增一天',
|
||||
'assistant.tool.update_day': '變更當天',
|
||||
'assistant.tool.delete_day': '刪除這一天',
|
||||
'assistant.tool.reorder_days': '調整天數順序',
|
||||
'assistant.tool.delete_place': '刪除地點',
|
||||
'assistant.tool.rate_place': '評價地點',
|
||||
'assistant.tool.bulk_update_places': '變更多個地點',
|
||||
'assistant.tool.delete_day_note': '刪除備註',
|
||||
'assistant.tool.toggle_packing_item': '勾選',
|
||||
'assistant.tool.delete_packing_item': '從行李清單移除',
|
||||
'assistant.tool.update_todo': '變更待辦',
|
||||
'assistant.tool.toggle_todo': '勾選待辦',
|
||||
'assistant.tool.delete_todo': '刪除待辦',
|
||||
'assistant.tool.delete_budget_item': '刪除支出',
|
||||
'assistant.tool.update_reservation': '變更預訂',
|
||||
'assistant.tool.delete_reservation': '刪除預訂',
|
||||
'assistant.tool.create_accommodation': '新增住宿',
|
||||
'assistant.tool.create_transport': '新增交通',
|
||||
'assistant.tool.toggle_vacay_entry': '設為休假日',
|
||||
'assistant.tool.mark_country_visited': '標記國家為已去過',
|
||||
'assistant.tool.send_collab_message': '傳送到行程聊天',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
@@ -380,5 +380,34 @@ const assistant: TranslationStrings = {
|
||||
'assistant.domain.files': '文件',
|
||||
'assistant.domain.account': '账户',
|
||||
'assistant.domain.plugins': '插件',
|
||||
'assistant.change.label.order': '顺序',
|
||||
'assistant.tool.reorder_day_assignments': '调整当天顺序',
|
||||
'assistant.tool.update_assignment_time': '更改时间',
|
||||
'assistant.tool.update_assignment_notes': '更改当天备注',
|
||||
'assistant.tool.set_leg_transport_mode': '更改交通方式',
|
||||
'assistant.tool.set_assignment_end_day': '更改最后一天',
|
||||
'assistant.tool.clear_day_assignments': '清空当天',
|
||||
'assistant.tool.set_assignment_participants': '更改同行人',
|
||||
'assistant.tool.create_day': '添加一天',
|
||||
'assistant.tool.update_day': '更改当天',
|
||||
'assistant.tool.delete_day': '删除这一天',
|
||||
'assistant.tool.reorder_days': '调整天数顺序',
|
||||
'assistant.tool.delete_place': '删除地点',
|
||||
'assistant.tool.rate_place': '评价地点',
|
||||
'assistant.tool.bulk_update_places': '更改多个地点',
|
||||
'assistant.tool.delete_day_note': '删除备注',
|
||||
'assistant.tool.toggle_packing_item': '勾选',
|
||||
'assistant.tool.delete_packing_item': '从行李清单移除',
|
||||
'assistant.tool.update_todo': '更改待办',
|
||||
'assistant.tool.toggle_todo': '勾选待办',
|
||||
'assistant.tool.delete_todo': '删除待办',
|
||||
'assistant.tool.delete_budget_item': '删除支出',
|
||||
'assistant.tool.update_reservation': '更改预订',
|
||||
'assistant.tool.delete_reservation': '删除预订',
|
||||
'assistant.tool.create_accommodation': '添加住宿',
|
||||
'assistant.tool.create_transport': '添加交通',
|
||||
'assistant.tool.toggle_vacay_entry': '设为休假日',
|
||||
'assistant.tool.mark_country_visited': '标记国家为已去过',
|
||||
'assistant.tool.send_collab_message': '发送到行程聊天',
|
||||
};
|
||||
export default assistant;
|
||||
|
||||
Reference in New Issue
Block a user