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:
Maurice
2026-10-21 22:28:34 +02:00
parent 858c77422c
commit 55c6bad295
47 changed files with 1019 additions and 76 deletions
@@ -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' })
);
});
+3 -1
View File
@@ -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 {
+9 -8
View File
@@ -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);
+3 -1
View File
@@ -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', () => {
+2
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;
+29
View File
@@ -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;