mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-23 15:36:33 +00:00
feat(costs): table view, and the wiki and help center for the new trip page
Costs gets a second view next to the ledger: the expenses as a table grouped by category, with name, date, total, persons and days editable in place and the per person and per day figures worked out beside them. A total with a payer or in a foreign currency stays locked and opens the expense instead, so balances and frozen rates are never changed behind the dialog. In the table view the side column shows a summary by category, day, payer and status. The switch sits in the bar and the choice is remembered; the ledger stays the default. On the Plan tab a place's reservation shows as one Reservation pill whose colour carries the status and which opens the booking, and the drop line of a drag that lost its source row now clears on the next mouse move. The booking detail formats its times in the user's clock, and a hotel without a check-out runs to the end of the last day in the timeline. The wiki pages of the trip are rewritten for the new layout, with new screenshots from the screenshot run (new Plan tab, bookings, transports, dialogs, costs table). The help center guides of the Plan tab are rewritten and translated into every locale, and every new string is translated.
This commit is contained in:
@@ -31,17 +31,29 @@ const dayHeader = (page: Page, n: number) => page.getByRole('button', { name: ne
|
||||
* nor `trek-backdrop-enter`, so `modal()` and `confirmDialog()` never see it;
|
||||
* the card is the second `role="presentation"` and holds the day range.
|
||||
*/
|
||||
const picker = (page: Page) => page.locator('div[role="presentation"]').filter({ hasText: 'Apply to days' }).last()
|
||||
/** The accommodation block: the heading's parent holds the stays and the add button. */
|
||||
const stays = (page: Page) => panel(page).getByText('Accommodation', { exact: true }).locator('xpath=..')
|
||||
/** One booked stay: a card of the list inside that block. */
|
||||
const stayCard = (page: Page, name: string) => stays(page).locator('> div > div').filter({ hasText: name }).first()
|
||||
const picker = (page: Page) => page.getByRole('dialog').filter({ hasText: 'Apply to days' })
|
||||
/** The row of the stay's three times, with Confirmation right under it. */
|
||||
const times = (page: Page) => picker(page).getByPlaceholder('14:00').locator('xpath=ancestor::div[contains(@class,"grid-cols-3")][1]')
|
||||
/**
|
||||
* A block of the panel by its heading. Every block is a <section> whose first
|
||||
* row carries the heading, so the section is the block with everything in it.
|
||||
*/
|
||||
const block = (page: Page, heading: string) =>
|
||||
panel(page).getByText(heading, { exact: true }).locator('xpath=ancestor::section[1]')
|
||||
/** The accommodation block: the stays and the add button. */
|
||||
const stays = (page: Page) => block(page, 'Accommodation')
|
||||
/** One booked stay: an <article> card inside that block. */
|
||||
const stayCard = (page: Page, name: string) => stays(page).locator('article').filter({ hasText: name }).first()
|
||||
/** The caption that opens the weather block. */
|
||||
const forecast = (page: Page) => panel(page).getByText(/^Forecast for /)
|
||||
/** The chips row; the summary above it and the hourly strip below are its siblings. */
|
||||
const chips = (page: Page) => panel(page).locator('svg.lucide-sunrise').locator('xpath=ancestor::div[2]')
|
||||
/** The weather's pills (rain, wind, sunrise, sunset), at the right end of the summary row. */
|
||||
const chips = (page: Page) => panel(page).locator('svg.lucide-sunrise').locator('xpath=ancestor::div[1]')
|
||||
/** The summary row's numbers: the temperature, the low and high, the condition. */
|
||||
const summary = (page: Page) => forecast(page).locator('xpath=following-sibling::div[1]/div[1]')
|
||||
/** The hourly strip under its own heading. */
|
||||
const hourly = (page: Page) => panel(page).getByText('Hourly Forecast', { exact: true }).locator('xpath=..')
|
||||
/** The day's reservations block. */
|
||||
const bookings = (page: Page) => panel(page).getByText('Reservations', { exact: true }).locator('xpath=..')
|
||||
const bookings = (page: Page) => block(page, 'Reservations')
|
||||
/** One booking row: on the desktop a button that opens the booking, named with its title. */
|
||||
const bookingRow = (page: Page, title: string) => panel(page).getByRole('button', { name: title })
|
||||
/** The booking a row opens, named by its title. */
|
||||
@@ -158,9 +170,9 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
},
|
||||
steps: [
|
||||
only(forecast),
|
||||
only(p => chips(p).locator('xpath=preceding-sibling::div[1]')),
|
||||
only(summary),
|
||||
only(chips),
|
||||
only(p => chips(p).locator('xpath=following-sibling::div[1]')),
|
||||
only(hourly),
|
||||
],
|
||||
},
|
||||
'rename-day': {
|
||||
@@ -216,7 +228,8 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await expect(picker(p).getByRole('button', { name: /^Day 7/ })).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
target: p => picker(p).getByText('Apply to days').locator('xpath=..'),
|
||||
// The row of Start, End and All: the All button's parent.
|
||||
target: p => picker(p).getByRole('button', { name: 'All', exact: true }).locator('xpath=..'),
|
||||
},
|
||||
{
|
||||
// The three time fields normalise what is typed; the labels carry no
|
||||
@@ -228,13 +241,14 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await typeInto(p, picker(p).getByPlaceholder('ABC-12345'), 'KNR-8842')
|
||||
await settle(p)
|
||||
},
|
||||
target: p => picker(p).getByPlaceholder('ABC-12345').locator('xpath=ancestor::div[2]'),
|
||||
target: times,
|
||||
},
|
||||
{
|
||||
// "All" is both the whole-trip shortcut and the no-filter chip, so the
|
||||
// category is clicked by its own name.
|
||||
// The category is a pill over the list; its choices open in a list of their own.
|
||||
prepare: async p => {
|
||||
await picker(p).getByRole('button', { name: 'Hotel', exact: true }).click()
|
||||
await picker(p).getByRole('button', { name: /^Category:/ }).click()
|
||||
await p.getByRole('group', { name: 'Category' }).getByRole('button', { name: 'Hotel', exact: true }).click()
|
||||
await expect(p.getByRole('group', { name: 'Category' })).toHaveCount(0)
|
||||
await settle(p)
|
||||
},
|
||||
target: p => picker(p).getByRole('button', { name: new RegExp(`^${KYOTO_HOTEL.name}`) }),
|
||||
@@ -280,7 +294,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await picker(p).getByPlaceholder('ABC-12345').click()
|
||||
await settle(p)
|
||||
},
|
||||
target: p => picker(p).getByPlaceholder('ABC-12345').locator('xpath=ancestor::div[2]'),
|
||||
target: times,
|
||||
},
|
||||
{
|
||||
target: p => picker(p).getByRole('button', { name: 'Save' }),
|
||||
|
||||
@@ -50,6 +50,10 @@ const bookingRow = (page: Page, name: RegExp) => page.getByRole('button', { name
|
||||
const noteRow = (page: Page) => page.getByRole('button', { name: new RegExp(`^${NOTE.title}`) })
|
||||
/** A row of the places column. */
|
||||
const placeRow = (page: Page, name: string) => page.getByRole('option', { name: new RegExp(`^${name}`) }).first()
|
||||
/** The "+ Day" at the end of a places row: it puts the place on the open day. */
|
||||
const toOpenDay = (page: Page, name: string) => placeRow(page, name).getByRole('button', { name: '+ Day' })
|
||||
/** The "+" in a day's head band; the note, the transports and the stay are in the menu it opens. */
|
||||
const addToDay = (page: Page, n: number) => dayHeader(page, n).getByRole('button', { name: 'Add to day' })
|
||||
/**
|
||||
* The context menu of a stop, a note or a leg. Tooltip renders into the same
|
||||
* `.trek-popover-enter` class and a click on a connector leaves its tooltip
|
||||
@@ -70,9 +74,9 @@ const toolbar = (page: Page) => page.getByRole('button', { name: 'Export' }).loc
|
||||
* leg of their own, and the day fixtures put a hotel on the first four nights.
|
||||
*/
|
||||
const connector = (page: Page) => page.getByRole('button', { name: 'Change travel mode' }).first()
|
||||
/** The note dialog: its own portal with no backdrop class, known by its body field. */
|
||||
/** The note dialog, known by its body field. */
|
||||
const noteBody = (page: Page) => page.getByPlaceholder('Details, links, reminders…')
|
||||
const noteDialog = (page: Page) => portalDialog(page, noteBody(page))
|
||||
const noteDialog = (page: Page) => page.getByRole('dialog').filter({ has: noteBody(page) })
|
||||
/** The question a timed stop asks before it moves; also a portal of its own. */
|
||||
const timeConfirm = (page: Page) => portalDialog(page, page.getByText('Remove time?'))
|
||||
/** The reorder popup's panel, the list and its footer, or the question a bin asks in its place. */
|
||||
@@ -149,7 +153,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
// The "+" offers the OPEN day, so it is still there with the place on
|
||||
// day 2 — and the place stays on a day, which is what the result says.
|
||||
prepare: async p => { await placeRow(p, SPARE.name).hover() },
|
||||
target: p => placeRow(p, SPARE.name).getByRole('button'),
|
||||
target: p => toOpenDay(p, SPARE.name),
|
||||
},
|
||||
only(p => p.getByRole('button', { name: 'Add place to this day' }).first()),
|
||||
only(p => p.getByRole('button', { name: 'Add to the open day' })),
|
||||
@@ -250,7 +254,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
// The "+" puts the place on the OPEN day, so day 1 stays selected.
|
||||
await openTripOnDay(p, 1)
|
||||
await placeRow(p, SPARE.name).hover()
|
||||
await placeRow(p, SPARE.name).getByRole('button').click()
|
||||
await toOpenDay(p, SPARE.name).click()
|
||||
await expect(stop(p, SPARE.name)).toBeVisible({ timeout: 15_000 })
|
||||
await settle(p)
|
||||
},
|
||||
@@ -298,22 +302,28 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
start: p => openTrip(p),
|
||||
steps: [
|
||||
{
|
||||
target: p => dayHeader(p, 2).getByRole('button', { name: 'Add Note' }),
|
||||
// The "+" of the day's head band opens the menu; Add Note is its last entry.
|
||||
prepare: async p => {
|
||||
await addToDay(p, 2).click()
|
||||
await expect(menu(p).getByRole('button', { name: 'Add Note' })).toBeVisible()
|
||||
await beat(p, 300)
|
||||
},
|
||||
target: p => menu(p).getByRole('button', { name: 'Add Note' }),
|
||||
act: async p => {
|
||||
await dayHeader(p, 2).getByRole('button', { name: 'Add Note' }).click()
|
||||
await menu(p).getByRole('button', { name: 'Add Note' }).click()
|
||||
await expect(noteBody(p)).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
},
|
||||
{
|
||||
prepare: async p => {
|
||||
// Note is the name the day card shows and the only required field;
|
||||
// Daily Note below it is the markdown the toolbar formats.
|
||||
// The name is typed into the head band and is what the day card shows,
|
||||
// the only required field; Daily Note is the markdown the toolbar formats.
|
||||
await typeInto(p, noteDialog(p).getByPlaceholder('Note', { exact: true }), NOTE.title)
|
||||
await typeInto(p, noteBody(p), NOTE.body)
|
||||
await beat(p, 300)
|
||||
},
|
||||
target: p => noteBody(p).locator('xpath=ancestor::div[2]'),
|
||||
target: noteDialog,
|
||||
},
|
||||
{
|
||||
target: p => noteDialog(p).getByText('Icon', { exact: true }).locator('xpath=../..'),
|
||||
@@ -416,8 +426,11 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await settle(p)
|
||||
},
|
||||
// Scoped to the panel: a stop row carries an Edit of its own, so the
|
||||
// bare name matches two buttons as soon as any day is unfolded.
|
||||
target: p => renameDay(p).locator('xpath=..'),
|
||||
// bare name matches two buttons as soon as any day is unfolded. The
|
||||
// ring goes round the panel's head band, title and pencil together: a
|
||||
// ring round the pencil alone sits on the day's name beside it.
|
||||
target: p => renameDay(p).locator('xpath=ancestor::div[@role="presentation"][1]'),
|
||||
hover: p => renameDay(p).hover(),
|
||||
act: closeDayDetails,
|
||||
},
|
||||
only(p => p.getByRole('button', { name: /Expand all days|Collapse all days/ })),
|
||||
@@ -431,7 +444,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
steps: [
|
||||
// The flight, not the train: Departure and Arrival are what a booking
|
||||
// gets when it crosses days, and the train starts and ends on one.
|
||||
only(p => bookingRow(p, /^Departure LH716/)),
|
||||
only(p => bookingRow(p, /^LH716 FRA → HND Departure/)),
|
||||
{
|
||||
prepare: async p => { await selectDay(p, 6); await closeDayDetails(p) },
|
||||
target: p => stop(p, 'Nishiki Market'),
|
||||
@@ -442,7 +455,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await expect(p.getByText('Accommodation', { exact: true }).first()).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
target: p => p.getByText('Accommodation', { exact: true }).first().locator('xpath=..'),
|
||||
target: p => p.getByText('Accommodation', { exact: true }).first().locator('xpath=ancestor::section[1]'),
|
||||
act: closeDayDetails,
|
||||
},
|
||||
only(p => toolbar(p).getByRole('button', { name: /Show all booking routes|Hide all booking routes/ })),
|
||||
@@ -464,9 +477,9 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await settle(p)
|
||||
},
|
||||
},
|
||||
only(p => modal(p).getByText('Document', { exact: true }).locator('xpath=..')),
|
||||
only(p => modal(p).getByText('Calendar', { exact: true }).locator('xpath=..')),
|
||||
only(p => modal(p).getByText(/^Maps & GPS/).locator('xpath=..')),
|
||||
only(p => modal(p).getByText('Document', { exact: true }).locator('xpath=ancestor::section[1]')),
|
||||
only(p => modal(p).getByText('Calendar', { exact: true }).locator('xpath=ancestor::section[1]')),
|
||||
only(p => modal(p).getByText(/^Maps & GPS/).locator('xpath=ancestor::section[1]')),
|
||||
],
|
||||
cleanup: closeModal,
|
||||
},
|
||||
|
||||
@@ -38,19 +38,22 @@ const UPLOADED = 'cover-fixture.jpg'
|
||||
|
||||
/** The card itself: the scroll body's parent holds head, body and footer. */
|
||||
const card = (page: Page) => page.getByTestId('inspector-scroll').locator('xpath=..')
|
||||
const head = (page: Page) => card(page).locator('> div').first()
|
||||
const footer = (page: Page) => card(page).locator('div.border-t')
|
||||
const head = (page: Page) => card(page).locator('> header')
|
||||
const footer = (page: Page) => card(page).locator('> footer')
|
||||
/** A block of the card by its heading: every block is a <section> that opens with it. */
|
||||
const section = (page: Page, heading: string) =>
|
||||
card(page).getByText(heading, { exact: true }).locator('xpath=ancestor::section[1]')
|
||||
/** A row of the places column (the rows are options of a list). */
|
||||
const row = (page: Page, name: string) => page.getByRole('option', { name: new RegExp(`^${name}`) }).first()
|
||||
/** A stop inside a day card. Day notes and to-dos share the class, so filter by the name. */
|
||||
const stop = (page: Page, name: string) => page.locator('.dp-row[role="button"]').filter({ hasText: name }).first()
|
||||
/** PlaceRating's root: the stars, the average and the voter faces on one line. */
|
||||
const ratingRow = (page: Page) => card(page).getByRole('radiogroup', { name: 'Your rating' }).locator('xpath=..')
|
||||
/** ParticipantsBox: found by its eyebrow, which is the box's first child. */
|
||||
const participants = (page: Page) => card(page).getByText('Participants', { exact: true }).locator('xpath=..')
|
||||
/** ParticipantsBox: the block under its heading. */
|
||||
const participants = (page: Page) => section(page, 'Participants')
|
||||
/** A member's chip, or, once the chip is gone, that member's line in the add list. */
|
||||
const member = (page: Page, name: string) => participants(page).getByRole('button', { name: new RegExp(name) })
|
||||
const addMember = (page: Page) => participants(page).getByRole('button', { name: '+', exact: true })
|
||||
const addMember = (page: Page) => participants(page).getByRole('button', { name: 'Add', exact: true })
|
||||
/** "Files" while the place has none, "<n> files" once it has. */
|
||||
const filesToggle = (page: Page) => card(page).getByRole('button', { name: /^(Files|\d+ files)$/ })
|
||||
/** The booking strip opens the booking; it is a button named after it. */
|
||||
@@ -71,8 +74,8 @@ const weekday = (offset: number) => long(offset).split(',')[0]
|
||||
* ("Saturday: 06:00-17:00") and the day moves with the run.
|
||||
*/
|
||||
const hoursRow = (page: Page) => card(page).locator('button:has(svg.lucide-clock)')
|
||||
/** The hours box: the row and, once unfolded, the week under it. */
|
||||
const hoursBox = (page: Page) => hoursRow(page).locator('xpath=..')
|
||||
/** The hours block: the row and, once unfolded, the week in its place. */
|
||||
const hoursBox = (page: Page) => section(page, 'Opening Hours')
|
||||
|
||||
/** The card's own X, the one in its head; the day panel over the map has another. */
|
||||
async function closeCard(page: Page): Promise<void> {
|
||||
@@ -237,7 +240,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
// around the collapsed row would show the reader one line of it.
|
||||
prepare: async p => {
|
||||
await hoursRow(p).click()
|
||||
await expect(hoursRow(p)).toHaveText('Opening Hours')
|
||||
await expect(hoursBox(p).getByRole('button', { name: 'Collapse' })).toBeVisible()
|
||||
await expect(hoursBox(p).getByText(/^Sunday: /)).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
@@ -551,7 +554,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await expect(card(p).getByText('Track Stats', { exact: true })).toBeVisible()
|
||||
},
|
||||
},
|
||||
only(p => card(p).getByText('Track Stats', { exact: true }).locator('xpath=ancestor::div[2]')),
|
||||
only(p => section(p, 'Track Stats')),
|
||||
{
|
||||
target: p => card(p).getByRole('button', { name: 'Track color' }),
|
||||
act: async p => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { test, expect, type Page, type Locator } from '@playwright/test'
|
||||
import { captureGuide, captureHero, beat, typeInto, settle, VIEWPORT, type GuideScript } from './guide'
|
||||
import { seededTrip, gpxFixture, ensureTrack } from './fixtures'
|
||||
import { openTrip, modal, dialog, confirmDialog, portalDialog } from './trip-shared'
|
||||
import { openTrip, modal, dialog, confirmDialog } from './trip-shared'
|
||||
import { tripPlacesContext, tripPlacesGuides } from '../../src/help/contexts/tripPlaces'
|
||||
import type { HelpGuide } from '../../src/help/types'
|
||||
|
||||
@@ -22,22 +22,41 @@ const SPARE = { name: 'Tsukiji Outer Market', lat: 35.6654, lng: 139.7707, addre
|
||||
/** What create-place looks up. See the note in its second step for why this one. */
|
||||
const SEARCHED = { query: 'Osaka Castle', match: /^Osaka Castle/ }
|
||||
|
||||
/** The search result create-place picks. */
|
||||
const suggestion = (page: Page) =>
|
||||
modal(page).locator('.shadow-dropdown button').filter({ hasText: SEARCHED.match }).first()
|
||||
/** A row of the places column by the place's name (the rows are options of a list). */
|
||||
const row = (page: Page, name: string) => page.getByRole('option', { name: new RegExp(`^${name}`) }).first()
|
||||
/** The context menu is a fixed popover of plain buttons; the item texts tell it apart. */
|
||||
const menu = (page: Page) => page.locator('.trek-popover-enter').filter({ has: page.getByRole('button', { name: 'Delete' }) }).last()
|
||||
/** The add button: "Add Place/Activity" with no day open, "New place" with one. */
|
||||
const addButton = (page: Page) => page.getByRole('button', { name: /^(Add Place\/Activity|New place)$/ })
|
||||
/** The filter row's controls. */
|
||||
const filterSelect = (page: Page) => page.getByTestId('places-filter').getByRole('button').first()
|
||||
const searchBox = (page: Page) => page.getByPlaceholder('Search places...').last()
|
||||
/** FileImportModal: its own portal, recognised by the hidden file input and its heading. */
|
||||
/**
|
||||
* The head band of the column: the add row, the search with the select switch,
|
||||
* and the row of filters. Found from its import button, the one control only
|
||||
* this band has, so the plain "Search" of the field is read inside it.
|
||||
*/
|
||||
const head = (page: Page) =>
|
||||
page.getByRole('button', { name: 'Import Places' }).locator('xpath=ancestor::div[contains(@class,"flex-col")][1]')
|
||||
/** The import button's menu: Import file and the list import. */
|
||||
const importMenu = (page: Page) =>
|
||||
page.locator('.trek-popover-enter').filter({ has: page.getByRole('button', { name: 'Import file' }) }).last()
|
||||
/** The Show dropdown (All, Unplanned, Planned, Tracks) and the list it opens. */
|
||||
const showTrigger = (page: Page) => head(page).getByRole('button', { name: 'Show', exact: true })
|
||||
const showList = (page: Page) => page.getByTestId('places-filter').locator('xpath=..')
|
||||
/** The category filter: a tag button whose list sits right after it. */
|
||||
const categoryTrigger = (page: Page) => head(page).getByRole('button', { name: 'Categories', exact: true })
|
||||
const categoryList = (page: Page) => categoryTrigger(page).locator('xpath=following-sibling::div[1]')
|
||||
const searchBox = (page: Page) => head(page).getByPlaceholder('Search', { exact: true })
|
||||
/** The selection bar at the foot of the column, found by its delete action. */
|
||||
const selectionBar = (page: Page) => page.getByRole('button', { name: 'Delete selected' }).locator('xpath=..')
|
||||
/** FileImportModal, recognised by its hidden file input. */
|
||||
const importFileDialog = (page: Page) =>
|
||||
portalDialog(page, page.locator('input[type="file"][accept*=".gpx"]'))
|
||||
/** ListImportModal: its own portal, recognised by the link box. */
|
||||
const listImportDialog = (page: Page) => portalDialog(page, page.getByPlaceholder(/goo\.gl|naver/))
|
||||
page.getByRole('dialog').filter({ has: page.locator('input[type="file"][accept*=".gpx"]') })
|
||||
/** ListImportModal, recognised by the link box. */
|
||||
const listImportDialog = (page: Page) => page.getByRole('dialog').filter({ has: page.getByPlaceholder(/goo\.gl|naver/) })
|
||||
/** The drop box of the file dialog: the dashed button that opens the file picker. */
|
||||
const dropBox = (page: Page) => importFileDialog(page).getByRole('button').first()
|
||||
const dropBox = (page: Page) => importFileDialog(page).locator('button.border-dashed').first()
|
||||
/** The column itself: the header block around the search box. */
|
||||
const column = (page: Page) => searchBox(page).locator('xpath=ancestor::div[contains(@class,"scroll") or @data-places-sidebar][1]')
|
||||
|
||||
@@ -81,6 +100,9 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
},
|
||||
},
|
||||
{
|
||||
// The results are pictured before the pick: once one is taken the
|
||||
// search box empties again, and a ring round an empty box shows the
|
||||
// reader nothing of what the step says.
|
||||
prepare: async p => {
|
||||
const box = modal(p).getByPlaceholder('Search places...')
|
||||
// Osaka Castle on purpose: its entry in the index carries a picture,
|
||||
@@ -88,16 +110,19 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
// text says it shows. Most results have none of that and the column
|
||||
// would be an empty state in the picture.
|
||||
await typeInto(p, box, SEARCHED.query)
|
||||
const suggestion = modal(p).locator('.shadow-dropdown button').filter({ hasText: SEARCHED.match }).first()
|
||||
await expect(suggestion).toBeVisible({ timeout: 20_000 })
|
||||
await suggestion.click()
|
||||
await expect(suggestion(p)).toBeVisible({ timeout: 20_000 })
|
||||
await settle(p)
|
||||
},
|
||||
target: p => modal(p).locator('.shadow-dropdown').first(),
|
||||
hover: p => suggestion(p).hover(),
|
||||
act: async p => {
|
||||
await suggestion(p).click()
|
||||
await expect(modal(p).getByPlaceholder('e.g. Eiffel Tower')).toHaveValue(SEARCHED.match, { timeout: 20_000 })
|
||||
// The details column answers after the form; wait for it or the
|
||||
// picture catches the spinner.
|
||||
await expect(modal(p).getByText('Pick a picture', { exact: false }).first()).toBeVisible({ timeout: 30_000 })
|
||||
await settle(p)
|
||||
},
|
||||
target: p => modal(p).getByPlaceholder('Search places...').locator('xpath=../..'),
|
||||
},
|
||||
// The details column is an <aside> beside the form; both used to resolve to
|
||||
// the whole dialog, which gave two steps the same picture.
|
||||
@@ -143,9 +168,9 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
},
|
||||
{
|
||||
prepare: async p => { await row(p, SPARE.name).hover() },
|
||||
target: p => row(p, SPARE.name).locator('button').last(),
|
||||
target: p => row(p, SPARE.name).getByRole('button', { name: '+ Day' }),
|
||||
act: async p => {
|
||||
await row(p, SPARE.name).locator('button').last().click()
|
||||
await row(p, SPARE.name).getByRole('button', { name: '+ Day' }).click()
|
||||
await expect(p.getByRole('button', { name: 'Undo' })).toBeEnabled({ timeout: 15_000 })
|
||||
await settle(p)
|
||||
},
|
||||
@@ -179,10 +204,14 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
},
|
||||
steps: [
|
||||
{
|
||||
prepare: async p => { await filterSelect(p).click(); await beat(p, 300) },
|
||||
target: filterSelect,
|
||||
// The lists close on a second click of their trigger, not on Escape.
|
||||
act: async p => { await filterSelect(p).click(); await settle(p) },
|
||||
prepare: async p => {
|
||||
await showTrigger(p).click()
|
||||
await expect(showList(p)).toBeVisible()
|
||||
await beat(p, 300)
|
||||
},
|
||||
target: showList,
|
||||
// The lists close on a second click of their trigger.
|
||||
act: async p => { await showTrigger(p).click(); await settle(p) },
|
||||
},
|
||||
{
|
||||
prepare: async p => { await typeInto(p, searchBox(p), 'temple'); await settle(p) },
|
||||
@@ -190,9 +219,26 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
act: async p => { await searchBox(p).fill(''); await settle(p) },
|
||||
},
|
||||
{
|
||||
prepare: async p => { await p.getByRole('button', { name: 'All Categories' }).click(); await beat(p, 300) },
|
||||
target: p => p.getByRole('button', { name: 'All Categories' }),
|
||||
act: async p => { await p.getByRole('button', { name: 'All Categories' }).click(); await settle(p) },
|
||||
// One category ticked, so the list shows the tick, the button its count
|
||||
// and the foot of the list its Clear filter.
|
||||
prepare: async p => {
|
||||
await categoryTrigger(p).click()
|
||||
await expect(categoryList(p)).toBeVisible()
|
||||
// No Category: the seed's places carry none, so it is the choice that
|
||||
// leaves rows in the list rather than an empty column.
|
||||
await categoryList(p).getByRole('button', { name: /No Category/ }).click()
|
||||
await expect(categoryList(p).getByRole('button', { name: 'Clear filter' })).toBeVisible()
|
||||
// The list scrolls inside itself; its foot is where the tick and Clear filter are.
|
||||
await categoryList(p).evaluate(el => { el.scrollTop = el.scrollHeight })
|
||||
await beat(p, 300)
|
||||
},
|
||||
target: categoryList,
|
||||
act: async p => {
|
||||
await categoryList(p).getByRole('button', { name: 'Clear filter' }).click()
|
||||
await categoryTrigger(p).click()
|
||||
await expect(categoryList(p)).toHaveCount(0)
|
||||
await settle(p)
|
||||
},
|
||||
},
|
||||
{
|
||||
prepare: async p => { await p.getByRole('button', { name: 'Filter by rating' }).click(); await beat(p, 300) },
|
||||
@@ -270,19 +316,20 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
},
|
||||
},
|
||||
{
|
||||
// Two rows next to each other, so one picture shows both ticks.
|
||||
prepare: async p => {
|
||||
await row(p, 'Shibuya Crossing').click()
|
||||
await row(p, 'Meiji Jingu').click()
|
||||
await expect(p.getByText('2 selected')).toBeVisible()
|
||||
await expect(p.getByRole('status', { name: '2 selected' })).toBeVisible()
|
||||
await beat(p, 300)
|
||||
},
|
||||
target: p => p.getByText('2 selected').locator('xpath=..'),
|
||||
target: p => row(p, 'Meiji Jingu'),
|
||||
},
|
||||
only(p => p.getByRole('button', { name: 'Delete selected' }).locator('xpath=..')),
|
||||
only(selectionBar),
|
||||
{
|
||||
target: p => p.getByRole('button', { name: 'Select', exact: true }),
|
||||
target: p => selectionBar(p).getByRole('button', { name: 'Done' }),
|
||||
act: async p => {
|
||||
await p.getByRole('button', { name: 'Select', exact: true }).click()
|
||||
await selectionBar(p).getByRole('button', { name: 'Done' }).click()
|
||||
await expect(p.getByRole('button', { name: 'Select all' })).toHaveCount(0)
|
||||
},
|
||||
},
|
||||
@@ -293,9 +340,14 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
start: p => openTrip(p),
|
||||
steps: [
|
||||
{
|
||||
target: p => p.getByRole('button', { name: 'Import file' }),
|
||||
prepare: async p => {
|
||||
await p.getByRole('button', { name: 'Import Places' }).click()
|
||||
await expect(importMenu(p)).toBeVisible()
|
||||
await beat(p, 300)
|
||||
},
|
||||
target: p => importMenu(p).getByRole('button', { name: 'Import file' }),
|
||||
act: async p => {
|
||||
await p.getByRole('button', { name: 'Import file' }).click()
|
||||
await importMenu(p).getByRole('button', { name: 'Import file' }).click()
|
||||
await expect(importFileDialog(p)).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
@@ -326,9 +378,15 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
start: p => openTrip(p),
|
||||
steps: [
|
||||
{
|
||||
target: p => p.getByRole('button', { name: 'List Import' }),
|
||||
prepare: async p => {
|
||||
await p.getByRole('button', { name: 'Import Places' }).click()
|
||||
await expect(importMenu(p)).toBeVisible()
|
||||
await beat(p, 300)
|
||||
},
|
||||
// Google List while Google is the only list provider, List Import once Naver is on too.
|
||||
target: p => importMenu(p).getByRole('button', { name: /^(Google List|List Import)$/ }),
|
||||
act: async p => {
|
||||
await p.getByRole('button', { name: 'List Import' }).click()
|
||||
await importMenu(p).getByRole('button', { name: /^(Google List|List Import)$/ }).click()
|
||||
await expect(listImportDialog(p)).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
|
||||
@@ -312,7 +312,8 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
target: dayPicker,
|
||||
act: async p => {
|
||||
await dayPicker(p).click()
|
||||
await p.getByRole('button', { name: 'Day 2', exact: true }).last().click()
|
||||
// The rows are options named by the day's number and its label, "2 Day 2".
|
||||
await p.getByRole('option', { name: /\bDay 2$/ }).last().click()
|
||||
await expect(dayPicker(p)).toContainText('Day 2')
|
||||
await settle(p)
|
||||
},
|
||||
|
||||
@@ -36,6 +36,7 @@ export async function openTrip(page: Page, opts: { tab?: string; day?: number |
|
||||
// Exact: the Lists tab carries a Shared button, which the loose name also matches.
|
||||
await expect(page.getByRole('button', { name: 'Share', exact: true })).toBeVisible({ timeout: 30_000 })
|
||||
await settle(page)
|
||||
await untilTranslated(page)
|
||||
if (!tab && day) {
|
||||
// The trip is running, so the plan opens on today, an empty day at the
|
||||
// bottom. Day 1 has the places; its details panel would cover the map.
|
||||
@@ -46,6 +47,27 @@ export async function openTrip(page: Page, opts: { tab?: string; day?: number |
|
||||
await page.waitForTimeout(1200)
|
||||
}
|
||||
|
||||
/**
|
||||
* A text that is still its key: `dayplan.dayN` where "Day 1" belongs. The
|
||||
* locale bundles come from `shared/dist`, and while a watcher rebuilds it a
|
||||
* page can load with a part of them missing. Reloading after the rebuild has
|
||||
* landed brings the strings back; a page that stays untranslated fails here
|
||||
* rather than in a picture.
|
||||
*/
|
||||
const rawKey = (page: Page) => page.getByText(/^(common|dayplan|planner|places|reservations|trip|day|budget|files|collab|packing|todo)\.[A-Za-z0-9.]+$/)
|
||||
|
||||
async function untilTranslated(page: Page): Promise<void> {
|
||||
for (let attempt = 0; attempt < 4 && (await rawKey(page).count()) > 0; attempt++) {
|
||||
await page.waitForTimeout(4000)
|
||||
await page.reload()
|
||||
await clearNotices(page)
|
||||
await dismissReleaseNotice(page)
|
||||
await expect(page.getByRole('button', { name: 'Share', exact: true })).toBeVisible({ timeout: 30_000 })
|
||||
await settle(page)
|
||||
}
|
||||
await expect(rawKey(page), 'the page shows i18n keys instead of text').toHaveCount(0)
|
||||
}
|
||||
|
||||
/** Click the day's header: selects it and opens its details panel. */
|
||||
export async function selectDay(page: Page, n: number): Promise<void> {
|
||||
const header = page.getByRole('button', { name: new RegExp(`^${n} .*Day ${n} `) })
|
||||
@@ -63,9 +85,12 @@ export async function selectDay(page: Page, n: number): Promise<void> {
|
||||
/** The day details panel: the one fixed, floating card over the map. */
|
||||
export const dayDetails = (page: Page) => page.locator('div.fixed.z-50').first()
|
||||
|
||||
/** The details panel's close is the one unlabelled X button over the map. */
|
||||
/**
|
||||
* The details panel's own Close, in its head band. Found inside the panel: the
|
||||
* last X of the page is not always this one once the day carries bookings.
|
||||
*/
|
||||
export async function closeDayDetails(page: Page): Promise<void> {
|
||||
const close = page.locator('button:has(svg.lucide-x)').last()
|
||||
const close = dayDetails(page).getByRole('button', { name: 'Close', exact: true })
|
||||
if (await close.isVisible().catch(() => false)) {
|
||||
await close.click()
|
||||
await settle(page)
|
||||
@@ -114,9 +139,10 @@ export const importTask = (page: Page, file: string) =>
|
||||
export function importSteps(fixture: () => string, file: string): StepAction[] {
|
||||
return [
|
||||
{
|
||||
target: p => p.getByRole('button', { name: 'Import from file' }),
|
||||
// An icon in the toolbar, named like the dialog it opens.
|
||||
target: p => p.getByRole('button', { name: 'Import booking confirmations', exact: true }),
|
||||
act: async p => {
|
||||
await p.getByRole('button', { name: 'Import from file' }).click()
|
||||
await p.getByRole('button', { name: 'Import booking confirmations', exact: true }).click()
|
||||
await expect(importDialog(p)).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
|
||||
@@ -20,14 +20,13 @@ const guide = (id: string): HelpGuide => {
|
||||
return g
|
||||
}
|
||||
|
||||
/** The flight the seed creates. Its row on day 1 carries the Departure span label. */
|
||||
const FLIGHT = { title: 'LH716', row: /^Departure LH716/ }
|
||||
/** The flight the seed creates. Its row on day 1 is its title, then the Departure span label. */
|
||||
const FLIGHT = { title: 'LH716 FRA → HND', row: /^LH716 FRA → HND Departure/ }
|
||||
/**
|
||||
* The connection the fixtures store on day 6, so no guide has to search for one
|
||||
* first. Its card writes the two ends either side of an arrow icon, with no
|
||||
* text between them, so `hasText` gets the first end rather than the title.
|
||||
* first. Its card is named by its title, the two ends with an arrow between them.
|
||||
*/
|
||||
const JOURNEY = { title: TRANSIT_JOURNEY, onCard: 'Arashiyama Bamboo Grove' }
|
||||
const JOURNEY = { title: TRANSIT_JOURNEY }
|
||||
/** What plan-transit plans on day 1; the title the panel builds from the two ends. */
|
||||
const PLANNED = 'Senso-ji Temple → teamLab Planets'
|
||||
/** What add-transport creates. Both ends are searched, so the map has something to draw. */
|
||||
@@ -37,22 +36,35 @@ const TAXI = {
|
||||
to: { query: 'teamLab Planets', match: /^teamLab/ },
|
||||
}
|
||||
|
||||
/** A day card's header: number, weather, "Day n", date, and the four action buttons. */
|
||||
/** A day card's head: number, weather, "Day n", date, its pills and the "+" with the chevron. */
|
||||
const dayHeader = (page: Page, n: number) => page.getByRole('button', { name: new RegExp(`^${n} .*Day ${n} `) })
|
||||
/** A booking card in the tab, told apart by what is written on it. */
|
||||
const card = (page: Page, text: string) => page.locator('.bg-surface-card').filter({ hasText: text }).first()
|
||||
/** The "+" in a day's head; Add transport and Public transit are in the menu it opens. */
|
||||
const addToDay = (page: Page, n: number) => dayHeader(page, n).getByRole('button', { name: 'Add to day' })
|
||||
/** That menu: a popover of plain buttons, told apart from a tooltip by its role. */
|
||||
const dayMenu = (page: Page) => page.locator('.trek-popover-enter:not([role="tooltip"])').last()
|
||||
async function openDayMenu(page: Page, n: number): Promise<void> {
|
||||
await addToDay(page, n).click()
|
||||
await expect(dayMenu(page).getByRole('button', { name: 'Add transport' })).toBeVisible()
|
||||
await beat(page, 300)
|
||||
}
|
||||
/** A booking card in the tab: an <article> named by the booking's title. */
|
||||
const card = (page: Page, title: string) => page.getByRole('article', { name: title }).first()
|
||||
/** The two popovers of the tab's toolbar, each opened by its own button. */
|
||||
const toolbarButton = (page: Page, name: 'Filter' | 'View options') => page.getByRole('button', { name, exact: true })
|
||||
const toolbarMenu = (page: Page, name: 'Filter' | 'View options') => toolbarButton(page, name).locator('xpath=../..').getByRole('menu')
|
||||
/** A transport's row in the day plan; the whole row is the button that opens it. */
|
||||
const transportRow = (page: Page, name: RegExp) => page.getByRole('button', { name }).first()
|
||||
/** The booking a click on a row or a card opens, named by the booking's title. */
|
||||
const bookingDetail = (page: Page, title: string) => page.getByRole('dialog', { name: title })
|
||||
/** The Edit at the foot of that booking, which leads on to its form. */
|
||||
const detailEdit = (page: Page, title: string) => bookingDetail(page, title).getByRole('button', { name: 'Edit', exact: true })
|
||||
/** A toolbar type chip or a section heading — both are a label followed by their count. */
|
||||
const counted = (page: Page, label: string) => page.getByRole('button', { name: new RegExp(`^${label} \\d+$`) })
|
||||
/** A labelled field block inside the open dialog. */
|
||||
const block = (page: Page, label: string) => modal(page).getByText(label, { exact: true }).locator('xpath=..')
|
||||
/** CustomSelect portals its menu to the body: a fixed panel at z-index 99999. */
|
||||
const selectMenu = (page: Page) => page.locator('body > div[style*="99999"]').last()
|
||||
/** A block of the open dialog by its heading: every block is a <section> that opens with it. */
|
||||
const block = (page: Page, label: string) => modal(page).getByText(label, { exact: true }).first().locator('xpath=ancestor::section[1]')
|
||||
/** The head band of the open dialog, where a booking's title is typed and its pills sit. */
|
||||
const headBand = (page: Page) => modal(page).locator('header').first()
|
||||
/** The Booking Type pill in that band, and the list it opens (a portal named after it). */
|
||||
const typePill = (page: Page) => modal(page).getByRole('button', { name: /^Booking Type:/ })
|
||||
const typeMenu = (page: Page) => page.getByRole('group', { name: 'Booking Type' })
|
||||
/** The leg-mode popover, told apart from the connector's tooltip by what stands in it. */
|
||||
const legMenu = (page: Page) =>
|
||||
page.locator('.trek-popover-enter').filter({ has: page.getByRole('button', { name: 'Use day default' }) }).last()
|
||||
@@ -69,8 +81,6 @@ const suggestions = (box: Locator) => box.locator('xpath=../..').locator('> div'
|
||||
/** A result of the transit search: the card's own toggle carries the times as its name. */
|
||||
const itinerary = (page: Page, n: number) =>
|
||||
modal(page).getByRole('button', { name: /^\d{1,2}:\d{2} – \d{1,2}:\d{2} / }).nth(n)
|
||||
/** The read-only sheet an endpoint marker on the map opens; its own portal, no shared class. */
|
||||
const transportSheet = (page: Page) => portalDialog(page, page.getByRole('button', { name: 'Close' }))
|
||||
|
||||
async function searchLocation(page: Page, box: Locator, query: string, match: RegExp): Promise<void> {
|
||||
await box.click()
|
||||
@@ -130,8 +140,8 @@ const airportBoxes = (page: Page) => modal(page).getByPlaceholder('Airport code
|
||||
const [OUT_LEG, HOME_LEG, , OTHER] = AIRTRAIL_FLIGHTS
|
||||
const JOINED = { title: `${OUT_LEG.from} → ${OUT_LEG.to} → ${HOME_LEG.to}`, layover: OUT_LEG.to }
|
||||
|
||||
/** The toolbar's AirTrail button; its label is visible at this viewport, the title is the picker's name. */
|
||||
const airtrailButton = (page: Page) => page.getByRole('button', { name: 'AirTrail', exact: true })
|
||||
/** The toolbar's AirTrail button: an icon named like the picker it opens. */
|
||||
const airtrailButton = (page: Page) => page.getByRole('button', { name: 'Import from AirTrail', exact: true })
|
||||
/** The flight picker is a bare portal like the booking import; its title tells it apart. */
|
||||
const airtrailPicker = (page: Page) => portalDialog(page, page.getByText('Import from AirTrail', { exact: true }))
|
||||
/** A flight's row in the picker: a button named by the airline and the flight number. */
|
||||
@@ -178,20 +188,33 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
steps: [
|
||||
only(p => p.getByRole('button', { name: 'Transports', exact: true })),
|
||||
{
|
||||
target: p => counted(p, 'All').locator('xpath=..'),
|
||||
act: async p => {
|
||||
await counted(p, 'Train').click()
|
||||
// The menu with Train ticked, so the picture shows a filter in force.
|
||||
prepare: async p => {
|
||||
await toolbarButton(p, 'Filter').click()
|
||||
await expect(toolbarMenu(p, 'Filter')).toBeVisible()
|
||||
await toolbarMenu(p, 'Filter').getByRole('button', { name: /^Train\b/ }).click()
|
||||
await expect(card(p, FLIGHT.title)).toHaveCount(0)
|
||||
await settle(p)
|
||||
},
|
||||
target: p => toolbarMenu(p, 'Filter'),
|
||||
act: async p => {
|
||||
await toolbarMenu(p, 'Filter').getByRole('button', { name: 'Reset filters' }).click()
|
||||
await expect(card(p, FLIGHT.title)).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
},
|
||||
{
|
||||
prepare: async p => {
|
||||
await counted(p, 'All').click()
|
||||
await expect(card(p, FLIGHT.title)).toBeVisible()
|
||||
await toolbarButton(p, 'View options').click()
|
||||
await expect(toolbarMenu(p, 'View options')).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
target: p => toolbarMenu(p, 'View options'),
|
||||
act: async p => {
|
||||
await toolbarButton(p, 'View options').click()
|
||||
await expect(toolbarMenu(p, 'View options')).toHaveCount(0)
|
||||
await settle(p)
|
||||
},
|
||||
target: p => counted(p, 'Automated public transit'),
|
||||
},
|
||||
only(p => card(p, FLIGHT.title)),
|
||||
{
|
||||
@@ -218,24 +241,24 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
start: p => openTrip(p),
|
||||
steps: [
|
||||
{
|
||||
// captureGuide hovers the target before the shot, so the tooltip is in the picture.
|
||||
target: p => dayHeader(p, 1).getByRole('button', { name: 'Add transport' }),
|
||||
prepare: p => openDayMenu(p, 1),
|
||||
target: p => dayMenu(p).getByRole('button', { name: 'Add transport' }),
|
||||
act: async p => {
|
||||
await dayHeader(p, 1).getByRole('button', { name: 'Add transport' }).click()
|
||||
await dayMenu(p).getByRole('button', { name: 'Add transport' }).click()
|
||||
await expect(modal(p).getByRole('heading', { name: 'Add transport' })).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
},
|
||||
{
|
||||
prepare: async p => {
|
||||
await block(p, 'Booking Type').getByRole('button').first().click()
|
||||
await expect(selectMenu(p)).toBeVisible()
|
||||
await typePill(p).click()
|
||||
await expect(typeMenu(p)).toBeVisible()
|
||||
await beat(p, 300)
|
||||
},
|
||||
target: selectMenu,
|
||||
target: typeMenu,
|
||||
act: async p => {
|
||||
await selectMenu(p).getByRole('button', { name: /^Taxi$/ }).first().click()
|
||||
await expect(selectMenu(p)).toHaveCount(0)
|
||||
await typeMenu(p).getByRole('button', { name: /^Taxi$/ }).first().click()
|
||||
await expect(typeMenu(p)).toHaveCount(0)
|
||||
await expect(modal(p).getByText('Start time', { exact: true })).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
@@ -245,7 +268,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await typeInto(p, modal(p).getByPlaceholder('e.g. Lufthansa LH123, Hotel Adlon, ...'), TAXI.title)
|
||||
await settle(p)
|
||||
},
|
||||
target: p => block(p, 'Title *'),
|
||||
target: headBand,
|
||||
},
|
||||
{
|
||||
prepare: async p => {
|
||||
@@ -332,9 +355,10 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
start: p => openTrip(p),
|
||||
steps: [
|
||||
{
|
||||
target: p => dayHeader(p, 1).getByRole('button', { name: 'Public transit' }),
|
||||
prepare: p => openDayMenu(p, 1),
|
||||
target: p => dayMenu(p).getByRole('button', { name: 'Public transit' }),
|
||||
act: async p => {
|
||||
await dayHeader(p, 1).getByRole('button', { name: 'Public transit' }).click()
|
||||
await dayMenu(p).getByRole('button', { name: 'Public transit' }).click()
|
||||
await expect(modal(p).getByRole('heading', { name: 'Public transit' })).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
@@ -394,14 +418,14 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
start: p => openTrip(p, { tab: 'transports' }),
|
||||
steps: [
|
||||
{
|
||||
target: p => card(p, JOURNEY.onCard),
|
||||
target: p => card(p, JOURNEY.title),
|
||||
act: async p => {
|
||||
await card(p, JOURNEY.onCard).click()
|
||||
await card(p, JOURNEY.title).click()
|
||||
await expect(bookingDetail(p, JOURNEY.title)).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
},
|
||||
only(p => bookingDetail(p, JOURNEY.title).getByText('Itinerary', { exact: true }).locator('xpath=..')),
|
||||
only(p => bookingDetail(p, JOURNEY.title).getByText('Itinerary', { exact: true }).locator('xpath=ancestor::section[1]')),
|
||||
{
|
||||
target: p => bookingDetail(p, JOURNEY.title).getByRole('button', { name: 'Change route' }),
|
||||
act: async p => {
|
||||
@@ -519,13 +543,13 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
{
|
||||
prepare: async p => {
|
||||
await p.locator('.trek-endpoint-marker').last().click()
|
||||
await expect(transportSheet(p)).toBeVisible()
|
||||
await expect(bookingDetail(p, FLIGHT.title)).toBeVisible()
|
||||
await settle(p)
|
||||
},
|
||||
target: transportSheet,
|
||||
target: p => bookingDetail(p, FLIGHT.title),
|
||||
act: async p => {
|
||||
await transportSheet(p).getByRole('button', { name: 'Close' }).click()
|
||||
await expect(transportSheet(p)).toHaveCount(0)
|
||||
await p.keyboard.press('Escape')
|
||||
await expect(bookingDetail(p, FLIGHT.title)).toHaveCount(0)
|
||||
await settle(p)
|
||||
},
|
||||
},
|
||||
|
||||
@@ -22,8 +22,13 @@ const guide = (id: string): HelpGuide => {
|
||||
const block = (page: Page, heading: string | RegExp) => modal(page).getByText(heading, { exact: typeof heading === 'string' }).first().locator('xpath=../..')
|
||||
/** The Invite User block: its heading is the label, right inside the block. */
|
||||
const inviteBlock = (page: Page) => modal(page).locator('label').filter({ hasText: 'Invite User' }).locator('xpath=..')
|
||||
/** The days column's fold toggle comes first in the page; the day cards' own Collapse buttons follow it. */
|
||||
const leftToggle = (page: Page) => page.locator('button[title="Collapse"], button[title="Plan"]').first()
|
||||
/**
|
||||
* The days column's fold tab: the one button straight inside the column's
|
||||
* frame, which sits 10px in from the left. Its name is Collapse while the
|
||||
* column is open and Plan once it is folded, and both names are taken
|
||||
* elsewhere (the day cards fold with Collapse, the first tab is Plan).
|
||||
*/
|
||||
const leftToggle = (page: Page) => page.locator('div[style*="left: 10px"][style*="top: 10px"] > button').first()
|
||||
|
||||
async function openShare(page: Page): Promise<void> {
|
||||
await openTrip(page)
|
||||
@@ -158,7 +163,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
target: leftToggle,
|
||||
act: async p => {
|
||||
await leftToggle(p).click()
|
||||
await expect(p.locator('button[title="Plan"]')).toBeVisible()
|
||||
await expect(leftToggle(p)).toHaveAttribute('aria-label', 'Plan')
|
||||
await settle(p)
|
||||
},
|
||||
},
|
||||
@@ -190,7 +195,7 @@ const SCRIPTS: Record<string, GuideScript> = {
|
||||
await openTripOnDay(p, 1)
|
||||
const row = p.getByRole('option', { name: /^Tsukiji Outer Market/ })
|
||||
await row.hover()
|
||||
const add = row.locator('button').last()
|
||||
const add = row.getByRole('button', { name: '+ Day' })
|
||||
await expect(add, 'the + that puts a place on the open day').toBeVisible({ timeout: 15_000 })
|
||||
await add.click()
|
||||
await expect(p.getByRole('button', { name: 'Undo' })).toBeEnabled({ timeout: 15_000 })
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import { test, clearNotices, expect } from './shot'
|
||||
import { test, clearNotices, expect, seed } from './shot'
|
||||
import type { Page, Locator } from '@playwright/test'
|
||||
import { readFileSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
|
||||
/**
|
||||
* Collab surfaces, one capture each.
|
||||
@@ -15,13 +13,10 @@ import path from 'node:path'
|
||||
* So each capture targets its own card element rather than clicking a tab.
|
||||
*/
|
||||
|
||||
const seed = JSON.parse(
|
||||
readFileSync(path.join(process.cwd(), 'e2e', '.tmp', 'seed.json'), 'utf8'),
|
||||
) as { tripId: number }
|
||||
|
||||
/**
|
||||
* The panel card containing a given piece of seeded content — see cardClass in
|
||||
* CollabPanel.tsx:20.
|
||||
* The panel card containing a given piece of seeded content: see cardClass in
|
||||
* CollabPanel.tsx.
|
||||
*
|
||||
* Matching on content rather than the panel heading is deliberate: the headings
|
||||
* render uppercase through CSS while the DOM text is "Notes" / "Polls", and
|
||||
@@ -30,7 +25,7 @@ const seed = JSON.parse(
|
||||
*/
|
||||
function card(page: Page, contains: string): Locator {
|
||||
return page
|
||||
.locator('div.bg-surface-card.rounded-2xl')
|
||||
.locator('div.bg-surface-secondary.rounded-2xl.min-h-0')
|
||||
.filter({ hasText: contains })
|
||||
.last()
|
||||
}
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import { test, clearNotices, expect } from './shot'
|
||||
import { readFileSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { test, clearNotices, expect, seed } from './shot'
|
||||
|
||||
/**
|
||||
* Detail pages and the surfaces that need a couple of clicks to reach.
|
||||
@@ -10,9 +8,6 @@ import path from 'node:path'
|
||||
* the run instead of producing a screenshot of the wrong screen.
|
||||
*/
|
||||
|
||||
const seed = JSON.parse(
|
||||
readFileSync(path.join(process.cwd(), 'e2e', '.tmp', 'seed.json'), 'utf8'),
|
||||
) as { tripId: number; collectionId?: number; journeyId?: number }
|
||||
|
||||
test('collection detail', async ({ page, shot }) => {
|
||||
test.skip(!seed.collectionId, 'collections addon unavailable during seed')
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import { test, clearNotices, expect } from './shot'
|
||||
import { readFileSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { test, clearNotices, expect, seed } from './shot'
|
||||
|
||||
/**
|
||||
* Modals and dialogs.
|
||||
@@ -11,9 +9,6 @@ import path from 'node:path'
|
||||
* silently produce a screenshot of the page behind it.
|
||||
*/
|
||||
|
||||
const seed = JSON.parse(
|
||||
readFileSync(path.join(process.cwd(), 'e2e', '.tmp', 'seed.json'), 'utf8'),
|
||||
) as { tripId: number }
|
||||
|
||||
/**
|
||||
* The shared Modal (client/src/components/shared/Modal.tsx) sets neither
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
import { test, clearNotices } from './shot'
|
||||
import { readFileSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { test, clearNotices, seed } from './shot'
|
||||
|
||||
/**
|
||||
* Top-level navigable surfaces. One capture per route; anything that needs a
|
||||
@@ -11,9 +9,6 @@ import path from 'node:path'
|
||||
* for which wiki page consumes which file.
|
||||
*/
|
||||
|
||||
const seed = JSON.parse(
|
||||
readFileSync(path.join(process.cwd(), 'e2e', '.tmp', 'seed.json'), 'utf8'),
|
||||
) as { tripId: number; collectionId?: number; journeyId?: number }
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto('/dashboard')
|
||||
@@ -28,6 +23,13 @@ test('dashboard', async ({ page, shot }) => {
|
||||
|
||||
test('trip planner', async ({ page, shot }) => {
|
||||
await page.goto(`/trips/${seed.tripId}`)
|
||||
await clearNotices(page)
|
||||
// The seeded trip is running, so the plan opens on today, which is empty; the
|
||||
// picture shows the first days, where the plan has places, a note and a flight.
|
||||
await page.locator('.dp-day-header').first().click()
|
||||
await page.waitForTimeout(1500)
|
||||
await page.locator('.dp-day-header').first().evaluate(el => el.closest('.overflow-y-auto')?.scrollTo({ top: 0 }))
|
||||
await page.waitForTimeout(600)
|
||||
await shot.page_('TripPlanner')
|
||||
})
|
||||
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
import type { Page } from '@playwright/test'
|
||||
import { test, clearNotices, expect, seed } from './shot'
|
||||
|
||||
/**
|
||||
* The Plan tab and the dialogs of the trip page, as the wiki pages for the day
|
||||
* plan, places, bookings, transports and costs show them. Every picture drives
|
||||
* the real UI by its roles and names, so a renamed control fails here instead
|
||||
* of quietly photographing the wrong thing.
|
||||
*/
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto(`/trips/${seed.tripId}`)
|
||||
await clearNotices(page)
|
||||
await page.waitForTimeout(800)
|
||||
})
|
||||
|
||||
const dialog = (page: Page) => page.getByRole('dialog').last()
|
||||
const firstDayCard = (page: Page) => page.locator('.dp-day-header').first().locator('xpath=..')
|
||||
|
||||
async function openTab(page: Page, label: string) {
|
||||
// A tab can carry a longer name for screen readers than its label ("Book" for the bookings).
|
||||
await page.getByRole('button', { name: new RegExp(`^${label}`) }).first().click()
|
||||
await page.waitForTimeout(800)
|
||||
}
|
||||
|
||||
async function selectFirstDay(page: Page) {
|
||||
await page.locator('.dp-day-header').first().click()
|
||||
await page.waitForTimeout(900)
|
||||
}
|
||||
|
||||
test('plan: a day card', async ({ page, shot }) => {
|
||||
await shot.element('PlanDayCard', firstDayCard(page))
|
||||
})
|
||||
|
||||
test('plan: the day "+" menu', async ({ page, shot }) => {
|
||||
await selectFirstDay(page)
|
||||
await firstDayCard(page).locator('button[aria-label="Add to day"]').click()
|
||||
await expect(page.getByRole('button', { name: 'Add Note' })).toBeVisible()
|
||||
await shot.page_('PlanDayAddMenu')
|
||||
})
|
||||
|
||||
test('plan: the route bar', async ({ page, shot }) => {
|
||||
await selectFirstDay(page)
|
||||
const bar = page.locator('[data-dp="route-tools"]').first()
|
||||
await expect(bar).toBeVisible()
|
||||
await shot.element('PlanRouteBar', bar)
|
||||
})
|
||||
|
||||
test('plan: the places column', async ({ page, shot }) => {
|
||||
const column = page.getByPlaceholder('Search').first().locator('xpath=ancestor::div[contains(@class,"flex-col")][2]')
|
||||
await shot.element('PlacesColumn', column)
|
||||
})
|
||||
|
||||
test('plan: the place inspector', async ({ page, shot }) => {
|
||||
await page.getByRole('option').first().click()
|
||||
await page.waitForTimeout(1200)
|
||||
await shot.page_('PlaceInspector')
|
||||
})
|
||||
|
||||
test('plan: the edit place dialog', async ({ page, shot }) => {
|
||||
await page.getByRole('option').first().click()
|
||||
await page.waitForTimeout(1000)
|
||||
await page.getByRole('button', { name: 'Edit', exact: true }).first().click()
|
||||
await expect(dialog(page)).toBeVisible()
|
||||
await page.waitForTimeout(2500)
|
||||
await shot.element('PlaceForm', dialog(page))
|
||||
})
|
||||
|
||||
test('plan: the day details', async ({ page, shot }) => {
|
||||
await selectFirstDay(page)
|
||||
await shot.page_('DayDetails')
|
||||
})
|
||||
|
||||
test('plan: the stay editor', async ({ page, shot }) => {
|
||||
await selectFirstDay(page)
|
||||
const edit = page.getByRole('button', { name: /^(Edit accommodation|Add accommodation)$/ }).first()
|
||||
await edit.click()
|
||||
await expect(dialog(page)).toBeVisible()
|
||||
await shot.element('StayEditor', dialog(page))
|
||||
})
|
||||
|
||||
test('plan: the map hover card', async ({ page, shot }) => {
|
||||
const marker = page.locator('.maplibregl-marker, .mapboxgl-marker, .leaflet-marker-icon').first()
|
||||
await marker.hover()
|
||||
await expect(page.getByTestId('tooltip')).toBeVisible()
|
||||
await shot.page_('MapHoverCard')
|
||||
})
|
||||
|
||||
test('plan: the export dialog', async ({ page, shot }) => {
|
||||
await page.getByRole('button', { name: 'Export' }).first().click()
|
||||
await expect(dialog(page)).toBeVisible()
|
||||
await shot.element('ExportDialog', dialog(page))
|
||||
})
|
||||
|
||||
// The demo trip books only its flight, so the booking views are shown on the Transports tab.
|
||||
test('bookings: list view', async ({ page, shot }) => {
|
||||
await openTab(page, 'Transports')
|
||||
await page.getByRole('button', { name: 'List', exact: true }).first().click()
|
||||
await page.waitForTimeout(600)
|
||||
await shot.page_('BookingsList')
|
||||
})
|
||||
|
||||
test('transports: timeline view', async ({ page, shot }) => {
|
||||
await openTab(page, 'Transports')
|
||||
await page.getByRole('button', { name: 'Timeline', exact: true }).first().click()
|
||||
await page.waitForTimeout(800)
|
||||
await shot.page_('BookingsTimeline')
|
||||
})
|
||||
|
||||
test('bookings: the detail popup and the editor', async ({ page, shot }) => {
|
||||
await openTab(page, 'Transports')
|
||||
await page.getByRole('button', { name: 'Cards', exact: true }).first().click().catch(() => {})
|
||||
await page.locator('article').first().click()
|
||||
await expect(dialog(page)).toBeVisible()
|
||||
await shot.element('BookingDetail', dialog(page))
|
||||
await dialog(page).getByRole('button', { name: 'Edit', exact: true }).click()
|
||||
await page.waitForTimeout(800)
|
||||
await shot.element('BookingEditor', dialog(page))
|
||||
})
|
||||
|
||||
test('transports: the add transport dialog', async ({ page, shot }) => {
|
||||
await openTab(page, 'Transports')
|
||||
await page.getByRole('button', { name: /^(Add transport|Transport)$/ }).first().click()
|
||||
await expect(dialog(page)).toBeVisible()
|
||||
await shot.element('TransportEditor', dialog(page))
|
||||
})
|
||||
|
||||
test('costs: the add expense dialog', async ({ page, shot }) => {
|
||||
await openTab(page, 'Costs')
|
||||
await page.getByRole('button', { name: 'Add expense' }).first().click()
|
||||
await expect(dialog(page)).toBeVisible()
|
||||
await shot.element('ExpenseDialog', dialog(page))
|
||||
})
|
||||
|
||||
test('costs: the table view', async ({ page, shot }) => {
|
||||
await openTab(page, 'Costs')
|
||||
await page.getByRole('button', { name: 'Table', exact: true }).click()
|
||||
await expect(page.getByRole('table')).toBeVisible()
|
||||
await shot.page_('CostsTable')
|
||||
// Back to the list for every other picture of the tab.
|
||||
await page.getByRole('button', { name: 'List', exact: true }).click()
|
||||
})
|
||||
@@ -1,6 +1,4 @@
|
||||
import { test, clearNotices } from './shot'
|
||||
import { readFileSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { test, clearNotices, seed } from './shot'
|
||||
|
||||
/**
|
||||
* Trip-planner tabs and dialogs.
|
||||
@@ -11,9 +9,6 @@ import path from 'node:path'
|
||||
* current wiki ended up with screenshots the text contradicts.
|
||||
*/
|
||||
|
||||
const seed = JSON.parse(
|
||||
readFileSync(path.join(process.cwd(), 'e2e', '.tmp', 'seed.json'), 'utf8'),
|
||||
) as { tripId: number }
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await page.goto(`/trips/${seed.tripId}`)
|
||||
@@ -21,7 +16,7 @@ test.beforeEach(async ({ page }) => {
|
||||
})
|
||||
|
||||
async function openTab(page: import('@playwright/test').Page, label: string) {
|
||||
await page.getByRole('button', { name: label, exact: true }).first().click()
|
||||
await page.getByRole('button', { name: new RegExp(`^${label}`) }).first().click()
|
||||
await page.waitForTimeout(700)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { test as base, expect, type Page, type Locator } from '@playwright/test'
|
||||
import { mkdirSync } from 'node:fs'
|
||||
import { mkdirSync, readFileSync } from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import { E2E_SEED_FILE } from '../../playwright.config'
|
||||
|
||||
/**
|
||||
* Shared plumbing for the documentation screenshot run (`npm run shots`).
|
||||
@@ -56,6 +57,20 @@ async function hideDevOnlyUi(page: Page): Promise<void> {
|
||||
|
||||
export { expect }
|
||||
|
||||
interface SeedIds { tripId: number; collectionId?: number | null; journeyId?: number | null }
|
||||
let seedCache: SeedIds | null = null
|
||||
/**
|
||||
* The ids the seed project wrote for this run's database. Read on first use, not
|
||||
* at import: Playwright loads every test file before the seed project has run,
|
||||
* and the file is named after the API port, so a run on its own ports reads its own.
|
||||
*/
|
||||
export const seed: SeedIds = new Proxy({} as SeedIds, {
|
||||
get: (_t, key: string) => {
|
||||
seedCache ??= JSON.parse(readFileSync(path.join(process.cwd(), E2E_SEED_FILE), 'utf8')) as SeedIds
|
||||
return seedCache[key as keyof SeedIds]
|
||||
},
|
||||
})
|
||||
|
||||
export class Shot {
|
||||
constructor(private readonly page: Page) {}
|
||||
|
||||
@@ -104,6 +119,13 @@ export class Shot {
|
||||
* but tolerant: on a seeded DB the notice may already be cleared.
|
||||
*/
|
||||
export async function clearNotices(page: Page): Promise<void> {
|
||||
// The "what's new" card of a release lays an overlay over the whole page that
|
||||
// takes every click; it may land a moment after the page, so give it that moment.
|
||||
const releaseClose = page.locator('.rn-close')
|
||||
if (await releaseClose.waitFor({ state: 'visible', timeout: 2_500 }).then(() => true, () => false)) {
|
||||
await releaseClose.click().catch(() => {})
|
||||
await page.locator('.rn-overlay').waitFor({ state: 'detached', timeout: 3_000 }).catch(() => {})
|
||||
}
|
||||
const next = page.getByRole('button', { name: /next/i })
|
||||
for (let i = 0; i < 6 && (await next.isVisible().catch(() => false)); i++) {
|
||||
if (!(await next.isEnabled().catch(() => false))) break
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
// FE-COSTSVIEW-001 to FE-COSTSVIEW-004: the table as a second view of the Costs tab
|
||||
import { render, screen, waitFor, within } from '../../../tests/helpers/render'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { http, HttpResponse } from 'msw'
|
||||
import { server } from '../../../tests/helpers/msw/server'
|
||||
import { useAuthStore } from '../../store/authStore'
|
||||
import { useTripStore } from '../../store/tripStore'
|
||||
import { resetAllStores, seedStore } from '../../../tests/helpers/store'
|
||||
import { buildUser, buildTrip, buildBudgetItem } from '../../../tests/helpers/factories'
|
||||
import CostsPanel from './CostsPanel'
|
||||
|
||||
const tripMembers = [
|
||||
{ id: 1, username: 'alice', avatar_url: null },
|
||||
{ id: 2, username: 'bob', avatar_url: null },
|
||||
]
|
||||
|
||||
const lunch = { ...buildBudgetItem({ trip_id: 1, category: 'food', name: 'Lunch' }), id: 41, total_price: 24, persons: 2, expense_date: '2025-06-15', payers: [] }
|
||||
|
||||
beforeEach(() => {
|
||||
resetAllStores()
|
||||
localStorage.removeItem('trek:costs-view')
|
||||
seedStore(useAuthStore, { user: buildUser(), isAuthenticated: true })
|
||||
seedStore(useTripStore, { trip: buildTrip({ id: 1, currency: 'EUR' }) })
|
||||
})
|
||||
|
||||
function serve(extra: Parameters<typeof server.use> = []) {
|
||||
server.use(
|
||||
http.get('/api/trips/1/budget', () => HttpResponse.json({ items: [lunch] })),
|
||||
http.get('/api/trips/1/budget/settlement', () => HttpResponse.json({ balances: [], flows: [], settlements: [] })),
|
||||
...extra,
|
||||
)
|
||||
}
|
||||
|
||||
describe('CostsPanel table view', () => {
|
||||
it('FE-COSTSVIEW-001: opens on the list, switches to the table and remembers it', async () => {
|
||||
serve()
|
||||
const user = userEvent.setup()
|
||||
const { unmount } = render(<CostsPanel tripId={1} tripMembers={tripMembers} />)
|
||||
await screen.findByText('Lunch')
|
||||
expect(screen.queryByRole('table')).not.toBeInTheDocument()
|
||||
expect(screen.getByRole('button', { name: 'List' })).toHaveAttribute('aria-pressed', 'true')
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'Table' }))
|
||||
expect(screen.getByRole('table')).toBeInTheDocument()
|
||||
expect(localStorage.getItem('trek:costs-view')).toBe('table')
|
||||
unmount()
|
||||
|
||||
// Back on the tab later, the table is still the view.
|
||||
render(<CostsPanel tripId={1} tripMembers={tripMembers} />)
|
||||
expect(await screen.findByRole('table')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('FE-COSTSVIEW-002: the table view swaps the category card for the four-way summary', async () => {
|
||||
localStorage.setItem('trek:costs-view', 'table')
|
||||
serve()
|
||||
render(<CostsPanel tripId={1} tripMembers={tripMembers} />)
|
||||
await screen.findByRole('table')
|
||||
expect(screen.getByRole('region', { name: 'Summary' })).toBeInTheDocument()
|
||||
expect(screen.queryByRole('region', { name: 'By category' })).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('FE-COSTSVIEW-003: a cell edited in the table is saved to the expense', async () => {
|
||||
localStorage.setItem('trek:costs-view', 'table')
|
||||
let patched: Record<string, unknown> | null = null
|
||||
serve([http.put('/api/trips/1/budget/:id', async ({ request }) => {
|
||||
patched = (await request.json()) as Record<string, unknown>
|
||||
return HttpResponse.json({ item: { ...lunch, ...patched } })
|
||||
})])
|
||||
const user = userEvent.setup()
|
||||
render(<CostsPanel tripId={1} tripMembers={tripMembers} />)
|
||||
await user.click(await screen.findByRole('button', { name: 'Name: Lunch' }))
|
||||
const field = screen.getByRole('textbox', { name: 'Name' })
|
||||
await user.clear(field)
|
||||
await user.type(field, 'Team lunch{Enter}')
|
||||
await waitFor(() => expect(patched).toEqual({ name: 'Team lunch' }))
|
||||
})
|
||||
|
||||
it('FE-COSTSVIEW-004: a row added in a category is created empty with that category and date', async () => {
|
||||
localStorage.setItem('trek:costs-view', 'table')
|
||||
let posted: Record<string, unknown> | null = null
|
||||
serve([http.post('/api/trips/1/budget', async ({ request }) => {
|
||||
posted = (await request.json()) as Record<string, unknown>
|
||||
return HttpResponse.json({ item: { ...buildBudgetItem({ trip_id: 1, category: 'food', name: 'New Entry' }), id: 77, payers: [] } })
|
||||
})])
|
||||
const user = userEvent.setup()
|
||||
render(<CostsPanel tripId={1} tripMembers={tripMembers} />)
|
||||
const table = await screen.findByRole('table')
|
||||
await user.click(within(table).getByRole('button', { name: 'Add expense' }))
|
||||
await waitFor(() => expect(posted).toBeTruthy())
|
||||
expect(posted).toEqual(expect.objectContaining({ name: 'New Entry', category: 'food', total_price: 0, expense_date: '2025-06-15' }))
|
||||
})
|
||||
})
|
||||
@@ -34,7 +34,8 @@ import { Tooltip } from '../shared/Tooltip'
|
||||
import { DialogButton, DialogFooter, DialogHeader, DialogSection, DialogShell, DialogTile, FooterSpacer, NEUTRAL_TINT, fs } from '../shared/DialogShell'
|
||||
import { AddRowButton, EditorField, GRID_2, INPUT, PillSelect, Segmented, TEXTAREA } from '../shared/dialogParts'
|
||||
import { CountPill, EYEBROW } from '../Planner/bookings/bookingParts'
|
||||
import CostsToolbar from './CostsToolbar'
|
||||
import CostsToolbar, { type CostsView } from './CostsToolbar'
|
||||
import CostsTable, { CostsTableSummary } from './CostsTable'
|
||||
|
||||
interface CostsPanelProps {
|
||||
tripId: number
|
||||
@@ -82,9 +83,10 @@ type LedgerEntry =
|
||||
|
||||
const round2 = (n: number) => Math.round(n * 100) / 100
|
||||
const FIELD_H = 40 // shared height for the amount / currency / day row in the modal
|
||||
const COSTS_VIEW_KEY = 'trek:costs-view'
|
||||
|
||||
export default function CostsPanel({ tripId, tripMembers = [] }: CostsPanelProps) {
|
||||
const { trip, budgetItems, deleteBudgetItem, loadBudgetItems } = useTripStore()
|
||||
const { trip, budgetItems, deleteBudgetItem, loadBudgetItems, addBudgetItem, updateBudgetItem } = useTripStore()
|
||||
const me = useAuthStore(s => s.user?.id ?? -1)
|
||||
const can = useCanDo()
|
||||
const canEdit = can('budget_edit', trip)
|
||||
@@ -121,6 +123,15 @@ export default function CostsPanel({ tripId, tripMembers = [] }: CostsPanelProps
|
||||
const [expandedFinalId, setExpandedFinalId] = useState<number | null>(null)
|
||||
const [editingSettlement, setEditingSettlement] = useState<Settlement | null>(null)
|
||||
const [addingPayment, setAddingPayment] = useState(false)
|
||||
// The list stays what Costs opens with; the table is the planning view beside it,
|
||||
// remembered in this browser like the Bookings view.
|
||||
const [view, setViewState] = useState<CostsView>(() => {
|
||||
try { return localStorage.getItem(COSTS_VIEW_KEY) === 'table' ? 'table' : 'list' } catch { return 'list' }
|
||||
})
|
||||
const setView = (next: CostsView) => {
|
||||
setViewState(next)
|
||||
try { localStorage.setItem(COSTS_VIEW_KEY, next) } catch { /* storage unavailable: the choice lasts until reload */ }
|
||||
}
|
||||
|
||||
const people = tripMembers
|
||||
const personById = useCallback((id: number) => people.find(p => p.id === id), [people])
|
||||
@@ -304,6 +315,18 @@ export default function CostsPanel({ tripId, tripMembers = [] }: CostsPanelProps
|
||||
const handleDelete = async (id: number) => {
|
||||
try { await deleteBudgetItem(tripId, id); loadSettlement() } catch { toast.error(t('common.unknownError')) }
|
||||
}
|
||||
// The table's own writes: one cell at a time, and an empty row to type into.
|
||||
const updateFromTable = async (id: number, patch: Partial<BudgetItem>) => {
|
||||
try { await updateBudgetItem(tripId, id, patch); loadSettlement() } catch { toast.error(t('common.unknownError')) }
|
||||
}
|
||||
const addFromTable = async (category: string, expenseDate: string | null) => {
|
||||
try {
|
||||
return await addBudgetItem(tripId, { name: t('budget.newEntry'), category, total_price: 0, expense_date: expenseDate })
|
||||
} catch {
|
||||
toast.error(t('common.unknownError'))
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
// CSV export of all expenses — the wiki-documented export that got lost in the
|
||||
// Costs rework (#1500). One row per expense, oldest first.
|
||||
@@ -399,6 +422,7 @@ export default function CostsPanel({ tripId, tripMembers = [] }: CostsPanelProps
|
||||
canEdit={canEdit} canSettle={(settlement?.flows || []).length > 0}
|
||||
onSettleAll={settleAll} onAddExpense={() => { setEditing(null); setModalOpen(true) }}
|
||||
onScanReceipt={receiptScan.offered ? receiptScan.open : undefined}
|
||||
view={view} onView={setView}
|
||||
filters={{
|
||||
query: search, onQuery: setSearch,
|
||||
owner: filter, onOwner: setFilter,
|
||||
@@ -441,7 +465,16 @@ export default function CostsPanel({ tripId, tripMembers = [] }: CostsPanelProps
|
||||
<div className="costs-main" style={{ gridColumn: 'span 3', minWidth: 0 }}>
|
||||
|
||||
{dayBanner}
|
||||
{dayGroups.length === 0 ? (
|
||||
{view === 'table' ? (
|
||||
filtered.length === 0 && budgetItems.length > 0 ? (
|
||||
<div className="text-content-faint" style={{ textAlign: 'center', padding: '60px 20px' }}>{t('costs.noMatch')}</div>
|
||||
) : (
|
||||
<CostsTable items={filtered} base={base} canEdit={canEdit}
|
||||
baseTotal={baseTotal} toBase={booked} currencyOf={curOf} fmt={v => fmt(v)} personName={personName}
|
||||
onUpdate={updateFromTable} onAdd={addFromTable}
|
||||
onOpen={e => { setEditing(e); setModalOpen(true) }} onDelete={id => void handleDelete(id)} />
|
||||
)
|
||||
) : dayGroups.length === 0 ? (
|
||||
search ? (
|
||||
<div className="text-content-faint" style={{ textAlign: 'center', padding: '60px 20px' }}>
|
||||
{t('costs.noMatch')}
|
||||
@@ -495,11 +528,15 @@ export default function CostsPanel({ tripId, tripMembers = [] }: CostsPanelProps
|
||||
<div className="px-4 py-4">{FinalBudgetList()}</div>
|
||||
</section>
|
||||
|
||||
{/* by category */}
|
||||
<section aria-label={t('costs.byCategory')} className={SIDE_CARD}>
|
||||
{sideHead(t('costs.byCategory'))}
|
||||
<div className="px-4 py-4">{CategoryBreakdown()}</div>
|
||||
</section>
|
||||
{/* by category; the table view sums up four ways instead */}
|
||||
{view === 'table' ? (
|
||||
<CostsTableSummary items={filtered} baseTotal={baseTotal} toBase={booked} fmt={v => fmt(v)} personName={personName} />
|
||||
) : (
|
||||
<section aria-label={t('costs.byCategory')} className={SIDE_CARD}>
|
||||
{sideHead(t('costs.byCategory'))}
|
||||
<div className="px-4 py-4">{CategoryBreakdown()}</div>
|
||||
</section>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>)}
|
||||
|
||||
@@ -0,0 +1,227 @@
|
||||
// FE-COSTSTABLE-001 to FE-COSTSTABLE-016
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import { render, screen, fireEvent, within, waitFor } from '../../../tests/helpers/render'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { resetAllStores } from '../../../tests/helpers/store'
|
||||
import { buildBudgetItem } from '../../../tests/helpers/factories'
|
||||
import type { BudgetItem } from '../../types'
|
||||
import CostsTable, { CostsTableSummary, type CostsTableProps } from './CostsTable'
|
||||
|
||||
const fmt = (v: number) => `${v.toFixed(2)} EUR`
|
||||
|
||||
function item(overrides: Partial<BudgetItem>): BudgetItem {
|
||||
return { ...buildBudgetItem(), persons: null, days: null, currency: 'EUR', payers: [], ...overrides } as BudgetItem
|
||||
}
|
||||
|
||||
function setup(items: BudgetItem[], overrides: Partial<CostsTableProps> = {}) {
|
||||
const props: CostsTableProps = {
|
||||
items,
|
||||
base: 'EUR',
|
||||
canEdit: true,
|
||||
baseTotal: e => e.total_price || 0,
|
||||
toBase: amount => amount,
|
||||
currencyOf: e => e.currency || 'EUR',
|
||||
fmt,
|
||||
personName: id => (id === 1 ? 'ada' : 'bob'),
|
||||
onUpdate: vi.fn().mockResolvedValue(undefined),
|
||||
onAdd: vi.fn().mockResolvedValue(null),
|
||||
onOpen: vi.fn(),
|
||||
onDelete: vi.fn(),
|
||||
...overrides,
|
||||
}
|
||||
render(<CostsTable {...props} />)
|
||||
return props
|
||||
}
|
||||
|
||||
beforeEach(() => resetAllStores())
|
||||
|
||||
describe('CostsTable', () => {
|
||||
it('FE-COSTSTABLE-001: groups expenses under their category with a subtotal and a trip total', () => {
|
||||
setup([
|
||||
item({ id: 1, name: 'Hotel', category: 'accommodation', total_price: 120 }),
|
||||
item({ id: 2, name: 'Ramen', category: 'food', total_price: 30 }),
|
||||
item({ id: 3, name: 'Snacks', category: 'food', total_price: 10 }),
|
||||
])
|
||||
const food = screen.getByRole('button', { name: /Food/ })
|
||||
expect(food).toHaveAttribute('aria-expanded', 'true')
|
||||
expect(within(food.closest('tr')!).getByText('40.00 EUR')).toBeInTheDocument()
|
||||
expect(within(screen.getByRole('button', { name: /Accommodation/ }).closest('tr')!).getByText('120.00 EUR')).toBeInTheDocument()
|
||||
expect(screen.getByRole('rowheader', { name: /Total/ }).closest('tr')).toHaveTextContent('160.00 EUR')
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-002: works out per person, per day and per person per day', () => {
|
||||
setup([item({ id: 1, name: 'Ferry', category: 'transport', total_price: 80, persons: 2, days: 4 })])
|
||||
const row = screen.getByRole('button', { name: 'Name: Ferry' }).closest('tr')!
|
||||
expect(row).toHaveTextContent('40.00')
|
||||
expect(row).toHaveTextContent('20.00')
|
||||
expect(row).toHaveTextContent('10.00')
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-003: an uneven split leaves the per-person columns empty', () => {
|
||||
setup([item({
|
||||
id: 1, name: 'Dinner', category: 'food', total_price: 90, persons: 2, days: 3,
|
||||
members: [{ user_id: 1, paid: 0, username: 'ada', amount: 60 }, { user_id: 2, paid: 0, username: 'bob', amount: 30 }],
|
||||
} as Partial<BudgetItem>)])
|
||||
const cells = screen.getByRole('button', { name: 'Name: Dinner' }).closest('tr')!.querySelectorAll('td')
|
||||
expect(cells[5].textContent).toBe('')
|
||||
expect(cells[6].textContent).toBe('30.00')
|
||||
expect(cells[7].textContent).toBe('')
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-004: a name edits in place, Enter keeps it and Escape leaves it', async () => {
|
||||
const user = userEvent.setup()
|
||||
const props = setup([item({ id: 7, name: 'Taxi', category: 'transport', total_price: 15 })])
|
||||
await user.click(screen.getByRole('button', { name: 'Name: Taxi' }))
|
||||
const field = screen.getByRole('textbox', { name: 'Name' })
|
||||
await user.clear(field)
|
||||
await user.type(field, 'Airport taxi{Enter}')
|
||||
expect(props.onUpdate).toHaveBeenCalledWith(7, { name: 'Airport taxi' })
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'Name: Taxi' }))
|
||||
await user.type(screen.getByRole('textbox', { name: 'Name' }), 'x{Escape}')
|
||||
expect(props.onUpdate).toHaveBeenCalledTimes(1)
|
||||
expect(screen.queryByRole('textbox', { name: 'Name' })).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-005: an empty name is not saved', async () => {
|
||||
const user = userEvent.setup()
|
||||
const props = setup([item({ id: 7, name: 'Taxi', category: 'transport' })])
|
||||
await user.click(screen.getByRole('button', { name: 'Name: Taxi' }))
|
||||
await user.clear(screen.getByRole('textbox', { name: 'Name' }))
|
||||
await user.keyboard('{Enter}')
|
||||
expect(props.onUpdate).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-006: a total nobody paid edits in place, with a comma as the decimal mark', async () => {
|
||||
const user = userEvent.setup()
|
||||
const props = setup([item({ id: 3, name: 'Museum', category: 'activities', total_price: 12 })])
|
||||
await user.click(screen.getByRole('button', { name: 'Total: 12.00 EUR' }))
|
||||
const field = screen.getByRole('textbox', { name: 'Total' })
|
||||
await user.clear(field)
|
||||
await user.type(field, '14,50')
|
||||
fireEvent.blur(field)
|
||||
expect(props.onUpdate).toHaveBeenCalledWith(3, { total_price: 14.5 })
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-007: a total someone paid is locked and opens the expense instead', async () => {
|
||||
const user = userEvent.setup()
|
||||
const paid = item({ id: 4, name: 'Hotel', category: 'accommodation', total_price: 200, payers: [{ user_id: 1, amount: 200 }] } as Partial<BudgetItem>)
|
||||
const props = setup([paid])
|
||||
const total = screen.getByRole('button', { name: 'Total: 200.00 EUR' })
|
||||
fireEvent.mouseEnter(total)
|
||||
expect(await screen.findByRole('tooltip')).toHaveTextContent(/change the amount in the expense/)
|
||||
await user.click(total)
|
||||
expect(props.onOpen).toHaveBeenCalledWith(paid)
|
||||
expect(screen.queryByRole('textbox', { name: 'Total' })).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-008: a total in another currency is locked and shows what was entered', async () => {
|
||||
setup([item({ id: 5, name: 'Swiss train', category: 'transport', total_price: 62, currency: 'CHF' })], {
|
||||
baseTotal: () => 66.4,
|
||||
})
|
||||
const total = screen.getByRole('button', { name: 'Total: 66.40 EUR' })
|
||||
expect(total).toHaveTextContent('62.00 CHF')
|
||||
fireEvent.mouseEnter(total)
|
||||
expect(await screen.findByRole('tooltip')).toHaveTextContent('Entered in CHF')
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-009: persons and days fill in from an empty pill and clear again', async () => {
|
||||
const user = userEvent.setup()
|
||||
const props = setup([item({ id: 6, name: 'Boat', category: 'transport', total_price: 60 })])
|
||||
await user.click(screen.getByRole('button', { name: 'Persons' }))
|
||||
await user.type(screen.getByRole('textbox', { name: 'Persons' }), '3{Enter}')
|
||||
expect(props.onUpdate).toHaveBeenCalledWith(6, { persons: 3 })
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'Days' }))
|
||||
await user.type(screen.getByRole('textbox', { name: 'Days' }), '0{Enter}')
|
||||
expect(props.onUpdate).toHaveBeenLastCalledWith(6, { days: null })
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-010: a row added to a category takes its latest date and opens its name', async () => {
|
||||
const user = userEvent.setup()
|
||||
const created = item({ id: 99, name: 'New Entry', category: 'food' })
|
||||
const onAdd = vi.fn().mockResolvedValue(created)
|
||||
render(<CostsTable items={[
|
||||
item({ id: 1, name: 'Lunch', category: 'food', expense_date: '2025-06-02' }),
|
||||
item({ id: 2, name: 'Dinner', category: 'food', expense_date: '2025-06-04' }),
|
||||
created,
|
||||
]} base="EUR" canEdit baseTotal={e => e.total_price || 0} toBase={a => a} currencyOf={() => 'EUR'} fmt={fmt}
|
||||
personName={() => ''} onUpdate={vi.fn()} onAdd={onAdd} onOpen={vi.fn()} onDelete={vi.fn()} />)
|
||||
await user.click(screen.getByRole('button', { name: 'Add expense' }))
|
||||
expect(onAdd).toHaveBeenCalledWith('food', '2025-06-04')
|
||||
await waitFor(() => expect(screen.getByRole('textbox', { name: 'Name' })).toHaveValue('New Entry'))
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-011: a category folds away and back', async () => {
|
||||
const user = userEvent.setup()
|
||||
setup([item({ id: 1, name: 'Ramen', category: 'food' })])
|
||||
await user.click(screen.getByRole('button', { name: /Food/ }))
|
||||
expect(screen.queryByText('Ramen')).not.toBeInTheDocument()
|
||||
await user.click(screen.getByRole('button', { name: /Food/ }))
|
||||
expect(screen.getByText('Ramen')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-012: the row menu edits in the dialog and deletes', async () => {
|
||||
const user = userEvent.setup()
|
||||
const e = item({ id: 8, name: 'Gift', category: 'shopping' })
|
||||
const props = setup([e])
|
||||
await user.click(screen.getByRole('button', { name: 'More options' }))
|
||||
await user.click(await screen.findByRole('button', { name: 'Edit' }))
|
||||
expect(props.onOpen).toHaveBeenCalledWith(e)
|
||||
await user.click(screen.getByRole('button', { name: 'More options' }))
|
||||
await user.click(await screen.findByRole('button', { name: 'Delete' }))
|
||||
expect(props.onDelete).toHaveBeenCalledWith(8)
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-013: without edit rights the table reads only', async () => {
|
||||
const user = userEvent.setup()
|
||||
const e = item({ id: 9, name: 'Tip', category: 'tips', total_price: 5, expense_date: '2025-06-03' })
|
||||
const props = setup([e], { canEdit: false })
|
||||
expect(screen.queryByRole('button', { name: /^Name:/ })).not.toBeInTheDocument()
|
||||
expect(screen.queryByRole('button', { name: 'Add expense' })).not.toBeInTheDocument()
|
||||
await user.click(screen.getByRole('button', { name: 'More options' }))
|
||||
await user.click(await screen.findByRole('button', { name: 'Open' }))
|
||||
expect(props.onOpen).toHaveBeenCalledWith(e)
|
||||
expect(screen.queryByRole('button', { name: 'Delete' })).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
describe('CostsTableSummary', () => {
|
||||
const summaryItems = [
|
||||
item({ id: 1, name: 'Hotel', category: 'accommodation', total_price: 100, expense_date: '2025-06-02', payers: [{ user_id: 1, amount: 100 }] } as Partial<BudgetItem>),
|
||||
item({ id: 2, name: 'Ramen', category: 'food', total_price: 30, expense_date: '2025-06-01', payers: [{ user_id: 2, amount: 30 }] } as Partial<BudgetItem>),
|
||||
item({ id: 3, name: 'Snacks', category: 'food', total_price: 10 }),
|
||||
]
|
||||
const renderSummary = () => render(<CostsTableSummary items={summaryItems} baseTotal={e => e.total_price || 0} toBase={a => a} fmt={fmt} personName={id => (id === 1 ? 'ada' : 'bob')} />)
|
||||
|
||||
it('FE-COSTSTABLE-014: sums up by category, largest first', () => {
|
||||
renderSummary()
|
||||
const rows = within(screen.getByRole('region', { name: 'Summary' })).getAllByRole('listitem')
|
||||
expect(rows[0]).toHaveTextContent(/Accommodation.*100\.00 EUR/)
|
||||
expect(rows[1]).toHaveTextContent(/Food.*40\.00 EUR/)
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-015: by day oldest first, the undated last', async () => {
|
||||
const user = userEvent.setup()
|
||||
renderSummary()
|
||||
await user.click(screen.getByRole('button', { name: 'Day' }))
|
||||
const rows = within(screen.getByRole('region', { name: 'Summary' })).getAllByRole('listitem')
|
||||
expect(rows[0]).toHaveTextContent('30.00 EUR')
|
||||
expect(rows[1]).toHaveTextContent('100.00 EUR')
|
||||
expect(rows[2]).toHaveTextContent(/No date.*10\.00 EUR/)
|
||||
})
|
||||
|
||||
it('FE-COSTSTABLE-016: by payer with the unpaid on their own line, and paid against open', async () => {
|
||||
const user = userEvent.setup()
|
||||
renderSummary()
|
||||
await user.click(screen.getByRole('button', { name: 'Payer' }))
|
||||
const region = screen.getByRole('region', { name: 'Summary' })
|
||||
expect(region).toHaveTextContent(/ada.*100\.00 EUR/)
|
||||
expect(region).toHaveTextContent(/bob.*30\.00 EUR/)
|
||||
expect(region).toHaveTextContent(/No payer yet.*10\.00 EUR/)
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'Status' }))
|
||||
expect(region).toHaveTextContent(/Paid.*130\.00 EUR/)
|
||||
expect(region).toHaveTextContent(/Open.*10\.00 EUR/)
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,387 @@
|
||||
import { useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react'
|
||||
import { ChevronDown, Lock, Pencil, Plus, Trash2 } from 'lucide-react'
|
||||
import { useTranslation } from '../../i18n'
|
||||
import type { BudgetItem } from '../../types'
|
||||
import { NEUTRAL_TINT, fs } from '../shared/DialogShell'
|
||||
import { Segmented } from '../shared/dialogParts'
|
||||
import { Tooltip } from '../shared/Tooltip'
|
||||
import { CustomDatePicker } from '../shared/CustomDateTimePicker'
|
||||
import { MoreButton, tintOf } from '../Planner/planParts'
|
||||
import { COST_CATEGORY_LIST, catMeta } from './costsCategories'
|
||||
import { calcPD, calcPP, calcPPD, hasCustomMemberSplit, normalizePastedAmount } from './BudgetPanel.helpers'
|
||||
|
||||
/**
|
||||
* The Costs tab as a categorized table: the planning view the old budget had,
|
||||
* built on the same expenses the list shows. Name, date, total, persons and days
|
||||
* edit in place; everything a split or a payer needs stays in the expense
|
||||
* dialog, which each row opens.
|
||||
*/
|
||||
|
||||
type EditableField = 'name' | 'total_price' | 'persons' | 'days'
|
||||
|
||||
export interface CostsTableProps {
|
||||
/** The expenses left after the bar's search and filters. */
|
||||
items: BudgetItem[]
|
||||
/** The display currency everything is shown in. */
|
||||
base: string
|
||||
canEdit: boolean
|
||||
/** An expense's total in the display currency, booked at its frozen rate. */
|
||||
baseTotal: (e: BudgetItem) => number
|
||||
/** Any amount of an expense in the display currency. */
|
||||
toBase: (amount: number, e: BudgetItem) => number
|
||||
/** The currency an expense was entered in. */
|
||||
currencyOf: (e: BudgetItem) => string
|
||||
fmt: (amount: number) => string
|
||||
personName: (userId: number) => string
|
||||
onUpdate: (id: number, patch: Partial<BudgetItem>) => Promise<unknown>
|
||||
/** Creates an empty expense in a category and resolves with it. */
|
||||
onAdd: (category: string, expenseDate: string | null) => Promise<BudgetItem | null | undefined>
|
||||
onOpen: (e: BudgetItem) => void
|
||||
onDelete: (id: number) => void
|
||||
}
|
||||
|
||||
// Every column is centred on its title except the name, which reads from the left.
|
||||
const HEAD_BASE = 'px-3 py-2.5 font-geist font-bold uppercase tracking-[.08em] text-content-faint'
|
||||
const HEAD = `${HEAD_BASE} text-center`
|
||||
const CELL = 'px-3 py-2 text-center tabular-nums text-content'
|
||||
/** The three worked-out columns sit on their own quiet ground, apart from what is typed in. */
|
||||
const CALC = 'bg-surface-secondary'
|
||||
/** A value you can change, shown the way the rest of the app shows a fact: a white badge. */
|
||||
const BADGE = 'inline-flex h-6 min-w-[40px] items-center justify-center rounded-full bg-surface-card px-2.5 font-geist tabular-nums text-content shadow-sm ring-1 ring-edge-faint'
|
||||
/** The same place with nothing in it yet: a dashed outline and a plus that says it takes a value. */
|
||||
const BADGE_EMPTY = 'inline-flex h-6 min-w-[40px] items-center justify-center rounded-full border border-dashed border-edge text-content-faint transition-colors group-hover:border-content-faint'
|
||||
/** Shown and edited, a cell keeps one height, so a row never grows while you type in it. */
|
||||
const CELL_H = 'h-7'
|
||||
const INPUT = `${CELL_H} w-full min-w-0 rounded-[8px] border border-edge bg-surface-input px-1.5 py-0 leading-none text-content outline-none focus:ring-2 focus:ring-[color:var(--text-primary)]`
|
||||
|
||||
const hasPayers = (e: BudgetItem) => (e.payers || []).some(p => p.amount !== 0)
|
||||
|
||||
export default function CostsTable(p: CostsTableProps) {
|
||||
const { t, locale } = useTranslation()
|
||||
const [collapsed, setCollapsed] = useState<Set<string>>(new Set())
|
||||
const [editing, setEditing] = useState<{ id: number; field: EditableField } | null>(null)
|
||||
|
||||
const groups = useMemo(() => {
|
||||
const byKey = new Map<string, BudgetItem[]>()
|
||||
for (const e of p.items) {
|
||||
const key = catMeta(e.category).key
|
||||
if (!byKey.has(key)) byKey.set(key, [])
|
||||
byKey.get(key)!.push(e)
|
||||
}
|
||||
// The category order of the dialog, each group oldest first like a ledger on paper.
|
||||
return COST_CATEGORY_LIST
|
||||
.filter(c => byKey.has(c.key))
|
||||
.map(c => ({ meta: c, items: byKey.get(c.key)!.slice().sort((a, b) => (a.expense_date || '').localeCompare(b.expense_date || '') || a.id - b.id) }))
|
||||
}, [p.items])
|
||||
|
||||
const grandTotal = p.items.reduce((sum, e) => sum + p.baseTotal(e), 0)
|
||||
const numFmt = (v: number | null) => v == null ? '' : new Intl.NumberFormat(locale, { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(v)
|
||||
|
||||
const toggle = (key: string) => setCollapsed(prev => {
|
||||
const next = new Set(prev)
|
||||
if (next.has(key)) next.delete(key); else next.add(key)
|
||||
return next
|
||||
})
|
||||
|
||||
// A new row takes the latest date of its category, so back-filling a day goes quickly.
|
||||
const add = async (category: string) => {
|
||||
const dates = p.items.filter(e => catMeta(e.category).key === category && e.expense_date).map(e => e.expense_date as string).sort()
|
||||
const created = await p.onAdd(category, dates.length ? dates[dates.length - 1] : null)
|
||||
if (created) setEditing({ id: created.id, field: 'name' })
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-3">
|
||||
<div className="overflow-x-auto rounded-2xl border border-edge-faint bg-surface-card">
|
||||
<table className="w-full min-w-[820px] border-collapse" style={fs(13, 'body')}>
|
||||
<colgroup>
|
||||
<col />
|
||||
<col className="w-[132px]" />
|
||||
<col className="w-[128px]" />
|
||||
<col className="w-[84px]" />
|
||||
<col className="w-[72px]" />
|
||||
<col className={`w-[104px] ${CALC}`} />
|
||||
<col className={`w-[96px] ${CALC}`} />
|
||||
<col className={`w-[104px] ${CALC}`} />
|
||||
<col className="w-11" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr className="border-b border-edge-faint bg-surface-tertiary" style={fs(10)}>
|
||||
<th scope="col" className={`${HEAD_BASE} text-left`}>{t('budget.table.name')}</th>
|
||||
<th scope="col" className={HEAD}>{t('budget.table.date')}</th>
|
||||
<th scope="col" className={HEAD}>{t('budget.table.total')}</th>
|
||||
<th scope="col" className={HEAD}>{t('budget.table.persons')}</th>
|
||||
<th scope="col" className={HEAD}>{t('budget.table.days')}</th>
|
||||
<th scope="col" className={HEAD}>{t('budget.table.perPerson')}</th>
|
||||
<th scope="col" className={HEAD}>{t('budget.table.perDay')}</th>
|
||||
<th scope="col" className={HEAD}>{t('budget.table.perPersonDay')}</th>
|
||||
<th scope="col"><span className="sr-only">{t('files.menu')}</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
{groups.map(({ meta, items }) => {
|
||||
const open = !collapsed.has(meta.key)
|
||||
const subtotal = items.reduce((sum, e) => sum + p.baseTotal(e), 0)
|
||||
return (
|
||||
<tbody key={meta.key}>
|
||||
<tr className="border-t border-edge-faint" style={{ background: tintOf(meta.color, 9) }}>
|
||||
<th scope="rowgroup" colSpan={2} className="px-2 py-2 text-left font-normal">
|
||||
<button type="button" onClick={() => toggle(meta.key)} aria-expanded={open}
|
||||
className="inline-flex items-center gap-2.5 rounded-[10px] py-0.5 pl-1 pr-2 hover:bg-surface-card">
|
||||
<ChevronDown size={14} strokeWidth={2.2} className={`text-content-faint transition-transform ${open ? '' : '-rotate-90'}`} />
|
||||
<span className="grid h-7 w-7 place-items-center rounded-[9px] bg-surface-card shadow-sm">
|
||||
<meta.Icon size={14} strokeWidth={2.2} style={{ color: meta.color }} />
|
||||
</span>
|
||||
<span className="font-semibold text-content">{t(meta.labelKey)}</span>
|
||||
<span className="rounded-full bg-surface-card px-2 py-px font-geist tabular-nums text-content-muted shadow-sm" style={fs(10.5)}>{items.length}</span>
|
||||
</button>
|
||||
</th>
|
||||
<td className="px-3 py-2 text-center">
|
||||
<span className="inline-flex rounded-full bg-surface-card px-2.5 py-[3px] font-geist font-semibold tabular-nums text-content shadow-sm" style={fs(12, 'body')}>{p.fmt(subtotal)}</span>
|
||||
</td>
|
||||
<td colSpan={6} />
|
||||
</tr>
|
||||
{open && items.map(e => (
|
||||
<Row key={e.id} e={e} p={p} editing={editing} setEditing={setEditing} numFmt={numFmt} />
|
||||
))}
|
||||
{open && p.canEdit && (
|
||||
<tr className="border-t border-edge-faint">
|
||||
<td colSpan={9} className="px-3 py-1.5">
|
||||
<button type="button" onClick={() => void add(meta.key)}
|
||||
className="inline-flex items-center gap-2 rounded-full py-1 pl-1 pr-3 font-medium text-content-muted hover:bg-surface-hover hover:text-content"
|
||||
style={fs(12, 'body')}>
|
||||
<span className="grid h-5 w-5 place-items-center rounded-full bg-surface-card shadow-sm ring-1 ring-edge-faint"><Plus size={12} strokeWidth={2.4} /></span>
|
||||
{t('costs.addExpense')}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
)}
|
||||
</tbody>
|
||||
)
|
||||
})}
|
||||
<tfoot>
|
||||
<tr className="border-t border-edge" style={{ background: NEUTRAL_TINT }}>
|
||||
<th scope="row" colSpan={2} className="px-3 py-3 text-left font-geist font-bold uppercase tracking-[.08em] text-content-muted" style={fs(10.5)}>
|
||||
{t('budget.total')}
|
||||
<span className="ml-2 rounded-full bg-surface-card px-2 py-px font-normal normal-case tracking-normal text-content-muted shadow-sm" style={fs(10.5)}>{p.items.length}</span>
|
||||
</th>
|
||||
<td className="px-3 py-3 text-center">
|
||||
<span className="inline-flex rounded-full bg-accent px-3 py-1 font-geist font-bold tabular-nums text-accent-text" style={fs(13, 'body')}>{p.fmt(grandTotal)}</span>
|
||||
</td>
|
||||
<td colSpan={6} />
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
/** One expense as a table row, its own cells editable in place. */
|
||||
function Row({ e, p, editing, setEditing, numFmt }: {
|
||||
e: BudgetItem
|
||||
p: CostsTableProps
|
||||
editing: { id: number; field: EditableField } | null
|
||||
setEditing: (v: { id: number; field: EditableField } | null) => void
|
||||
numFmt: (v: number | null) => string
|
||||
}) {
|
||||
const { t, locale } = useTranslation()
|
||||
const total = p.baseTotal(e)
|
||||
const custom = hasCustomMemberSplit(e)
|
||||
const persons = e.persons ?? null
|
||||
const days = e.days ?? null
|
||||
const foreign = p.currencyOf(e) !== p.base
|
||||
// A total someone paid is the sum of what they paid, and a foreign one is shown
|
||||
// converted: both change in the expense itself, where the split and the rate live.
|
||||
const totalLock = hasPayers(e) ? t('costs.table.lockedPayer') : foreign ? t('costs.table.lockedCurrency', { currency: p.currencyOf(e) }) : null
|
||||
const isEditing = (field: EditableField) => editing?.id === e.id && editing.field === field
|
||||
const save = (patch: Partial<BudgetItem>) => { setEditing(null); void p.onUpdate(e.id, patch) }
|
||||
const dateText = e.expense_date
|
||||
? (() => { try { return new Date(e.expense_date + 'T00:00:00Z').toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' }) } catch { return e.expense_date } })()
|
||||
: ''
|
||||
|
||||
return (
|
||||
<tr className="group border-t border-edge-faint hover:bg-surface-hover">
|
||||
<td className="px-3 py-2 text-left">
|
||||
<EditCell label={t('budget.table.name')} text={e.name} canEdit={p.canEdit} editing={isEditing('name')} onEdit={() => setEditing({ id: e.id, field: 'name' })}
|
||||
display={<span className="block truncate font-medium">{e.name}</span>}
|
||||
input={<TextInput value={e.name} onSave={v => { if (v.trim()) save({ name: v.trim() }); else setEditing(null) }} onCancel={() => setEditing(null)} label={t('budget.table.name')} />} />
|
||||
</td>
|
||||
<td className="px-3 py-2 text-center">
|
||||
{p.canEdit ? (
|
||||
// The app's own calendar, the way the old table picked a day.
|
||||
<div className={`mx-auto flex ${CELL_H} w-fit max-w-[132px] items-center rounded-full bg-surface-tertiary px-2`} aria-label={t('budget.table.date')}>
|
||||
<CustomDatePicker value={e.expense_date || ''} onChange={v => void p.onUpdate(e.id, { expense_date: v || null })} placeholder={t('costs.noDate')} compact borderless />
|
||||
</div>
|
||||
) : (
|
||||
<span className="inline-flex rounded-full bg-surface-tertiary px-3.5 py-[3px] text-content-secondary" style={fs(12, 'body')}>{dateText || t('costs.noDate')}</span>
|
||||
)}
|
||||
</td>
|
||||
<td className={CELL}>
|
||||
{totalLock ? (
|
||||
<Tooltip label={totalLock} placement="top">
|
||||
<button type="button" onClick={() => p.onOpen(e)} aria-label={`${t('budget.table.total')}: ${p.fmt(total)}`}
|
||||
className="inline-flex min-h-7 w-full items-center justify-center gap-1.5 rounded-[8px] px-1.5 hover:bg-surface-card">
|
||||
<Lock size={10} strokeWidth={2.4} className="flex-none text-content-faint" />
|
||||
<span className="flex flex-col items-center leading-tight">
|
||||
<span className="font-semibold">{p.fmt(total)}</span>
|
||||
{foreign && <span className="mt-0.5 rounded-full bg-surface-tertiary px-1.5 font-geist text-content-muted" style={fs(10)}>{numFmt(e.total_price || 0)} {p.currencyOf(e)}</span>}
|
||||
</span>
|
||||
</button>
|
||||
</Tooltip>
|
||||
) : (
|
||||
<EditCell label={t('budget.table.total')} text={p.fmt(total)} canEdit={p.canEdit} editing={isEditing('total_price')} onEdit={() => setEditing({ id: e.id, field: 'total_price' })} align="center"
|
||||
display={<span className="font-semibold">{p.fmt(total)}</span>}
|
||||
input={<TextInput value={String(e.total_price ?? '')} numeric onSave={v => {
|
||||
const n = Number(normalizePastedAmount(v))
|
||||
if (v.trim() && Number.isFinite(n)) save({ total_price: n }); else setEditing(null)
|
||||
}} onCancel={() => setEditing(null)} label={t('budget.table.total')} />} />
|
||||
)}
|
||||
</td>
|
||||
{(['persons', 'days'] as const).map(field => {
|
||||
const value = field === 'persons' ? persons : days
|
||||
return (
|
||||
<td key={field} className="px-2 py-2 text-center tabular-nums">
|
||||
<EditCell label={t(`budget.table.${field}`)} text={value == null ? '' : String(value)} canEdit={p.canEdit} editing={isEditing(field)} onEdit={() => setEditing({ id: e.id, field })} align="center"
|
||||
display={value == null
|
||||
? <span className={BADGE_EMPTY}>{p.canEdit ? <Plus size={11} strokeWidth={2.4} /> : null}</span>
|
||||
: <span className={BADGE} style={fs(12, 'body')}>{value}</span>}
|
||||
input={<TextInput value={value == null ? '' : String(value)} numeric onSave={v => {
|
||||
const n = Number.parseInt(v, 10)
|
||||
save({ [field]: v.trim() === '' ? null : Number.isFinite(n) && n > 0 ? n : null } as Partial<BudgetItem>)
|
||||
}} onCancel={() => setEditing(null)} label={t(`budget.table.${field}`)} />} />
|
||||
</td>
|
||||
)
|
||||
})}
|
||||
{/* An uneven split has no single share per person, so those columns stay empty (#1458). */}
|
||||
<td className={`${CELL} text-content-secondary`}>{custom ? '' : numFmt(calcPP(total, persons))}</td>
|
||||
<td className={`${CELL} text-content-secondary`}>{numFmt(calcPD(total, days))}</td>
|
||||
<td className={`${CELL} text-content-secondary`}>{custom ? '' : numFmt(calcPPD(total, persons, days))}</td>
|
||||
<td className="px-1 py-1 text-center">
|
||||
<MoreButton label={t('files.menu')} items={[
|
||||
{ label: p.canEdit ? t('common.edit') : t('common.open'), icon: Pencil, onClick: () => p.onOpen(e) },
|
||||
p.canEdit && { divider: true },
|
||||
p.canEdit && { label: t('common.delete'), icon: Trash2, danger: true, onClick: () => p.onDelete(e.id) },
|
||||
]} size={26} />
|
||||
</td>
|
||||
</tr>
|
||||
)
|
||||
}
|
||||
|
||||
/** A value that turns into a field on a click (or Enter), when the viewer may edit. */
|
||||
function EditCell({ label, text, canEdit, editing, onEdit, display, input, align = 'left' }: {
|
||||
label: string
|
||||
/** The value as words, for the button's name: "Total: 45.00". */
|
||||
text: string
|
||||
canEdit: boolean
|
||||
editing: boolean
|
||||
onEdit: () => void
|
||||
display: ReactNode
|
||||
input: ReactNode
|
||||
align?: 'left' | 'right' | 'center'
|
||||
}) {
|
||||
const justify = align === 'right' ? 'justify-end' : align === 'center' ? 'justify-center' : 'justify-start'
|
||||
if (editing) return <>{input}</>
|
||||
if (!canEdit) return <span className={`flex ${CELL_H} min-w-0 items-center ${justify}`}>{display}</span>
|
||||
return (
|
||||
<button type="button" onClick={onEdit} aria-label={text ? `${label}: ${text}` : label}
|
||||
className={`flex ${CELL_H} w-full min-w-0 items-center rounded-[8px] px-1.5 hover:bg-surface-card ${justify}`}>
|
||||
{display}
|
||||
</button>
|
||||
)
|
||||
}
|
||||
|
||||
/** The field a cell becomes: Enter or Tab keeps it, Escape leaves it as it was. */
|
||||
function TextInput({ value, onSave, onCancel, label, numeric = false }: {
|
||||
value: string
|
||||
onSave: (v: string) => void
|
||||
onCancel: () => void
|
||||
label: string
|
||||
numeric?: boolean
|
||||
}) {
|
||||
const [draft, setDraft] = useState(value)
|
||||
const done = useRef(false)
|
||||
const finish = (fn: () => void) => { if (done.current) return; done.current = true; fn() }
|
||||
const onKey = (ev: KeyboardEvent<HTMLInputElement>) => {
|
||||
if (ev.key === 'Enter') { ev.preventDefault(); finish(() => onSave(draft)) }
|
||||
// Spent here: the field lets go, the page around it stays.
|
||||
if (ev.key === 'Escape') { ev.preventDefault(); ev.stopPropagation(); finish(onCancel) }
|
||||
}
|
||||
return (
|
||||
<input autoFocus type="text" value={draft} aria-label={label} inputMode={numeric ? 'decimal' : undefined}
|
||||
onChange={ev => setDraft(ev.target.value)} onKeyDown={onKey} onBlur={() => finish(() => onSave(draft))}
|
||||
className={`${INPUT} ${numeric ? 'text-center tabular-nums' : ''}`} />
|
||||
)
|
||||
}
|
||||
|
||||
export type CostsSummaryTab = 'category' | 'date' | 'payer' | 'status'
|
||||
|
||||
/** The four ways the old budget summed the table up: by category, by day, by payer, paid against open. */
|
||||
export function CostsTableSummary({ items, baseTotal, toBase, fmt, personName }: Pick<CostsTableProps, 'items' | 'baseTotal' | 'toBase' | 'fmt' | 'personName'>) {
|
||||
const { t, locale } = useTranslation()
|
||||
const [tab, setTab] = useState<CostsSummaryTab>('category')
|
||||
|
||||
const rows = useMemo((): { key: string; label: string; amount: number; color?: string }[] => {
|
||||
const sum = new Map<string, { label: string; amount: number; color?: string }>()
|
||||
const addTo = (key: string, label: string, amount: number, color?: string) => {
|
||||
const prev = sum.get(key)
|
||||
sum.set(key, { label, amount: (prev?.amount ?? 0) + amount, color })
|
||||
}
|
||||
for (const e of items) {
|
||||
const total = baseTotal(e)
|
||||
if (tab === 'category') {
|
||||
const m = catMeta(e.category)
|
||||
addTo(m.key, t(m.labelKey), total, m.color)
|
||||
} else if (tab === 'date') {
|
||||
const d = e.expense_date || ''
|
||||
const label = d
|
||||
? (() => { try { return new Date(d + 'T00:00:00Z').toLocaleDateString(locale, { weekday: 'short', day: 'numeric', month: 'short', timeZone: 'UTC' }) } catch { return d } })()
|
||||
: t('costs.noDate')
|
||||
addTo(d || '', label, total)
|
||||
} else if (tab === 'payer') {
|
||||
const paid = (e.payers || []).filter(x => x.amount !== 0)
|
||||
if (paid.length === 0) addTo('none', t('costs.table.noPayer'), total)
|
||||
for (const x of paid) addTo(String(x.user_id), personName(x.user_id), toBase(x.amount, e))
|
||||
} else if (hasPayers(e)) {
|
||||
addTo('paid', t('costs.table.paid'), total, 'var(--success)')
|
||||
} else {
|
||||
addTo('open', t('costs.table.open'), total, 'var(--warning)')
|
||||
}
|
||||
}
|
||||
const list = Array.from(sum.entries()).map(([key, v]) => ({ key, ...v }))
|
||||
if (tab === 'date') return list.sort((a, b) => a.key.localeCompare(b.key))
|
||||
return list.sort((a, b) => b.amount - a.amount)
|
||||
}, [items, tab, baseTotal, toBase, personName, locale, t])
|
||||
|
||||
const max = Math.max(1, ...rows.map(r => Math.abs(r.amount)))
|
||||
|
||||
return (
|
||||
<section aria-label={t('costs.table.summary')} className="overflow-hidden rounded-2xl border border-edge-faint bg-surface-secondary">
|
||||
<div className="flex flex-col gap-2.5 border-b border-edge-faint px-4 py-3" style={{ background: NEUTRAL_TINT }}>
|
||||
<span className="font-geist font-bold uppercase tracking-[.08em] text-content-faint" style={fs(11)}>{t('costs.table.summary')}</span>
|
||||
<Segmented<CostsSummaryTab> value={tab} onChange={setTab} label={t('costs.table.summary')} fill options={[
|
||||
{ value: 'category', label: t('costs.table.byCategory') },
|
||||
{ value: 'date', label: t('costs.table.byDate') },
|
||||
{ value: 'payer', label: t('costs.table.byPayer') },
|
||||
{ value: 'status', label: t('costs.table.byStatus') },
|
||||
]} />
|
||||
</div>
|
||||
<ul className="m-0 flex list-none flex-col gap-3 p-4">
|
||||
{rows.length === 0 && <li className="text-content-faint" style={fs(12.5, 'body')}>{t('costs.emptyText')}</li>}
|
||||
{rows.map(r => (
|
||||
<li key={r.key} className="flex flex-col gap-1.5">
|
||||
<div className="flex items-center justify-between gap-2" style={fs(12.5, 'body')}>
|
||||
<span className="flex min-w-0 items-center gap-1.5 text-content">
|
||||
{r.color && <span className="h-2 w-2 flex-none rounded-full" style={{ background: r.color }} />}
|
||||
<span className="truncate">{r.label}</span>
|
||||
</span>
|
||||
<span className="flex-none rounded-full bg-surface-card px-2 py-px font-geist font-semibold tabular-nums text-content shadow-sm">{fmt(r.amount)}</span>
|
||||
</div>
|
||||
<span className="block h-1.5 overflow-hidden rounded-full bg-surface-tertiary">
|
||||
<span className="block h-full rounded-full" style={{ width: `${Math.round((Math.abs(r.amount) / max) * 100)}%`, background: r.color || 'var(--accent)' }} />
|
||||
</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
// FE-COSTSBAR-001 to FE-COSTSBAR-008
|
||||
// FE-COSTSBAR-001 to FE-COSTSBAR-013
|
||||
import { describe, it, expect, vi } from 'vitest'
|
||||
import { render, screen, fireEvent } from '../../../tests/helpers/render'
|
||||
import { render, screen, fireEvent, within } from '../../../tests/helpers/render'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import type { CostsFilterProps } from './CostsToolbar'
|
||||
import CostsToolbar from './CostsToolbar'
|
||||
import type { TripMember } from './BudgetPanelMemberChips'
|
||||
|
||||
@@ -80,4 +82,83 @@ describe('CostsToolbar', () => {
|
||||
setup()
|
||||
expect(screen.queryByRole('button', { name: 'Scan receipt' })).toBeNull()
|
||||
})
|
||||
|
||||
describe('search and filters', () => {
|
||||
function filters(over: Partial<CostsFilterProps> = {}): CostsFilterProps {
|
||||
return {
|
||||
query: '', onQuery: vi.fn(), owner: 'all', onOwner: vi.fn(),
|
||||
category: '', categoryOptions: [{ value: '', label: 'All categories' }, { value: 'Food', label: 'Food' }], onCategory: vi.fn(),
|
||||
day: '', dayOptions: [{ value: '', label: 'All days' }, { value: '2025-06-01', label: 'Day 1' }], onDay: vi.fn(),
|
||||
onResetFilters: vi.fn(), onExport: vi.fn(), canExport: true, ...over,
|
||||
}
|
||||
}
|
||||
|
||||
it('FE-COSTSBAR-009: the search reports what is typed, clears with its button and on Escape', async () => {
|
||||
const user = userEvent.setup()
|
||||
const f = filters({ query: 'taxi' })
|
||||
setup({ filters: f })
|
||||
const search = screen.getByRole('textbox', { name: 'Search' })
|
||||
await user.type(search, 's')
|
||||
expect(f.onQuery).toHaveBeenLastCalledWith('taxis')
|
||||
await user.click(screen.getByRole('button', { name: 'Clear' }))
|
||||
expect(f.onQuery).toHaveBeenLastCalledWith('')
|
||||
vi.mocked(f.onQuery).mockClear()
|
||||
fireEvent.keyDown(search, { key: 'Escape' })
|
||||
expect(f.onQuery).toHaveBeenCalledWith('')
|
||||
})
|
||||
|
||||
it('FE-COSTSBAR-010: the filter menu picks whose, which category and which day', async () => {
|
||||
const user = userEvent.setup()
|
||||
const f = filters()
|
||||
setup({ filters: f })
|
||||
await user.click(screen.getByRole('button', { name: 'Filter' }))
|
||||
const menu = screen.getByRole('menu')
|
||||
await user.click(within(menu).getByRole('button', { name: 'Paid by me' }))
|
||||
await user.click(within(menu).getByRole('button', { name: 'Food' }))
|
||||
await user.click(within(menu).getByRole('button', { name: 'Day 1' }))
|
||||
expect(f.onOwner).toHaveBeenCalledWith('mine')
|
||||
expect(f.onCategory).toHaveBeenCalledWith('Food')
|
||||
expect(f.onDay).toHaveBeenCalledWith('2025-06-01')
|
||||
expect(within(menu).queryByRole('button', { name: 'Reset filters' })).toBeNull()
|
||||
fireEvent.keyDown(menu, { key: 'Escape' })
|
||||
expect(screen.queryByRole('menu')).toBeNull()
|
||||
})
|
||||
|
||||
it('FE-COSTSBAR-011: with filters on, the button counts them and the menu resets them', async () => {
|
||||
const user = userEvent.setup()
|
||||
const f = filters({ owner: 'owed', category: 'Food', day: '2025-06-01' })
|
||||
setup({ filters: f })
|
||||
const button = screen.getByRole('button', { name: 'Filter' })
|
||||
expect(within(button).getByText('3')).toBeInTheDocument()
|
||||
await user.click(button)
|
||||
await user.click(within(screen.getByRole('menu')).getByRole('button', { name: 'Reset filters' }))
|
||||
expect(f.onResetFilters).toHaveBeenCalledTimes(1)
|
||||
expect(screen.queryByRole('menu')).toBeNull()
|
||||
})
|
||||
|
||||
it('FE-COSTSBAR-012: export runs while there is something to export', async () => {
|
||||
const user = userEvent.setup()
|
||||
const f = filters()
|
||||
const { unmount } = render(
|
||||
<CostsToolbar dateMeta={null} people={PEOPLE} me={1} colorFor={() => '#000'} canEdit canSettle
|
||||
onSettleAll={vi.fn()} onAddExpense={vi.fn()} filters={f} />,
|
||||
)
|
||||
await user.click(screen.getByRole('button', { name: 'Export CSV' }))
|
||||
expect(f.onExport).toHaveBeenCalledTimes(1)
|
||||
unmount()
|
||||
setup({ filters: filters({ canExport: false }) })
|
||||
expect(screen.getByRole('button', { name: 'Export CSV' })).toBeDisabled()
|
||||
})
|
||||
|
||||
it('FE-COSTSBAR-013: the view switch marks the current view and reports a new one', async () => {
|
||||
const user = userEvent.setup()
|
||||
const onView = vi.fn()
|
||||
setup({ view: 'list', onView })
|
||||
const group = screen.getByRole('group')
|
||||
const buttons = within(group).getAllByRole('button')
|
||||
expect(buttons[0]).toHaveAttribute('aria-pressed', 'true')
|
||||
await user.click(buttons[1])
|
||||
expect(onView).toHaveBeenCalledWith('table')
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { useCallback, useRef, useState, type ReactNode } from 'react'
|
||||
import { Check, Download, Filter, Plus, RotateCcw, ScanLine, Search, X } from 'lucide-react'
|
||||
import { Check, Download, Filter, Plus, RotateCcw, Rows3, ScanLine, Search, Table2, X } from 'lucide-react'
|
||||
import { useTranslation } from '../../i18n'
|
||||
import type { TripMember } from './BudgetPanelMemberChips'
|
||||
import { Tooltip } from '../shared/Tooltip'
|
||||
@@ -7,6 +7,8 @@ import { POPOVER, POPOVER_CAPTION, POPOVER_DIVIDER, useDismissOnOutside } from '
|
||||
import { PopoverItem } from '../Packing/PackingPopover'
|
||||
|
||||
export type OwnerFilter = 'all' | 'mine' | 'owed'
|
||||
/** The day-by-day list, or the categorized table the old budget had. */
|
||||
export type CostsView = 'list' | 'table'
|
||||
|
||||
export interface CostsFilterProps {
|
||||
query: string
|
||||
@@ -41,6 +43,9 @@ interface CostsToolbarProps {
|
||||
onScanReceipt?: () => void
|
||||
/** Search, filters and export, the way the Transports and Bookings bars carry them. */
|
||||
filters?: CostsFilterProps
|
||||
/** The switch between the list and the table; left out, the bar has none. */
|
||||
view?: CostsView
|
||||
onView?: (view: CostsView) => void
|
||||
}
|
||||
|
||||
const BODY_SIZE = 'calc(13px * var(--fs-scale-body, 1))'
|
||||
@@ -52,7 +57,7 @@ const BAR_BTN = 'relative grid h-9 w-9 flex-none place-items-center rounded-[10p
|
||||
* Bookings, Lists and Files open with: the tab's name and what the numbers
|
||||
* cover, then how to narrow the ledger and the actions on the right.
|
||||
*/
|
||||
export default function CostsToolbar({ dateMeta, people, me, colorFor, canEdit, canSettle, onSettleAll, onAddExpense, onScanReceipt, filters }: CostsToolbarProps) {
|
||||
export default function CostsToolbar({ dateMeta, people, me, colorFor, canEdit, canSettle, onSettleAll, onAddExpense, onScanReceipt, filters, view, onView }: CostsToolbarProps) {
|
||||
const { t } = useTranslation()
|
||||
const searchRef = useRef<HTMLInputElement>(null)
|
||||
const chip = 'inline-flex items-center whitespace-nowrap rounded-full bg-surface-card px-3 py-1.5 font-medium text-content-muted shadow-sm'
|
||||
@@ -118,6 +123,20 @@ export default function CostsToolbar({ dateMeta, people, me, colorFor, canEdit,
|
||||
</>
|
||||
)}
|
||||
|
||||
{view && onView && (
|
||||
// The same switch the Bookings bar has for its views.
|
||||
<div role="group" aria-label={t('costs.view.label')} className="inline-flex flex-none rounded-[10px] bg-surface-card p-[3px]">
|
||||
{([['list', Rows3, t('costs.view.list')], ['table', Table2, t('costs.view.table')]] as const).map(([v, Icon, label]) => (
|
||||
<Tooltip key={v} label={label}>
|
||||
<button type="button" onClick={() => onView(v)} aria-pressed={view === v} aria-label={label}
|
||||
className={`grid h-[30px] w-[34px] place-items-center rounded-[8px] transition-colors ${view === v ? 'bg-accent text-accent-text' : 'text-content-muted hover:text-content'}`}>
|
||||
<Icon size={15} strokeWidth={2} />
|
||||
</button>
|
||||
</Tooltip>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
|
||||
{canEdit && (
|
||||
<>
|
||||
{filters && <span className="mx-0.5 h-[22px] w-px flex-none bg-edge-faint" />}
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
// FE-COSTS-EXPRECEIPT-001 to FE-COSTS-EXPRECEIPT-004
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import { render, screen, fireEvent, within } from '../../../tests/helpers/render'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { useAuthStore } from '../../store/authStore'
|
||||
import { useTripStore } from '../../store/tripStore'
|
||||
import { resetAllStores, seedStore } from '../../../tests/helpers/store'
|
||||
import { buildBudgetItem, buildTrip, buildUser } from '../../../tests/helpers/factories'
|
||||
import type { BudgetItem } from '../../types'
|
||||
import { ExpenseModal } from './CostsPanel'
|
||||
|
||||
vi.mock('../../api/authUrl', () => ({ getAuthUrl: vi.fn().mockResolvedValue('http://test/receipt') }))
|
||||
|
||||
const people = [
|
||||
{ id: 1, username: 'alice', avatar_url: null },
|
||||
{ id: 2, username: 'bob', avatar_url: null },
|
||||
]
|
||||
|
||||
function renderModal(editing: BudgetItem | null) {
|
||||
return render(<ExpenseModal tripId={1} base="EUR" people={people} me={1} editing={editing} onClose={vi.fn()} onSaved={vi.fn()} />)
|
||||
}
|
||||
|
||||
const receiptsCard = () => screen.getByText('Receipts & Invoices').closest('section') as HTMLElement
|
||||
|
||||
beforeEach(() => {
|
||||
resetAllStores()
|
||||
seedStore(useAuthStore, { user: buildUser(), isAuthenticated: true })
|
||||
seedStore(useTripStore, { trip: buildTrip({ id: 1, currency: 'EUR' }) })
|
||||
})
|
||||
|
||||
describe('ExpenseModal receipts and note', () => {
|
||||
it('FE-COSTS-EXPRECEIPT-001: a new expense starts without receipts and takes picked files', async () => {
|
||||
renderModal(null)
|
||||
expect(within(receiptsCard()).getByText('No receipts attached')).toBeInTheDocument()
|
||||
const input = receiptsCard().querySelector('input[type="file"]') as HTMLInputElement
|
||||
fireEvent.change(input, { target: { files: [new File(['a'], 'lunch.jpg', { type: 'image/jpeg' }), new File(['b'], 'taxi.pdf', { type: 'application/pdf' })] } })
|
||||
expect(within(receiptsCard()).getByText('lunch.jpg')).toBeInTheDocument()
|
||||
expect(within(receiptsCard()).getByText('taxi.pdf')).toBeInTheDocument()
|
||||
// The picker is emptied, so the same file can be picked again.
|
||||
expect(input.value).toBe('')
|
||||
})
|
||||
|
||||
it('FE-COSTS-EXPRECEIPT-002: a picked file is taken off again before saving', async () => {
|
||||
const user = userEvent.setup()
|
||||
renderModal(null)
|
||||
const input = receiptsCard().querySelector('input[type="file"]') as HTMLInputElement
|
||||
fireEvent.change(input, { target: { files: [new File(['a'], 'lunch.jpg', { type: 'image/jpeg' })] } })
|
||||
fireEvent.change(input, { target: { files: [] } })
|
||||
await user.click(within(receiptsCard()).getByRole('button', { name: 'Remove receipt' }))
|
||||
expect(within(receiptsCard()).queryByText('lunch.jpg')).toBeNull()
|
||||
expect(within(receiptsCard()).getByText('No receipts attached')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('FE-COSTS-EXPRECEIPT-003: a saved receipt opens in the preview and can be taken off the expense', async () => {
|
||||
const user = userEvent.setup()
|
||||
const editing = buildBudgetItem({
|
||||
name: 'Dinner',
|
||||
receipts: [
|
||||
{ id: 31, filename: 'a.pdf', original_name: 'dinner-bill.pdf', mime_type: 'application/pdf', url: '/api/trips/1/budget/receipts/31' },
|
||||
{ id: 32, filename: 'b.jpg', original_name: 'tip.jpg', mime_type: 'image/jpeg', url: '/api/trips/1/budget/receipts/32' },
|
||||
],
|
||||
} as never)
|
||||
renderModal(editing)
|
||||
const shownBefore = screen.getAllByText('dinner-bill.pdf').length
|
||||
await user.click(within(receiptsCard()).getByRole('button', { name: 'dinner-bill.pdf' }))
|
||||
// The preview names the receipt in its own head.
|
||||
expect(screen.getAllByText('dinner-bill.pdf').length).toBeGreaterThan(shownBefore)
|
||||
|
||||
const removes = within(receiptsCard()).getAllByRole('button', { name: 'Remove receipt' })
|
||||
await user.click(removes[1])
|
||||
expect(within(receiptsCard()).queryByText('tip.jpg')).toBeNull()
|
||||
})
|
||||
|
||||
it('FE-COSTS-EXPRECEIPT-004: the note takes what is typed', async () => {
|
||||
const user = userEvent.setup()
|
||||
renderModal(null)
|
||||
const note = screen.getByRole('textbox', { name: 'Note' })
|
||||
await user.type(note, 'Paid in cash')
|
||||
expect(note).toHaveValue('Paid in cash')
|
||||
})
|
||||
})
|
||||
@@ -1,4 +1,4 @@
|
||||
// FE-BUDGET-SCAN-001 to FE-BUDGET-SCAN-010
|
||||
// FE-BUDGET-SCAN-001 to FE-BUDGET-SCAN-011
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import { http, HttpResponse } from 'msw'
|
||||
import { render, screen, fireEvent, waitFor } from '../../../tests/helpers/render'
|
||||
@@ -148,4 +148,20 @@ describe('MReceiptScanButton', () => {
|
||||
await new Promise(r => setTimeout(r, 20))
|
||||
expect(container).toBeEmptyDOMElement()
|
||||
})
|
||||
|
||||
it('FE-BUDGET-SCAN-011: the drop zone lights up while a photo is dragged over it, and a click on it opens the picker', async () => {
|
||||
render(<Harness />)
|
||||
await openDialog()
|
||||
const zone = screen.getByText('Drop the receipt photo here, or click to pick or take one').closest('button')!
|
||||
fireEvent.dragEnter(zone)
|
||||
expect(screen.getByText('Drop the photo to scan it')).toBeInTheDocument()
|
||||
// Leaving for a child of the zone keeps it lit, leaving the zone itself does not.
|
||||
fireEvent.dragLeave(zone.firstElementChild!)
|
||||
expect(screen.getByText('Drop the photo to scan it')).toBeInTheDocument()
|
||||
fireEvent.dragLeave(zone)
|
||||
expect(screen.getByText('Drop the receipt photo here, or click to pick or take one')).toBeInTheDocument()
|
||||
const pick = vi.spyOn(input(), 'click')
|
||||
fireEvent.click(zone)
|
||||
expect(pick).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// FE-COMP-LINKS-001 to FE-COMP-LINKS-013
|
||||
// FE-COMP-LINKS-001 to FE-COMP-LINKS-015
|
||||
|
||||
vi.mock('../../api/websocket', () => ({
|
||||
connect: vi.fn(),
|
||||
@@ -231,4 +231,37 @@ describe('CollabLinks', () => {
|
||||
expect(await screen.findByText(/no shared links yet|collab\.links\.empty/i)).toBeInTheDocument();
|
||||
expect(screen.queryByRole('button', { name: /add link|collab\.links\.add/i })).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-COMP-LINKS-014: pinning a link saves it and turns the pin into an unpin', async () => {
|
||||
const user = userEvent.setup();
|
||||
let put: Record<string, unknown> | null = null;
|
||||
server.use(
|
||||
http.get('/api/trips/1/collab/links', () => HttpResponse.json({ links: [buildLink()] })),
|
||||
http.put('/api/trips/1/collab/links/1', async ({ request }) => {
|
||||
put = await request.json() as Record<string, unknown>;
|
||||
return HttpResponse.json({ link: buildLink({ pinned: 1 }) });
|
||||
}),
|
||||
);
|
||||
render(<CollabLinks tripId={1} />);
|
||||
await user.click(await screen.findByRole('button', { name: /^pin link$|^collab\.links\.pin$/i }));
|
||||
expect(await screen.findByRole('button', { name: /^unpin link$|^collab\.links\.unpin$/i })).toBeInTheDocument();
|
||||
expect(put).toEqual({ pinned: true });
|
||||
});
|
||||
|
||||
it('FE-COMP-LINKS-015: a failed pin says so and leaves the link as it was', async () => {
|
||||
const user = userEvent.setup();
|
||||
const errors = vi.spyOn(console, 'error').mockImplementation(() => {});
|
||||
const toasts: string[] = [];
|
||||
window.__addToast = ((message: string) => { toasts.push(message); return 1; }) as unknown as typeof window.__addToast;
|
||||
server.use(
|
||||
http.get('/api/trips/1/collab/links', () => HttpResponse.json({ links: [buildLink()] })),
|
||||
http.put('/api/trips/1/collab/links/1', () => new HttpResponse(null, { status: 500 })),
|
||||
);
|
||||
render(<CollabLinks tripId={1} />);
|
||||
await user.click(await screen.findByRole('button', { name: /^pin link$|^collab\.links\.pin$/i }));
|
||||
await waitFor(() => expect(toasts.length).toBe(1));
|
||||
expect(screen.getByRole('button', { name: /^pin link$|^collab\.links\.pin$/i })).toBeInTheDocument();
|
||||
delete window.__addToast;
|
||||
errors.mockRestore();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
// FE-COLLAB-PANELHEAD-001 to FE-COLLAB-PANELHEAD-004
|
||||
import { describe, it, expect, vi } from 'vitest';
|
||||
import { render, screen } from '../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { StickyNote } from 'lucide-react';
|
||||
import CollabPanelHead, { HEAD_ACTION } from './CollabPanelHead';
|
||||
|
||||
describe('CollabPanelHead', () => {
|
||||
it('FE-COLLAB-PANELHEAD-001: names the panel as a heading with how many there are', () => {
|
||||
render(<CollabPanelHead icon={StickyNote} title="Notes" count={4} />);
|
||||
expect(screen.getByRole('heading', { level: 3, name: 'Notes' })).toBeInTheDocument();
|
||||
expect(screen.getByText('4')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-COLLAB-PANELHEAD-002: an empty or unknown count is left out', () => {
|
||||
const { rerender } = render(<CollabPanelHead icon={StickyNote} title="Notes" count={0} />);
|
||||
expect(screen.queryByText('0')).toBeNull();
|
||||
rerender(<CollabPanelHead icon={StickyNote} title="Notes" />);
|
||||
expect(screen.getByRole('heading', { name: 'Notes' }).parentElement?.querySelectorAll('span')).toHaveLength(0);
|
||||
});
|
||||
|
||||
it('FE-COLLAB-PANELHEAD-003: its actions sit on the right and work', async () => {
|
||||
const onAdd = vi.fn();
|
||||
render(<CollabPanelHead icon={StickyNote} title="Polls" actions={<button type="button" className={HEAD_ACTION} onClick={onAdd}>New poll</button>} />);
|
||||
await userEvent.click(screen.getByRole('button', { name: 'New poll' }));
|
||||
expect(onAdd).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('FE-COLLAB-PANELHEAD-004: without actions there is no action area', () => {
|
||||
render(<CollabPanelHead icon={StickyNote} title="Chat" count={2} />);
|
||||
expect(screen.queryByRole('button')).toBeNull();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,105 @@
|
||||
// FE-FILES-ROW-001 to FE-FILES-ROW-006
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen } from '../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { buildPlace, buildReservation, buildTrip, buildTripFile } from '../../../tests/helpers/factories';
|
||||
import { downloadFile } from '../../utils/fileDownload';
|
||||
import type { TripFile } from '../../types';
|
||||
import type { FileManagerState } from './useFileManager';
|
||||
import { FileRow } from './FileManagerRow';
|
||||
|
||||
vi.mock('../../utils/fileDownload', () => ({ downloadFile: vi.fn(async () => {}) }));
|
||||
|
||||
const handlers = {
|
||||
handleStar: vi.fn(),
|
||||
handleRestore: vi.fn(),
|
||||
handlePermanentDelete: vi.fn(),
|
||||
handleDelete: vi.fn(),
|
||||
openFile: vi.fn(),
|
||||
setAssignFileId: vi.fn(),
|
||||
};
|
||||
|
||||
const labels: Record<string, string> = {
|
||||
'common.open': 'Open', 'common.delete': 'Delete', 'files.download': 'Download', 'files.star': 'Star', 'files.unstar': 'Unstar',
|
||||
'files.assign': 'Assign', 'files.restore': 'Restore', 'files.sourcePlan': 'Day Plan', 'files.sourceBooking': 'Booking',
|
||||
'files.sourceTransport': 'Transport', 'files.sourceCollab': 'From Collab Notes',
|
||||
};
|
||||
|
||||
function renderRow(file: TripFile, { isTrash = false, allowed = true } = {}) {
|
||||
const state = {
|
||||
...handlers,
|
||||
places: [buildPlace({ id: 71, name: 'Louvre' })],
|
||||
reservations: [buildReservation({ id: 81, title: 'Shinkansen', type: 'train' }), buildReservation({ id: 82, title: '', type: 'restaurant' })],
|
||||
t: (k: string) => labels[k] ?? k,
|
||||
locale: 'en-US',
|
||||
can: () => allowed,
|
||||
trip: buildTrip({ id: 1 }),
|
||||
} as unknown as FileManagerState;
|
||||
return render(<FileRow {...state} file={file} isTrash={isTrash} />);
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
Object.values(handlers).forEach(fn => fn.mockClear());
|
||||
vi.mocked(downloadFile).mockClear();
|
||||
});
|
||||
|
||||
describe('FileRow', () => {
|
||||
it('FE-FILES-ROW-001: opens the file from its tile, its name and the Open action', async () => {
|
||||
const user = userEvent.setup();
|
||||
const file = buildTripFile({ original_name: 'ticket.pdf' });
|
||||
renderRow(file);
|
||||
await user.click(screen.getByRole('button', { name: 'Open' }));
|
||||
await user.click(screen.getAllByRole('button', { name: 'ticket.pdf' })[0]);
|
||||
expect(handlers.openFile).toHaveBeenCalledTimes(2);
|
||||
expect(handlers.openFile).toHaveBeenCalledWith(file);
|
||||
});
|
||||
|
||||
it('FE-FILES-ROW-002: Download fetches the file under its own name', async () => {
|
||||
const user = userEvent.setup();
|
||||
const file = buildTripFile({ original_name: 'ticket.pdf', url: '/api/trips/1/files/9/download' });
|
||||
renderRow(file);
|
||||
await user.click(screen.getByRole('button', { name: 'Download' }));
|
||||
expect(downloadFile).toHaveBeenCalledWith('/api/trips/1/files/9/download', 'ticket.pdf');
|
||||
});
|
||||
|
||||
it('FE-FILES-ROW-003: star, assign and delete reach their handlers', async () => {
|
||||
const user = userEvent.setup();
|
||||
const file = buildTripFile({ id: 555, starred: 1 } as never);
|
||||
renderRow(file);
|
||||
await user.click(screen.getByRole('button', { name: 'Unstar' }));
|
||||
await user.click(screen.getByRole('button', { name: 'Assign' }));
|
||||
await user.click(screen.getByRole('button', { name: 'Delete' }));
|
||||
expect(handlers.handleStar).toHaveBeenCalledWith(555);
|
||||
expect(handlers.setAssignFileId).toHaveBeenCalledWith(555);
|
||||
expect(handlers.handleDelete).toHaveBeenCalledWith(555);
|
||||
});
|
||||
|
||||
it('FE-FILES-ROW-004: without the rights there is nothing to assign or delete', () => {
|
||||
renderRow(buildTripFile({}), { allowed: false });
|
||||
expect(screen.getByRole('button', { name: 'Star' })).toBeInTheDocument();
|
||||
expect(screen.queryByRole('button', { name: 'Assign' })).toBeNull();
|
||||
expect(screen.queryByRole('button', { name: 'Delete' })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-FILES-ROW-005: a file in the trash restores or goes for good, and does not open', async () => {
|
||||
const user = userEvent.setup();
|
||||
const file = buildTripFile({ id: 556, original_name: 'old.pdf' });
|
||||
renderRow(file, { isTrash: true });
|
||||
expect(screen.getAllByRole('button', { name: 'old.pdf' })[0]).toBeDisabled();
|
||||
await user.click(screen.getByRole('button', { name: 'Restore' }));
|
||||
await user.click(screen.getByRole('button', { name: 'Delete' }));
|
||||
expect(handlers.handleRestore).toHaveBeenCalledWith(556);
|
||||
expect(handlers.handlePermanentDelete).toHaveBeenCalledWith(556);
|
||||
expect(screen.queryByRole('button', { name: 'Open' })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-FILES-ROW-006: says where the file came from: a place, a transport, a booking, a note', () => {
|
||||
const file = buildTripFile({ place_id: 71, reservation_id: 81, linked_reservation_ids: [82], note_id: 3, description: 'Seat map', file_size: 2048 } as never);
|
||||
renderRow(file);
|
||||
expect(screen.getByText('Louvre')).toBeInTheDocument();
|
||||
expect(screen.getByText('Shinkansen')).toBeInTheDocument();
|
||||
expect(screen.getByText('Booking')).toBeInTheDocument();
|
||||
expect(screen.getByText('From Collab Notes')).toBeInTheDocument();
|
||||
expect(screen.getByText('Seat map')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
@@ -1,4 +1,4 @@
|
||||
// FE-PLANNER-DAYPLAN-001 to FE-PLANNER-DAYPLAN-231
|
||||
// FE-PLANNER-DAYPLAN-001 to FE-PLANNER-DAYPLAN-232
|
||||
import { render, screen, waitFor, fireEvent, within } from '../../../tests/helpers/render'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { http, HttpResponse } from 'msw'
|
||||
@@ -2202,7 +2202,7 @@ describe('DayPlanSidebar', () => {
|
||||
|
||||
// ── Edit reservation pencil button ───────────────────────────────────────
|
||||
|
||||
it('FE-PLANNER-DAYPLAN-097: pencil button on non-transport reservation calls onEditReservation', async () => {
|
||||
it('FE-PLANNER-DAYPLAN-097: the reservation pill of a non-transport booking opens its editor', async () => {
|
||||
const user = userEvent.setup()
|
||||
const place = buildPlace({ id: 1, name: 'Hotel du Lac' })
|
||||
const day = buildDay({ id: 10, date: '2025-06-01', title: 'Day 1' })
|
||||
@@ -2214,13 +2214,18 @@ describe('DayPlanSidebar', () => {
|
||||
days: [day], places: [place], assignments: { '10': [assignment] }, reservations: [res],
|
||||
onEditReservation, onEditTransport,
|
||||
})} />)
|
||||
const pencil = screen.getByLabelText(/edit/i)
|
||||
await user.click(pencil)
|
||||
// The pill says "Reservation"; its colour and tooltip carry the status.
|
||||
const pill = screen.getByRole('button', { name: /^Reservation\s*Pending$/ })
|
||||
fireEvent.mouseEnter(pill)
|
||||
expect(await screen.findByRole('tooltip')).toHaveTextContent('Pending')
|
||||
await user.click(pill)
|
||||
expect(onEditReservation).toHaveBeenCalledWith(res)
|
||||
expect(onEditTransport).not.toHaveBeenCalled()
|
||||
// No separate pencil beside it any more.
|
||||
expect(screen.queryByRole('button', { name: 'Edit' })).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('FE-PLANNER-DAYPLAN-098: pencil button on transport reservation calls onEditTransport', async () => {
|
||||
it('FE-PLANNER-DAYPLAN-098: the reservation pill of a transport opens the transport editor', async () => {
|
||||
const user = userEvent.setup()
|
||||
const place = buildPlace({ id: 1, name: 'Geneva Airport' })
|
||||
const day = buildDay({ id: 10, date: '2025-06-01', title: 'Day 1' })
|
||||
@@ -2232,8 +2237,7 @@ describe('DayPlanSidebar', () => {
|
||||
days: [day], places: [place], assignments: { '10': [assignment] }, reservations: [res],
|
||||
onEditReservation, onEditTransport,
|
||||
})} />)
|
||||
const pencil = screen.getByLabelText(/edit/i)
|
||||
await user.click(pencil)
|
||||
await user.click(screen.getByRole('button', { name: /^Reservation\s*Pending$/ }))
|
||||
expect(onEditTransport).toHaveBeenCalledWith(res)
|
||||
expect(onEditReservation).not.toHaveBeenCalled()
|
||||
})
|
||||
@@ -3680,6 +3684,24 @@ describe('DayPlanSidebar', () => {
|
||||
expect(row.style.borderTop).toBe('')
|
||||
})
|
||||
|
||||
it('FE-PLANNER-DAYPLAN-232: a drop line left behind by a drag that never reported its end goes on the next mouse move', () => {
|
||||
const { day, placeA, placeB, bus, assignments } = dayWithBusAndPlaces()
|
||||
render(<DayPlanSidebar {...makeDefaultProps({ days: [day], places: [placeA, placeB], assignments, reservations: [bus] })} />)
|
||||
const row = cardRow(screen.getByText('City bus'))
|
||||
fireEvent.dragStart(row, { dataTransfer: emptyDataTransfer })
|
||||
fireEvent.dragOver(row, { dataTransfer: emptyDataTransfer, clientY: 0 })
|
||||
expect(row.style.borderTop).toContain('2px')
|
||||
// No dragend reaches the document (its source re-rendered away); the pointer moves on.
|
||||
fireEvent.mouseMove(document)
|
||||
expect(row.style.borderTop).toBe('')
|
||||
|
||||
// A press clears it just the same.
|
||||
fireEvent.dragOver(row, { dataTransfer: emptyDataTransfer, clientY: 0 })
|
||||
expect(row.style.borderTop).toContain('2px')
|
||||
fireEvent.pointerDown(document.body)
|
||||
expect(row.style.borderTop).toBe('')
|
||||
})
|
||||
|
||||
it('FE-PLANNER-DAYPLAN-160: cross-day payloads dropped on a booking row move onto its day', () => {
|
||||
const moveAssignment = vi.fn(async () => undefined)
|
||||
const moveDayNote = vi.fn(async () => undefined)
|
||||
@@ -3757,10 +3779,7 @@ describe('DayPlanSidebar', () => {
|
||||
expect(screen.getByText('Air France AF1235')).toBeInTheDocument()
|
||||
await user.click(screen.getByLabelText('Show booking routes'))
|
||||
expect(onToggleConnection).toHaveBeenCalledWith(520)
|
||||
const edit = screen.getByLabelText('Edit')
|
||||
fireEvent.mouseEnter(edit)
|
||||
fireEvent.mouseLeave(edit)
|
||||
await user.click(edit)
|
||||
await user.click(screen.getByRole('button', { name: /^Reservation\s*Confirmed$/ }))
|
||||
expect(onEditTransport).toHaveBeenCalledWith(linked)
|
||||
})
|
||||
|
||||
@@ -3776,7 +3795,8 @@ describe('DayPlanSidebar', () => {
|
||||
days: [day], places: [place], assignments: { '10': [a] }, reservations: [linked],
|
||||
})} />)
|
||||
expect(screen.getAllByText('ICE 599').length).toBeGreaterThan(0)
|
||||
expect(screen.getByText(/Reservation pending/)).toBeInTheDocument()
|
||||
// The pill names the booking; the status travels with it for a screen reader.
|
||||
expect(screen.getByText('Reservation').parentElement).toHaveTextContent(/Reservation\s*Pending/)
|
||||
})
|
||||
|
||||
it('FE-PLANNER-DAYPLAN-163b: every booking on the stop gets its own chip line (#2201)', async () => {
|
||||
@@ -3800,10 +3820,11 @@ describe('DayPlanSidebar', () => {
|
||||
})} />)
|
||||
expect(screen.getByText('09:00 – 09:30')).toBeInTheDocument()
|
||||
expect(screen.getByText('10:15')).toBeInTheDocument()
|
||||
expect(screen.getByText(/Reservation confirmed/)).toBeInTheDocument()
|
||||
expect(screen.getByText(/Reservation pending/)).toBeInTheDocument()
|
||||
// Earliest first, so the first pencil belongs to the parking pass.
|
||||
await user.click(screen.getAllByLabelText('Edit')[0])
|
||||
const pills = screen.getAllByRole('button', { name: /^Reservation/ })
|
||||
expect(pills[0]).toHaveAccessibleName(/Confirmed/)
|
||||
expect(pills[1]).toHaveAccessibleName(/Pending/)
|
||||
// Earliest first, so the first pill belongs to the parking pass.
|
||||
await user.click(pills[0])
|
||||
expect(onEditReservation).toHaveBeenCalledWith(parking)
|
||||
})
|
||||
|
||||
@@ -4374,7 +4395,7 @@ describe('DayPlanSidebar', () => {
|
||||
expect(screen.queryByText('Gare du Nord')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('FE-PLANNER-DAYPLAN-231: the pencil on a booking pinned to a stop still goes straight to the editor', async () => {
|
||||
it('FE-PLANNER-DAYPLAN-231: with the booking popup, a booking pinned to a stop opens there first', async () => {
|
||||
const user = userEvent.setup()
|
||||
const place = buildPlace({ id: 1, name: 'Geneva Airport' })
|
||||
const day = buildDay({ id: 10, date: '2025-06-01', title: 'Day 1' })
|
||||
@@ -4387,10 +4408,10 @@ describe('DayPlanSidebar', () => {
|
||||
onEditTransport, onOpenBooking,
|
||||
})} />)
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'Edit' }))
|
||||
await user.click(screen.getByRole('button', { name: /^Reservation\s*Pending$/ }))
|
||||
|
||||
expect(onEditTransport).toHaveBeenCalledWith(res)
|
||||
expect(onOpenBooking).not.toHaveBeenCalled()
|
||||
expect(onOpenBooking).toHaveBeenCalledWith(res)
|
||||
expect(onEditTransport).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('FE-PLANNER-DAYPLAN-178: the add-transport shortcut targets the day it sits on', async () => {
|
||||
|
||||
@@ -401,6 +401,27 @@ function useDayPlanSidebar(props: DayPlanSidebarProps) {
|
||||
return () => document.removeEventListener('dragend', cleanup)
|
||||
}, [])
|
||||
|
||||
// A drag whose source row re-rendered away never sends its dragend to the
|
||||
// document, and the drop line then stayed on a row until the next reload. The
|
||||
// browser sends no mousemove during a drag, so the first plain mouse move or
|
||||
// press after one means it is over.
|
||||
useEffect(() => {
|
||||
if (!draggingId && !dropTargetKey && !dragOverDayId) return
|
||||
const settle = () => {
|
||||
setDraggingId(null)
|
||||
setDropTargetKey(null)
|
||||
setDragOverDayId(null)
|
||||
dragDataRef.current = null
|
||||
window.__dragData = null
|
||||
}
|
||||
document.addEventListener('mousemove', settle)
|
||||
document.addEventListener('pointerdown', settle, true)
|
||||
return () => {
|
||||
document.removeEventListener('mousemove', settle)
|
||||
document.removeEventListener('pointerdown', settle, true)
|
||||
}
|
||||
}, [draggingId, dropTargetKey, dragOverDayId])
|
||||
|
||||
// Initialize missing transport positions outside of render to avoid setState-during-render
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
useEffect(() => { days.forEach(day => initTransportPositions(day.id)) }, [days, reservations])
|
||||
@@ -2278,13 +2299,31 @@ const DayPlanSidebar = React.memo(function DayPlanSidebar(props: DayPlanSidebarP
|
||||
? (meta.airline && meta.flight_number ? `${meta.airline} ${meta.flight_number}` : meta.flight_number || meta.train_number || '')
|
||||
: ''
|
||||
const editHandler = canEditDays ? (TRANSPORT_TYPES.has(res.type) ? onEditTransport : onEditReservation) : undefined
|
||||
const openPinned = onOpenBooking ?? editHandler
|
||||
return (
|
||||
// No wrapping: the time belongs to the status it qualifies, so the
|
||||
// pills stay on one line even when the row gets narrow.
|
||||
<div key={res.id} className="flex max-w-full flex-nowrap items-center gap-1">
|
||||
<SoftPill tone={tone} icon={<RI size={10} strokeWidth={2.2} />}>
|
||||
<span className="hidden sm:inline">{confirmed ? t('planner.resConfirmed') : t('planner.resPending')}</span>
|
||||
</SoftPill>
|
||||
{/* The colour carries the status; the word is in the tooltip and read out after the label.
|
||||
The pill opens the booking: its popup where there is one, else its editor. */}
|
||||
<Tooltip label={confirmed ? t('reservations.confirmed') : t('reservations.pending')} placement="top">
|
||||
{openPinned ? (
|
||||
<button type="button" data-dp="res-pill" onClick={e => { e.stopPropagation(); openPinned(res) }}
|
||||
className="inline-flex flex-none rounded-full hover:opacity-80">
|
||||
<SoftPill tone={tone} icon={<RI size={10} strokeWidth={2.2} />}>
|
||||
<span className="hidden sm:inline">{t('places.formReservation')}</span>
|
||||
<span className="sr-only">{confirmed ? t('reservations.confirmed') : t('reservations.pending')}</span>
|
||||
</SoftPill>
|
||||
</button>
|
||||
) : (
|
||||
<span className="inline-flex flex-none">
|
||||
<SoftPill tone={tone} icon={<RI size={10} strokeWidth={2.2} />}>
|
||||
<span className="hidden sm:inline">{t('places.formReservation')}</span>
|
||||
<span className="sr-only">{confirmed ? t('reservations.confirmed') : t('reservations.pending')}</span>
|
||||
</SoftPill>
|
||||
</span>
|
||||
)}
|
||||
</Tooltip>
|
||||
{timeLabel && <SoftPill tone={tone}>{timeLabel}</SoftPill>}
|
||||
{carrierLabel && <SoftPill tone={tone}>{carrierLabel}</SoftPill>}
|
||||
{hasEndpoints && (
|
||||
@@ -2299,17 +2338,6 @@ const DayPlanSidebar = React.memo(function DayPlanSidebar(props: DayPlanSidebarP
|
||||
</button>
|
||||
</Tooltip>
|
||||
)}
|
||||
{editHandler && (
|
||||
<Tooltip label={t('common.edit')} placement="top">
|
||||
<button aria-label={t('common.edit')}
|
||||
type="button"
|
||||
onClick={e => { e.stopPropagation(); editHandler(res) }}
|
||||
className={`${ROW_ROUND} h-5 w-5 text-content-muted hover:text-content`}
|
||||
>
|
||||
<Pencil size={11} strokeWidth={2.2} />
|
||||
</button>
|
||||
</Tooltip>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
@@ -2330,6 +2358,8 @@ const DayPlanSidebar = React.memo(function DayPlanSidebar(props: DayPlanSidebarP
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
{/* The row's own controls, with room between them so each is its own target. */}
|
||||
<div className="flex flex-none items-center gap-2.5 pl-1">
|
||||
{canEditDays && <div className="reorder-buttons" style={{ flexShrink: 0, display: 'flex', gap: 1, transition: 'opacity 0.15s' }}>
|
||||
<button type="button" onClick={moveUp} disabled={idx === 0} aria-label={t('dayplan.moveUp')} className="flex text-content-faint hover:text-content disabled:cursor-default disabled:text-edge">
|
||||
<ChevronUp size={12} strokeWidth={2} />
|
||||
@@ -2352,6 +2382,7 @@ const DayPlanSidebar = React.memo(function DayPlanSidebar(props: DayPlanSidebarP
|
||||
</Tooltip>
|
||||
)}
|
||||
<MoreButton label={t('files.menu')} items={placeMenu()} size={24} />
|
||||
</div>
|
||||
</div>
|
||||
{daySchedule.byAssignment[day.id]?.[assignment.id]?.map(si => <PluginDayScheduleRow key={`${si.pluginId}:${si.id}`} item={si} />)}
|
||||
{routeLegs[day.id]?.[assignment.id] && (canEditDays ? (
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// FE-COMP-PLACEFORM-001 to FE-COMP-PLACEFORM-036, FE-PLANNER-PLACEFORM-016 to FE-PLANNER-PLACEFORM-067, plus FE-PLANNER-PLACEFORM-068 to -121
|
||||
// FE-COMP-PLACEFORM-001 to FE-COMP-PLACEFORM-036, FE-PLANNER-PLACEFORM-016 to FE-PLANNER-PLACEFORM-067, plus FE-PLANNER-PLACEFORM-068 to -124
|
||||
import { render, screen, waitFor, fireEvent, within, act } from '../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { http, HttpResponse } from 'msw';
|
||||
@@ -2685,3 +2685,65 @@ describe('PlaceFormModal in the look of the booking editors', () => {
|
||||
expect(beside).toHaveClass('sm:w-80');
|
||||
});
|
||||
});
|
||||
|
||||
describe('PlaceFormModal and the columns beside it', () => {
|
||||
it('FE-PLANNER-PLACEFORM-122: a picture picked and a description adopted in the details column are saved with the place', async () => {
|
||||
seedStore(useAuthStore, { placesEnrichEnabled: true });
|
||||
const photoUrl = '/api/maps/place-photo/way%3A122~p0/bytes';
|
||||
server.use(
|
||||
http.post('/api/maps/enrichment', () => HttpResponse.json({
|
||||
photos: [{ key: 'way:122~p0', url: photoUrl, attribution: 'Alice', license: 'CC BY 4.0', licenseUrl: null, sourceUrl: null, source: 'wikimedia' }],
|
||||
facts: [],
|
||||
description: { text: 'A museum by the river.', source: 'wikipedia', sourceUrl: null, license: 'CC BY-SA 4.0' },
|
||||
rating: null,
|
||||
hours: null,
|
||||
})),
|
||||
);
|
||||
const user = userEvent.setup();
|
||||
const onSave = vi.fn().mockResolvedValue(undefined);
|
||||
render(<PlaceFormModal {...defaultProps} onSave={onSave} prefillCoords={{ lat: 50.9, lng: 6.96, name: 'Museum 122', osm_id: 'way:122' }} />);
|
||||
|
||||
await user.click(await screen.findByRole('button', { name: 'Use this text' }));
|
||||
expect(screen.getByLabelText('Description')).toHaveValue('A museum by the river.');
|
||||
// With a description in place, the column asks for it to be cleared first.
|
||||
expect(screen.getByRole('button', { name: 'Use this text' })).toBeDisabled();
|
||||
|
||||
const tile = screen.getByRole('button', { name: /^Pick a picture/ });
|
||||
await user.click(tile);
|
||||
expect(tile).toHaveAttribute('aria-pressed', 'true');
|
||||
await user.click(tile);
|
||||
expect(tile).toHaveAttribute('aria-pressed', 'false');
|
||||
await user.click(tile);
|
||||
|
||||
await user.click(screen.getByRole('button', { name: /^Add$/i }));
|
||||
await waitFor(() => expect(onSave).toHaveBeenCalledTimes(1));
|
||||
expect(onSave).toHaveBeenCalledWith(expect.objectContaining({ image_url: photoUrl, description: 'A museum by the river.' }));
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLACEFORM-123: the notes for this day are saved when they changed', async () => {
|
||||
const user = userEvent.setup();
|
||||
const onSave = vi.fn().mockResolvedValue(undefined);
|
||||
const place = buildPlace({ name: 'Cafe 123' });
|
||||
const assignment = buildAssignment({ id: 123, day_id: 5, place, notes: 'Old note' });
|
||||
render(<PlaceFormModal {...defaultProps} onSave={onSave} place={place} assignmentId={123} dayAssignments={[assignment]} />);
|
||||
|
||||
const notes = screen.getByRole('textbox', { name: 'Notes for this day' });
|
||||
expect(notes).toHaveValue('Old note');
|
||||
await user.clear(notes);
|
||||
await user.type(notes, 'Book a table by the window');
|
||||
await user.click(screen.getByRole('button', { name: /^Update$/i }));
|
||||
await waitFor(() => expect(onSave).toHaveBeenCalledTimes(1));
|
||||
expect(onSave).toHaveBeenCalledWith(expect.objectContaining({ assignment_notes: 'Book a table by the window' }));
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLACEFORM-124: unchanged notes for the day are left out of the save', async () => {
|
||||
const user = userEvent.setup();
|
||||
const onSave = vi.fn().mockResolvedValue(undefined);
|
||||
const place = buildPlace({ name: 'Cafe 124' });
|
||||
const assignment = buildAssignment({ id: 124, day_id: 5, place, notes: 'Keep me' });
|
||||
render(<PlaceFormModal {...defaultProps} onSave={onSave} place={place} assignmentId={124} dayAssignments={[assignment]} />);
|
||||
await user.click(screen.getByRole('button', { name: /^Update$/i }));
|
||||
await waitFor(() => expect(onSave).toHaveBeenCalledTimes(1));
|
||||
expect(onSave.mock.calls[0][0]).not.toHaveProperty('assignment_notes');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// FE-COMP-PLACES-001 to FE-COMP-PLACES-015 + FE-PLANNER-SIDEBAR-016 to 043
|
||||
// FE-COMP-PLACES-001 to FE-COMP-PLACES-015 + FE-PLANNER-SIDEBAR-016 to 067
|
||||
import { render, screen, fireEvent, waitFor, act, within } from '../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { http, HttpResponse } from 'msw';
|
||||
@@ -1114,3 +1114,23 @@ describe('select mode and import menu', () => {
|
||||
expect(screen.queryByPlaceholderText(/naver\.me/)).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
describe('Category filter: places without a category', () => {
|
||||
it('FE-PLANNER-SIDEBAR-067: "No Category" keeps only the places without one, and is offered only while there are some', async () => {
|
||||
const user = userEvent.setup();
|
||||
const cat = buildCategory({ name: 'Cafe', color: '#f97316' });
|
||||
const withCat = buildPlace({ name: 'Blue Bottle', category_id: cat.id, address: 'Kyoto' });
|
||||
const noCat = buildPlace({ name: 'Loose Stop', category_id: null, address: 'Osaka' });
|
||||
const { unmount } = render(<PlacesSidebar {...defaultProps} places={[withCat, noCat]} categories={[cat]} />);
|
||||
await openCategories(user);
|
||||
await user.click(screen.getByRole('button', { name: 'No Category' }));
|
||||
expect(screen.getByRole('button', { name: 'No Category' })).toHaveAttribute('aria-pressed', 'true');
|
||||
expect(screen.getByText('Loose Stop')).toBeInTheDocument();
|
||||
expect(screen.queryByText('Blue Bottle')).not.toBeInTheDocument();
|
||||
unmount();
|
||||
|
||||
render(<PlacesSidebar {...defaultProps} places={[withCat]} categories={[cat]} />);
|
||||
await openCategories(user);
|
||||
expect(screen.queryByRole('button', { name: 'No Category' })).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,318 @@
|
||||
// FE-PLANNER-RESVIEW-001 to FE-PLANNER-RESVIEW-020
|
||||
import { render, screen, fireEvent, waitFor, within } from '../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { http, HttpResponse } from 'msw';
|
||||
import { server } from '../../../tests/helpers/msw/server';
|
||||
import { useAuthStore } from '../../store/authStore';
|
||||
import { useTripStore } from '../../store/tripStore';
|
||||
import { useSettingsStore } from '../../store/settingsStore';
|
||||
import { usePermissionsStore } from '../../store/permissionsStore';
|
||||
import { resetAllStores, seedStore } from '../../../tests/helpers/store';
|
||||
import { buildUser, buildTrip, buildReservation, buildDay, buildBudgetItem } from '../../../tests/helpers/factories';
|
||||
import { resetBodyScrollLock } from '../../utils/bodyScrollLock';
|
||||
import type { Reservation } from '../../types';
|
||||
import ReservationsPanel from './ReservationsPanel';
|
||||
|
||||
const onAdd = vi.fn();
|
||||
const onEdit = vi.fn();
|
||||
const onDelete = vi.fn();
|
||||
|
||||
const d1 = buildDay({ id: 1101, day_number: 1, date: '2025-06-01', title: 'Arrival' });
|
||||
const d2 = buildDay({ id: 1102, day_number: 2, date: '2025-06-02', title: null });
|
||||
|
||||
const flight = buildReservation({
|
||||
id: 1201, title: 'LH 716', type: 'flight', status: 'confirmed', reservation_time: '2025-06-01T08:00', reservation_end_time: '2025-06-01T12:00',
|
||||
confirmation_number: 'ABC123', metadata: JSON.stringify({ airline: 'Lufthansa', flight_number: 'LH716', seat: '12A' }),
|
||||
travelers: [{ user_id: 1, username: 'ada' }],
|
||||
endpoints: [
|
||||
{ role: 'from', sequence: 0, name: 'Frankfurt', code: 'FRA', lat: 50, lng: 8, timezone: null, local_time: null, local_date: null },
|
||||
{ role: 'to', sequence: 1, name: 'Haneda', code: 'HND', lat: 35, lng: 139, timezone: null, local_time: null, local_date: null },
|
||||
],
|
||||
});
|
||||
const dinner = buildReservation({ id: 1202, title: 'Kaiseki dinner', type: 'restaurant', status: 'pending', day_id: 1102, reservation_time: '19:00', location: 'Gion' });
|
||||
const metro = buildReservation({
|
||||
id: 1203, title: 'Metro ride', type: 'transit', status: 'confirmed', day_id: 1102,
|
||||
metadata: JSON.stringify({ transit: { legs: [{ mode: 'SUBWAY', line: 'Ginza', from: { name: 'Ueno' }, to: { name: 'Ginza' } }] } }),
|
||||
});
|
||||
|
||||
function renderPanel(reservations: Reservation[] = [flight, dinner], props: Partial<Parameters<typeof ReservationsPanel>[0]> = {}) {
|
||||
return render(
|
||||
<ReservationsPanel
|
||||
tripId={1}
|
||||
reservations={reservations}
|
||||
days={[d1, d2]}
|
||||
assignments={{}}
|
||||
files={[]}
|
||||
onAdd={onAdd}
|
||||
onEdit={onEdit}
|
||||
onDelete={onDelete}
|
||||
onNavigateToFiles={vi.fn()}
|
||||
{...props}
|
||||
/>,
|
||||
);
|
||||
}
|
||||
|
||||
const viewButton = (name: 'Cards' | 'List' | 'Timeline') => within(screen.getByRole('group', { name: 'View' })).getByRole('button', { name });
|
||||
|
||||
async function openViewOptions(user: ReturnType<typeof userEvent.setup>) {
|
||||
await user.click(screen.getByRole('button', { name: 'View options' }));
|
||||
return screen.getByRole('menu');
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
onAdd.mockClear();
|
||||
onEdit.mockClear();
|
||||
onDelete.mockClear();
|
||||
resetAllStores();
|
||||
resetBodyScrollLock();
|
||||
seedStore(useAuthStore, { user: buildUser(), isAuthenticated: true });
|
||||
seedStore(useTripStore, { trip: buildTrip({ id: 1, start_date: '2025-06-01', end_date: '2025-06-02' }), budgetItems: [] });
|
||||
seedStore(useSettingsStore, { settings: { time_format: '24h', blur_booking_codes: false, language: 'en' } });
|
||||
server.use(http.get('/api/view-contributions/:view/:tripId', () => HttpResponse.json({ contributions: [] })));
|
||||
});
|
||||
|
||||
describe('ReservationsPanel views', () => {
|
||||
it('FE-PLANNER-RESVIEW-001: the list shows one row per booking, grouped by day, and remembers the view', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
await user.click(viewButton('List'));
|
||||
expect(viewButton('List')).toHaveAttribute('aria-pressed', 'true');
|
||||
const row = screen.getByRole('button', { name: 'LH 716', pressed: false });
|
||||
expect(row).toHaveTextContent('FRA → HND');
|
||||
expect(row).toHaveTextContent('Lufthansa LH716');
|
||||
expect(row).toHaveTextContent('12A');
|
||||
expect(screen.getByRole('button', { name: /Day 1/, expanded: true })).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: /Day 2/, expanded: true })).toBeInTheDocument();
|
||||
expect(localStorage.getItem('trek:bookings-bookings-view')).toBe('"list"');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-002: a list row opens the detail, and its Edit hands the booking on', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
await user.click(viewButton('List'));
|
||||
await user.click(screen.getByRole('button', { name: 'Kaiseki dinner' }));
|
||||
const dialog = screen.getByRole('dialog', { name: 'Kaiseki dinner' });
|
||||
await user.click(within(dialog).getByRole('button', { name: 'Edit' }));
|
||||
expect(onEdit).toHaveBeenCalledWith(dinner);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-003: the arrow keys walk the rows and Enter opens the one in focus', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
await user.click(viewButton('List'));
|
||||
const first = screen.getByRole('button', { name: 'LH 716' });
|
||||
first.focus();
|
||||
await user.keyboard('{ArrowDown}');
|
||||
expect(screen.getByRole('button', { name: 'Kaiseki dinner' })).toHaveFocus();
|
||||
await user.keyboard('{ArrowUp}');
|
||||
expect(first).toHaveFocus();
|
||||
await user.keyboard('{Enter}');
|
||||
expect(screen.getByRole('dialog', { name: 'LH 716' })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-004: a list group collapses and opens again', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
await user.click(viewButton('List'));
|
||||
await user.click(screen.getByRole('button', { name: /Day 2/ }));
|
||||
expect(screen.queryByRole('button', { name: 'Kaiseki dinner' })).toBeNull();
|
||||
await user.click(screen.getByRole('button', { name: /Day 2/ }));
|
||||
expect(screen.getByRole('button', { name: 'Kaiseki dinner' })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-005: a list row edits, deletes after a question and switches status', async () => {
|
||||
const user = userEvent.setup();
|
||||
const toggleReservationStatus = vi.fn(async () => undefined);
|
||||
useTripStore.setState({ toggleReservationStatus } as never);
|
||||
renderPanel();
|
||||
await user.click(viewButton('List'));
|
||||
const row = screen.getByRole('button', { name: 'Kaiseki dinner' });
|
||||
await user.click(within(row).getByRole('button', { name: 'Edit' }));
|
||||
expect(onEdit).toHaveBeenCalledWith(dinner);
|
||||
await user.click(within(row).getByRole('button', { name: 'Set to Confirmed' }));
|
||||
expect(toggleReservationStatus).toHaveBeenCalledWith(1, 1202);
|
||||
await user.click(within(row).getByRole('button', { name: 'Delete' }));
|
||||
expect(screen.getByText(/will be permanently deleted/)).toBeInTheDocument();
|
||||
const deletes = screen.getAllByRole('button', { name: 'Delete' });
|
||||
await user.click(deletes[deletes.length - 1]);
|
||||
await waitFor(() => expect(onDelete).toHaveBeenCalledWith(1202));
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-006: a failed status switch says so', async () => {
|
||||
const user = userEvent.setup();
|
||||
const toasts: string[] = [];
|
||||
window.__addToast = ((message: string) => { toasts.push(message); return 1; }) as unknown as typeof window.__addToast;
|
||||
useTripStore.setState({ toggleReservationStatus: vi.fn(async () => { throw new Error('offline'); }) } as never);
|
||||
renderPanel();
|
||||
await user.click(within(screen.getByRole('article', { name: 'Kaiseki dinner' })).getByRole('button', { name: 'Set to Confirmed' }));
|
||||
await waitFor(() => expect(toasts.length).toBe(1));
|
||||
delete window.__addToast;
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-007: a transit journey shows its legs in the list, and linked costs and files on the row', async () => {
|
||||
const user = userEvent.setup();
|
||||
seedStore(useTripStore, { budgetItems: [buildBudgetItem({ reservation_id: 1202, total_price: 80, currency: 'JPY' } as never)] });
|
||||
renderPanel([flight, dinner, metro], { files: [{ id: 5, trip_id: 1, filename: 'a.pdf', original_name: 'menu.pdf', mime_type: 'application/pdf', url: '/f', reservation_id: 1202, created_at: '' } as never] });
|
||||
await user.click(viewButton('List'));
|
||||
expect(screen.getByRole('button', { name: 'Metro ride' })).toHaveTextContent('Ginza');
|
||||
const dinnerRow = screen.getByRole('button', { name: 'Kaiseki dinner' });
|
||||
expect(dinnerRow).toHaveTextContent('80');
|
||||
expect(within(dinnerRow).getByText('1')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-008: the timeline draws the bookings and a bar opens the detail', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
await user.click(viewButton('Timeline'));
|
||||
expect(screen.getByRole('group', { name: 'Zoom' })).toBeInTheDocument();
|
||||
await user.click(screen.getByRole('button', { name: 'LH 716' }));
|
||||
expect(screen.getByRole('dialog', { name: 'LH 716' })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-009: the timeline options switch the type lanes and the other tab', async () => {
|
||||
const user = userEvent.setup();
|
||||
const hotel = buildReservation({ id: 1204, type: 'hotel', title: 'Ryokan', accommodation_start_day_id: 1101, accommodation_end_day_id: 1102 });
|
||||
renderPanel([flight, dinner], { contributionView: 'transports', contextReservations: [hotel] });
|
||||
await user.click(viewButton('Timeline'));
|
||||
const menu = await openViewOptions(user);
|
||||
await user.click(within(menu).getByRole('button', { name: 'One lane per type' }));
|
||||
expect(screen.getByText('All')).toBeInTheDocument();
|
||||
await user.click(within(screen.getByRole('menu')).getByRole('button', { name: 'Show the other tab' }));
|
||||
expect(JSON.parse(localStorage.getItem('trek:bookings-transports-timeline') || '{}')).toMatchObject({ byType: false, context: false });
|
||||
await user.click(within(screen.getByRole('menu')).getByRole('button', { name: 'Reset view' }));
|
||||
expect(JSON.parse(localStorage.getItem('trek:bookings-transports-timeline') || '{}')).toMatchObject({ byType: true, context: true });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-010: the view options group and sort the cards', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
let menu = await openViewOptions(user);
|
||||
// "Type" names both a grouping and a sort key; the grouping comes first.
|
||||
await user.click(within(menu).getAllByRole('button', { name: 'Type' })[0]);
|
||||
expect(screen.getByRole('button', { name: /Restaurant/, expanded: true })).toBeInTheDocument();
|
||||
menu = screen.getByRole('menu');
|
||||
await user.click(within(menu).getByRole('button', { name: 'No grouping' }));
|
||||
expect(screen.queryByRole('button', { name: /Restaurant/, expanded: true })).toBeNull();
|
||||
await user.click(within(screen.getByRole('menu')).getByRole('button', { name: 'Title' }));
|
||||
expect(within(screen.getByRole('menu')).getByRole('button', { name: 'A to Z' })).toBeInTheDocument();
|
||||
await user.click(within(screen.getByRole('menu')).getByRole('button', { name: 'A to Z' }));
|
||||
expect(within(screen.getByRole('menu')).getByRole('button', { name: 'Z to A' })).toBeInTheDocument();
|
||||
const titles = screen.getAllByRole('article').map(a => a.getAttribute('aria-label'));
|
||||
expect(titles).toEqual(['LH 716', 'Kaiseki dinner']);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-011: sorting by date says earliest or latest first, and reset view restores the defaults', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
const menu = await openViewOptions(user);
|
||||
await user.click(within(menu).getByRole('button', { name: 'Earliest first' }));
|
||||
expect(within(screen.getByRole('menu')).getByRole('button', { name: 'Latest first' })).toBeInTheDocument();
|
||||
await user.click(within(screen.getByRole('menu')).getByRole('button', { name: 'Reset view' }));
|
||||
expect(screen.queryByRole('menu')).toBeNull();
|
||||
const again = await openViewOptions(user);
|
||||
expect(within(again).getByRole('button', { name: 'Earliest first' })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-012: with transit on the tab, cards can put it in its own section', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel([flight, dinner, metro]);
|
||||
expect(screen.queryByRole('button', { name: /Automated public transit/, expanded: true })).toBeNull();
|
||||
const menu = await openViewOptions(user);
|
||||
const apart = within(menu).getByRole('button', { name: 'Public transit as its own section' });
|
||||
expect(apart).toHaveAttribute('aria-pressed', 'false');
|
||||
await user.click(apart);
|
||||
expect(screen.getByRole('button', { name: /Automated public transit/, expanded: true })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-013: the view options close on Escape', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
const menu = await openViewOptions(user);
|
||||
fireEvent.keyDown(menu, { key: 'Escape' });
|
||||
expect(screen.queryByRole('menu')).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-014: search narrows the cards, counts the results and clears again', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
const search = screen.getByRole('textbox', { name: 'Search' });
|
||||
await user.type(search, 'gion');
|
||||
expect(screen.queryByRole('article', { name: 'LH 716' })).toBeNull();
|
||||
expect(screen.getByRole('article', { name: 'Kaiseki dinner' })).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: /1 of 2/ })).toBeInTheDocument();
|
||||
await user.click(screen.getByRole('button', { name: 'Clear' }));
|
||||
expect(search).toHaveValue('');
|
||||
await user.type(search, 'zzz');
|
||||
expect(screen.getByText('Nothing matches these filters')).toBeInTheDocument();
|
||||
await user.keyboard('{Escape}');
|
||||
expect(search).toHaveValue('');
|
||||
await user.type(search, 'abc123');
|
||||
await user.click(screen.getByRole('button', { name: /1 of 2/ }));
|
||||
expect(search).toHaveValue('');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-015: the status filter keeps confirmed or pending bookings and counts on the button', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
await user.click(screen.getByRole('button', { name: 'Filter' }));
|
||||
const menu = screen.getByRole('menu');
|
||||
await user.click(within(menu).getByRole('button', { name: 'Pending' }));
|
||||
expect(screen.queryByRole('article', { name: 'LH 716' })).toBeNull();
|
||||
expect(within(screen.getByRole('button', { name: 'Filter' })).getByText('1')).toBeInTheDocument();
|
||||
await user.click(within(menu).getByRole('button', { name: 'Reset filters' }));
|
||||
expect(screen.getByRole('article', { name: 'LH 716' })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-016: a card opens the detail on click or Enter, and Close shuts it', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
await user.click(screen.getByRole('article', { name: 'LH 716' }));
|
||||
expect(screen.getByRole('dialog', { name: 'LH 716' })).toBeInTheDocument();
|
||||
await user.click(within(screen.getByRole('dialog', { name: 'LH 716' })).getByRole('button', { name: 'Close' }));
|
||||
expect(screen.queryByRole('dialog', { name: 'LH 716' })).toBeNull();
|
||||
screen.getByRole('article', { name: 'LH 716' }).focus();
|
||||
await user.keyboard('{Enter}');
|
||||
expect(screen.getByRole('dialog', { name: 'LH 716' })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-017: deleting the booking the detail shows closes the detail first', async () => {
|
||||
const user = userEvent.setup();
|
||||
renderPanel();
|
||||
await user.click(screen.getByRole('article', { name: 'Kaiseki dinner' }));
|
||||
expect(screen.getByRole('dialog', { name: 'Kaiseki dinner' })).toBeInTheDocument();
|
||||
await user.click(within(screen.getByRole('article', { name: 'Kaiseki dinner' })).getByRole('button', { name: 'Delete' }));
|
||||
const deletes = screen.getAllByRole('button', { name: 'Delete' });
|
||||
await user.click(deletes[deletes.length - 1]);
|
||||
await waitFor(() => expect(onDelete).toHaveBeenCalledWith(1202));
|
||||
expect(screen.queryByRole('dialog', { name: 'Kaiseki dinner' })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-018: an empty transports tab offers adding, importing and AirTrail', async () => {
|
||||
const user = userEvent.setup();
|
||||
const onImport = vi.fn();
|
||||
const onAirTrailImport = vi.fn();
|
||||
renderPanel([], { contributionView: 'transports', addManualKey: 'transport.addManual', onImport, bookingImportAvailable: true, onAirTrailImport, airTrailAvailable: true });
|
||||
await user.click(screen.getByRole('button', { name: 'Import from file' }));
|
||||
expect(onImport).toHaveBeenCalled();
|
||||
await user.click(screen.getByRole('button', { name: 'AirTrail' }));
|
||||
expect(onAirTrailImport).toHaveBeenCalled();
|
||||
expect(screen.queryByRole('textbox', { name: 'Search' })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-019: a card shows its linked expense and a transit card its journey', () => {
|
||||
seedStore(useTripStore, { budgetItems: [buildBudgetItem({ reservation_id: 1201, total_price: 420, currency: 'EUR' } as never)] });
|
||||
renderPanel([flight, metro]);
|
||||
expect(within(screen.getByRole('article', { name: 'LH 716' })).getByText(/420/)).toBeInTheDocument();
|
||||
expect(within(screen.getByRole('article', { name: 'Metro ride' })).getByText('Ueno')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-RESVIEW-020: without the booking right the list rows have no actions', async () => {
|
||||
const user = userEvent.setup();
|
||||
seedStore(usePermissionsStore, { permissions: { reservation_edit: 'admin' } });
|
||||
renderPanel();
|
||||
await user.click(viewButton('List'));
|
||||
const row = screen.getByRole('button', { name: 'LH 716' });
|
||||
expect(within(row).queryByRole('button', { name: 'Edit' })).toBeNull();
|
||||
expect(within(row).queryByRole('button', { name: /Set to/ })).toBeNull();
|
||||
});
|
||||
});
|
||||
@@ -1,4 +1,4 @@
|
||||
// FE-PLANNER-TRANSMODAL-001 to FE-PLANNER-TRANSMODAL-080
|
||||
// FE-PLANNER-TRANSMODAL-001 to FE-PLANNER-TRANSMODAL-082
|
||||
import { render, screen, waitFor, fireEvent, within, act } from '../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { http, HttpResponse } from 'msw';
|
||||
@@ -1619,4 +1619,45 @@ describe('TransportModal', () => {
|
||||
expect(hint).not.toHaveClass('truncate');
|
||||
expect(screen.queryByText('Title *')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-TRANSMODAL-081: a car stop moves up and keeps the time given to it', async () => {
|
||||
const onSave = vi.fn().mockResolvedValue(undefined);
|
||||
render(<TransportModal {...defaultProps} days={routeDays} selectedDayId={10} onSave={onSave} />);
|
||||
|
||||
await pickType(/^Car$/i);
|
||||
await userEvent.type(screen.getByPlaceholderText(/e.g. Lufthansa/i), 'Mietwagen');
|
||||
await userEvent.click(screen.getByRole('button', { name: /Add stop/i }));
|
||||
await userEvent.click(screen.getByRole('button', { name: /Add stop/i }));
|
||||
|
||||
const fields = screen.getAllByTestId('location-select');
|
||||
fireEvent.change(fields[0], { target: { value: 'Berlin' } });
|
||||
fireEvent.change(fields[1], { target: { value: 'Prag' } });
|
||||
fireEvent.change(fields[2], { target: { value: 'Dresden' } });
|
||||
fireEvent.change(fields[3], { target: { value: 'Bastei' } });
|
||||
// The stops' own time fields come first, before the pick-up and return times.
|
||||
fireEvent.change(screen.getAllByTestId('time-picker')[1], { target: { value: '14:30' } });
|
||||
|
||||
await userEvent.click(screen.getAllByRole('button', { name: /Move up/i })[1]);
|
||||
|
||||
await userEvent.click(screen.getByRole('button', { name: /^Add$/i }));
|
||||
await waitFor(() => expect(onSave).toHaveBeenCalled());
|
||||
const payload = onSave.mock.calls[0][0];
|
||||
expect(payload.endpoints.map((e: { name: string }) => e.name)).toEqual(['Berlin', 'Bastei', 'Dresden', 'Prag']);
|
||||
expect(payload.endpoints.find((e: { name: string }) => e.name === 'Bastei').local_time).toBe('14:30');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-TRANSMODAL-082: a multi-leg train saves the code typed for one of its segments', async () => {
|
||||
const onSave = vi.fn().mockResolvedValue(undefined);
|
||||
render(<TransportModal {...defaultProps} days={routeDays} reservation={multiLegTrain()} onSave={onSave} />);
|
||||
|
||||
const codes = screen.getAllByPlaceholderText('e.g. ABC12345') as HTMLInputElement[];
|
||||
// One code per segment, then the booking's own.
|
||||
expect(codes).toHaveLength(3);
|
||||
fireEvent.change(codes[1], { target: { value: 'SEG-TWO' } });
|
||||
|
||||
await userEvent.click(screen.getByRole('button', { name: /^Update$/i }));
|
||||
await waitFor(() => expect(onSave).toHaveBeenCalled());
|
||||
const legs = onSave.mock.calls[0][0].metadata.legs as { confirmation_number?: string }[];
|
||||
expect(legs.map(l => l.confirmation_number ?? null)).toEqual([null, 'SEG-TWO']);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,210 @@
|
||||
// FE-PLANNER-BKDETAIL-001 to FE-PLANNER-BKDETAIL-013
|
||||
import { render, screen, waitFor, within } from '../../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { http, HttpResponse } from 'msw';
|
||||
import { server } from '../../../../tests/helpers/msw/server';
|
||||
import { resetAllStores, seedStore } from '../../../../tests/helpers/store';
|
||||
import { buildAssignment, buildDay, buildPlace, buildReservation, buildTrip, buildUser } from '../../../../tests/helpers/factories';
|
||||
import { resetBodyScrollLock } from '../../../utils/bodyScrollLock';
|
||||
import { useAuthStore } from '../../../store/authStore';
|
||||
import { useTripStore } from '../../../store/tripStore';
|
||||
import { usePluginStore } from '../../../store/pluginStore';
|
||||
import { useSettingsStore } from '../../../store/settingsStore';
|
||||
import type { Reservation, ReservationEndpoint } from '../../../types';
|
||||
import BookingDetailHost, { type BookingDetailHostProps } from './BookingDetailHost';
|
||||
|
||||
function ep(over: Partial<ReservationEndpoint>): ReservationEndpoint {
|
||||
return { role: 'from', sequence: 0, name: 'Stop', code: null, lat: 1, lng: 1, timezone: null, local_time: null, local_date: null, ...over };
|
||||
}
|
||||
|
||||
const onClose = vi.fn();
|
||||
const toasts: Array<{ message: string; type: string }> = [];
|
||||
|
||||
const d1 = buildDay({ id: 1301, day_number: 1, date: '2025-06-01', title: 'Arrival' });
|
||||
const d2 = buildDay({ id: 1302, day_number: 2, date: '2025-06-02', title: null });
|
||||
const d3 = buildDay({ id: 1303, day_number: 3, date: '2025-06-04', title: null });
|
||||
|
||||
function renderDetail(r: Reservation, props: Partial<BookingDetailHostProps> = {}) {
|
||||
return render(
|
||||
<BookingDetailHost r={r} tripId={1} days={[d1, d2, d3]} assignments={{}} files={[]} canEdit contributions={[]}
|
||||
onClose={onClose} onDelete={vi.fn()} onNavigateToFiles={vi.fn()} {...props} />,
|
||||
);
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
onClose.mockClear();
|
||||
toasts.length = 0;
|
||||
resetAllStores();
|
||||
resetBodyScrollLock();
|
||||
seedStore(useAuthStore, { user: buildUser(), isAuthenticated: true });
|
||||
seedStore(useTripStore, { trip: buildTrip({ id: 1, currency: 'EUR' }), budgetItems: [] });
|
||||
seedStore(useSettingsStore, { settings: { time_format: '24h', blur_booking_codes: false, language: 'en' } });
|
||||
usePluginStore.setState({ plugins: [] });
|
||||
window.__addToast = ((message: string, type: string) => { toasts.push({ message, type }); return 1; }) as unknown as typeof window.__addToast;
|
||||
server.use(http.get('/api/view-contributions/:view/:tripId', () => HttpResponse.json({ contributions: [] })));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
delete window.__addToast;
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
describe('BookingDetailDialog', () => {
|
||||
it('FE-PLANNER-BKDETAIL-001: a transport states its carrier and route in the head, its times as tiles', () => {
|
||||
const r = buildReservation({
|
||||
title: 'LH 716', type: 'flight', day_id: 1301, reservation_time: '2025-06-01T08:00', reservation_end_time: '2025-06-01T12:30',
|
||||
metadata: JSON.stringify({ airline: 'Lufthansa', flight_number: 'LH716', platform: 'B', seat: '12A', class: 'Business' }),
|
||||
endpoints: [ep({ role: 'from', name: 'Frankfurt', code: 'FRA' }), ep({ role: 'to', sequence: 1, name: 'Haneda', code: 'HND' })],
|
||||
});
|
||||
renderDetail(r);
|
||||
const dialog = screen.getByRole('dialog', { name: 'LH 716' });
|
||||
expect(within(dialog).getByText('Lufthansa LH716 FRA → HND', { normalizer: s => s })).toBeInTheDocument();
|
||||
expect(within(dialog).getByText('08:00')).toBeInTheDocument();
|
||||
expect(within(dialog).getByText('Frankfurt')).toBeInTheDocument();
|
||||
expect(within(dialog).getByText('12:30')).toBeInTheDocument();
|
||||
expect(within(dialog).getByText('Haneda')).toBeInTheDocument();
|
||||
expect(within(dialog).getByText('12A')).toBeInTheDocument();
|
||||
// Seat and platform stand as tiles, not a second time in the fields.
|
||||
expect(within(dialog).queryByText('12A, Business')).toBeNull();
|
||||
expect(within(dialog).getByText('Arrival')).toBeInTheDocument();
|
||||
expect(within(dialog).getByText('Sun, Jun 1')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-002: without endpoints the tiles fall back to Start and End', () => {
|
||||
renderDetail(buildReservation({ title: 'Rental', type: 'car', reservation_time: '2025-06-01T09:00', reservation_end_time: '2025-06-02T18:00' }));
|
||||
expect(screen.getByText('Start')).toBeInTheDocument();
|
||||
expect(screen.getByText('End')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-003: a stay shows check-in, check-out and its nights, without repeating the date', () => {
|
||||
const r = buildReservation({
|
||||
title: 'Ryokan', type: 'hotel', accommodation_start_day_id: 1301, accommodation_end_day_id: 1303,
|
||||
metadata: JSON.stringify({ check_in_time: '15:00', check_out_time: '10:00' }),
|
||||
});
|
||||
renderDetail(r);
|
||||
expect(screen.getByText('Check-in 15:00')).toBeInTheDocument();
|
||||
expect(screen.getByText('Check-out 10:00')).toBeInTheDocument();
|
||||
expect(screen.getByText('Jun 1')).toBeInTheDocument();
|
||||
expect(screen.getByText('Jun 4')).toBeInTheDocument();
|
||||
expect(screen.getByText('3')).toBeInTheDocument();
|
||||
expect(screen.getByText('Nights')).toBeInTheDocument();
|
||||
expect(screen.queryByText('Jun 1 → Jun 4')).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-004: a stay without an end has no night count', () => {
|
||||
renderDetail(buildReservation({ title: 'Guesthouse', type: 'hotel', day_id: 1302 }));
|
||||
expect(screen.getByText('Check-in')).toBeInTheDocument();
|
||||
expect(screen.queryByText('Nights')).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-005: a route with stops is listed stop by stop, and segment codes under it', () => {
|
||||
const r = buildReservation({
|
||||
title: 'Via Munich', type: 'flight',
|
||||
metadata: JSON.stringify({ legs: [{ from: 'FRA', to: 'MUC', confirmation_number: 'SEG1' }, { from: 'MUC', to: 'HND', confirmation_number: 'SEG2' }] }),
|
||||
endpoints: [
|
||||
ep({ role: 'from', name: 'Frankfurt', code: 'FRA', local_time: '07:00' }),
|
||||
ep({ role: 'stop', sequence: 1, name: 'Munich', code: null }),
|
||||
ep({ role: 'to', sequence: 2, name: 'Haneda', code: 'HND', local_time: '09:00' }),
|
||||
],
|
||||
});
|
||||
renderDetail(r);
|
||||
expect(screen.getByText('Route')).toBeInTheDocument();
|
||||
expect(screen.getByText('Munich')).toBeInTheDocument();
|
||||
expect(screen.getByText('Segment codes')).toBeInTheDocument();
|
||||
expect(screen.getByText('FRA → MUC')).toBeInTheDocument();
|
||||
expect(screen.getByText('#SEG2')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-006: place, accommodation, linked stop, link, travelers and notes', () => {
|
||||
const place = buildPlace({ name: 'Kinkaku-ji', place_time: '10:00' });
|
||||
const a = buildAssignment({ id: 4401, day_id: 1302, place });
|
||||
const r = buildReservation({
|
||||
title: 'Temple tour', type: 'tour', location: 'Kyoto', accommodation_name: 'Ryokan', assignment_id: 4401, url: 'https://example.com/tour',
|
||||
notes: '**Bring** cash', travelers: [{ user_id: 3, username: 'maria' }],
|
||||
metadata: JSON.stringify({ price: '30' }),
|
||||
});
|
||||
renderDetail(r, { assignments: { '1302': [a] } });
|
||||
expect(screen.getByText('Kyoto')).toBeInTheDocument();
|
||||
expect(screen.getByText('Ryokan')).toBeInTheDocument();
|
||||
expect(screen.getByText('Day 2, Kinkaku-ji, 10:00')).toBeInTheDocument();
|
||||
expect(screen.getByRole('link', { name: 'https://example.com/tour' })).toHaveAttribute('href', 'https://example.com/tour');
|
||||
expect(screen.getByText('maria')).toBeInTheDocument();
|
||||
expect(screen.getByText('Bring')).toBeInTheDocument();
|
||||
expect(screen.getByText('Price')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-007: a link that is not safe stays text', () => {
|
||||
renderDetail(buildReservation({ title: 'Odd link', url: 'call the hotel' }));
|
||||
expect(screen.getByText('call the hotel')).toBeInTheDocument();
|
||||
expect(screen.queryByRole('link', { name: 'call the hotel' })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-008: the booking code copies to the clipboard and says so', async () => {
|
||||
const user = userEvent.setup();
|
||||
const writeText = vi.spyOn(navigator.clipboard, 'writeText').mockResolvedValue(undefined);
|
||||
renderDetail(buildReservation({ title: 'Dinner', confirmation_number: 'XYZ9' }));
|
||||
expect(screen.getByText('#XYZ9')).toBeInTheDocument();
|
||||
await user.click(screen.getByRole('button', { name: 'Copy booking code' }));
|
||||
expect(writeText).toHaveBeenCalledWith('XYZ9');
|
||||
await waitFor(() => expect(toasts).toContainEqual({ message: 'Copied', type: 'success' }));
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-009: a failed copy says so', async () => {
|
||||
const user = userEvent.setup();
|
||||
vi.spyOn(navigator.clipboard, 'writeText').mockRejectedValue(new Error('denied'));
|
||||
renderDetail(buildReservation({ title: 'Dinner', confirmation_number: 'XYZ9' }));
|
||||
await user.click(screen.getByRole('button', { name: 'Copy booking code' }));
|
||||
await waitFor(() => expect(toasts).toContainEqual({ message: 'Could not copy', type: 'error' }));
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-010: clicking the title renames the booking through the store', async () => {
|
||||
const user = userEvent.setup();
|
||||
const updateReservation = vi.fn(async () => undefined);
|
||||
useTripStore.setState({ updateReservation } as never);
|
||||
const r = buildReservation({ title: 'Dinner' });
|
||||
renderDetail(r);
|
||||
await user.click(screen.getByRole('button', { name: 'Dinner' }));
|
||||
const field = screen.getByRole('textbox', { name: 'Rename' });
|
||||
expect(field).toHaveValue('Dinner');
|
||||
// Escape leaves the rename, not the detail under it.
|
||||
await user.keyboard('{Escape}');
|
||||
expect(screen.queryByRole('textbox', { name: 'Rename' })).toBeNull();
|
||||
expect(onClose).not.toHaveBeenCalled();
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'Dinner' }));
|
||||
await user.clear(screen.getByRole('textbox', { name: 'Rename' }));
|
||||
await user.type(screen.getByRole('textbox', { name: 'Rename' }), 'Kaiseki at Kikunoi');
|
||||
await user.click(screen.getByRole('button', { name: 'Save' }));
|
||||
expect(updateReservation).toHaveBeenCalledWith(1, r.id, { title: 'Kaiseki at Kikunoi' });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-011: an unchanged name saves nothing, a failed rename says so', async () => {
|
||||
const user = userEvent.setup();
|
||||
const updateReservation = vi.fn(async () => { throw new Error('offline'); });
|
||||
useTripStore.setState({ updateReservation } as never);
|
||||
renderDetail(buildReservation({ title: 'Dinner' }));
|
||||
await user.click(screen.getByRole('button', { name: 'Dinner' }));
|
||||
await user.click(screen.getByRole('button', { name: 'Save' }));
|
||||
expect(updateReservation).not.toHaveBeenCalled();
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'Dinner' }));
|
||||
await user.type(screen.getByRole('textbox', { name: 'Rename' }), ' 2');
|
||||
await user.keyboard('{Enter}');
|
||||
await waitFor(() => expect(toasts).toContainEqual({ message: 'Failed to update', type: 'error' }));
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-012: without the booking right the title is only read', () => {
|
||||
renderDetail(buildReservation({ title: 'Dinner', status: 'pending' }), { canEdit: false });
|
||||
expect(screen.queryByRole('button', { name: 'Dinner' })).toBeNull();
|
||||
expect(screen.getByRole('heading', { name: 'Dinner' })).toBeInTheDocument();
|
||||
expect(screen.getByText('Pending')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKDETAIL-013: a booking with only an end time shows it in the clock format of the user', () => {
|
||||
seedStore(useSettingsStore, { settings: { time_format: '12h', blur_booking_codes: false, language: 'en' } });
|
||||
const r = buildReservation({ id: 950, type: 'train', title: 'Night train', status: 'confirmed', reservation_time: null, reservation_end_time: '2025-06-01T15:00' } as never);
|
||||
renderDetail(r);
|
||||
expect(screen.getByText('3:00 PM')).toBeInTheDocument();
|
||||
expect(screen.queryByText('15:00')).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
@@ -85,8 +85,9 @@ export default function BookingDetailDialog(p: BookingDetailDialogProps) {
|
||||
} else {
|
||||
const from = facts.endpoints[0]
|
||||
const to = facts.endpoints[facts.endpoints.length - 1]
|
||||
if (facts.startTime) stats.push({ value: facts.time?.split(' → ')[0] || facts.startTime, label: from?.name || t('reservations.start') })
|
||||
if (facts.endTime) stats.push({ value: facts.time?.split(' → ')[1] || facts.endTime, label: to?.name || t('reservations.end') })
|
||||
// Each tile formats its own time: a booking with only an end has no "start → end" line to cut up.
|
||||
if (facts.startTime) stats.push({ value: formatTime(facts.startTime, locale, timeFormat), label: from?.name || t('reservations.start') })
|
||||
if (facts.endTime) stats.push({ value: formatTime(facts.endTime, locale, timeFormat), label: to?.name || t('reservations.end') })
|
||||
if (transit?.duration) stats.push({ value: fmtTransitDuration(transit.duration, t), label: t('transit.durationLabel') })
|
||||
if (transit && transit.legs.length > 0) stats.push({ value: String(transit.transfers), label: t('transit.transfersLabel') })
|
||||
// Under a minute of walking is not worth a tile.
|
||||
|
||||
@@ -0,0 +1,242 @@
|
||||
// FE-PLANNER-BKTIMELINEVIEW-001 to FE-PLANNER-BKTIMELINEVIEW-016
|
||||
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
||||
import { render, screen, fireEvent, within } from '../../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { resetAllStores, seedStore } from '../../../../tests/helpers/store';
|
||||
import { buildDay, buildReservation } from '../../../../tests/helpers/factories';
|
||||
import { useSettingsStore } from '../../../store/settingsStore';
|
||||
import type { Day, Reservation, ReservationEndpoint } from '../../../types';
|
||||
import { bookingFacts } from './bookingFacts';
|
||||
import BookingsTimeline, { type BookingsTimelineProps } from './BookingsTimeline';
|
||||
|
||||
function ep(over: Partial<ReservationEndpoint>): ReservationEndpoint {
|
||||
return { role: 'from', sequence: 0, name: 'Stop', code: null, lat: 1, lng: 1, timezone: null, local_time: null, local_date: null, ...over };
|
||||
}
|
||||
|
||||
// The lanes are laid out from the width the observer reports; jsdom has no layout, so this one reports a wide screen.
|
||||
let reportedWidth = 1400;
|
||||
class WideObserver {
|
||||
constructor(private cb: ResizeObserverCallback) {}
|
||||
observe() { this.cb([{ contentRect: { width: reportedWidth } } as ResizeObserverEntry], this as unknown as ResizeObserver); }
|
||||
unobserve() {}
|
||||
disconnect() {}
|
||||
}
|
||||
|
||||
const d1 = buildDay({ id: 801, day_number: 1, date: '2025-06-01', title: 'Arrival' });
|
||||
const d2 = buildDay({ id: 802, day_number: 2, date: '2025-06-02', title: null });
|
||||
const d3 = buildDay({ id: 803, day_number: 3, date: '2025-06-03', title: null });
|
||||
const days: Day[] = [d1, d2, d3];
|
||||
|
||||
const flight = buildReservation({
|
||||
id: 8801, type: 'flight', title: 'LH 716', status: 'confirmed', reservation_time: '2025-06-01T08:00', reservation_end_time: '2025-06-01T12:00',
|
||||
location: 'Frankfurt',
|
||||
endpoints: [ep({ role: 'from', name: 'Frankfurt', code: 'FRA' }), ep({ role: 'to', sequence: 1, name: 'Haneda', code: 'HND' })],
|
||||
});
|
||||
const train = buildReservation({ id: 8802, type: 'train', title: 'Shinkansen', status: 'pending', reservation_time: '2025-06-02T09:00', reservation_end_time: '2025-06-02T11:30' });
|
||||
const early = buildReservation({ id: 8803, type: 'restaurant', title: 'Farewell dinner', reservation_time: '2025-05-20T19:00' });
|
||||
const late = buildReservation({ id: 8804, type: 'tour', title: 'Bonus tour', status: 'pending', reservation_time: '2025-07-01T10:00' });
|
||||
const loose = buildReservation({ id: 8805, type: 'transit', title: 'Metro ride' });
|
||||
|
||||
const factsOf = (r: Reservation) => bookingFacts(r, {
|
||||
t: (k, p) => (p && 'n' in p ? `Day ${p.n}` : k), locale: 'en-US', timeFormat: '24h', days, assignmentLookup: {}, tripCurrency: 'EUR', hasLinkedCost: false,
|
||||
});
|
||||
|
||||
const onSelect = vi.fn();
|
||||
const onZoom = vi.fn();
|
||||
|
||||
function renderTimeline(props: Partial<BookingsTimelineProps> = {}) {
|
||||
return render(
|
||||
<BookingsTimeline
|
||||
items={[flight, train]}
|
||||
context={[]}
|
||||
contextLabel="Bookings"
|
||||
days={days}
|
||||
zoom="trip"
|
||||
onZoom={onZoom}
|
||||
byType
|
||||
showContext
|
||||
selectedId={null}
|
||||
onSelect={onSelect}
|
||||
factsOf={factsOf}
|
||||
{...props}
|
||||
/>,
|
||||
);
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
resetAllStores();
|
||||
seedStore(useSettingsStore, { settings: { ...useSettingsStore.getState().settings, time_format: '24h', language: 'en' } });
|
||||
reportedWidth = 1400;
|
||||
vi.stubGlobal('ResizeObserver', WideObserver);
|
||||
onSelect.mockClear();
|
||||
onZoom.mockClear();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.unstubAllGlobals();
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
describe('BookingsTimeline: trip view', () => {
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-001: states the trip\'s range and length, with one lane per type', () => {
|
||||
renderTimeline();
|
||||
expect(screen.getByText('Jun 1 → Jun 3')).toBeInTheDocument();
|
||||
expect(screen.getByText('3 days')).toBeInTheDocument();
|
||||
expect(screen.getByText('Flight')).toBeInTheDocument();
|
||||
expect(screen.getByText('Train')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-002: a bar is a button named by its booking that selects it', async () => {
|
||||
renderTimeline();
|
||||
await userEvent.click(screen.getByRole('button', { name: 'LH 716' }));
|
||||
expect(onSelect).toHaveBeenCalledWith(flight);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-003: without lanes per type everything shares one lane', () => {
|
||||
renderTimeline({ byType: false });
|
||||
expect(screen.getByText('All')).toBeInTheDocument();
|
||||
expect(screen.queryByText('Flight')).toBeNull();
|
||||
expect(screen.getByRole('button', { name: 'Shinkansen' })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-004: a day head opens that day by the hour', async () => {
|
||||
renderTimeline();
|
||||
await userEvent.click(screen.getByRole('button', { name: /Day 2/ }));
|
||||
expect(onZoom).toHaveBeenCalledWith('day');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-005: the zoom switch reports trip and day', async () => {
|
||||
renderTimeline();
|
||||
const zoom = screen.getByRole('group', { name: 'Zoom' });
|
||||
expect(within(zoom).getByRole('button', { name: 'Trip' })).toHaveAttribute('aria-pressed', 'true');
|
||||
await userEvent.click(within(zoom).getByRole('button', { name: 'Day' }));
|
||||
await userEvent.click(within(zoom).getByRole('button', { name: 'Trip' }));
|
||||
expect(onZoom.mock.calls).toEqual([['day'], ['trip']]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-006: what the axis cannot place waits below, grouped, and selects on click', async () => {
|
||||
renderTimeline({ items: [flight, early, late, loose], selectedId: 8805 });
|
||||
expect(screen.getByText('Before the trip')).toBeInTheDocument();
|
||||
expect(screen.getByText('After the trip')).toBeInTheDocument();
|
||||
expect(screen.getByText('No date')).toBeInTheDocument();
|
||||
const metro = screen.getByRole('button', { name: /Metro ride/ });
|
||||
expect(metro).toHaveAttribute('aria-pressed', 'true');
|
||||
expect(screen.getByRole('button', { name: /Bonus tour/ })).toHaveTextContent('Tour, Pending');
|
||||
expect(screen.getByRole('button', { name: /Farewell dinner/ })).toHaveTextContent('Restaurant, Confirmed');
|
||||
await userEvent.click(screen.getByRole('button', { name: /Farewell dinner/ }));
|
||||
expect(onSelect).toHaveBeenCalledWith(early);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-007: nothing dated says so', () => {
|
||||
renderTimeline({ items: [loose] });
|
||||
expect(screen.getByText('None of these has a date yet.')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-008: the other tab shows as a dimmed lane, only while asked for', () => {
|
||||
const hotel = buildReservation({ id: 8806, type: 'hotel', title: 'Ryokan', accommodation_start_day_id: 801, accommodation_end_day_id: 803 });
|
||||
const { rerender } = renderTimeline({ context: [hotel], contextLabel: 'Bookings' });
|
||||
expect(screen.getByText('Bookings')).toBeInTheDocument();
|
||||
expect(screen.getByText('Ryokan')).toBeInTheDocument();
|
||||
rerender(
|
||||
<BookingsTimeline items={[flight]} context={[hotel]} contextLabel="Bookings" days={days} zoom="trip" onZoom={onZoom}
|
||||
byType showContext={false} selectedId={null} onSelect={onSelect} factsOf={factsOf} />,
|
||||
);
|
||||
expect(screen.queryByText('Ryokan')).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-009: resting on a bar shows what it holds, leaving hides it', async () => {
|
||||
renderTimeline();
|
||||
const bar = screen.getByRole('button', { name: 'LH 716' });
|
||||
fireEvent.mouseEnter(bar);
|
||||
const card = screen.getByRole('tooltip');
|
||||
expect(card).toHaveTextContent('LH 716');
|
||||
expect(card).toHaveTextContent('Flight, Confirmed');
|
||||
expect(card).toHaveTextContent('08:00 → 12:00');
|
||||
expect(card).toHaveTextContent('FRA → HND');
|
||||
expect(card).toHaveTextContent('Frankfurt');
|
||||
fireEvent.mouseLeave(bar);
|
||||
expect(screen.queryByRole('tooltip')).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-010: the focus shows the same card, near the bottom of the window above the bar', () => {
|
||||
renderTimeline();
|
||||
const bar = screen.getByRole('button', { name: 'Shinkansen' });
|
||||
vi.spyOn(bar, 'getBoundingClientRect').mockReturnValue({ top: 700, bottom: 740, left: 5000, right: 5100, width: 100, height: 40, x: 5000, y: 700, toJSON: () => ({}) } as DOMRect);
|
||||
fireEvent.focus(bar);
|
||||
const card = screen.getByRole('tooltip');
|
||||
expect(card).toHaveTextContent('Train, Pending');
|
||||
expect(card.style.transform).toBe('translateY(-100%)');
|
||||
fireEvent.blur(bar);
|
||||
expect(screen.queryByRole('tooltip')).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-011: on a trip without dates the days are counted, not dated', () => {
|
||||
const a = buildDay({ id: 811, day_number: 1, date: null });
|
||||
const b = buildDay({ id: 812, day_number: 2, date: null });
|
||||
const bus = buildReservation({ id: 8807, type: 'bus', title: 'Night bus', reservation_time: '21:00', day_id: 812 });
|
||||
reportedWidth = 0;
|
||||
renderTimeline({ days: [a, b], items: [bus] });
|
||||
expect(screen.queryByText(/days$/)).toBeNull();
|
||||
expect(screen.getByRole('button', { name: 'Night bus' })).toBeInTheDocument();
|
||||
// Too narrow for "Day 2", so the head keeps only the number.
|
||||
expect(screen.getByRole('button', { name: '2' })).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
describe('BookingsTimeline: day view', () => {
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-012: opens on the first day with something on it, and walks the days', async () => {
|
||||
renderTimeline({ zoom: 'day', items: [train] });
|
||||
expect(screen.getByText('Day 2')).toBeInTheDocument();
|
||||
expect(screen.getByText('Mon, Jun 2')).toBeInTheDocument();
|
||||
expect(screen.getByText('09:00')).toBeInTheDocument();
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Previous day' }));
|
||||
expect(screen.getByText('Arrival')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: 'Previous day' })).toBeDisabled();
|
||||
expect(screen.getByText('Nothing on this day.')).toBeInTheDocument();
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Next day' }));
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Next day' }));
|
||||
expect(screen.getByRole('button', { name: 'Next day' })).toBeDisabled();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-013: a detailed bar carries its times and route', () => {
|
||||
renderTimeline({ zoom: 'day', items: [flight] });
|
||||
const bar = screen.getByRole('button', { name: 'LH 716' });
|
||||
expect(bar).toHaveTextContent('LH 716');
|
||||
expect(bar).toHaveTextContent('08:00 → 12:00 FRA → HND');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-014: a bar running past the day in view marks the cut', () => {
|
||||
const rental = buildReservation({ id: 8808, type: 'car', title: 'Rental', reservation_time: '2025-06-01T10:00', reservation_end_time: '2025-06-03T10:00' });
|
||||
renderTimeline({ zoom: 'day', items: [rental] });
|
||||
expect(screen.getByRole('button', { name: 'Rental' }).querySelectorAll('svg').length).toBeGreaterThanOrEqual(2);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-015: during the trip the day view opens on today, marks now and offers a way back', async () => {
|
||||
vi.useFakeTimers({ toFake: ['Date'] });
|
||||
vi.setSystemTime(new Date(2025, 5, 3, 14, 30));
|
||||
renderTimeline({ zoom: 'day', items: [flight, train] });
|
||||
expect(screen.getByText('now')).toBeInTheDocument();
|
||||
expect(screen.queryByRole('button', { name: 'Today' })).toBeNull();
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Previous day' }));
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Today' }));
|
||||
expect(screen.getByText('now')).toBeInTheDocument();
|
||||
expect(screen.queryByRole('button', { name: 'Today' })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINEVIEW-016: a long trip scrolls in the trip view, and Today scrolls to now', async () => {
|
||||
vi.useFakeTimers({ toFake: ['Date'] });
|
||||
vi.setSystemTime(new Date(2025, 5, 20, 9, 0));
|
||||
const many = Array.from({ length: 30 }, (_, i) => buildDay({ id: 900 + i, day_number: i + 1, date: `2025-06-${String(i + 1).padStart(2, '0')}` }));
|
||||
reportedWidth = 600;
|
||||
const original = Element.prototype.scrollTo;
|
||||
const scrollTo = vi.fn();
|
||||
Element.prototype.scrollTo = scrollTo as unknown as typeof Element.prototype.scrollTo;
|
||||
try {
|
||||
renderTimeline({ days: many, items: [flight] });
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Today' }));
|
||||
expect(scrollTo).toHaveBeenCalledWith(expect.objectContaining({ behavior: 'smooth' }));
|
||||
} finally {
|
||||
Element.prototype.scrollTo = original;
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,192 @@
|
||||
// FE-PLANNER-BKFACTS-001 to FE-PLANNER-BKFACTS-020
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { buildDay, buildReservation } from '../../../../tests/helpers/factories';
|
||||
import type { ReservationEndpoint } from '../../../types';
|
||||
import { bookingFacts, formatDay, type FactsContext } from './bookingFacts';
|
||||
|
||||
function ep(over: Partial<ReservationEndpoint>): ReservationEndpoint {
|
||||
return { role: 'from', sequence: 0, name: 'Stop', code: null, lat: 1, lng: 1, timezone: null, local_time: null, local_date: null, ...over };
|
||||
}
|
||||
|
||||
const t: FactsContext['t'] = (key, params) => (params && 'n' in params ? `${key}#${params.n}` : key);
|
||||
|
||||
const d1 = buildDay({ id: 701, day_number: 1, date: '2025-06-01', title: 'Arrival' });
|
||||
const d2 = buildDay({ id: 702, day_number: 2, date: '2025-06-02', title: null });
|
||||
const d3 = buildDay({ id: 703, day_number: 3, date: null, title: null });
|
||||
|
||||
function ctx(over: Partial<FactsContext> = {}): FactsContext {
|
||||
return { t, locale: 'en-US', timeFormat: '24h', days: [d1, d2, d3], assignmentLookup: {}, tripCurrency: 'EUR', hasLinkedCost: false, ...over };
|
||||
}
|
||||
|
||||
const cell = (facts: ReturnType<typeof bookingFacts>, label: string) => facts.cells.find(c => c.label === label)?.value;
|
||||
|
||||
describe('formatDay', () => {
|
||||
it('FE-PLANNER-BKFACTS-001: prints a date with or without its weekday, in UTC', () => {
|
||||
expect(formatDay('2025-06-02', 'en-US')).toBe('Mon, Jun 2');
|
||||
expect(formatDay('2025-06-02', 'en-US', false)).toBe('Jun 2');
|
||||
});
|
||||
});
|
||||
|
||||
describe('bookingFacts: day', () => {
|
||||
it('FE-PLANNER-BKFACTS-002: one linked day gives its title and the date with a weekday', () => {
|
||||
const f = bookingFacts(buildReservation({ day_id: 701 }), ctx());
|
||||
expect(f.day).toEqual({ label: 'Arrival', date: 'Sun, Jun 1', range: false });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-003: a day range names both days and both dates without weekdays', () => {
|
||||
const f = bookingFacts(buildReservation({ day_id: 701, end_day_id: 702 }), ctx());
|
||||
expect(f.day).toEqual({ label: 'Arrival → dayplan.dayN#2', date: 'Jun 1 → Jun 2', range: true });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-004: a day without a date has no date beside it', () => {
|
||||
const f = bookingFacts(buildReservation({ day_id: 703, end_day_id: 703 }), ctx());
|
||||
expect(f.day).toEqual({ label: 'dayplan.dayN#3', date: null, range: false });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-005: without a day the booking dates stand in, a range when they differ', () => {
|
||||
expect(bookingFacts(buildReservation({ reservation_time: '2025-06-02T10:00' }), ctx()).day)
|
||||
.toEqual({ label: 'Mon, Jun 2', date: null, range: false });
|
||||
expect(bookingFacts(buildReservation({ reservation_time: '2025-06-02T10:00', reservation_end_time: '2025-06-04T10:00' }), ctx()).day)
|
||||
.toEqual({ label: 'Mon, Jun 2 → Wed, Jun 4', date: null, range: true });
|
||||
expect(bookingFacts(buildReservation({ reservation_time: '2025-06-02T10:00', reservation_end_time: '2025-06-02T12:00' }), ctx()).day?.range).toBe(false);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-006: without day or date there is no day', () => {
|
||||
expect(bookingFacts(buildReservation({}), ctx()).day).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-007: a hotel takes its range from the accommodation', () => {
|
||||
const f = bookingFacts(buildReservation({ type: 'hotel', accommodation_start_day_id: 701, accommodation_end_day_id: 702 }), ctx());
|
||||
expect(f.day?.label).toBe('Arrival → dayplan.dayN#2');
|
||||
expect(f.isHotel).toBe(true);
|
||||
});
|
||||
});
|
||||
|
||||
describe('bookingFacts: time', () => {
|
||||
it('FE-PLANNER-BKFACTS-008: start and end time with an arrow', () => {
|
||||
const f = bookingFacts(buildReservation({ reservation_time: '2025-06-01T09:05', reservation_end_time: '2025-06-01T11:30' }), ctx());
|
||||
expect(f.time).toBe('09:05 → 11:30');
|
||||
expect(f.startTime).toBe('09:05');
|
||||
expect(f.endTime).toBe('11:30');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-009: follows the 12 hour setting', () => {
|
||||
const f = bookingFacts(buildReservation({ reservation_time: '2025-06-01T15:00' }), ctx({ timeFormat: '12h' }));
|
||||
expect(f.time).toMatch(/^3:00\s?PM$/);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-010: only an end time still reads as one', () => {
|
||||
const f = bookingFacts(buildReservation({ reservation_end_time: '2025-06-01T11:30' }), ctx());
|
||||
expect(f.time).toBe('→ 11:30');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-011: the endpoints\' local times stand in for a transport', () => {
|
||||
const r = buildReservation({
|
||||
type: 'flight',
|
||||
endpoints: [ep({ role: 'from', sequence: 0, local_time: '07:10', local_date: '2025-06-01' }), ep({ role: 'to', sequence: 1, local_time: '09:40', local_date: '2025-06-02' })],
|
||||
});
|
||||
const f = bookingFacts(r, ctx());
|
||||
expect(f.time).toBe('07:10 → 09:40');
|
||||
expect(f.startDate).toBe('2025-06-01');
|
||||
expect(f.endDate).toBe('2025-06-02');
|
||||
expect(f.endpoints).toHaveLength(2);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-012: a stay backed by an accommodation shows no time of its own', () => {
|
||||
const r = buildReservation({ type: 'hotel', reservation_time: '2025-06-01T15:00', accommodation_start_day_id: 701 });
|
||||
expect(bookingFacts(r, ctx()).time).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-013: without times nothing is shown and the dates fall back to the days', () => {
|
||||
const f = bookingFacts(buildReservation({ day_id: 701, end_day_id: 702 }), ctx());
|
||||
expect(f.time).toBeNull();
|
||||
expect(f.startDate).toBe('2025-06-01');
|
||||
expect(f.endDate).toBe('2025-06-02');
|
||||
expect(bookingFacts(buildReservation({}), ctx())).toMatchObject({ startDate: null, endDate: null, endpoints: [] });
|
||||
});
|
||||
});
|
||||
|
||||
describe('bookingFacts: cells', () => {
|
||||
it('FE-PLANNER-BKFACTS-014: flight facts, the airports only when there is no route', () => {
|
||||
const meta = { airline: 'ANA', flight_number: 'NH204', departure_airport: 'FRA', arrival_airport: 'HND', seat: '12A', class: 'Economy', platform: '7' };
|
||||
const bare = bookingFacts(buildReservation({ type: 'flight', metadata: JSON.stringify(meta) }), ctx());
|
||||
expect(cell(bare, 'reservations.meta.airline')).toBe('ANA');
|
||||
expect(cell(bare, 'reservations.meta.flightNumber')).toBe('NH204');
|
||||
expect(cell(bare, 'reservations.meta.from')).toBe('FRA');
|
||||
expect(cell(bare, 'reservations.meta.to')).toBe('HND');
|
||||
expect(cell(bare, 'reservations.meta.seat')).toBe('12A, Economy');
|
||||
expect(cell(bare, 'reservations.meta.platform')).toBe('7');
|
||||
|
||||
const routed = bookingFacts(buildReservation({
|
||||
type: 'flight', metadata: JSON.stringify(meta),
|
||||
endpoints: [ep({ role: 'from' }), ep({ role: 'to', sequence: 1 })],
|
||||
}), ctx());
|
||||
expect(cell(routed, 'reservations.meta.from')).toBeUndefined();
|
||||
expect(cell(routed, 'reservations.meta.to')).toBeUndefined();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-015: a seat without a class, and the train number', () => {
|
||||
const f = bookingFacts(buildReservation({ type: 'train', metadata: JSON.stringify({ seat: '44', train_number: 'ICE 71' }) }), ctx());
|
||||
expect(cell(f, 'reservations.meta.seat')).toBe('44');
|
||||
expect(cell(f, 'reservations.meta.trainNumber')).toBe('ICE 71');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-016: the stored price shows only while no expense is linked', () => {
|
||||
const r = buildReservation({ metadata: JSON.stringify({ price: '120', priceCurrency: 'usd' }) });
|
||||
const price = cell(bookingFacts(r, ctx()), 'reservations.price');
|
||||
expect(price).toContain('120');
|
||||
expect(price).toContain('$');
|
||||
expect(cell(bookingFacts(r, ctx({ hasLinkedCost: true })), 'reservations.price')).toBeUndefined();
|
||||
expect(cell(bookingFacts(buildReservation({ metadata: JSON.stringify({ price: '' }) }), ctx()), 'reservations.price')).toBeUndefined();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-017: check-in with its window and check-out', () => {
|
||||
const f = bookingFacts(buildReservation({ type: 'hotel', metadata: JSON.stringify({ check_in_time: '15:00', check_in_end_time: '22:00', check_out_time: '11:00' }) }), ctx({ locale: 'de-DE' }));
|
||||
expect(cell(f, 'reservations.meta.checkIn')).toBe('15:00 Uhr → 22:00 Uhr');
|
||||
expect(cell(f, 'reservations.meta.checkOut')).toBe('11:00 Uhr');
|
||||
const open = bookingFacts(buildReservation({ type: 'hotel', metadata: JSON.stringify({ check_in_time: '15:00' }) }), ctx());
|
||||
expect(cell(open, 'reservations.meta.checkIn')).toBe('15:00');
|
||||
});
|
||||
});
|
||||
|
||||
describe('bookingFacts: codes, links and places', () => {
|
||||
it('FE-PLANNER-BKFACTS-018: per-segment codes only on a booking with more than one leg', () => {
|
||||
const legs = [
|
||||
{ from: 'FRA', to: 'MUC', confirmation_number: 'SEG1' },
|
||||
{ from: 'MUC', to: null, confirmation_number: 'SEG2' },
|
||||
{ from: 'X', to: 'Y' },
|
||||
];
|
||||
const flight = bookingFacts(buildReservation({ type: 'flight', metadata: JSON.stringify({ legs }) }), ctx());
|
||||
expect(flight.legCodes).toEqual([{ route: 'FRA → MUC', code: 'SEG1' }, { route: 'MUC', code: 'SEG2' }]);
|
||||
const train = bookingFacts(buildReservation({ type: 'train', metadata: JSON.stringify({ legs }) }), ctx());
|
||||
expect(train.legCodes).toHaveLength(2);
|
||||
const single = bookingFacts(buildReservation({ type: 'flight', metadata: JSON.stringify({ legs: [legs[0]] }) }), ctx());
|
||||
expect(single.legCodes).toEqual([]);
|
||||
const bus = bookingFacts(buildReservation({ type: 'bus', metadata: JSON.stringify({ legs }) }), ctx());
|
||||
expect(bus.legCodes).toEqual([]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-019: a booking linked to a plan stop names the day, place and time', () => {
|
||||
const lookup = {
|
||||
11: { dayNumber: 2, dayTitle: null, dayDate: '2025-06-02', placeName: 'Louvre', startTime: '10:00', endTime: '12:00' },
|
||||
12: { dayNumber: 1, dayTitle: 'Arrival', dayDate: '2025-06-01', placeName: 'Hotel', startTime: '18:00', endTime: null },
|
||||
13: { dayNumber: 1, dayTitle: 'Arrival', dayDate: null, placeName: 'Park', startTime: null, endTime: null },
|
||||
};
|
||||
expect(bookingFacts(buildReservation({ assignment_id: 11 }), ctx({ assignmentLookup: lookup })).linked).toBe('dayplan.dayN#2, Louvre, 10:00 → 12:00');
|
||||
expect(bookingFacts(buildReservation({ assignment_id: 12 }), ctx({ assignmentLookup: lookup })).linked).toBe('Arrival, Hotel, 18:00');
|
||||
expect(bookingFacts(buildReservation({ assignment_id: 13 }), ctx({ assignmentLookup: lookup })).linked).toBe('Arrival, Park');
|
||||
expect(bookingFacts(buildReservation({ assignment_id: 99 }), ctx({ assignmentLookup: lookup })).linked).toBeNull();
|
||||
expect(bookingFacts(buildReservation({}), ctx()).linked).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKFACTS-020: place, accommodation and a link made safe for an href', () => {
|
||||
const f = bookingFacts(buildReservation({ location: 'Gion', place_name: 'Kikunoi', accommodation_name: 'Ryokan', url: 'www.kikunoi.jp' }), ctx());
|
||||
expect(f.place).toBe('Gion');
|
||||
expect(f.accommodation).toBe('Ryokan');
|
||||
expect(f.url).toEqual({ href: 'https://www.kikunoi.jp', text: 'www.kikunoi.jp' });
|
||||
expect(bookingFacts(buildReservation({ place_name: 'Kikunoi' }), ctx()).place).toBe('Kikunoi');
|
||||
const plain = bookingFacts(buildReservation({}), ctx());
|
||||
expect(plain).toMatchObject({ place: null, accommodation: null, url: null });
|
||||
expect(bookingFacts(buildReservation({ url: 'javascript:alert(1)' }), ctx()).url?.href).toBeNull();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,353 @@
|
||||
// FE-PLANNER-BKMODEL-001 to FE-PLANNER-BKMODEL-040
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { Plane, TramFront, FileText, Hotel } from 'lucide-react';
|
||||
import { buildAssignment, buildDay, buildPlace, buildReservation } from '../../../../tests/helpers/factories';
|
||||
import type { Day, Reservation, ReservationEndpoint } from '../../../types';
|
||||
import {
|
||||
TYPE_ORDER,
|
||||
applyFilters,
|
||||
buildAssignmentLookup,
|
||||
costsFor,
|
||||
daySpan,
|
||||
displayTitle,
|
||||
groupReservations,
|
||||
parseMeta,
|
||||
phaseOf,
|
||||
searchText,
|
||||
sortReservations,
|
||||
startKey,
|
||||
typeInfo,
|
||||
type BookingFilters,
|
||||
type GroupLabels,
|
||||
} from './bookingsModel';
|
||||
|
||||
const label = (type: string) => `L:${type}`;
|
||||
|
||||
function ep(over: Partial<ReservationEndpoint>): ReservationEndpoint {
|
||||
return { role: 'from', sequence: 0, name: 'Somewhere', code: null, lat: 1, lng: 1, timezone: null, local_time: null, local_date: null, ...over };
|
||||
}
|
||||
|
||||
function filters(over: Partial<BookingFilters> = {}): BookingFilters {
|
||||
return { types: new Set(), status: 'all', travelers: new Set(), query: '', ...over };
|
||||
}
|
||||
|
||||
const labels: GroupLabels = {
|
||||
confirmed: 'Confirmed',
|
||||
pending: 'Pending',
|
||||
transit: 'Transit',
|
||||
before: 'Before the trip',
|
||||
after: 'After the trip',
|
||||
undated: 'No date',
|
||||
dayN: n => `Day ${n}`,
|
||||
typeLabel: t => `Type ${t}`,
|
||||
dayDate: d => `on ${d}`,
|
||||
};
|
||||
|
||||
const d1 = buildDay({ id: 501, day_number: 1, date: '2025-06-01', title: 'Arrival' });
|
||||
const d2 = buildDay({ id: 502, day_number: 2, date: '2025-06-02', title: null });
|
||||
const d3 = buildDay({ id: 503, day_number: 3, date: '2025-06-03', title: 'Hike' });
|
||||
const days: Day[] = [d1, d2, d3];
|
||||
|
||||
describe('typeInfo', () => {
|
||||
it('FE-PLANNER-BKMODEL-001: a known type gets its icon, label key and the phone colour', () => {
|
||||
const info = typeInfo('flight');
|
||||
expect(info.Icon).toBe(Plane);
|
||||
expect(info.labelKey).toBe('reservations.type.flight');
|
||||
expect(info.chipKey).toBe('reservations.type.flight');
|
||||
expect(info.color).toBe('#3b82f6');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-002: transit carries a shorter chip label than its full name', () => {
|
||||
const info = typeInfo('transit');
|
||||
expect(info.Icon).toBe(TramFront);
|
||||
expect(info.labelKey).toBe('reservations.type.transit');
|
||||
expect(info.chipKey).toBe('reservations.typeShort.transit');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-003: a booking type takes its colour from the bookings palette', () => {
|
||||
const info = typeInfo('hotel');
|
||||
expect(info.Icon).toBe(Hotel);
|
||||
expect(info.color).toBe('#8b5cf6');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-004: an unknown type reads as "other"', () => {
|
||||
const info = typeInfo('spaceship');
|
||||
expect(info.Icon).toBe(FileText);
|
||||
expect(info.labelKey).toBe('reservations.type.other');
|
||||
expect(info.chipKey).toBe('reservations.type.other');
|
||||
expect(info.color).toBe('#6b7280');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-005: every type in the pill order resolves to itself', () => {
|
||||
for (const type of TYPE_ORDER) expect(typeInfo(type).labelKey).toBe(`reservations.type.${type}`);
|
||||
});
|
||||
});
|
||||
|
||||
describe('parseMeta', () => {
|
||||
it('FE-PLANNER-BKMODEL-006: reads plain and double-encoded metadata, and nothing from garbage', () => {
|
||||
expect(parseMeta(buildReservation({ metadata: '{"airline":"LH"}' }))).toEqual({ airline: 'LH' });
|
||||
expect(parseMeta(buildReservation({ metadata: JSON.stringify('{"seat":"12A"}') }))).toEqual({ seat: '12A' });
|
||||
expect(parseMeta(buildReservation({ metadata: 'not json' }))).toEqual({});
|
||||
expect(parseMeta(buildReservation({ metadata: null }))).toEqual({});
|
||||
});
|
||||
});
|
||||
|
||||
describe('buildAssignmentLookup', () => {
|
||||
it('FE-PLANNER-BKMODEL-007: names each assignment by its day, place and times', () => {
|
||||
const place = buildPlace({ name: 'Louvre', place_time: '10:00', end_time: '12:00' });
|
||||
const a = buildAssignment({ id: 9001, day_id: d1.id, place });
|
||||
const lookup = buildAssignmentLookup(days, { [String(d1.id)]: [a] });
|
||||
expect(lookup[9001]).toEqual({ dayNumber: 1, dayTitle: 'Arrival', dayDate: '2025-06-01', placeName: 'Louvre', startTime: '10:00', endTime: '12:00' });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-008: skips assignments without a place and survives missing inputs', () => {
|
||||
const a = buildAssignment({ id: 9002, day_id: d2.id });
|
||||
const orphan = { ...buildAssignment({ id: 9003, day_id: d2.id }), place: undefined } as unknown as typeof a;
|
||||
const lookup = buildAssignmentLookup(days, { [String(d2.id)]: [orphan, a] });
|
||||
expect(Object.keys(lookup)).toEqual(['9002']);
|
||||
expect(lookup[9002].dayTitle).toBeNull();
|
||||
expect(lookup[9002].startTime).toBeNull();
|
||||
expect(buildAssignmentLookup(days, undefined)).toEqual({});
|
||||
expect(buildAssignmentLookup(undefined as unknown as Day[], {})).toEqual({});
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-009: a day without a date or title leaves both null', () => {
|
||||
const bare = buildDay({ id: 504, day_number: 4, date: null, title: undefined });
|
||||
const a = buildAssignment({ id: 9004, day_id: 504 });
|
||||
expect(buildAssignmentLookup([bare], { '504': [a] })[9004]).toMatchObject({ dayDate: null, dayTitle: null });
|
||||
});
|
||||
});
|
||||
|
||||
describe('daySpan and startKey', () => {
|
||||
it('FE-PLANNER-BKMODEL-010: a hotel reads its range from the accommodation', () => {
|
||||
const r = buildReservation({ type: 'hotel', day_id: d1.id, accommodation_start_day_id: d2.id, accommodation_end_day_id: d3.id });
|
||||
expect(daySpan(r, days)).toEqual({ start: d2, end: d3 });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-011: anything else reads its own day and end day', () => {
|
||||
const r = buildReservation({ type: 'train', day_id: d1.id, end_day_id: d2.id });
|
||||
expect(daySpan(r, days)).toEqual({ start: d1, end: d2 });
|
||||
expect(daySpan(buildReservation({ type: 'hotel', day_id: d3.id }), days)).toEqual({ start: d3, end: undefined });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-012: startKey uses the booking date and time', () => {
|
||||
expect(startKey(buildReservation({ reservation_time: '2025-06-02T14:30' }), days)).toBe('2025-06-02T14:30');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-013: a time without a date takes the linked day, a hotel its first stay day', () => {
|
||||
expect(startKey(buildReservation({ reservation_time: '08:15', day_id: d2.id }), days)).toBe('2025-06-02T08:15');
|
||||
expect(startKey(buildReservation({ type: 'hotel', accommodation_start_day_id: d3.id, day_id: d1.id }), days)).toBe('2025-06-03T00:00');
|
||||
expect(startKey(buildReservation({ type: 'hotel', day_id: d1.id }), days)).toBe('2025-06-01T00:00');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-014: without any date there is no key', () => {
|
||||
expect(startKey(buildReservation({ reservation_time: null }), days)).toBeNull();
|
||||
expect(startKey(buildReservation({ day_id: 99999 }), days)).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('phaseOf', () => {
|
||||
it('FE-PLANNER-BKMODEL-015: places a key before, during or after the trip', () => {
|
||||
expect(phaseOf(null, '2025-06-01', '2025-06-03')).toBe('undated');
|
||||
expect(phaseOf('2025-05-30T10:00', '2025-06-01', '2025-06-03')).toBe('before');
|
||||
expect(phaseOf('2025-06-04T10:00', '2025-06-01', '2025-06-03')).toBe('after');
|
||||
expect(phaseOf('2025-06-02T10:00', '2025-06-01', '2025-06-03')).toBe('during');
|
||||
expect(phaseOf('1999-01-01T00:00', null, null)).toBe('during');
|
||||
});
|
||||
});
|
||||
|
||||
describe('searchText and applyFilters', () => {
|
||||
const flight = buildReservation({
|
||||
id: 7001,
|
||||
type: 'flight',
|
||||
title: 'To Tokyo',
|
||||
status: 'confirmed',
|
||||
confirmation_number: 'ABC123',
|
||||
metadata: JSON.stringify({ airline: 'Lufthansa', flight_number: 'LH716', legs: [{ confirmation_number: 'LEG9', flight_number: 'NH1' }] }),
|
||||
endpoints: [ep({ name: 'Frankfurt', code: 'FRA' }), ep({ role: 'to', sequence: 1, name: 'Haneda', code: 'HND' })],
|
||||
travelers: [{ user_id: 11, username: 'Maria' }],
|
||||
});
|
||||
const dinner = buildReservation({ id: 7002, type: 'restaurant', title: 'Dinner', status: 'pending', location: 'Gion', travelers: [{ user_id: 12, username: 'Ken' }] });
|
||||
const ride = buildReservation({ id: 7003, type: 'transit', title: 'Metro', status: 'pending' });
|
||||
const list = [flight, dinner, ride];
|
||||
|
||||
it('FE-PLANNER-BKMODEL-016: search text holds title, type label, codes, carrier, legs and travelers in lower case', () => {
|
||||
const text = searchText(flight, 'Flight');
|
||||
for (const word of ['to tokyo', 'flight', 'abc123', 'lufthansa', 'lh716', 'fra', 'haneda', 'leg9', 'nh1', 'maria']) {
|
||||
expect(text).toContain(word);
|
||||
}
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-017: search text ignores metadata legs that are not a list', () => {
|
||||
const r = buildReservation({ title: 'Bus', metadata: JSON.stringify({ legs: 'nope' }) });
|
||||
expect(searchText(r, 'Bus')).toBe('bus bus');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-018: with no filter every booking stays', () => {
|
||||
expect(applyFilters(list, filters(), label)).toEqual(list);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-019: the type filter keeps only the picked types', () => {
|
||||
expect(applyFilters(list, filters({ types: new Set(['restaurant']) }), label)).toEqual([dinner]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-020: a status filter leaves transit out, pending keeps everything unconfirmed', () => {
|
||||
expect(applyFilters(list, filters({ status: 'confirmed' }), label)).toEqual([flight]);
|
||||
expect(applyFilters(list, filters({ status: 'pending' }), label)).toEqual([dinner]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-021: the traveler filter keeps bookings for one of the picked people', () => {
|
||||
expect(applyFilters(list, filters({ travelers: new Set([12]) }), label)).toEqual([dinner]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-022: the query matches case-insensitively, the type label included', () => {
|
||||
expect(applyFilters(list, filters({ query: ' GION ' }), label)).toEqual([dinner]);
|
||||
expect(applyFilters(list, filters({ query: 'l:transit' }), label)).toEqual([ride]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('sortReservations', () => {
|
||||
const early = buildReservation({ id: 7101, title: 'Bravo', type: 'train', status: 'pending', reservation_time: '2025-06-01T09:00', created_at: '2025-01-02' });
|
||||
const late = buildReservation({ id: 7102, title: 'Alpha', type: 'flight', status: 'confirmed', reservation_time: '2025-06-03T09:00', created_at: '2025-01-01' });
|
||||
const undatedA = buildReservation({ id: 7103, title: 'Charlie', type: 'transit', status: 'pending', created_at: '2025-01-01' });
|
||||
const undatedB = buildReservation({ id: 7104, title: 'Delta', type: 'bus', status: 'confirmed', created_at: '2025-01-05' });
|
||||
const sameTime = buildReservation({ id: 7105, title: 'Echo', type: 'bus', status: 'confirmed', reservation_time: '2025-06-01T09:00', created_at: '2025-01-01' });
|
||||
const ids = (list: Reservation[]) => list.map(r => r.id);
|
||||
|
||||
it('FE-PLANNER-BKMODEL-023: by date: chronological, creation order on a tie, undated last', () => {
|
||||
expect(ids(sortReservations([undatedB, late, undatedA, early, sameTime], days, 'date', 'asc', label))).toEqual([7105, 7101, 7102, 7103, 7104]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-024: by date descending keeps the undated entries at the bottom', () => {
|
||||
expect(ids(sortReservations([undatedB, early, undatedA, late], days, 'date', 'desc', label))).toEqual([7102, 7101, 7103, 7104]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-025: by title in both directions', () => {
|
||||
expect(ids(sortReservations([early, late, undatedA], days, 'title', 'asc', label))).toEqual([7102, 7101, 7103]);
|
||||
expect(ids(sortReservations([early, late, undatedA], days, 'title', 'desc', label))).toEqual([7103, 7101, 7102]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-026: by type uses the translated label and falls back to date on a tie', () => {
|
||||
expect(ids(sortReservations([undatedB, sameTime, late], days, 'type', 'asc', label))).toEqual([7105, 7104, 7102]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-027: by status puts confirmed first and transit last while it is apart', () => {
|
||||
expect(ids(sortReservations([undatedA, early, late], days, 'status', 'asc', label))).toEqual([7102, 7101, 7103]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-028: with transit not apart it sorts as if confirmed', () => {
|
||||
expect(ids(sortReservations([early, undatedA, late], days, 'status', 'asc', label, false))).toEqual([7102, 7103, 7101]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-029: a missing creation date still sorts', () => {
|
||||
const a = buildReservation({ id: 7106, created_at: undefined });
|
||||
const b = buildReservation({ id: 7107, created_at: '2025-01-01' });
|
||||
expect(ids(sortReservations([b, a], days, 'date', 'asc', label))).toEqual([7106, 7107]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('groupReservations', () => {
|
||||
const confirmed = buildReservation({ id: 7201, type: 'train', status: 'confirmed', day_id: d1.id });
|
||||
const pending = buildReservation({ id: 7202, type: 'restaurant', status: 'pending', day_id: d2.id });
|
||||
const transit = buildReservation({ id: 7203, type: 'transit', status: 'pending', day_id: d2.id });
|
||||
const sorted = [confirmed, pending, transit];
|
||||
|
||||
it('FE-PLANNER-BKMODEL-030: none puts everything in one unnamed group', () => {
|
||||
expect(groupReservations(sorted, 'none', days, null, null, labels)).toEqual([{ id: 'all', label: '', items: sorted }]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-031: by status: confirmed, pending, transit, empty groups dropped', () => {
|
||||
const groups = groupReservations(sorted, 'status', days, null, null, labels);
|
||||
expect(groups.map(g => [g.id, g.label, g.items.map(r => r.id)])).toEqual([
|
||||
['confirmed', 'Confirmed', [7201]],
|
||||
['pending', 'Pending', [7202]],
|
||||
['transit', 'Transit', [7203]],
|
||||
]);
|
||||
expect(groupReservations([pending], 'status', days, null, null, labels).map(g => g.id)).toEqual(['pending']);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-032: by status without transit apart, transit sits among the confirmed', () => {
|
||||
const groups = groupReservations(sorted, 'status', days, null, null, labels, false);
|
||||
expect(groups.map(g => [g.id, g.items.map(r => r.id)])).toEqual([
|
||||
['confirmed', [7201, 7203]],
|
||||
['pending', [7202]],
|
||||
]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-033: by type keeps the order types first appear in', () => {
|
||||
const groups = groupReservations([pending, confirmed, buildReservation({ id: 7204, type: 'restaurant' })], 'type', days, null, null, labels);
|
||||
expect(groups.map(g => [g.id, g.label, g.items.map(r => r.id)])).toEqual([
|
||||
['type-restaurant', 'Type restaurant', [7202, 7204]],
|
||||
['type-train', 'Type train', [7201]],
|
||||
]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-034: by day: the day with its date and title, then after the trip, then undated', () => {
|
||||
const before = buildReservation({ id: 7205, reservation_time: '2025-05-20T10:00' });
|
||||
const after = buildReservation({ id: 7206, reservation_time: '2025-07-01T10:00' });
|
||||
const undated = buildReservation({ id: 7207 });
|
||||
const groups = groupReservations([undated, after, confirmed, pending, before], 'day', days, '2025-06-01', '2025-06-03', labels);
|
||||
expect(groups.map(g => [g.id, g.label, g.sub, g.items.map(r => r.id)])).toEqual([
|
||||
['before', 'Before the trip', undefined, [7205]],
|
||||
['day-501', 'Day 1', 'on 2025-06-01 Arrival', [7201]],
|
||||
['day-502', 'Day 2', 'on 2025-06-02', [7202]],
|
||||
['after', 'After the trip', undefined, [7206]],
|
||||
['undated', 'No date', undefined, [7207]],
|
||||
]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-035: by day finds the day from the date, or groups by the bare date when no day matches', () => {
|
||||
const onDay = buildReservation({ id: 7208, reservation_time: '2025-06-03T08:00' });
|
||||
const offDays = buildReservation({ id: 7209, reservation_time: '2025-06-10T08:00' });
|
||||
const groups = groupReservations([onDay, offDays], 'day', days, null, null, labels);
|
||||
expect(groups.map(g => [g.id, g.label, g.sub])).toEqual([
|
||||
['day-503', 'Day 3', 'on 2025-06-03 Hike'],
|
||||
['date-2025-06-10', 'on 2025-06-10', undefined],
|
||||
]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-036: a day without date or title has no second part', () => {
|
||||
const bare = buildDay({ id: 505, day_number: 5, date: null, title: null });
|
||||
const r = buildReservation({ id: 7210, day_id: 505, reservation_time: '2025-06-02T10:00' });
|
||||
expect(groupReservations([r], 'day', [bare], null, null, labels)[0]).toMatchObject({ id: 'day-505', label: 'Day 5', sub: undefined });
|
||||
});
|
||||
});
|
||||
|
||||
describe('costsFor', () => {
|
||||
it('FE-PLANNER-BKMODEL-037: sums the linked expenses per currency and never across currencies', () => {
|
||||
const items = [
|
||||
{ reservation_id: 1, total_price: 10.1, currency: 'eur' },
|
||||
{ reservation_id: 1, total_price: 0.2, currency: 'EUR' },
|
||||
{ reservation_id: 1, total_price: 5, currency: 'USD' },
|
||||
{ reservation_id: 2, total_price: 99, currency: 'EUR' },
|
||||
{ reservation_id: 1, total_price: 1, currency: null },
|
||||
];
|
||||
expect(costsFor(1, items, 'jpy')).toEqual([
|
||||
{ currency: 'EUR', amount: 10.3 },
|
||||
{ currency: 'USD', amount: 5 },
|
||||
{ currency: 'JPY', amount: 1 },
|
||||
]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-038: without any currency it falls back to EUR, and nothing linked is an empty list', () => {
|
||||
expect(costsFor(3, [{ reservation_id: 3, total_price: 4 }], '')).toEqual([{ currency: 'EUR', amount: 4 }]);
|
||||
expect(costsFor(4, [{ reservation_id: 3, total_price: 4 }], 'EUR')).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('displayTitle', () => {
|
||||
it('FE-PLANNER-BKMODEL-039: a title wins; without one the route in sequence order, codes before names', () => {
|
||||
expect(displayTitle(buildReservation({ title: 'Named' }))).toBe('Named');
|
||||
const r = buildReservation({
|
||||
title: ' ',
|
||||
endpoints: [ep({ role: 'to', sequence: 2, name: 'Kyoto', code: null }), ep({ role: 'from', sequence: 1, name: 'Tokyo', code: 'TYO' })],
|
||||
});
|
||||
expect(displayTitle(r)).toBe('TYO → Kyoto');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKMODEL-040: without a route the place, then the location, then nothing', () => {
|
||||
expect(displayTitle(buildReservation({ title: '', place_name: 'Hotel Sakura', location: 'Kyoto' }))).toBe('Hotel Sakura');
|
||||
expect(displayTitle(buildReservation({ title: '', location: 'Kyoto', endpoints: [ep({})] }))).toBe('Kyoto');
|
||||
expect(displayTitle(buildReservation({ title: '' }))).toBe('');
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,99 @@
|
||||
// FE-PLANNER-BKONMAP-001 to FE-PLANNER-BKONMAP-009
|
||||
import { describe, it, expect, vi } from 'vitest';
|
||||
import { buildReservation } from '../../../../tests/helpers/factories';
|
||||
import type { ReservationEndpoint } from '../../../types';
|
||||
import { canShowOnMap, hasRoute, showReservationOnMap, type ShowOnMapDeps } from './showOnMap';
|
||||
|
||||
function ep(over: Partial<ReservationEndpoint>): ReservationEndpoint {
|
||||
return { role: 'from', sequence: 0, name: 'Stop', code: null, lat: 35.6, lng: 139.7, timezone: null, local_time: null, local_date: null, ...over };
|
||||
}
|
||||
|
||||
const route = [ep({ role: 'from' }), ep({ role: 'to', sequence: 1, lat: 34.9, lng: 135.7 })];
|
||||
|
||||
function deps(visible: number[] = []): ShowOnMapDeps {
|
||||
return { visibleConnections: visible, toggleConnection: vi.fn(), selectDay: vi.fn(), selectPlace: vi.fn(), openPlan: vi.fn() };
|
||||
}
|
||||
|
||||
describe('hasRoute', () => {
|
||||
it('FE-PLANNER-BKONMAP-001: two endpoints with coordinates make a route', () => {
|
||||
expect(hasRoute(buildReservation({ endpoints: route }))).toBe(true);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKONMAP-002: endpoints without usable coordinates, one endpoint or none do not', () => {
|
||||
expect(hasRoute(buildReservation({ endpoints: [route[0], ep({ role: 'to', sequence: 1, lat: Number.NaN })] }))).toBe(false);
|
||||
expect(hasRoute(buildReservation({ endpoints: [route[0]] }))).toBe(false);
|
||||
expect(hasRoute(buildReservation({}))).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe('showReservationOnMap', () => {
|
||||
it('FE-PLANNER-BKONMAP-003: a transport switches its route on and opens the plan on its day', () => {
|
||||
const d = deps();
|
||||
showReservationOnMap(buildReservation({ id: 41, type: 'train', day_id: 7, endpoints: route }), d);
|
||||
expect(d.toggleConnection).toHaveBeenCalledWith(41);
|
||||
expect(d.selectDay).toHaveBeenCalledWith(7);
|
||||
expect(d.openPlan).toHaveBeenCalled();
|
||||
expect(d.selectPlace).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKONMAP-004: without a start day it opens on the end day, or on no day', () => {
|
||||
const d = deps();
|
||||
showReservationOnMap(buildReservation({ id: 42, type: 'train', end_day_id: 8, endpoints: route }), d);
|
||||
expect(d.selectDay).toHaveBeenCalledWith(8);
|
||||
const e = deps();
|
||||
showReservationOnMap(buildReservation({ id: 43, type: 'train', endpoints: route }), e);
|
||||
expect(e.selectDay).toHaveBeenCalledWith(null);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKONMAP-005: pressed again while the route is drawn, it only switches the route off', () => {
|
||||
const d = deps([44]);
|
||||
showReservationOnMap(buildReservation({ id: 44, type: 'flight', day_id: 7, endpoints: route }), d);
|
||||
expect(d.toggleConnection).toHaveBeenCalledWith(44);
|
||||
expect(d.selectDay).not.toHaveBeenCalled();
|
||||
expect(d.openPlan).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKONMAP-006: a booking with a place opens the plan on that place and its day', () => {
|
||||
const d = deps();
|
||||
showReservationOnMap(buildReservation({ type: 'restaurant', place_id: 90, day_id: 3 }), d);
|
||||
expect(d.selectDay).toHaveBeenCalledWith(3);
|
||||
expect(d.selectPlace).toHaveBeenCalledWith(90);
|
||||
expect(d.openPlan).toHaveBeenCalled();
|
||||
const e = deps();
|
||||
showReservationOnMap(buildReservation({ type: 'restaurant', place_id: 91 }), e);
|
||||
expect(e.selectDay).toHaveBeenCalledWith(null);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKONMAP-007: a hotel uses its accommodation place and first night, falling back to its own', () => {
|
||||
const d = deps();
|
||||
showReservationOnMap(buildReservation({ type: 'hotel', accommodation_place_id: 55, place_id: 56, accommodation_start_day_id: 4, day_id: 5 }), d);
|
||||
expect(d.selectPlace).toHaveBeenCalledWith(55);
|
||||
expect(d.selectDay).toHaveBeenCalledWith(4);
|
||||
const e = deps();
|
||||
showReservationOnMap(buildReservation({ type: 'hotel', place_id: 56, day_id: 5 }), e);
|
||||
expect(e.selectPlace).toHaveBeenCalledWith(56);
|
||||
expect(e.selectDay).toHaveBeenCalledWith(5);
|
||||
const f = deps();
|
||||
showReservationOnMap(buildReservation({ type: 'hotel', place_id: 57 }), f);
|
||||
expect(f.selectDay).toHaveBeenCalledWith(null);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKONMAP-008: without a route or a place nothing happens', () => {
|
||||
const d = deps();
|
||||
showReservationOnMap(buildReservation({ type: 'event' }), d);
|
||||
expect(d.toggleConnection).not.toHaveBeenCalled();
|
||||
expect(d.selectDay).not.toHaveBeenCalled();
|
||||
expect(d.openPlan).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('canShowOnMap', () => {
|
||||
it('FE-PLANNER-BKONMAP-009: true for a route or a place, false otherwise', () => {
|
||||
expect(canShowOnMap(buildReservation({ endpoints: route }))).toBe(true);
|
||||
expect(canShowOnMap(buildReservation({ place_id: 1 }))).toBe(true);
|
||||
expect(canShowOnMap(buildReservation({ type: 'hotel', accommodation_place_id: 2 }))).toBe(true);
|
||||
expect(canShowOnMap(buildReservation({ type: 'hotel', place_id: 3 }))).toBe(true);
|
||||
expect(canShowOnMap(buildReservation({ type: 'hotel' }))).toBe(false);
|
||||
expect(canShowOnMap(buildReservation({}))).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,192 @@
|
||||
// FE-PLANNER-BKTIMELINE-001 to FE-PLANNER-BKTIMELINE-026
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { buildDay, buildReservation } from '../../../../tests/helpers/factories';
|
||||
import type { Day, ReservationEndpoint } from '../../../types';
|
||||
import { absHour, buildAxis, dayWindow, packBars, placeReservation, type Moment } from './timelineModel';
|
||||
|
||||
function ep(over: Partial<ReservationEndpoint>): ReservationEndpoint {
|
||||
return { role: 'from', sequence: 0, name: 'Stop', code: null, lat: 1, lng: 1, timezone: null, local_time: null, local_date: null, ...over };
|
||||
}
|
||||
|
||||
const d1 = buildDay({ id: 601, day_number: 1, date: '2025-06-01', title: 'One' });
|
||||
const d2 = buildDay({ id: 602, day_number: 2, date: '2025-06-02', title: null });
|
||||
const d3 = buildDay({ id: 603, day_number: 3, date: '2025-06-03' });
|
||||
const days: Day[] = [d3, d1, d2];
|
||||
const axis = buildAxis(days);
|
||||
|
||||
describe('buildAxis', () => {
|
||||
it('FE-PLANNER-BKTIMELINE-001: dated days in calendar order', () => {
|
||||
expect(axis).toEqual([
|
||||
{ date: '2025-06-01', dayNumber: 1, dayId: 601, title: 'One' },
|
||||
{ date: '2025-06-02', dayNumber: 2, dayId: 602, title: null },
|
||||
{ date: '2025-06-03', dayNumber: 3, dayId: 603, title: null },
|
||||
]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-002: a trip with some dated days leaves the undated ones off the axis', () => {
|
||||
const loose = buildDay({ id: 604, day_number: 4, date: null });
|
||||
expect(buildAxis([loose, d2, d1]).map(a => a.dayId)).toEqual([601, 602]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-003: without any dates the axis is day 1..N', () => {
|
||||
const a = buildDay({ id: 611, day_number: 2, date: null, title: 'Second' });
|
||||
const b = buildDay({ id: 612, day_number: 1, date: null });
|
||||
expect(buildAxis([a, b])).toEqual([
|
||||
{ date: null, dayNumber: 1, dayId: 612, title: null },
|
||||
{ date: null, dayNumber: 2, dayId: 611, title: 'Second' },
|
||||
]);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-004: two days on the same date keep their order', () => {
|
||||
const twin = buildDay({ id: 605, day_number: 5, date: '2025-06-01' });
|
||||
expect(buildAxis([d1, twin]).map(a => a.dayId)).toEqual([601, 605]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('placeReservation', () => {
|
||||
it('FE-PLANNER-BKTIMELINE-005: a booking with start and end sits between them', () => {
|
||||
const r = buildReservation({ type: 'train', reservation_time: '2025-06-02T10:30', reservation_end_time: '2025-06-02T12:00' });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 1, hour: 10.5 }, end: { day: 1, hour: 12 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-006: without an end it gets one hour', () => {
|
||||
const r = buildReservation({ type: 'restaurant', reservation_time: '2025-06-03T19:00' });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 2, hour: 19 }, end: { day: 2, hour: 20 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-007: a date without a time starts at nine', () => {
|
||||
const r = buildReservation({ type: 'tour', reservation_time: '2025-06-01' });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 0, hour: 9 }, end: { day: 0, hour: 10 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-008: a hotel runs from check-in to check-out across its stay', () => {
|
||||
const r = buildReservation({ type: 'hotel', accommodation_start_day_id: 601, accommodation_end_day_id: 603, metadata: JSON.stringify({ check_in_time: '14:00', check_out_time: '10:30' }) });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 0, hour: 14 }, end: { day: 2, hour: 10.5 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-009: a hotel without times takes 15:00 and 11:00, one night when the end is unknown', () => {
|
||||
const r = buildReservation({ type: 'hotel', day_id: 602 });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 1, hour: 15 }, end: { day: 2, hour: 11 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-010: a hotel checked into on the last day runs to the end of that day', () => {
|
||||
const r = buildReservation({ type: 'hotel', day_id: 603 });
|
||||
// Its night lies past the axis, so the bar fills the rest of the last day instead of pointing back before check-in.
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 2, hour: 15 }, end: { day: 2, hour: 24 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-011: a transport reads its endpoints\' local dates and times', () => {
|
||||
const r = buildReservation({
|
||||
type: 'flight',
|
||||
endpoints: [
|
||||
ep({ role: 'to', sequence: 1, local_date: '2025-06-02', local_time: '09:15' }),
|
||||
ep({ role: 'from', sequence: 0, local_date: '2025-06-01', local_time: '07:00' }),
|
||||
],
|
||||
});
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 0, hour: 7 }, end: { day: 1, hour: 9.25 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-012: a transport without dates falls back to its linked days', () => {
|
||||
const r = buildReservation({ type: 'car', day_id: 601, end_day_id: 603 });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 0, hour: 9 }, end: { day: 2, hour: 10 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-013: before and after the trip are said, not drawn', () => {
|
||||
expect(placeReservation(buildReservation({ reservation_time: '2025-05-20T10:00' }), axis, days)).toEqual({ kind: 'before' });
|
||||
expect(placeReservation(buildReservation({ reservation_time: '2025-06-20T10:00' }), axis, days)).toEqual({ kind: 'after' });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-014: no date, an empty axis or a date between the axis days is undated', () => {
|
||||
expect(placeReservation(buildReservation({}), axis, days)).toEqual({ kind: 'undated' });
|
||||
expect(placeReservation(buildReservation({ reservation_time: '2025-06-02T10:00' }), [], days)).toEqual({ kind: 'undated' });
|
||||
const gappy = buildAxis([d1, d3]);
|
||||
expect(placeReservation(buildReservation({ reservation_time: '2025-06-02T10:00' }), gappy, [d1, d3])).toEqual({ kind: 'undated' });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-015: an end past the trip runs to the end of the last day', () => {
|
||||
const r = buildReservation({ type: 'car', reservation_time: '2025-06-02T08:00', reservation_end_time: '2025-06-30T18:00' });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 1, hour: 8 }, end: { day: 2, hour: 24 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-016: an end before the trip keeps one hour', () => {
|
||||
const r = buildReservation({ type: 'car', reservation_time: '2025-06-02T08:00', reservation_end_time: '2025-05-01T18:00' });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 1, hour: 8 }, end: { day: 1, hour: 9 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-017: an arrival earlier than the departure keeps a small bar', () => {
|
||||
const r = buildReservation({ type: 'flight', reservation_time: '2025-06-02T22:00', reservation_end_time: '2025-06-01T06:00' });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 1, hour: 22 }, end: { day: 1, hour: 23 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-018: an end date missing from the axis stays on the start day', () => {
|
||||
const gappy = buildAxis([d1, d3]);
|
||||
const r = buildReservation({ type: 'train', reservation_time: '2025-06-01T10:00', reservation_end_time: '2025-06-02T12:00' });
|
||||
expect(placeReservation(r, gappy, [d1, d3])).toEqual({ kind: 'on', start: { day: 0, hour: 10 }, end: { day: 0, hour: 12 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-019: a garbled time falls back to the default hour', () => {
|
||||
const r = buildReservation({ type: 'hotel', day_id: 601, end_day_id: 602, metadata: JSON.stringify({ check_in_time: 'late', check_out_time: '10' }) });
|
||||
expect(placeReservation(r, axis, days)).toEqual({ kind: 'on', start: { day: 0, hour: 15 }, end: { day: 1, hour: 10 } });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-020: on a trip without dates the linked day places the booking', () => {
|
||||
const a = buildDay({ id: 621, day_number: 1, date: null });
|
||||
const b = buildDay({ id: 622, day_number: 2, date: null });
|
||||
const undatedAxis = buildAxis([a, b]);
|
||||
const r = buildReservation({ type: 'bus', reservation_time: '11:00', day_id: 622 });
|
||||
expect(placeReservation(r, undatedAxis, [a, b])).toEqual({ kind: 'on', start: { day: 1, hour: 11 }, end: { day: 1, hour: 12 } });
|
||||
expect(placeReservation(buildReservation({ type: 'bus' }), undatedAxis, [a, b])).toEqual({ kind: 'undated' });
|
||||
expect(placeReservation(buildReservation({ type: 'bus', day_id: 999 }), undatedAxis, [a, b])).toEqual({ kind: 'undated' });
|
||||
});
|
||||
});
|
||||
|
||||
describe('absHour and dayWindow', () => {
|
||||
it('FE-PLANNER-BKTIMELINE-021: absHour counts hours from the first day', () => {
|
||||
expect(absHour({ day: 2, hour: 6.5 })).toBe(54.5);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-022: an empty day shows 06:00 to 22:00', () => {
|
||||
expect(dayWindow([], 0)).toEqual({ from: 6, to: 22 });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-023: widens to fit what starts or ends early or late, within 0..24', () => {
|
||||
const at = (day: number, hour: number): Moment => ({ day, hour });
|
||||
expect(dayWindow([{ start: at(0, 4.5), end: at(0, 5.5) }], 0)).toEqual({ from: 4, to: 22 });
|
||||
expect(dayWindow([{ start: at(0, 21), end: at(0, 23.5) }], 0)).toEqual({ from: 6, to: 24 });
|
||||
expect(dayWindow([{ start: at(0, 23.5), end: at(1, 0.5) }], 1)).toEqual({ from: 0, to: 22 });
|
||||
// An item on another day changes nothing.
|
||||
expect(dayWindow([{ start: at(3, 1), end: at(3, 23) }], 0)).toEqual({ from: 6, to: 22 });
|
||||
});
|
||||
});
|
||||
|
||||
describe('packBars', () => {
|
||||
const r1 = buildReservation({ id: 8101 });
|
||||
const r2 = buildReservation({ id: 8102 });
|
||||
const r3 = buildReservation({ id: 8103 });
|
||||
const toX = (m: Moment) => absHour(m) * 10;
|
||||
const at = (hour: number): Moment => ({ day: 0, hour });
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-024: overlapping bars get their own lanes, a later one reuses a free lane', () => {
|
||||
const { bars, lanes } = packBars([
|
||||
{ r: r1, start: at(0), end: at(10) },
|
||||
{ r: r2, start: at(5), end: at(8) },
|
||||
{ r: r3, start: at(12), end: at(14) },
|
||||
], toX, 240);
|
||||
expect(lanes).toBe(2);
|
||||
const byId = Object.fromEntries(bars.map(b => [b.r.id, b]));
|
||||
expect(byId[8101]).toMatchObject({ lane: 0, x: 0, w: 100, cutStart: false, cutEnd: false });
|
||||
expect(byId[8102]).toMatchObject({ lane: 1, x: 50, w: 30 });
|
||||
expect(byId[8103]).toMatchObject({ lane: 0, x: 120, w: 26 });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-025: bars reaching past either edge are cut there and say so', () => {
|
||||
const { bars } = packBars([{ r: r1, start: { day: -1, hour: 20 }, end: at(30) }], toX, 240);
|
||||
expect(bars[0]).toMatchObject({ x: 0, w: 240, cutStart: true, cutEnd: true });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTIMELINE-026: nothing to pack is still one lane, and a short bar at the edge stays inside', () => {
|
||||
expect(packBars([], toX, 240)).toEqual({ bars: [], lanes: 1 });
|
||||
const { bars } = packBars([{ r: r2, start: at(23.9), end: at(24) }], toX, 240, 26, 4);
|
||||
expect(bars[0]).toMatchObject({ x: 214, w: 26 });
|
||||
});
|
||||
});
|
||||
@@ -65,9 +65,12 @@ export function placeReservation(r: Reservation, axis: AxisDay[], days: Day[]):
|
||||
const endDate = hotel ? span.end?.date ?? e.date : e.date ?? to?.local_date ?? span.end?.date ?? startDate
|
||||
const endDayId = hotel ? span.end?.id ?? r.end_day_id : r.end_day_id ?? span.end?.id ?? startDayId
|
||||
let ei = index(endDate, endDayId)
|
||||
const openEnded = ei === null
|
||||
if (ei === null) ei = hotel ? Math.min(si + 1, axis.length - 1) : si
|
||||
const endHourRaw = hotel ? toHour(meta.check_out_time, 11) : toHour(e.time || to?.local_time, startHour + 1)
|
||||
const end: Moment = ei === 'after' ? { day: axis.length - 1, hour: 24 } : ei === 'before' ? { day: si, hour: startHour + 1 } : { day: ei, hour: endHourRaw }
|
||||
let end: Moment = ei === 'after' ? { day: axis.length - 1, hour: 24 } : ei === 'before' ? { day: si, hour: startHour + 1 } : { day: ei, hour: endHourRaw }
|
||||
// A stay checked into on the last day with no end runs to the end of the axis, not back before its check-in.
|
||||
if (hotel && openEnded && end.day === si && end.hour <= startHour) end = { day: si, hour: 24 }
|
||||
// An arrival that reads earlier than the departure in local time (a date line, a typo) keeps a small bar.
|
||||
if (end.day < si || (end.day === si && end.hour <= startHour)) return { kind: 'on', start: { day: si, hour: startHour }, end: { day: si, hour: startHour + 1 } }
|
||||
return { kind: 'on', start: { day: si, hour: startHour }, end }
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
// FE-PLANNER-BKTRANSIT-001 to FE-PLANNER-BKTRANSIT-008
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { render, screen } from '../../../../tests/helpers/render';
|
||||
import type { TransitLegDisplay } from '../transitDisplay';
|
||||
import { TransitLegs, transitSummary } from './transitParts';
|
||||
|
||||
const ride: TransitLegDisplay = {
|
||||
mode: 'SUBWAY',
|
||||
line: 'U2',
|
||||
line_color: '#dc2626',
|
||||
line_text_color: '#ffffff',
|
||||
duration: 600,
|
||||
headsign: 'Pankow',
|
||||
agency: 'BVG',
|
||||
stops: 5,
|
||||
from: { name: 'Alexanderplatz', time: '10:02', track: '1' },
|
||||
to: { name: 'Eberswalder Str.', time: '10:12' },
|
||||
};
|
||||
const walk: TransitLegDisplay = { mode: 'WALK', duration: 240, to: { name: 'Mauerpark' } };
|
||||
|
||||
describe('transitSummary', () => {
|
||||
it('FE-PLANNER-BKTRANSIT-001: anything that is not a transit journey has no summary', () => {
|
||||
expect(transitSummary({})).toBeNull();
|
||||
expect(transitSummary({ transit: { legs: 'none' } })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTRANSIT-002: reads the stored totals', () => {
|
||||
const s = transitSummary({ transit: { legs: [ride, walk], duration: 1500, transfers: 2, walk_seconds: 300 } });
|
||||
expect(s).toEqual({ legs: [ride, walk], duration: 1500, transfers: 2, walk: 300 });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTRANSIT-003: an older entry counts transfers and walking from its legs', () => {
|
||||
const s = transitSummary({ transit: { legs: [walk, ride, { ...ride, line: 'U8' }, { mode: 'WALK' }] } });
|
||||
expect(s).toMatchObject({ duration: null, transfers: 1, walk: 240 });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTRANSIT-004: a zero duration or a walk-only journey', () => {
|
||||
expect(transitSummary({ transit: { legs: [walk], duration: 0 } })).toMatchObject({ duration: null, transfers: 0, walk: 240 });
|
||||
});
|
||||
});
|
||||
|
||||
describe('TransitLegs', () => {
|
||||
it('FE-PLANNER-BKTRANSIT-005: a ride shows its line, stops and facts', () => {
|
||||
render(<TransitLegs legs={[ride]} />);
|
||||
const line = screen.getByText('U2');
|
||||
expect(line).toHaveStyle({ background: '#dc2626', color: '#ffffff' });
|
||||
expect(screen.getByText('Alexanderplatz')).toBeInTheDocument();
|
||||
expect(screen.getByText('Eberswalder Str.')).toBeInTheDocument();
|
||||
expect(screen.getByText('10:02 → 10:12')).toBeInTheDocument();
|
||||
expect(screen.getByText('10 min')).toBeInTheDocument();
|
||||
expect(screen.getByText('5 stops')).toBeInTheDocument();
|
||||
expect(screen.getByText('Platform 1')).toBeInTheDocument();
|
||||
expect(screen.getByText('Pankow')).toBeInTheDocument();
|
||||
expect(screen.getByText('BVG')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTRANSIT-006: a walk reads as one and leaves out the ride facts', () => {
|
||||
render(<TransitLegs legs={[walk]} compact />);
|
||||
expect(screen.getByText('Walk to Mauerpark')).toBeInTheDocument();
|
||||
expect(screen.getByText('4 min')).toBeInTheDocument();
|
||||
expect(screen.queryByText(/stops/)).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTRANSIT-007: a line without its own colour and a leg without times or name', () => {
|
||||
render(<TransitLegs legs={[{ mode: 'BUS', from: { name: 'A' }, to: { name: 'B' } }, { mode: 'WALK' }]} compact />);
|
||||
expect(screen.getByText('BUS')).toHaveStyle({ background: 'var(--bg-tertiary)' });
|
||||
expect(screen.getByText('Walk to')).toBeInTheDocument();
|
||||
expect(screen.queryByText(/min$/)).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKTRANSIT-008: a coloured line without a text colour is written in white', () => {
|
||||
render(<TransitLegs legs={[{ mode: 'TRAM', line: 'M10', line_color: '#16a34a', from: { name: 'A', time: '09:00' }, to: { name: 'B' } }]} />);
|
||||
expect(screen.getByText('M10')).toHaveStyle({ color: '#fff' });
|
||||
expect(screen.getByText('09:00')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,199 @@
|
||||
// FE-PLANNER-BKVIEW-001 to FE-PLANNER-BKVIEW-016
|
||||
import { describe, it, expect, vi, afterEach } from 'vitest';
|
||||
import { act, renderHook } from '@testing-library/react';
|
||||
import { useBookingsView } from './useBookingsView';
|
||||
|
||||
const stored = (store: Storage, key: string) => JSON.parse(store.getItem(key) ?? 'null');
|
||||
|
||||
afterEach(() => { vi.restoreAllMocks(); });
|
||||
|
||||
describe('useBookingsView', () => {
|
||||
it('FE-PLANNER-BKVIEW-001: starts on cards grouped by status, sorted by date, nothing filtered', () => {
|
||||
const { result } = renderHook(() => useBookingsView('transports', 1));
|
||||
expect(result.current.view).toBe('cards');
|
||||
expect(result.current.group).toBe('status');
|
||||
expect(result.current.sort).toEqual({ by: 'date', dir: 'asc' });
|
||||
expect(result.current.timeline).toEqual({ zoom: 'trip', byType: true, context: true });
|
||||
expect(result.current.transitApart).toBe(false);
|
||||
expect(result.current.status).toBe('all');
|
||||
expect(result.current.types.size).toBe(0);
|
||||
expect(result.current.travelers.size).toBe(0);
|
||||
expect(result.current.filtering).toBe(false);
|
||||
expect(result.current.viewIsDefault).toBe(true);
|
||||
expect(result.current.selectedId).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-002: the view is remembered per tab', () => {
|
||||
const { result, unmount } = renderHook(() => useBookingsView('transports', 1));
|
||||
act(() => result.current.setView('list'));
|
||||
expect(result.current.view).toBe('list');
|
||||
expect(stored(localStorage, 'trek:bookings-transports-view')).toBe('list');
|
||||
unmount();
|
||||
expect(renderHook(() => useBookingsView('transports', 1)).result.current.view).toBe('list');
|
||||
expect(renderHook(() => useBookingsView('bookings', 1)).result.current.view).toBe('cards');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-003: the list groups by day, and each view keeps its own grouping', () => {
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 1));
|
||||
act(() => result.current.setGroup('type'));
|
||||
expect(result.current.group).toBe('type');
|
||||
act(() => result.current.setView('list'));
|
||||
expect(result.current.group).toBe('day');
|
||||
act(() => result.current.setGroup('none'));
|
||||
expect(stored(localStorage, 'trek:bookings-bookings-group')).toEqual({ cards: 'type', list: 'none' });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-004: the timeline is never grouped, and grouping there changes nothing', () => {
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 1));
|
||||
act(() => result.current.setView('timeline'));
|
||||
expect(result.current.group).toBe('none');
|
||||
act(() => result.current.setGroup('type'));
|
||||
expect(result.current.group).toBe('none');
|
||||
expect(localStorage.getItem('trek:bookings-bookings-group')).toBeNull();
|
||||
expect(result.current.transitApart).toBe(true);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-005: a new sort key starts ascending, the same key keeps its direction, flip turns it', () => {
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 1));
|
||||
act(() => result.current.flipSort());
|
||||
expect(result.current.sort).toEqual({ by: 'date', dir: 'desc' });
|
||||
act(() => result.current.setSort('date'));
|
||||
expect(result.current.sort).toEqual({ by: 'date', dir: 'desc' });
|
||||
act(() => result.current.setSort('title'));
|
||||
expect(result.current.sort).toEqual({ by: 'title', dir: 'asc' });
|
||||
act(() => result.current.flipSort());
|
||||
act(() => result.current.flipSort());
|
||||
expect(result.current.sort).toEqual({ by: 'title', dir: 'asc' });
|
||||
expect(stored(localStorage, 'trek:bookings-bookings-sort')).toEqual({ by: 'title', dir: 'asc' });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-006: the timeline zoom, type rows and context are remembered', () => {
|
||||
const { result } = renderHook(() => useBookingsView('transports', 1));
|
||||
act(() => result.current.setZoom('day'));
|
||||
act(() => result.current.toggleByType());
|
||||
act(() => result.current.toggleContext());
|
||||
expect(result.current.timeline).toEqual({ zoom: 'day', byType: false, context: false });
|
||||
expect(stored(localStorage, 'trek:bookings-transports-timeline')).toEqual({ zoom: 'day', byType: false, context: false });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-007: a zoom stored by an older build opens on the whole trip', () => {
|
||||
localStorage.setItem('trek:bookings-transports-timeline', JSON.stringify({ zoom: 'week', byType: false, context: true }));
|
||||
const { result } = renderHook(() => useBookingsView('transports', 1));
|
||||
expect(result.current.timeline).toEqual({ zoom: 'trip', byType: false, context: true });
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-008: cards can put transit in its own section', () => {
|
||||
const { result } = renderHook(() => useBookingsView('transports', 1));
|
||||
act(() => result.current.toggleTransitApart());
|
||||
expect(result.current.transitApart).toBe(true);
|
||||
expect(result.current.viewIsDefault).toBe(false);
|
||||
expect(stored(localStorage, 'trek:bookings-transports-transitApart')).toBe(true);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-009: status, types and travelers filter, per trip in the session', () => {
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 9));
|
||||
act(() => result.current.setStatus('pending'));
|
||||
act(() => result.current.toggleType('hotel'));
|
||||
act(() => result.current.toggleType('tour'));
|
||||
act(() => result.current.toggleTraveler(3));
|
||||
expect(result.current.status).toBe('pending');
|
||||
expect([...result.current.types]).toEqual(['hotel', 'tour']);
|
||||
expect([...result.current.travelers]).toEqual([3]);
|
||||
expect(result.current.filtering).toBe(true);
|
||||
expect(stored(sessionStorage, 'trek-bookings-filters-bookings-9')).toEqual({ types: ['hotel', 'tour'], status: 'pending', travelers: [3] });
|
||||
|
||||
act(() => result.current.toggleType('hotel'));
|
||||
act(() => result.current.toggleTraveler(3));
|
||||
expect([...result.current.types]).toEqual(['tour']);
|
||||
expect(result.current.travelers.size).toBe(0);
|
||||
|
||||
// Another trip starts unfiltered.
|
||||
expect(renderHook(() => useBookingsView('bookings', 10)).result.current.status).toBe('all');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-010: clearing types and travelers leaves the status alone', () => {
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 1));
|
||||
act(() => result.current.setStatus('confirmed'));
|
||||
act(() => result.current.toggleType('hotel'));
|
||||
act(() => result.current.toggleTraveler(4));
|
||||
act(() => result.current.clearTypes());
|
||||
act(() => result.current.clearTravelers());
|
||||
expect(result.current.types.size).toBe(0);
|
||||
expect(result.current.travelers.size).toBe(0);
|
||||
expect(result.current.status).toBe('confirmed');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-011: a search counts as filtering, and reset clears it along with the filters', () => {
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 1));
|
||||
act(() => result.current.setQuery(' '));
|
||||
expect(result.current.filtering).toBe(false);
|
||||
act(() => result.current.setQuery('kyoto'));
|
||||
act(() => result.current.toggleType('hotel'));
|
||||
expect(result.current.filtering).toBe(true);
|
||||
act(() => result.current.resetFilters());
|
||||
expect(result.current.query).toBe('');
|
||||
expect(result.current.types.size).toBe(0);
|
||||
expect(result.current.filtering).toBe(false);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-012: reset view on cards restores grouping, sort and the transit section', () => {
|
||||
const { result } = renderHook(() => useBookingsView('transports', 1));
|
||||
act(() => result.current.setGroup('type'));
|
||||
act(() => result.current.setSort('title'));
|
||||
act(() => result.current.toggleTransitApart());
|
||||
expect(result.current.viewIsDefault).toBe(false);
|
||||
act(() => result.current.resetView());
|
||||
expect(result.current.group).toBe('status');
|
||||
expect(result.current.sort).toEqual({ by: 'date', dir: 'asc' });
|
||||
expect(result.current.transitApart).toBe(false);
|
||||
expect(result.current.viewIsDefault).toBe(true);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-013: reset view on the list and on the timeline', () => {
|
||||
const { result } = renderHook(() => useBookingsView('transports', 1));
|
||||
act(() => result.current.setView('list'));
|
||||
act(() => result.current.flipSort());
|
||||
expect(result.current.viewIsDefault).toBe(false);
|
||||
act(() => result.current.resetView());
|
||||
expect(result.current.viewIsDefault).toBe(true);
|
||||
expect(result.current.group).toBe('day');
|
||||
|
||||
act(() => result.current.setView('timeline'));
|
||||
act(() => result.current.toggleContext());
|
||||
expect(result.current.viewIsDefault).toBe(false);
|
||||
act(() => result.current.resetView());
|
||||
expect(result.current.timeline).toMatchObject({ byType: true, context: true });
|
||||
expect(result.current.viewIsDefault).toBe(true);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-014: collapsed groups are remembered per trip and per grouping', () => {
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 5));
|
||||
expect(result.current.collapsed('pending')).toBe(false);
|
||||
act(() => result.current.toggleGroup('pending'));
|
||||
expect(result.current.collapsed('pending')).toBe(true);
|
||||
expect(stored(localStorage, 'trek:bookings-bookings-collapsed:5')).toEqual({ 'status:pending': true });
|
||||
act(() => result.current.setGroup('type'));
|
||||
expect(result.current.collapsed('pending')).toBe(false);
|
||||
act(() => result.current.setGroup('status'));
|
||||
act(() => result.current.toggleGroup('pending'));
|
||||
expect(result.current.collapsed('pending')).toBe(false);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-015: blocked or garbled storage starts fresh and choices still apply', () => {
|
||||
localStorage.setItem('trek:bookings-bookings-sort', '{not json');
|
||||
expect(renderHook(() => useBookingsView('bookings', 1)).result.current.sort).toEqual({ by: 'date', dir: 'asc' });
|
||||
|
||||
vi.spyOn(Storage.prototype, 'getItem').mockImplementation(() => { throw new Error('blocked'); });
|
||||
vi.spyOn(Storage.prototype, 'setItem').mockImplementation(() => { throw new Error('blocked'); });
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 1));
|
||||
expect(result.current.view).toBe('cards');
|
||||
act(() => result.current.setView('timeline'));
|
||||
expect(result.current.view).toBe('timeline');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-BKVIEW-016: remembers the selected booking while mounted', () => {
|
||||
const { result } = renderHook(() => useBookingsView('bookings', 1));
|
||||
act(() => result.current.setSelectedId(12));
|
||||
expect(result.current.selectedId).toBe(12);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,28 @@
|
||||
// FE-PLANNER-PLACEDLGPARTS-001 to FE-PLANNER-PLACEDLGPARTS-004
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { render, screen } from '../../../tests/helpers/render';
|
||||
import { COLUMN_CARD, ColumnHead, HintCard, SIDE_COLUMN, WHITE_BUTTON } from './placeDialogParts';
|
||||
|
||||
describe('placeDialogParts', () => {
|
||||
it('FE-PLANNER-PLACEDLGPARTS-001: ColumnHead names its column as a heading, with its icon beside it', () => {
|
||||
render(<ColumnHead icon={<span data-testid="col-icon" />}>Place details</ColumnHead>);
|
||||
expect(screen.getByRole('heading', { level: 3, name: 'Place details' })).toBeInTheDocument();
|
||||
expect(screen.getByTestId('col-icon')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLACEDLGPARTS-002: HintCard says its line next to its icon', () => {
|
||||
render(<HintCard icon={<span data-testid="hint-icon" />}>Pick a place to see its details</HintCard>);
|
||||
expect(screen.getByText('Pick a place to see its details')).toBeInTheDocument();
|
||||
expect(screen.getByTestId('hint-icon')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLACEDLGPARTS-003: the column frame stretches with the dialog and clips its cards', () => {
|
||||
expect(SIDE_COLUMN).toContain('self-stretch');
|
||||
expect(SIDE_COLUMN).toContain('overflow-hidden');
|
||||
expect(COLUMN_CARD).toContain('bg-surface-card');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLACEDLGPARTS-004: the white button dims when disabled', () => {
|
||||
expect(WHITE_BUTTON).toContain('disabled:opacity-50');
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,136 @@
|
||||
// FE-PLANNER-PLANPARTS-001 to FE-PLANNER-PLANPARTS-012
|
||||
import { describe, it, expect, vi } from 'vitest';
|
||||
import { render, screen, fireEvent } from '../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { Pencil, Trash2 } from 'lucide-react';
|
||||
import { BarButton, MoreButton, PANEL_BAR, SoftPill, TimePill, WhiteBadge, tintOf } from './planParts';
|
||||
|
||||
describe('BarButton', () => {
|
||||
it('FE-PLANNER-PLANPARTS-001: is a button named by its label that runs its action', async () => {
|
||||
const onClick = vi.fn();
|
||||
render(<BarButton label="Undo" onClick={onClick}><span>icon</span></BarButton>);
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Undo' }));
|
||||
expect(onClick).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-002: carries its pressed, expanded and popup states', () => {
|
||||
render(
|
||||
<BarButton label="Filter" onClick={vi.fn()} active ariaPressed ariaExpanded={false} ariaHaspopup="menu" className="extra">
|
||||
<span>icon</span>
|
||||
</BarButton>,
|
||||
);
|
||||
const button = screen.getByRole('button', { name: 'Filter' });
|
||||
expect(button).toHaveAttribute('aria-pressed', 'true');
|
||||
expect(button).toHaveAttribute('aria-expanded', 'false');
|
||||
expect(button).toHaveAttribute('aria-haspopup', 'menu');
|
||||
expect(button.className).toContain('extra');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-003: a disabled one does nothing', async () => {
|
||||
const onClick = vi.fn();
|
||||
render(<BarButton label="Optimize" onClick={onClick} disabled placement="top"><span>icon</span></BarButton>);
|
||||
const button = screen.getByRole('button', { name: 'Optimize' });
|
||||
expect(button).toBeDisabled();
|
||||
await userEvent.click(button);
|
||||
expect(onClick).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-004: shows its label as a tooltip on hover', async () => {
|
||||
render(<BarButton label="Export" onClick={vi.fn()}><span>icon</span></BarButton>);
|
||||
await userEvent.hover(screen.getByRole('button', { name: 'Export' }));
|
||||
expect(await screen.findByRole('tooltip')).toHaveTextContent('Export');
|
||||
});
|
||||
});
|
||||
|
||||
describe('MoreButton', () => {
|
||||
it('FE-PLANNER-PLANPARTS-005: opens the row\'s actions as a menu and runs the picked one', async () => {
|
||||
const onEdit = vi.fn();
|
||||
const onDelete = vi.fn();
|
||||
render(
|
||||
<MoreButton label="More actions" items={[
|
||||
{ label: 'Edit', icon: Pencil, onClick: onEdit },
|
||||
false,
|
||||
null,
|
||||
{ divider: true },
|
||||
{ label: 'Delete', icon: Trash2, onClick: onDelete, danger: true },
|
||||
]} />,
|
||||
);
|
||||
const trigger = screen.getByRole('button', { name: 'More actions' });
|
||||
expect(trigger).toHaveAttribute('aria-haspopup', 'menu');
|
||||
fireEvent.click(trigger);
|
||||
expect(screen.getByRole('button', { name: 'Edit' })).toBeInTheDocument();
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Delete' }));
|
||||
expect(onDelete).toHaveBeenCalledTimes(1);
|
||||
expect(onEdit).not.toHaveBeenCalled();
|
||||
expect(screen.queryByRole('button', { name: 'Edit' })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-006: nothing but dividers or hidden entries renders nothing', () => {
|
||||
const { container } = render(<MoreButton label="More" items={[{ divider: true }, false, undefined]} />);
|
||||
expect(container).toBeEmptyDOMElement();
|
||||
expect(screen.queryByRole('button', { name: 'More' })).toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-007: stays visible when asked to, and takes a custom size', () => {
|
||||
render(<MoreButton label="More" alwaysVisible size={32} className="own" items={[{ label: 'Rename', onClick: vi.fn() }]} />);
|
||||
const trigger = screen.getByRole('button', { name: 'More' });
|
||||
expect(trigger.className).toContain('opacity-100');
|
||||
expect(trigger.className).toContain('own');
|
||||
expect(trigger.style.width).toBe('32px');
|
||||
expect(trigger.style.height).toBe('32px');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-008: stays quiet at rest until its row is hovered', () => {
|
||||
render(<MoreButton label="More" items={[{ label: 'Rename', onClick: vi.fn() }]} />);
|
||||
expect(screen.getByRole('button', { name: 'More' }).className).toContain('opacity-0');
|
||||
});
|
||||
});
|
||||
|
||||
describe('badges and pills', () => {
|
||||
it('FE-PLANNER-PLANPARTS-009: WhiteBadge and TimePill show their content with an optional icon', () => {
|
||||
render(
|
||||
<>
|
||||
<WhiteBadge icon={<span data-testid="badge-icon" />} className="mine">Check-in</WhiteBadge>
|
||||
<TimePill className="time">10:00</TimePill>
|
||||
</>,
|
||||
);
|
||||
expect(screen.getByText('Check-in').className).toContain('mine');
|
||||
expect(screen.getByTestId('badge-icon')).toBeInTheDocument();
|
||||
const time = screen.getByText('10:00');
|
||||
expect(time.className).toContain('time');
|
||||
expect(time.querySelector('svg')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-010: SoftPill colours its words by tone and can set them in capitals', () => {
|
||||
render(
|
||||
<>
|
||||
<SoftPill>Plain</SoftPill>
|
||||
<SoftPill tone="success">Confirmed</SoftPill>
|
||||
<SoftPill tone="warning">Pending</SoftPill>
|
||||
<SoftPill tone="danger">Cancelled</SoftPill>
|
||||
<SoftPill tone="info">Info</SoftPill>
|
||||
<SoftPill tone="accent" caps icon={<span data-testid="pill-icon" />} className="x">Start</SoftPill>
|
||||
</>,
|
||||
);
|
||||
expect(screen.getByText('Plain').className).toContain('text-content-secondary');
|
||||
expect(screen.getByText('Confirmed').className).toContain('text-success');
|
||||
expect(screen.getByText('Pending').className).toContain('text-warning');
|
||||
expect(screen.getByText('Cancelled').className).toContain('text-danger');
|
||||
expect(screen.getByText('Info').className).toContain('text-info');
|
||||
const start = screen.getByText('Start');
|
||||
expect(start.className).toContain('bg-accent');
|
||||
expect(start.className).toContain('uppercase');
|
||||
expect(start.className).toContain('x');
|
||||
expect(screen.getByTestId('pill-icon')).toBeInTheDocument();
|
||||
expect(screen.getByText('Plain').className).not.toContain('uppercase');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-011: tintOf mixes a colour into transparency', () => {
|
||||
expect(tintOf('#ff0000')).toBe('color-mix(in srgb, #ff0000 11%, transparent)');
|
||||
expect(tintOf('var(--accent)', 20)).toBe('color-mix(in srgb, var(--accent) 20%, transparent)');
|
||||
});
|
||||
|
||||
it('FE-PLANNER-PLANPARTS-012: the panel bar is a band with a hairline under it', () => {
|
||||
expect(PANEL_BAR).toContain('border-b');
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,5 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
||||
import { render, screen, waitFor } from '../../../tests/helpers/render'
|
||||
import { render, screen, waitFor, fireEvent } from '../../../tests/helpers/render'
|
||||
import { resetAllStores } from '../../../tests/helpers/store'
|
||||
import { useSettingsStore } from '../../store/settingsStore'
|
||||
import WeatherWidget from './WeatherWidget'
|
||||
@@ -249,4 +249,29 @@ describe('WeatherWidget', () => {
|
||||
})
|
||||
expect(weatherApi.get).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it('FE-COMP-WEATHERWIDGET-018: the stacked badge shows the icon over the temperature, without a tooltip when it has no place', async () => {
|
||||
vi.mocked(weatherApi.get).mockResolvedValue(buildWeather({ temp: 21 }))
|
||||
useSettingsStore.setState({ settings: { ...useSettingsStore.getState().settings, temperature_unit: 'celsius' } })
|
||||
const { container } = render(<WeatherWidget lat={48.86} lng={2.35} date="2025-06-01" stacked />)
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText('21°')).toBeInTheDocument()
|
||||
})
|
||||
expect(container.querySelector('svg')).not.toBeNull()
|
||||
fireEvent.mouseEnter(screen.getByText('21°').parentElement!)
|
||||
await new Promise(r => setTimeout(r, 300))
|
||||
expect(screen.queryByRole('tooltip')).toBeNull()
|
||||
})
|
||||
|
||||
it('FE-COMP-WEATHERWIDGET-019: without its icon the stacked badge names the sky and the place in its tooltip', async () => {
|
||||
vi.mocked(weatherApi.get).mockResolvedValue(buildWeather({ temp: 18, type: 'climate' }))
|
||||
useSettingsStore.setState({ settings: { ...useSettingsStore.getState().settings, temperature_unit: 'celsius' } })
|
||||
const { container } = render(<WeatherWidget lat={48.86} lng={2.35} date="2025-06-01" stacked hideIcon locationName="Rome" />)
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText('Ø18°')).toBeInTheDocument()
|
||||
})
|
||||
expect(container.querySelector('svg')).toBeNull()
|
||||
fireEvent.mouseEnter(screen.getByText('Ø18°').parentElement!)
|
||||
expect(await screen.findByRole('tooltip')).toHaveTextContent('clear sky, Rome')
|
||||
})
|
||||
})
|
||||
|
||||
@@ -154,4 +154,31 @@ describe('ConfirmDialog', () => {
|
||||
fireEvent.click(backdrop);
|
||||
expect(onClose).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
describe('on a phone', () => {
|
||||
const desktopWidth = window.innerWidth;
|
||||
beforeEach(() => { Object.defineProperty(window, 'innerWidth', { writable: true, configurable: true, value: 390 }); });
|
||||
afterEach(() => { Object.defineProperty(window, 'innerWidth', { writable: true, configurable: true, value: desktopWidth }); });
|
||||
|
||||
it('FE-COMP-CONFIRM-014: the phone card answers like the desktop one, and a tap on it does not close it', async () => {
|
||||
const user = userEvent.setup();
|
||||
render(<ConfirmDialog isOpen onClose={onClose} onConfirm={onConfirm} title="Delete note?" message="It is gone for good." confirmLabel="Remove" />);
|
||||
await user.click(screen.getByText('It is gone for good.'));
|
||||
expect(onClose).not.toHaveBeenCalled();
|
||||
await user.click(screen.getByRole('button', { name: 'Remove' }));
|
||||
expect(onConfirm).toHaveBeenCalledOnce();
|
||||
expect(onClose).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it('FE-COMP-CONFIRM-015: the phone card without danger uses the accent and the default labels', async () => {
|
||||
const user = userEvent.setup();
|
||||
render(<ConfirmDialog isOpen onClose={onClose} onConfirm={onConfirm} message="Leave?" danger={false}><p>More</p></ConfirmDialog>);
|
||||
expect(screen.getByText('Confirm')).toBeInTheDocument();
|
||||
expect(screen.getByText('More')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: 'Delete' })).toHaveClass('bg-accent');
|
||||
await user.click(screen.getByRole('button', { name: 'Cancel' }));
|
||||
expect(onClose).toHaveBeenCalledOnce();
|
||||
expect(onConfirm).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
// FE-COMP-DIALOGSHELL-001 to FE-COMP-DIALOGSHELL-013
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen, fireEvent } from '../../../tests/helpers/render';
|
||||
import userEvent from '@testing-library/user-event';
|
||||
import { resetBodyScrollLock } from '../../utils/bodyScrollLock';
|
||||
import {
|
||||
DeleteButton,
|
||||
DialogButton,
|
||||
DialogFooter,
|
||||
DialogHeader,
|
||||
DialogSection,
|
||||
DialogShell,
|
||||
DialogTile,
|
||||
FooterSpacer,
|
||||
NEUTRAL_TINT,
|
||||
fs,
|
||||
} from './DialogShell';
|
||||
|
||||
const onClose = vi.fn();
|
||||
|
||||
beforeEach(() => {
|
||||
onClose.mockClear();
|
||||
resetBodyScrollLock();
|
||||
document.body.style.overflow = '';
|
||||
});
|
||||
|
||||
describe('fs', () => {
|
||||
it('FE-COMP-DIALOGSHELL-001: scales a size by the user\'s text size for its tier', () => {
|
||||
expect(fs(12)).toEqual({ fontSize: 'calc(12px * var(--fs-scale-caption, 1))' });
|
||||
expect(fs(20, 'subtitle')).toEqual({ fontSize: 'calc(20px * var(--fs-scale-subtitle, 1))' });
|
||||
});
|
||||
});
|
||||
|
||||
describe('DialogShell', () => {
|
||||
it('FE-COMP-DIALOGSHELL-002: a dialog that is all head and foot has no body, and takes its width and alignment', () => {
|
||||
render(
|
||||
<DialogShell onClose={onClose} labelledBy="q-title" width="narrow" align="top"
|
||||
header={<DialogHeader tile={<DialogTile><span>i</span></DialogTile>} tint={NEUTRAL_TINT} labelId="q-title" onClose={onClose} title="Leave?" />}
|
||||
footer={<DialogFooter><DialogButton>Stay</DialogButton><FooterSpacer /><DialogButton variant="primary">Leave</DialogButton></DialogFooter>} />,
|
||||
);
|
||||
const dialog = screen.getByRole('dialog', { name: 'Leave?' });
|
||||
expect(dialog.className).toContain('max-w-[520px]');
|
||||
expect(document.querySelector('.trek-modal-backdrop')?.className).toContain('items-start');
|
||||
expect(dialog.querySelector('form')).toBeNull();
|
||||
expect(dialog.children).toHaveLength(2);
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-003: a body class replaces the padded column, and a paste anywhere reaches the dialog', () => {
|
||||
const onPaste = vi.fn();
|
||||
render(
|
||||
<DialogShell onClose={onClose} labelledBy="p-title" width="xwide" bodyClassName="preview-body" onPaste={onPaste}
|
||||
header={<DialogHeader tile={null} tint={NEUTRAL_TINT} labelId="p-title" onClose={onClose} title="Preview" />}>
|
||||
<p>Document</p>
|
||||
</DialogShell>,
|
||||
);
|
||||
expect(screen.getByText('Document').parentElement?.className).toBe('preview-body');
|
||||
fireEvent.paste(screen.getByRole('dialog', { name: 'Preview' }));
|
||||
expect(onPaste).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('DialogHeader', () => {
|
||||
it('FE-COMP-DIALOGSHELL-004: a plain title is the heading the dialog is named by', () => {
|
||||
render(<DialogHeader tile={<DialogTile><span data-testid="tile-icon" /></DialogTile>} tint={NEUTRAL_TINT} labelId="t1" onClose={onClose} title="Export" />);
|
||||
expect(screen.getByRole('heading', { level: 2, name: 'Export' })).toHaveAttribute('id', 't1');
|
||||
expect(screen.getByTestId('tile-icon')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-005: a title with a click is a rename button, the eyebrow then names the dialog', async () => {
|
||||
const onTitleClick = vi.fn();
|
||||
render(<DialogHeader tile={null} tint={NEUTRAL_TINT} labelId="t2" onClose={onClose} eyebrow="Booking" title="Hotel Sakura" onTitleClick={onTitleClick} titleTooltip="Rename" />);
|
||||
expect(screen.getByRole('heading', { name: 'Booking' })).toHaveAttribute('id', 't2');
|
||||
const rename = screen.getByRole('button', { name: 'Hotel Sakura' });
|
||||
expect(rename).not.toHaveAttribute('id');
|
||||
await userEvent.click(rename);
|
||||
expect(onTitleClick).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-006: a rename button without a tooltip still works', async () => {
|
||||
const onTitleClick = vi.fn();
|
||||
render(<DialogHeader tile={null} tint={NEUTRAL_TINT} labelId="t3" onClose={onClose} title="Dinner" onTitleClick={onTitleClick} />);
|
||||
const rename = screen.getByRole('button', { name: 'Dinner' });
|
||||
expect(rename).toHaveAttribute('id', 't3');
|
||||
await userEvent.click(rename);
|
||||
expect(onTitleClick).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-007: Enter in the title field is spent there, other keys and the blur reach the caller', () => {
|
||||
const onKeyDown = vi.fn();
|
||||
const onBlur = vi.fn();
|
||||
const onChange = vi.fn();
|
||||
render(
|
||||
<DialogHeader tile={null} tint={NEUTRAL_TINT} labelId="t4" onClose={onClose}
|
||||
titleInput={{ value: 'Old', onChange, label: 'Title', required: true, maxLength: 40, onKeyDown, onBlur }} />,
|
||||
);
|
||||
const input = screen.getByRole('textbox', { name: 'Title' });
|
||||
expect(input).toHaveAttribute('id', 't4');
|
||||
expect(input).toBeRequired();
|
||||
expect(input).toHaveAttribute('maxLength', '40');
|
||||
const enter = fireEvent.keyDown(input, { key: 'Enter' });
|
||||
expect(enter).toBe(false);
|
||||
const other = fireEvent.keyDown(input, { key: 'a' });
|
||||
expect(other).toBe(true);
|
||||
expect(onKeyDown).toHaveBeenCalledTimes(2);
|
||||
fireEvent.blur(input);
|
||||
expect(onBlur).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-008: the title field works without a key handler', () => {
|
||||
render(<DialogHeader tile={null} tint={NEUTRAL_TINT} labelId="t5" onClose={onClose} titleInput={{ value: '', onChange: vi.fn(), label: 'Name' }} />);
|
||||
expect(fireEvent.keyDown(screen.getByRole('textbox', { name: 'Name' }), { key: 'Enter' })).toBe(false);
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-009: Close calls onClose, and the pills sit under the title', async () => {
|
||||
render(<DialogHeader tile={null} tint={NEUTRAL_TINT} labelId="t6" onClose={onClose} title="Stay" sub="Kyoto" pills={<span>3 nights</span>} />);
|
||||
expect(screen.getByText('Kyoto')).toBeInTheDocument();
|
||||
expect(screen.getByText('3 nights')).toBeInTheDocument();
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Close' }));
|
||||
expect(onClose).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('body and footer parts', () => {
|
||||
it('FE-COMP-DIALOGSHELL-010: a section is labelled and can carry an action', async () => {
|
||||
const onAdd = vi.fn();
|
||||
render(
|
||||
<>
|
||||
<DialogSection label="Travelers" action={<button type="button" onClick={onAdd}>Add</button>} className="own"><p>Maria</p></DialogSection>
|
||||
<DialogSection label="Notes"><p>None</p></DialogSection>
|
||||
</>,
|
||||
);
|
||||
expect(screen.getByText('Travelers')).toBeInTheDocument();
|
||||
expect(screen.getByText('Maria').closest('section')?.className).toBe('own');
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Add' }));
|
||||
expect(onAdd).toHaveBeenCalledTimes(1);
|
||||
expect(screen.getAllByRole('button')).toHaveLength(1);
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-011: footer buttons are plain buttons by default, the primary one can submit', async () => {
|
||||
const onSave = vi.fn();
|
||||
render(
|
||||
<DialogFooter>
|
||||
<DialogButton icon={<span data-testid="btn-icon" />}>Cancel</DialogButton>
|
||||
<DialogButton active>On map</DialogButton>
|
||||
<DialogButton variant="primary" type="submit" onClick={onSave} disabled={false}>Save</DialogButton>
|
||||
<DialogButton disabled>Later</DialogButton>
|
||||
</DialogFooter>,
|
||||
);
|
||||
expect(screen.getByRole('button', { name: 'Cancel' })).toHaveAttribute('type', 'button');
|
||||
expect(screen.getByTestId('btn-icon')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: 'On map' }).className).toContain('bg-accent');
|
||||
expect(screen.getByRole('button', { name: 'Cancel' }).className).not.toContain('bg-accent');
|
||||
const save = screen.getByRole('button', { name: 'Save' });
|
||||
expect(save).toHaveAttribute('type', 'submit');
|
||||
await userEvent.click(save);
|
||||
expect(onSave).toHaveBeenCalledTimes(1);
|
||||
expect(screen.getByRole('button', { name: 'Later' })).toBeDisabled();
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-012: the delete button is named "Delete" unless told otherwise', async () => {
|
||||
const onDelete = vi.fn();
|
||||
const { rerender } = render(<DeleteButton onClick={onDelete} />);
|
||||
await userEvent.click(screen.getByRole('button', { name: 'Delete' }));
|
||||
expect(onDelete).toHaveBeenCalledTimes(1);
|
||||
rerender(<DeleteButton onClick={onDelete} label="Delete note" disabled />);
|
||||
expect(screen.getByRole('button', { name: 'Delete note' })).toBeDisabled();
|
||||
});
|
||||
|
||||
it('FE-COMP-DIALOGSHELL-013: the neutral tint is a faint wash of the accent', () => {
|
||||
expect(NEUTRAL_TINT).toContain('var(--accent)');
|
||||
});
|
||||
});
|
||||
@@ -1,4 +1,4 @@
|
||||
// FE-PAGE-TPW-001 to FE-PAGE-TPW-072
|
||||
// FE-PAGE-TPW-001 to FE-PAGE-TPW-074
|
||||
//
|
||||
// The planner page is a wiring container: everything stateful lives in
|
||||
// useTripPlanner (covered in src/pages/tripPlanner/useTripPlanner.test.tsx).
|
||||
@@ -1473,4 +1473,30 @@ describe('TripPlannerPage — modals', () => {
|
||||
act(() => { release.onConfirm() })
|
||||
expect(hookState.confirmStayRelease).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('FE-PAGE-TPW-073: adding a stay from a day opens its panel with the stay picker, which reports back once open', () => {
|
||||
const setStayPickerDayId = vi.fn()
|
||||
renderPage({ stayPickerDayId: null, setStayPickerDayId })
|
||||
act(() => { props('dayPlan').onAddAccommodation(day) })
|
||||
expect(hookState.handleSelectDay).toHaveBeenCalledWith(7)
|
||||
expect(hookState.setShowDayDetail).toHaveBeenCalledWith(day)
|
||||
expect(hookState.selectAssignment).toHaveBeenCalledWith(null)
|
||||
expect(setStayPickerDayId).toHaveBeenCalledWith(7)
|
||||
cleanup()
|
||||
|
||||
renderPage({ showDayDetail: day, stayPickerDayId: 7, setStayPickerDayId })
|
||||
expect(props('dayDetail').openStayPicker).toBe(true)
|
||||
act(() => { props('dayDetail').onStayPickerOpened() })
|
||||
expect(setStayPickerDayId).toHaveBeenLastCalledWith(null)
|
||||
})
|
||||
|
||||
it('FE-PAGE-TPW-074: a linked expense in either booking tab opens the expense editor on that item', async () => {
|
||||
for (const activeTab of ['transports', 'buchungen']) {
|
||||
renderPage({ activeTab })
|
||||
await screen.findByTestId('reservations-panel')
|
||||
act(() => { props('reservationsPanel').onEditExpense({ id: 12 }) })
|
||||
await waitFor(() => expect(props('expenseModal').editing).toEqual({ id: 12 }))
|
||||
cleanup()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'دفعتها أنا',
|
||||
'costs.filter.owed': 'مستحق لي',
|
||||
'costs.addExpense': 'إضافة مصروف',
|
||||
'costs.view.label': 'العرض',
|
||||
'costs.view.list': 'قائمة',
|
||||
'costs.view.table': 'جدول',
|
||||
'costs.table.lockedPayer': 'دفعها أحدهم: غيّر المبلغ في المصروف حتى تبقى الأرصدة صحيحة.',
|
||||
'costs.table.lockedCurrency': 'أُدخلت بعملة {currency}: غيّر المبلغ في المصروف.',
|
||||
'costs.table.summary': 'ملخص',
|
||||
'costs.table.byCategory': 'الفئة',
|
||||
'costs.table.byDate': 'اليوم',
|
||||
'costs.table.byPayer': 'الدافع',
|
||||
'costs.table.byStatus': 'الحالة',
|
||||
'costs.table.noPayer': 'لا يوجد دافع بعد',
|
||||
'costs.table.paid': 'مدفوع',
|
||||
'costs.table.open': 'مفتوح',
|
||||
'costs.editExpense': 'تعديل المصروف',
|
||||
'costs.noMatch': 'لا توجد مصروفات تطابق بحثك.',
|
||||
'costs.emptyText': 'لا توجد مصروفات بعد. أضف أول مصروف لك.',
|
||||
|
||||
+61
-57
@@ -1579,7 +1579,7 @@ const help: TranslationStrings = {
|
||||
'«مشاركة» أعلى اليمين تفتح أشخاص الرحلة: الأعضاء والضيوف ورابط الدعوة والرابط العام للقراءة فقط.',
|
||||
'help.ctx.trip.bullet.4': 'العنوان والتواريخ والغلاف والعملة تُحرَّر من «رحلاتي»، بالقلم الموجود على بطاقة الرحلة.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'الأسهم الصغيرة عند الحافة الداخلية لكل عمود تطوي العمود فتأخذ الخريطة المساحة؛ والفاصل الرفيع بجانب العمود يغيّر عرضه.',
|
||||
'اللسان عند الحافة الداخلية لكل عمود يطوي العمود فتأخذ الخريطة المساحة؛ والفاصل الرفيع بجانب العمود يغيّر عرضه.',
|
||||
'help.ctx.trip.bullet.6': 'سهم التراجع في شريط أدوات الأيام يتراجع عن آخر تغيير في الخطة.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'إضافة عضو',
|
||||
@@ -1635,8 +1635,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'إفساح المجال للخريطة',
|
||||
'help.guide.collapse-columns.goal': 'اطوِ عمودًا أو امنحه عرضًا أكبر.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'انقر على السهم الصغير عند الحافة الداخلية لعمود الأيام لطيّه؛ تأخذ الخريطة المساحة. عمود الأماكن له السهم نفسه.',
|
||||
'help.guide.collapse-columns.step.2': 'انقر على السهم الصغير مجددًا لإعادة العمود.',
|
||||
'انقر على اللسان عند الحافة الداخلية لعمود الأيام، ذلك الذي يحمل أيقونة اللوحة، لطيّ العمود؛ تأخذ الخريطة المساحة. عمود الأماكن له اللسان نفسه.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'العمود المطوي يترك مربعًا في زاوية الخريطة، «الخطة» للأيام و«الأماكن» للأماكن. انقر عليه لإعادة العمود.',
|
||||
'help.guide.collapse-columns.step.3': 'اسحب الفاصل الرفيع بين العمود والخريطة لتغيير عرض العمود.',
|
||||
'help.guide.collapse-columns.result': 'تُحفظ الأعراض؛ وتعود الأعمدة مفتوحة في الزيارة التالية.',
|
||||
'help.guide.collapse-columns.tip.1': 'يمكن طي العمودين معًا لعرض الخريطة وحدها.',
|
||||
@@ -1658,26 +1659,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'«إضافة مكان/نشاط» في الأعلى يفتح نموذج مكان تكتبه أو تبحث عنه. وما دام هناك يوم مفتوح، يصير اسم الزر «مكان جديد»، و«إلى اليوم» بجانبه ينشئ المكان مباشرة في ذلك اليوم.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'«استيراد ملف» يقبل ملفات .gpx و.kml و.kmz؛ و«استيراد قائمة» يقبل قائمة مشتركة من Google Maps أو Naver Maps. ويمكن أيضًا إفلات الملف على العمود ببساطة.',
|
||||
'زر الاستيراد بجانبه يقدّم «استيراد ملف» لملفات .gpx و.kml و.kmz، و«قائمة Google» («استيراد قائمة» حين تكون قوائم Naver مفعّلة أيضًا) لقائمة مشتركة من Google Maps أو Naver Maps. ويمكن أيضًا إفلات الملف على العمود ببساطة.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'القائمة المنسدلة تبدّل بين «الكل» و«غير مخطط» و«مخطط لها»، وبعد استيراد مسار، «المسارات»؛ وتحتها البحث وفلتر الفئات والنجمة للحد الأدنى من التقييم.',
|
||||
'وتحتها البحث، وبجانبه علامة الصح التي تبدأ تحديدًا، ثم صف من الفلاتر: «عرض» يبدّل بين «الكل» و«غير مخطط» و«مخطط لها»، وبعد استيراد مسار، «المسارات»، ولكل منها عدده؛ وزر الوسم يصفّي حسب الفئة والنجمة حسب أدنى تقييم.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'يعرض الصف الصورة والاسم والوصف أو العنوان. انقر عليه لتفاصيل المكان، أو اسحبه إلى يوم، أو انقر بزر الفأرة الأيمن للحصول على «تعديل» و«+ يوم» و«فتح الموقع الإلكتروني» و«Google Maps» و«حفظ في مجموعة» و«حذف».',
|
||||
'يعرض الصف الصورة والاسم والوصف أو العنوان. انقر عليه لتفاصيل المكان، أو اسحبه إلى يوم، أو انقر عليه بزر الفأرة الأيمن (أو على نقاطه الثلاث) للحصول على «تعديل» و«+ يوم» و«فتح الموقع الإلكتروني» و«Google Maps» و«حفظ في مجموعة» و«حذف».',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'مع وجود يوم مفتوح، علامة + في نهاية صف غير مخطط تضع المكان في ذلك اليوم، و«مخطط لها» تسرد ذلك اليوم وحده، مع «عرض الرحلة كاملة» للتوسيع من جديد.',
|
||||
'مع وجود يوم مفتوح، يضع «+ يوم» في نهاية صف غير مخطط المكانَ في ذلك اليوم، و«مخطط لها» تسرد ذلك اليوم وحده، مع «عرض الرحلة كاملة» للتوسيع من جديد.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'علامة الصح في الطرف الأيمن من صف الفلاتر تبدأ تحديدًا: عدة صفوف دفعة واحدة تأخذ فئة جديدة، أو تدخل مجموعة، أو تُحذف.',
|
||||
'علامة الصح بجانب البحث تبدأ تحديدًا: من الشريط أسفل العمود، تأخذ عدة صفوف دفعة واحدة فئة جديدة، أو تدخل مجموعة، أو تُعلَّم كمَزارة، أو تُحذف.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'إنشاء مكان',
|
||||
'help.guide.create-place.goal': 'أضف مكانًا أو نشاطًا يدويًا، بكل ما تحتاج الخطة معرفته عنه.',
|
||||
'help.guide.create-place.step.1':
|
||||
'انقر على «إضافة مكان/نشاط» أعلى عمود الأماكن («مكان جديد» ما دام هناك يوم مفتوح). يُفتح النموذج.',
|
||||
'help.guide.create-place.step.2':
|
||||
'اكتب المكان في «ابحث عن أماكن...» في الأعلى واختر نتيجة. يُملأ «الاسم» و«العنوان» و«خط العرض» و«خط الطول» و«الموقع الإلكتروني»، و«تفاصيل المكان» على اليسار يعرض صورًا وساعات العمل ووصفًا له. وعلى TREK فيه مفتاح Google، يظهر «ليس المكان الصحيح؟ ابحث في Google بدلًا من ذلك» أسفل القائمة ويشغّل البحث نفسه عبر Google.',
|
||||
'اكتب المكان في «ابحث عن أماكن...» واختر نتيجة. يُملأ الاسم في رأس مربع الحوار و«العنوان» و«خط العرض» و«خط الطول» و«الموقع الإلكتروني»، و«تفاصيل المكان» على اليسار يعرض صورًا وساعات العمل ووصفًا له. وعلى TREK فيه مفتاح Google، يظهر «ليس المكان الصحيح؟ ابحث في Google بدلًا من ذلك» أسفل القائمة ويشغّل البحث نفسه عبر Google. و«الأماكن المحفوظة» على اليمين تعرض أماكن مجموعاتك بالطريقة نفسها.',
|
||||
'help.guide.create-place.step.3':
|
||||
'في «تفاصيل المكان»، نقرة على صورة تحت «اختر صورة» تجعلها صورة المكان؛ و«استخدام هذا النص» ينقل الوصف إلى النموذج.',
|
||||
'help.guide.create-place.step.4':
|
||||
'راجع الحقول: «الاسم» مطلوب؛ و«الوصف» و«ملاحظات» لك؛ و«العنوان» و«خط العرض» و«خط الطول» تأتي من البحث أو تُكتب؛ و«الفئة» تختار إحدى فئات الرحلة، وعلامة + بجانبها تنشئ فئة جديدة في الحال؛ و«الموقع الإلكتروني» يأخذ الرابط.',
|
||||
'راجع ما يحتويه النموذج: الاسم في رأس مربع الحوار وهو الحقل الوحيد المطلوب؛ وشارة «الفئة» تحته تختار إحدى فئات الرحلة، وعلامة + بجانبها تنشئ فئة جديدة في الحال. و«العنوان» و«خط العرض» و«خط الطول» تأتي من البحث أو تُكتب؛ و«الوصف» و«ملاحظات» لك؛ و«الموقع الإلكتروني» يأخذ الرابط.',
|
||||
'help.guide.create-place.step.5':
|
||||
'انقر على «إضافة». إذا كان في الرحلة مكان بالاسم نفسه، فسيقول النموذج ذلك ويتحوّل الزر إلى «الإضافة على أي حال».',
|
||||
'help.guide.create-place.result': 'المكان في القائمة وعلى الخريطة، تحت «غير مخطط» إلى أن يوضع في يوم.',
|
||||
@@ -1695,7 +1696,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'«إلى اليوم» يفتح النموذج نفسه الذي يفتحه «مكان جديد»، غير أن المكان يهبط في اليوم المفتوح لحظة نقرك على «إضافة».',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'المكان الموجود أصلًا ينتقل إلى اليوم المفتوح بعلامة + في نهاية صفه، أو بالنقر بزر الفأرة الأيمن ثم «+ يوم».',
|
||||
'المكان الموجود أصلًا ينتقل إلى اليوم المفتوح بـ«+ يوم» في نهاية صفه، أو بالنقر بزر الفأرة الأيمن ثم «+ يوم».',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'والعكس يعمل أيضًا، ومن دون فتح يوم أولًا: اسحب صف المكان من العمود وأفلته على بطاقة يوم. وإن أفلته بين محطتين، فسيحطّ هناك بالضبط.',
|
||||
'help.guide.place-to-open-day.result': 'يُسرد المكان تحت اليوم، في نهايته؛ اسحبه لأعلى أو لأسفل إلى موضعه الصحيح.',
|
||||
@@ -1706,12 +1707,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'العثور على مكان في القائمة',
|
||||
'help.guide.filter-places.goal': 'ضيّق العمود على الأماكن التي تبحث عنها.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'القائمة المنسدلة في الأعلى تبدّل بين «الكل» و«غير مخطط» (ليس في أي يوم بعد) و«مخطط لها» (في يوم) و«المسارات» (مسارات GPX المستوردة)، ولكل منها عدده.',
|
||||
'help.guide.filter-places.step.2': 'اكتب في «ابحث عن أماكن...»؛ تضيق القائمة أثناء الكتابة.',
|
||||
'«عرض»، القائمة المنسدلة تحت البحث، يبدّل بين «الكل» و«غير مخطط» (ليس في أي يوم بعد) و«مخطط لها» (في يوم) و«المسارات» (مسارات GPX المستوردة)، ولكل منها عدده.',
|
||||
'help.guide.filter-places.step.2': 'اكتب في «بحث» في الأعلى؛ تضيق القائمة أثناء الكتابة.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'«كل الفئات» يفتح قائمة لتعليم فئة أو أكثر، ومنها «بلا فئة»؛ و«مسح الفلتر» في أسفلها يعيد ضبطه.',
|
||||
'زر الوسم بجانب «عرض» يسرد الفئات: علّم فئة أو أكثر، ومنها «بلا فئة». ويعدّ الزر ما هو معلَّم، و«مسح الفلتر» في أسفل القائمة يرفعها كلها.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'النجمة بجانبها تحدد أدنى تقييم: 5+ و4+ وهكذا تعرض الأماكن التي قيّمتها بهذا القدر على الأقل.',
|
||||
'النجمة بجانبه تحدد أدنى تقييم: 5+ و4+ وهكذا تعرض الأماكن التي قيّمتها بهذا القدر على الأقل.',
|
||||
'help.guide.filter-places.result': 'العدد فوق الصفوف يقول كم مكانًا يطابق؛ والفلاتر تتجمّع معًا.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'مع وجود يوم مفتوح، «مخطط لها» تسرد ذلك اليوم وحده وتقول ذلك: «يظهر اليوم المفتوح فقط»، وبجانبها «عرض الرحلة كاملة».',
|
||||
@@ -1722,7 +1723,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'انقر بزر الفأرة الأيمن على الصف واختر «تعديل»، أو افتح المكان وانقر على «تعديل» في تفاصيله.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'غيّر ما تحتاجه: «الاسم» و«الوصف» و«ملاحظات» و«العنوان» و«خط العرض» و«خط الطول» و«الفئة» و«الموقع الإلكتروني». وإذا فُتح من يوم، ففي النموذج أيضًا «ملاحظات لهذا اليوم» و«البداية» و«النهاية» لذلك اليوم.',
|
||||
'غيّر ما تحتاجه: الاسم وشارة «الفئة» في رأس مربع الحوار، و«العنوان» و«خط العرض» و«خط الطول»، و«الوصف» و«ملاحظات» و«الموقع الإلكتروني». وإذا فُتح من يوم، ففي النموذج أيضًا «البداية» و«النهاية» و«ملاحظات لهذا اليوم».',
|
||||
'help.guide.edit-place.step.3': 'انقر على «تحديث».',
|
||||
'help.guide.edit-place.result': 'ينطبق التغيير في كل موضع يظهر فيه المكان: القائمة والخريطة وكل يوم هو فيه.',
|
||||
'help.guide.edit-place.tip.1': '«ملاحظات لهذا اليوم» تخص المكان في ذلك اليوم وحده؛ و«ملاحظات» تخص المكان نفسه.',
|
||||
@@ -1733,20 +1734,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.goal': 'أخرِج مكانًا من الرحلة نهائيًا.',
|
||||
'help.guide.delete-place.step.1': 'انقر بزر الفأرة الأيمن على الصف واختر «حذف»، أو انقر على «حذف» في تفاصيل المكان.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'أكّد. إذا كانت ليلة محجوزة في المكان، أو كان حجز مرتبطًا به، فالسؤال يقول ما الذي سيذهب معه.',
|
||||
'انقر «حذف» في السؤال. إذا كانت ليلة محجوزة في المكان، أو كان حجز مرتبطًا به، فالسؤال يقول ما الذي سيذهب معه.',
|
||||
'help.guide.delete-place.result':
|
||||
'يختفي المكان من القائمة والخريطة وكل يوم؛ و«تراجع» في شريط الأدوات فوق الأيام يعيده.',
|
||||
'help.guide.delete-place.tip.1': 'لإخراج مكان من يوم واحد فقط، استخدم «إزالة من اليوم» على تلك المحطة بدلًا من ذلك.',
|
||||
'help.guide.delete-place.tip.2': 'عدة أماكن دفعة واحدة: علامة الصح بجانب الفلاتر تبدأ تحديدًا.',
|
||||
'help.guide.delete-place.tip.2': 'عدة أماكن دفعة واحدة: علامة الصح بجانب البحث تبدأ تحديدًا.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'تغيير أو حذف عدة أماكن دفعة واحدة',
|
||||
'help.guide.select-places.goal': 'رتّب القائمة دفعة واحدة بدل مكان بعد مكان.',
|
||||
'help.guide.select-places.step.1':
|
||||
'انقر على علامة الصح في الطرف الأيمن من صف الفلاتر. تحصل الصفوف على مربعات تعليم، ويظهر شريط بالإجراءات.',
|
||||
'help.guide.select-places.step.2': 'علّم الصفوف، أو «تحديد الكل» في الشريط؛ والشريط يعدّ ما هو محدد.',
|
||||
'انقر على علامة الصح بجانب حقل البحث. تحصل الصفوف على مربعات تعليم دائرية، ويرتفع شريط بالإجراءات أسفل العمود.',
|
||||
'help.guide.select-places.step.2':
|
||||
'انقر على الصفوف لتعليمها. و«تحديد الكل»، علامة الصح المزدوجة في الشريط، يأخذ كل صف تُبقيه الفلاتر.',
|
||||
'help.guide.select-places.step.3':
|
||||
'«Change category» يمنحها كلها فئة واحدة؛ و«حفظ في مجموعة» ينسخها إلى إحدى مجموعاتك؛ و«حذف المحدد» يزيلها بعد تأكيد.',
|
||||
'help.guide.select-places.step.4': 'انقر على علامة الصح مرة أخرى لمغادرة التحديد.',
|
||||
'يعدّ الشريط الأماكن المعلَّمة. «تغيير الفئة» يمنحها كلها فئة واحدة؛ و«حفظ في مجموعة» ينسخها إلى إحدى مجموعاتك؛ و«حذف المحدد» يزيلها بعد تأكيد.',
|
||||
'help.guide.select-places.step.4': '«تم»، علامة X في نهاية الشريط، يُنهي التحديد.',
|
||||
'help.guide.select-places.result':
|
||||
'ينطبق التغيير على كل مكان محدد؛ ويمكن التراجع عن الحذف من شريط الأدوات فوق الأيام.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1756,7 +1758,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'استيراد أماكن من ملف GPX أو KML أو KMZ',
|
||||
'help.guide.import-places-file.goal': 'أدخِل ما صدّره Google My Maps أو Google Earth أو جهاز تتبع GPS.',
|
||||
'help.guide.import-places-file.step.1': 'انقر على «استيراد ملف»، أو أفلت الملف في أي موضع على عمود الأماكن.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'انقر على زر الاستيراد بجانب زر الإضافة واختر «استيراد ملف»، أو أفلت الملف في أي موضع على عمود الأماكن.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'اختر الملف أو اسحبه إلى المربع. لملف GPX، علّم ما تريد استيراده: «نقاط الطريق» و«المسارات» و«المسارات (مع هندسة الطريق)»؛ ولملفات KML و KMZ، «نقاط (Placemarks)» و«مسارات (LineStrings)».',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1770,7 +1773,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'استيراد قائمة مشتركة من Google Maps أو Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'حوّل رابط قائمة مشتركة إلى أماكن.',
|
||||
'help.guide.import-places-list.step.1': 'انقر على «استيراد قائمة» واختر «قائمة Google» أو «قائمة Naver».',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'انقر على زر الاستيراد بجانب زر الإضافة واختر «قائمة Google». وحين تكون قوائم Naver مفعّلة أيضًا، يحمل البند اسم «استيراد قائمة» ويسألك مربع الحوار أيّ القائمتين تريد.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'الصق الرابط المشترك للقائمة. ورابط اتجاهات Google Maps يعمل أيضًا: محطاته تصبح أماكن، بترتيب القيادة.',
|
||||
'help.guide.import-places-list.step.3': 'انقر على «استيراد».',
|
||||
@@ -1787,30 +1791,30 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'شريط الأدوات في الأعلى: «تصدير» (PDF، التقويم، GPX)، و«Expand all days» / «Collapse all days»، وسهم التراجع، و«إعادة ترتيب الأيام»، و«إظهار جميع مسارات الحجوزات».',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'بطاقة اليوم: رقم اليوم والطقس والعنوان والتاريخ وتكلفة اليوم في الترويسة؛ انقر على الترويسة لفتح اليوم، والسهم المدبّب يطويه. و«النقل العام» و«إضافة وسيلة نقل» و«إضافة ملاحظة» في الترويسة أيضًا.',
|
||||
'بطاقة اليوم: مربع فيه رقم اليوم وتوقعات الطقس، ثم العنوان والتاريخ، وشارات لليلة المحجوزة وسيارة مستأجرة وتكلفة اليوم. انقر على الترويسة لفتح اليوم، والسهم المدبّب يطويه، وعلامة + تفتح قائمة: «أضف مكانًا إلى هذا اليوم» و«إضافة إقامة» و«إضافة وسيلة نقل» و«النقل العام» و«إضافة ملاحظة».',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'داخل اليوم: المحطات بالترتيب، لكل منها صورة واسم ووقت وقفل على الصورة؛ ثم الملاحظات؛ والحجوزات التي تخص اليوم؛ وبين المحطات زمن كل مرحلة.',
|
||||
'داخل اليوم: المحطات بالترتيب، لكل منها صورة واسم ووقت وقفل على الصورة والحجوزات المثبّتة عليها؛ ثم الملاحظات؛ وحجوزات اليوم ووسائل نقله، ملوّنة بحسب نوعها؛ وبين المحطات زمن كل مرحلة. ولكل صف قائمة بثلاث نقاط، وهي نفسها التي يفتحها النقر بزر الفأرة الأيمن.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'تحت المحطات شريط المسار: «المسار» يرسم اليوم على الخريطة، و«تحسين» يرتّب المحطات، و«بالسيارة» / «سيرًا على الأقدام» يحدد وسيلة تنقل اليوم، و«فتح في Google Maps» و«فتح في CoMaps» يسلّمان اليوم إلى تطبيق آخر.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'تصل الأماكن إلى يوم بسحب صف من عمود الأماكن، أو بعلامة + في ذلك الصف، أو بـ«أضف مكانًا إلى هذا اليوم» في يوم فارغ، أو من تفاصيل المكان.',
|
||||
'تصل الأماكن إلى يوم بسحب صف من عمود الأماكن، أو بـ«+ يوم» في ذلك الصف، أو بـ«أضف مكانًا إلى هذا اليوم» من علامة + في اليوم أو في يوم فارغ، أو من تفاصيل المكان.',
|
||||
'help.ctx.trip-days.bullet.6': '«إجمالي التكلفة» في الأسفل يجمع كل محطة وكل حجز لهما سعر، بعملة الرحلة.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'قراءة يوم',
|
||||
'help.guide.read-day-plan.goal': 'اعرف ما يقوله كل جزء من بطاقة اليوم قبل أن تغيّر أي شيء.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'الترويسة: رقم اليوم، وتوقعات الطقس لليوم، و«اليوم 1» أو العنوان الذي أعطيته، والتاريخ وتكلفة اليوم. انقر على الترويسة لفتح اليوم (تُفتح لوحة «تفاصيل اليوم» فوق الخريطة)؛ والسهم المدبّب على اليمين يطوي البطاقة ويفردها.',
|
||||
'الترويسة: مربع فيه رقم اليوم وتوقعات الطقس، ثم «اليوم 1» أو العنوان الذي أعطيته، والتاريخ، وشارات لليلة المحجوزة (تسجيل الوصول أو تسجيل المغادرة) وسيارة مستأجرة وتكلفة اليوم. انقر على الترويسة لفتح اليوم (تُفتح لوحة «تفاصيل اليوم» فوق الخريطة)؛ وعلامة + على اليمين تضيف مكانًا أو إقامة أو وسيلة نقل أو رحلة نقل عام أو ملاحظة، والسهم المدبّب يطوي البطاقة.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'المحطة: المقبض على يسارها يسحبها، والصورة تحمل قفلًا لتحسين المسار، ثم الاسم والوصف، وإن كانت مضبوطة، «ملاحظات لهذا اليوم». تظهر شارة وقت تبيّن «البداية» و«النهاية» متى كان للمحطة وقت؛ والسهمان اللذان يظهران في طرفها الأيمن ينقلانها لأعلى أو لأسفل.',
|
||||
'المحطة: المقبض على يسارها يسحبها، والصورة تحمل قفلًا لتحسين المسار، ثم الاسم، وشارة وقت متى كان للمحطة «البداية» و«النهاية»، ثم الوصف، وإن كانت مضبوطة، «ملاحظات لهذا اليوم». والسهمان في طرفها الأيمن ينقلانها لأعلى أو لأسفل، والنقاط الثلاث تفتح قائمتها.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'حجز في اليوم: الحجز المرتبط بمحطة يجعلها «حجز مؤكد» أو «حجز قيد الانتظار»، وتظهر وسيلة النقل بوصفها «المغادرة» أو «الوصول» مع وقتها ومسارها، ومعها مفتاح صغير يرسم ذلك المسار على الخريطة.',
|
||||
'الحجز عند محطة يظهر عليها كشارة «حجز»، خضراء متى كان مؤكدًا وكهرمانية ما دام قيد الانتظار، مع وقته ومزوّده؛ انقر على الشارة لفتح الحجز، وزر المسار بجانبها يرسم مساره. أما وسيلة النقل فصف مستقل، ملوّن بحسب نوعها، مع «المغادرة» أو «الوصول» ووقتها. انقر على حجز فتُفتح تفاصيله؛ و«تعديل» هناك يغيّره.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'بين محطتين يذكر الرابط كم تستغرق المرحلة وكم تبعد، بوسيلة تنقل اليوم؛ انقر عليه لتغيير الوسيلة لتلك المرحلة وحدها.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'شريط المسار في النهاية: «المسار» يرسم طريق اليوم على الخريطة، و«تحسين» يعيد ترتيب المحطات، وأزرار الوسيلة تختار «بالسيارة» أو «سيرًا على الأقدام»، و«فتح في Google Maps» و«فتح في CoMaps» يفتحان اليوم هناك.',
|
||||
'help.guide.read-day-plan.result': 'لكل رمز على البطاقة معنى؛ والأدلة أدناه تغيّر كل واحد منها.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'انقر بزر الفأرة الأيمن على محطة لتظهر قائمتها: «تعديل» و«إزالة من اليوم» و«فتح الموقع الإلكتروني» وتطبيقات التنقل (Google Maps، Waze، Apple Maps، OpenStreetMap، CoMaps) و«حفظ في مجموعة» و«حذف».',
|
||||
'انقر بزر الفأرة الأيمن على محطة، أو على نقاطها الثلاث، لتظهر قائمتها: «تعديل» و«إزالة من اليوم» و«فتح الموقع الإلكتروني» وتطبيقات التنقل (Google Maps، Waze، Apple Maps، OpenStreetMap، CoMaps) و«حفظ في مجموعة» و«حذف».',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'مرّر المؤشر فوق محطة فيظهر «إضافة حجز» في طرفها: الحجز المنشأ هناك مرتبط بهذه المحطة في هذا اليوم.',
|
||||
// place-onto-day
|
||||
@@ -1819,9 +1823,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'اسحب صفًا من عمود الأماكن إلى بطاقة اليوم. أفلته بين محطتين ليستقر هناك تمامًا، أو في أي موضع من البطاقة ليُضاف في آخرها.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'من دون سحب: افتح اليوم بالنقر على ترويسته، ثم انقر على علامة + في طرف صف المكان، أو انقر بزر الفأرة الأيمن على الصف واختر «+ يوم».',
|
||||
'من دون سحب: افتح اليوم بالنقر على ترويسته، ثم انقر على «+ يوم» في طرف صف المكان، أو انقر بزر الفأرة الأيمن على الصف واختر «+ يوم».',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'في يوم فارغ، يفتح «أضف مكانًا إلى هذا اليوم» نموذج المكان، ويحطّ المكان الجديد في اليوم فورًا.',
|
||||
'«أضف مكانًا إلى هذا اليوم»، في قائمة + الخاصة باليوم أو في يوم فارغ، يفتح نموذج المكان، ويحطّ المكان الجديد في اليوم فورًا.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'من تفاصيل المكان، يسأل «إضافة إلى اليوم» عن اليوم المقصود؛ وما دام هناك يوم مفتوح، ينشئ «إلى اليوم» في عمود الأماكن مكانًا جديدًا في اليوم المفتوح.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -1847,7 +1851,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'إعطاء محطة وقتًا',
|
||||
'help.guide.set-stop-times.goal': 'حدد متى تبدأ المحطة ومتى تنتهي، ليُقرأ اليوم كجدول زمني.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'انقر بزر الفأرة الأيمن على المحطة واختر «تعديل». وعند فتحه من اليوم، يحتوي النموذج على «البداية» و«النهاية» في أسفله.',
|
||||
'انقر بزر الفأرة الأيمن على المحطة، أو على نقاطها الثلاث، واختر «تعديل». وعند فتحه من اليوم، يحتوي النموذج على «البداية» و«النهاية» لذلك اليوم، تحت الموقع مباشرة.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'أدخل «البداية»، و«النهاية» إن شئت. «تداخل في الوقت مع:» ينبّه إلى تداخل مع محطة أخرى لها وقت في اليوم نفسه؛ و«النهاية» قبل «البداية» تمنع «تحديث».',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -1881,12 +1885,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'إضافة ملاحظة إلى يوم',
|
||||
'help.guide.day-note.goal': 'احفظ تذكيرًا أو رقم تذكرة أو خطة بديلة داخل اليوم نفسه.',
|
||||
'help.guide.day-note.step.1': 'انقر «إضافة ملاحظة» في ترويسة اليوم.',
|
||||
'help.guide.day-note.step.1': 'انقر على علامة + في ترويسة اليوم واختر «إضافة ملاحظة».',
|
||||
'help.guide.day-note.step.2':
|
||||
'أعطها اسمًا تحت «ملاحظة»، وهو ما تعرضه بطاقة اليوم، واكتب الباقي تحت «ملاحظة يومية». وشريط «التنسيق» فوقه ينسّق النص («غامق»، «قائمة نقطية»، «قائمة مرقمة»، «رابط»، «اقتباس»)، و«معاينة» إلى جانبه تعرض البطاقة التي ستصير إليها.',
|
||||
'اكتب اسم الملاحظة في رأس مربع الحوار، حيث تجد «ملاحظة»؛ وهو ما تعرضه بطاقة اليوم. واكتب الباقي تحت «ملاحظة يومية»: شريط الأدوات فوقه ينسّق النص (غامق، قوائم، روابط، اقتباسات)، و«معاينة» على اليسار تعرض الصف الذي ستصير إليه.',
|
||||
'help.guide.day-note.step.3': 'اختر «أيقونة» و«اللون» لتبرز الملاحظة بين المحطات، ثم «إضافة».',
|
||||
'help.guide.day-note.step.4':
|
||||
'تجلس الملاحظة في اليوم كأي محطة: اسحبها إلى موضعها، وانقر عليها بزر الفأرة الأيمن لتظهر «تعديل» و«حذف».',
|
||||
'تجلس الملاحظة في اليوم كأي محطة: اسحبها إلى موضعها، وانقر عليها بزر الفأرة الأيمن أو استخدم نقاطها الثلاث لتظهر «تعديل» و«حذف».',
|
||||
'help.guide.day-note.result':
|
||||
'الملاحظة جزء من اليوم، وفي PDF أيضًا؛ والملاحظة ذات الوقت تُرتَّب مع المحطات ذات الأوقات.',
|
||||
'help.guide.day-note.tip.1': 'ملاحظة بوقت تنوب عن وسيلة نقل لا حجز لها: «08:15 قطار S3 من المحطة المركزية».',
|
||||
@@ -1930,15 +1934,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'قراءة الحجوزات ووسائل النقل في الخطة',
|
||||
'help.guide.bookings-in-plan.goal': 'اعرف أين يظهر الحجز بعد إنشائه، وأي شاشة تنشئه.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'تظهر وسيلة النقل (رحلة جوية، قطار، عبّارة، حافلة، سيارة) في يوم مغادرتها بوصفها «المغادرة» وفي يوم وصولها بوصفها «الوصول»، مع الوقت والمسار؛ وما امتد منها عدة أيام يمتد عبر الأيام الواقعة بينها.',
|
||||
'وسيلة النقل (رحلة جوية، قطار، عبّارة، حافلة، سيارة) صف ملوّن بحسب نوعها: «المغادرة» في يوم انطلاقها، و«الوصول» في يوم وصولها، مع الوقت والمسار؛ وما امتد منها عدة أيام يمتد عبر الأيام الواقعة بينها. انقر على الصف فيُفتح الحجز.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'الحجز المرتبط بمحطة (مطعم، جولة) يجعل تلك المحطة «حجز مؤكد» أو «حجز قيد الانتظار»؛ والحجز الذي له يوم بلا محطة يصير صفًا مستقلًا في اليوم.',
|
||||
'الحجز المرتبط بمحطة (مطعم، جولة) شارة «حجز» على تلك المحطة، خضراء متى كان مؤكدًا وكهرمانية ما دام قيد الانتظار، مع وقته؛ والحجز الذي له يوم بلا محطة يصير صفًا مستقلًا في اليوم.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'ليلة في فندق هي إقامة: تجلس في لوحة تفاصيل اليوم تحت «الإقامة»، من «تسجيل الوصول» إلى «تسجيل المغادرة»، ويبدأ مسار كل يوم من تلك الأيام منها.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'على الخريطة، يرسم المفتاح في صف وسيلة النقل مسارها؛ و«إظهار جميع مسارات الحجوزات» في شريط الأدوات يرسمها جميعًا.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'الإنشاء: «إضافة حجز» على محطة تحت المؤشر، و«إضافة وسيلة نقل» و«النقل العام» في ترويسة اليوم، وتبويبا «الحجوزات» و«المواصلات» للقائمة الكاملة مع الاستيراد والملفات.',
|
||||
'الإنشاء: «إضافة حجز» على محطة تحت المؤشر، و«إضافة وسيلة نقل» و«النقل العام» في قائمة + الخاصة باليوم، وتبويبا «الحجوزات» و«المواصلات» للقائمة الكاملة مع الاستيراد والملفات.',
|
||||
'help.guide.bookings-in-plan.result': 'حجز واحد، موضع واحد في الخطة؛ والتبويبات هي الحجوزات نفسها في هيئة قائمة.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
'«مؤكد» و«قيد الانتظار» حالة تضبطها أنت على الحجز؛ تعرضها الخطة على المحطة، ويحصيهما تبويب «الحجوزات» معًا.',
|
||||
@@ -1967,24 +1971,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'انقر على صف في عمود الأماكن، أو على محطة داخل يوم، أو على علامة على الخريطة، فتُفتح البطاقة فوق الخريطة. واختيار المكان داخل يوم يخبر البطاقة أي محطة تقصد، وهذا ما يجلب معه مشاركي المحطة وحجزها.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'يحمل رأس البطاقة الصورة الدائرية والاسم والفئة والعنوان والإحداثيات. انقر على الصورة لتستخدم صورة من عندك، وانقر نقرًا مزدوجًا على الاسم لتعيد تسمية المكان في الحال، وعلامة X على اليمين تغلق البطاقة.',
|
||||
'يحمل رأس البطاقة الصورة الدائرية والاسم والعنوان في سطر واحد، وشارات لما هو معروف: مفتوح أو مغلق، والفئة، والسعر، ورقم الهاتف، والإحداثيات. انقر على الصورة لتستخدم صورة من عندك، وانقر نقرًا مزدوجًا على الاسم لتعيد تسمية المكان في الحال، وعلامة X على اليمين تغلق البطاقة.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'وتحته: السعر إن كان له سعر، والنجوم التي منحها كل مسافر للمكان، والوصف والملاحظات، و«ملاحظات لهذا اليوم» إن كانت المحطة تحملها.',
|
||||
'وتحته: النجوم التي منحها كل مسافر للمكان، والوصف والملاحظات، و«ملاحظات لهذا اليوم» إن كانت المحطة تحملها.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'ثم تأتي «ساعات العمل» و«لون المسار» و«بيانات المسار» و«الملفات»، بقدر ما ينطبق منها. و«الملفات» تأخذ أي شيء من مجلداتك، وتسرد كذلك ما يتعلق بحجز هذه المحطة.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'الصف في الأسفل: «إضافة إلى اليوم» أو «إزالة من اليوم» ما دام هناك يوم مفتوح، ثم «حفظ في مجموعة» و«التنقل» و«فتح الموقع الإلكتروني» و«تعديل» و«حذف».',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'المكان المختار من البحث يحمل ما يعرفه عنه فهرس TREK أو OpenStreetMap: حلقة خضراء «مفتوح» أو حمراء «مغلق» حول الصورة، محكومة بساعة المكان نفسه، ورقم الهاتف تحت النجوم، و«ساعات العمل» أسفل ذلك مع سطر اليوم على الصف والأسبوع كله خلف نقرة، وموقعه الإلكتروني خلف «فتح الموقع الإلكتروني». أما تقييم Google فلا يظهر إلا لمكان عُثر عليه عبر Google، على TREK لديه مفتاح Google.',
|
||||
'المكان المختار من البحث يحمل ما يعرفه عنه فهرس TREK أو OpenStreetMap: «مفتوح» أو «مغلق» بين شارات الرأس، مع حلقة خضراء أو حمراء حول الصورة، محكومة بساعة المكان نفسه، ورقم هاتفه كشارة أيضًا، و«ساعات العمل» أسفل ذلك مع سطر اليوم على الصف والأسبوع كله خلف نقرة، وموقعه الإلكتروني خلف «فتح الموقع الإلكتروني». أما تقييم Google فلا يظهر إلا لمكان عُثر عليه عبر Google، على TREK لديه مفتاح Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'ما تخبرك به البطاقة عن مكان',
|
||||
'help.guide.read-place.goal': 'اقرأ كل ما تعرفه الرحلة عن مكان واحد، في بطاقة واحدة.',
|
||||
'help.guide.read-place.step.1':
|
||||
'في عمود الأيام، انقر على المحطة التي تريد قراءتها. تُفتح البطاقة فوق الخريطة وتبقى المحطة مميّزة في يومها.',
|
||||
'help.guide.read-place.step.2':
|
||||
'الرأس: الصورة الدائرية والاسم والعنوان والإحداثيات الدقيقة. حلقة خضراء مع «مفتوح»، أو حمراء مع «مغلق»، حول الصورة تقول ما إذا كان المكان مفتوحًا الآن، بساعته هو، متى عرف TREK ساعات عمله. وعلامة X على اليمين تغلق البطاقة من جديد.',
|
||||
'الرأس: الصورة الدائرية والاسم والعنوان في سطر واحد؛ وتلميحه يحمل العنوان كاملًا. والشارات تحتها تقول «مفتوح» أو «مغلق» الآن، بساعة المكان نفسه، مع حلقة خضراء أو حمراء حول الصورة تطابقها، وتحمل رقم الهاتف، الذي تسلّمه نقرة إلى تطبيق الهاتف لديك، والإحداثيات الدقيقة. وعلامة X على اليمين تغلق البطاقة من جديد.',
|
||||
'help.guide.read-place.step.3':
|
||||
'وتحته النجوم التي منحها كل مسافر للمكان، مع المتوسط وعدد المصوّتين. ويُكتب «لم يُقيَّم بعد» ما دام لم يصوّت أحد. وتحته مباشرة رقم الهاتف حيث يكون للمكان رقم: نقرة عليه تسلّم الرقم إلى تطبيق الهاتف لديك.',
|
||||
'«التقييم» يأتي أولًا تحت الرأس: النجوم التي منحها كل مسافر للمكان، مع المتوسط وعدد المصوّتين. ويُكتب «لم يُقيَّم بعد» ما دام لم يصوّت أحد.',
|
||||
'help.guide.read-place.step.4':
|
||||
'ثم الوصف وتحته الملاحظات. وكلاهما النص المكتوب في نموذج المكان، معروضًا: القوائم والروابط والخط العريض تعمل كلها.',
|
||||
'help.guide.read-place.step.5': '«المشاركون» يقول من سيذهب إلى هذه المحطة. والجميع داخلون إلى أن تُخرج أحدًا.',
|
||||
@@ -2068,17 +2072,17 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'الحجز على محطة',
|
||||
'help.guide.place-booking.goal': 'اقرأ الحجز الذي يخصّ محطة، وافتحه، وثبّت حجزًا جديدًا عليها.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'افتح المحطة التي يخصّها الحجز. تعرض البطاقة شريطًا فيه «مؤكد» أو «قيد الانتظار» واسم الحجز.',
|
||||
'help.guide.place-booking.step.2': 'يحمل الشريط «التاريخ» و«الوقت» و«رمز الحجز»، وما للحجز من ملاحظات.',
|
||||
'help.guide.place-booking.step.3': 'انقر على الشريط. يُفتح الحجز فوق الخريطة.',
|
||||
'افتح المحطة التي يخصّها الحجز. تسرده البطاقة تحت «الحجوزات» كبطاقة صغيرة مستقلة، مع اسم الحجز و«مؤكد» أو «قيد الانتظار».',
|
||||
'help.guide.place-booking.step.2': 'تحمل بطاقة الحجز «التاريخ» و«الوقت» و«رمز الحجز»، وما للحجز من ملاحظات.',
|
||||
'help.guide.place-booking.step.3': 'انقر على بطاقة الحجز. يُفتح الحجز فوق الخريطة.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'«تعديل» في أسفل الحجز يفتح نموذجه الخاص. و«ربط بخطة اليوم» هناك هو ما يثبّت حجزًا على محطة، وهو هنا يسمّي هذه المحطة سلفًا. أغلق النموذج من جديد.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'الحجز الجديد لمحطة يبدأ في عمود الأيام: مرّر المؤشر فوق المحطة وانقر على علامة + في نهايتها. يُفتح النموذج باسم «حجز جديد»، مربوطًا بها سلفًا.',
|
||||
'الحجز الجديد لمحطة يبدأ في عمود الأيام: مرّر المؤشر فوق المحطة وانقر على «إضافة حجز»، أيقونة التذكرة في نهايتها. يُفتح النموذج باسم «حجز جديد»، مربوطًا بها سلفًا.',
|
||||
'help.guide.place-booking.result':
|
||||
'الحجز معلّق على المحطة: هو على البطاقة، وهو في اليوم، وملفاته مسرودة تحت «الملفات» هنا أيضًا.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'لا يظهر الشريط إلا عند المحطة المثبّت عليها الحجز. والحجز بلا محطة يعيش في تبويب «حجز».',
|
||||
'لا تظهر بطاقة الحجز إلا عند المحطة المثبّت عليها الحجز. والحجز بلا محطة يعيش في تبويب «حجز».',
|
||||
'help.guide.place-booking.tip.2': 'يمكن لعدة حجوزات أن تتشارك محطة واحدة: الغداء والجولة التي تبدأ من الباب نفسه.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
'أما القطار أو الرحلة الجوية أو العبّارة فيفتح نموذج المواصلات بدلًا من ذلك، وهو النموذج الذي يستخدمه تبويب «المواصلات».',
|
||||
@@ -2297,7 +2301,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'في الأعلى طقس اليوم. و«التوقعات لـ» تسمي المكان المقصود: أول محطة في اليوم، أو الفندق الذي تستيقظ فيه.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'«الحجوزات» تسرد حجوزات ذلك اليوم، كل حجز بنوعه والمحطة التي يتبعها وأوقاته. الأخضر يعني مؤكدًا، والكهرماني قيد الانتظار؛ وهي قراءة فقط، أما تغيير الحجوزات فيتم في علامة التبويب «الحجوزات».',
|
||||
'«الحجوزات» تسرد حجوزات ذلك اليوم، كل حجز بنوعه والمحطة التي يتبعها وأوقاته. الأخضر يعني مؤكدًا، والكهرماني قيد الانتظار، ونقرة على صف تفتح الحجز.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'«الإقامة» تعرض كل ليلة محجوزة على هذا اليوم، مع «تسجيل الوصول» و«تسجيل المغادرة» في اليومين اللذين يقعان فيهما، ونافذة الوصول، ووقت المغادرة، ورقم التأكيد.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2325,7 +2329,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.1':
|
||||
'«التوقعات لـ» تسمي المكان الذي تخصه الأرقام: أول محطة في اليوم، أو، في يوم بلا محطة، الفندق الذي تستيقظ فيه.',
|
||||
'help.guide.day-weather.step.2': 'الرقم الكبير هو حرارة اليوم، وبجانبه الصغرى والعظمى، وحالة الطقس بالكلمات.',
|
||||
'help.guide.day-weather.step.3': 'الشارات تحته: احتمال هطول الأمطار، وكميته، وأقوى رياح، وشروق الشمس وغروبها.',
|
||||
'help.guide.day-weather.step.3': 'الشارات بجانبه: احتمال هطول الأمطار، وكميته، وأقوى رياح، وشروق الشمس وغروبها.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'في الأسفل اليوم ساعة بساعة، كل ساعتين: الوقت والأيقونة والحرارة واحتمال المطر. والساعة التي تتجاوز 50% تظلل بالأزرق.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2355,17 +2359,17 @@ const help: TranslationStrings = {
|
||||
'يجب أن يكون المكان أولًا مكانًا من أماكن الرحلة. أنشئه في عمود الأماكن كما تنشئ أي مكان آخر: المنتقي لا يعرض إلا ما هو موجود بالفعل.',
|
||||
'help.guide.add-accommodation.step.2': 'افتح يوم وصولك وانقر على «إضافة إقامة» تحت «الإقامة».',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'«تطبيق على الأيام» يحدد الليالي التي تغطيها الإقامة: يوم الوصول في المنتقي الأول، ويوم المغادرة في الثاني. و«الكل» يغطي الرحلة كلها.',
|
||||
'«تطبيق على الأيام» يحدد الليالي التي تغطيها الإقامة: «البداية» هي يوم تسجيل الوصول، و«النهاية» يوم تسجيل المغادرة، و«الكل» يغطي الرحلة كلها. ورأس مربع الحوار يعرض المدة وعدد الليالي.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'املأ «تسجيل الوصول» و«حتى» و«تسجيل المغادرة»، وضع رقم الحجز تحت «التأكيد». والأربعة كلها قد تبقى فارغة.',
|
||||
'help.guide.add-accommodation.step.5': 'اختر المكان من أماكن الرحلة. والشارات فوق القائمة تضيقها إلى فئة واحدة.',
|
||||
'help.guide.add-accommodation.step.5': 'اختر المكان من أماكن الرحلة. و«الفئة» فوق القائمة تضيقها إلى فئة واحدة.',
|
||||
'help.guide.add-accommodation.step.6': 'انقر على «حفظ».',
|
||||
'help.guide.add-accommodation.result':
|
||||
'تظهر الإقامة في كل يوم تغطيه، «تسجيل الوصول» في الأول و«تسجيل المغادرة» في الأخير. ويصبح المكان محطة في يوم الوصول، فترسم الخريطة الطريق إليه، ويظهر حجز «إقامة» في علامة التبويب «الحجوزات».',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'ينفتح المنتقي على اليوم الذي جئت منه، والمغادرة في اليوم التالي؛ ويمكن تحريك الاثنين قبل الحفظ.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'أعط الفندق فئة Hotel من فئات الرحلة عند إنشائه، فتضيق الشارات فوق القائمة إلى فنادقك بنقرة واحدة.',
|
||||
'أعط الفندق فئة Hotel من فئات الرحلة عند إنشائه، فتضيق «الفئة» فوق القائمة إلى فنادقك بنقرة واحدة.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'الأوقات كلها اختيارية: إقامة بلا وقت وصول وبلا رمز تغطي لياليها وترسم طريقها كما هي.',
|
||||
// edit-accommodation
|
||||
@@ -2376,7 +2380,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'القلم في طرف البطاقة يفتح الإقامة من جديد. والنافذة المنبثقة تقرأ الآن «تعديل الإقامة».',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'صحّح صف الحقول: «تسجيل الوصول» و«حتى» و«تسجيل المغادرة» و«التأكيد». والأيام فوقه والمكان تحته يمكن تغييرهما هنا أيضًا.',
|
||||
'صحّح «تسجيل الوصول» و«حتى» و«تسجيل المغادرة» و«التأكيد». والأيام فوقها والمكان تحتها يمكن تغييرهما هنا أيضًا.',
|
||||
'help.guide.edit-accommodation.step.4': 'انقر على «حفظ».',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'علامة X بجانب القلم تنهي الإقامة. لا تسأل شيئًا، ويذهب معها حجز «إقامة» الخاص بها.',
|
||||
@@ -2391,7 +2395,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.goal': 'اعرف في مكان واحد ما هو محجوز بالفعل لهذا اليوم وهل هو مؤكد.',
|
||||
'help.guide.day-bookings.step.1': '«الحجوزات» تسرد حجوزات اليوم: تلك المؤرخة فيه، وتلك المعلقة بإحدى محطاته.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'يعرض الصف نوع الحجز واسمه، وإن كان تابعًا لمحطة فتلك المحطة بعد نقطة. وأوقاته في نهاية الصف.',
|
||||
'يعرض الصف نوع الحجز واسمه، وإن كان تابعًا لمحطة فتلك المحطة بالرمادي بعده. وأوقاته في نهاية الصف، قبل نقطة الحالة.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'اللون يقول أين يقف الحجز: الصف الأخضر مؤكد، والكهرماني ما زال قيد الانتظار. والفنادق ليست في هذه القائمة، فلها كتلتها الخاصة تحتها.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -75,6 +75,19 @@ const budget: TranslationStrings = {
|
||||
'costs.expensesCount': '{count} xərc',
|
||||
|
||||
'costs.addExpense': 'Xərc əlavə et',
|
||||
'costs.view.label': 'Görünüş',
|
||||
'costs.view.list': 'Siyahı',
|
||||
'costs.view.table': 'Cədvəl',
|
||||
'costs.table.lockedPayer': 'Kimsə ödəyib: balanslar düz qalsın deyə məbləği xərcin özündə dəyiş.',
|
||||
'costs.table.lockedCurrency': '{currency} ilə daxil edilib: məbləği xərcin özündə dəyiş.',
|
||||
'costs.table.summary': 'Xülasə',
|
||||
'costs.table.byCategory': 'Kateqoriya',
|
||||
'costs.table.byDate': 'Gün',
|
||||
'costs.table.byPayer': 'Ödəyən',
|
||||
'costs.table.byStatus': 'Status',
|
||||
'costs.table.noPayer': 'Hələ ödəyən yoxdur',
|
||||
'costs.table.paid': 'Ödənilib',
|
||||
'costs.table.open': 'Açıq',
|
||||
'costs.editExpense': 'Xərci redaktə et',
|
||||
'costs.noMatch': 'Axtarışınıza uyğun xərc yoxdur.',
|
||||
'costs.emptyText': 'Hələ xərc yoxdur. İlk xərci əlavə edin.',
|
||||
|
||||
+58
-57
@@ -1785,7 +1785,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Başlıq, tarixlər, üzlük və valyuta Səyahətlərim səhifəsində, səyahət kartındakı qələmlə redaktə olunur.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Sütunun daxili kənarındakı ox işarələri onu yığır və yerini xəritə tutur; sütunun yanındakı nazik ayırıcı onun enini dəyişir.',
|
||||
'Sütunun daxili kənarındakı kiçik düymə onu yığır və yerini xəritə tutur; sütunun yanındakı nazik ayırıcı onun enini dəyişir.',
|
||||
'help.ctx.trip.bullet.6': 'Günlərin alətlər panelindəki geri qaytarma oxu plana edilən son dəyişikliyi geri alır.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Üzv əlavə edin',
|
||||
@@ -1854,8 +1854,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Xəritəyə yer açın',
|
||||
'help.guide.collapse-columns.goal': 'Sütunu yığın və ya ona daha çox en verin.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Günlər sütununu yığmaq üçün onun daxili kənarındakı ox işarəsinə klikləyin; yerini xəritə tutur. Məkanlar sütununda da eyni ox var.',
|
||||
'help.guide.collapse-columns.step.2': 'Sütunu geri qaytarmaq üçün oxa yenidən klikləyin.',
|
||||
'Sütunu yığmaq üçün günlər sütununun daxili kənarındakı panel işarəli kiçik düyməyə klikləyin; yerini xəritə tutur. Məkanlar sütununda da eyni düymə var.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Yığılmış sütun xəritənin küncündə kiçik bir kart qoyur: günlər üçün Plan, məkanlar üçün Məkanlar. Sütunu geri qaytarmaq üçün ona klikləyin.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Sütunun enini dəyişmək üçün sütunla xəritə arasındakı nazik ayırıcını sürüşdürün.',
|
||||
'help.guide.collapse-columns.result': 'Enlər yadda saxlanılır; növbəti girişdə sütunlar açıq vəziyyətdə qayıdır.',
|
||||
@@ -1879,26 +1880,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Yuxarıdakı Məkan/Fəaliyyət əlavə et yazdığınız və ya axtardığınız məkan üçün formanı açır. Gün açıq olduqda düymədə Yeni məkan yazılır, yanındakı Günə əlavə et isə məkanı birbaşa həmin gündə yaradır.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Faylı idxal et .gpx, .kml və .kmz fayllarını qəbul edir; Siyahı idxalı paylaşılmış Google Maps və ya Naver Maps siyahısını qəbul edir. Faylı sadəcə sütunun üzərinə də ata bilərsiniz.',
|
||||
'Yanındakı idxal düyməsi .gpx, .kml və .kmz faylları üçün Faylı idxal et, Google Maps və ya Naver Maps-dan paylaşılmış siyahı üçün isə Google siyahısı (Naver siyahıları da aktiv olduqda Siyahı idxalı) təklif edir. Faylı sadəcə sütunun üzərinə də ata bilərsiniz.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Açılan siyahı Hamısı, Planlaşdırılmayıb, Planlaşdırılıb və iz idxal edildikdən sonra İzlər arasında keçid edir; onun altında axtarış, kateqoriya filtri və minimum reytinq üçün ulduz yerləşir.',
|
||||
'Onların altında axtarış, yanında seçimi başladan işarə, sonra filtrlər sırası: Göstər Hamısı, Planlaşdırılmayıb, Planlaşdırılıb və iz idxal edildikdən sonra İzlər arasında keçid edir, hər birinin yanında sayı ilə; etiket düyməsi kateqoriyaya, ulduz isə minimum reytinqə görə filtrləyir.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Sətirdə şəkil, ad və təsvir və ya ünvan göstərilir. Məkanın təfərrüatları üçün ona klikləyin, günün üzərinə sürüşdürün və ya Redaktə et, Günə əlavə et, Veb-saytı aç, Google Maps, Kolleksiyada yadda saxla və Sil üçün sağ klikləyin.',
|
||||
'Sətirdə şəkil, ad və təsvir və ya ünvan göstərilir. Məkanın təfərrüatları üçün ona klikləyin, günün üzərinə sürüşdürün və ya Redaktə et, + Gün, Veb-saytı aç, Google Maps, Kolleksiyada yadda saxla və Sil üçün ona sağ klikləyin (və ya üç nöqtəsinə klikləyin).',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Gün açıq olduqda planlaşdırılmamış sətrin sonundakı + məkanı həmin günə əlavə edir, Planlaşdırılıb isə yalnız həmin günü göstərir; yenidən genişləndirmək üçün Bütün səyahəti göstər var.',
|
||||
'Gün açıq olduqda planlaşdırılmamış sətrin sonundakı + Gün məkanı həmin günə əlavə edir, Planlaşdırılıb isə yalnız həmin günü göstərir; yenidən genişləndirmək üçün Bütün səyahəti göstər var.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Filtr sətrinin sağ ucundakı işarə seçim rejimini başladır: bir neçə sətrə birdən yeni kateqoriya verilir, onlar kolleksiyaya əlavə edilir və ya silinir.',
|
||||
'Axtarışın yanındakı işarə seçim rejimini başladır: sütunun aşağısındakı paneldən bir neçə sətrə birdən yeni kateqoriya verilir, onlar kolleksiyaya əlavə edilir, ziyarət edilib kimi işarələnir və ya silinir.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Məkan yaradın',
|
||||
'help.guide.create-place.goal': 'Məkanı və ya fəaliyyəti planın bilməli olduğu hər şeylə birlikdə əl ilə əlavə edin.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Məkanlar sütununun yuxarısındakı Məkan/Fəaliyyət əlavə et düyməsinə klikləyin (gün açıq olduqda Yeni məkan). Forma açılır.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Yuxarıdakı Məkanları axtarın… sahəsinə məkanı yazın və nəticəni seçin. Ad, Ünvan, Enlik, Uzunluq və Veb-sayt doldurulur, soldakı Məkan təfərrüatları isə onun üçün şəkilləri, iş saatlarını və təsviri göstərir. Google açarı olan TREK-də siyahının altında Axtardığınız məkan deyil? Əvəzində Google-da axtarın yer alır və eyni axtarışı Google vasitəsilə aparır.',
|
||||
'Məkanları axtarın… sahəsinə məkanı yazın və nəticəni seçin. Dialoqun başlığındakı ad, Ünvan, Enlik, Uzunluq və Veb-sayt doldurulur, soldakı Məkan təfərrüatları isə onun üçün şəkilləri, iş saatlarını və təsviri göstərir. Google açarı olan TREK-də siyahının altında Axtardığınız məkan deyil? Əvəzində Google-da axtarın yer alır və eyni axtarışı Google vasitəsilə aparır. Sağdakı Saxlanılan məkanlar kolleksiyalarınızın məkanlarını eyni şəkildə təklif edir.',
|
||||
'help.guide.create-place.step.3':
|
||||
'Məkan təfərrüatlarında Şəkil seç altındakı şəkilə klikləmək onu məkanın şəkli edir; Bu mətndən istifadə et təsviri formaya köçürür.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Sahələri yoxlayın: Ad məcburidir; Təsvir və Qeydlər sizin ixtiyarınızdadır; Ünvan, Enlik və Uzunluq axtarışdan gəlir və ya əl ilə yazılır; Kateqoriya səyahətin kateqoriyalarından birini seçir, yanındakı + isə elə orada yenisini yaradır; Veb-sayt linki qəbul edir.',
|
||||
'Formada nə olduğunu yoxlayın: ad dialoqun başlığında yerləşir və yeganə məcburi sahədir; onun altındakı Kateqoriya nişanı səyahətin kateqoriyalarından birini seçir, yanındakı + isə elə orada yenisini yaradır. Ünvan, Enlik və Uzunluq axtarışdan gəlir və ya əl ilə yazılır; Təsvir və Qeydlər sizin ixtiyarınızdadır; Veb-sayt linki qəbul edir.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Əlavə et düyməsinə klikləyin. Səyahətdə eyni adlı məkan artıq varsa, forma bunu bildirir və düymə Yenə də əlavə et olur.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1917,7 +1918,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Günə əlavə et Yeni məkan ilə eyni formanı açır, sadəcə Əlavə et düyməsinə kliklədiyiniz an məkan açıq günə düşür.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Artıq mövcud olan məkan sətrinin sonundakı + ilə və ya sağ klik, Günə əlavə et ilə açıq günə əlavə edilir.',
|
||||
'Artıq mövcud olan məkan sətrinin sonundakı + Gün ilə və ya sağ klik, + Gün ilə açıq günə əlavə edilir.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Əksinə də işləyir, həm də əvvəlcə günü açmadan: məkanın sətrini sütundan çəkib gün kartının üzərinə buraxın. İki dayanacaq arasına buraxılsa, məhz oraya düşür.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1929,12 +1930,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Siyahıda məkan tapın',
|
||||
'help.guide.filter-places.goal': 'Sütunu axtardığınız məkanlara qədər daraldın.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Yuxarıdakı açılan siyahı Hamısı, Planlaşdırılmayıb (hələ heç bir gündə deyil), Planlaşdırılıb (gündədir) və İzlər (idxal edilmiş GPX izləri) arasında keçid edir, hər birinin yanında sayı göstərilir.',
|
||||
'help.guide.filter-places.step.2': 'Məkanları axtarın… sahəsinə yazın; siz yazdıqca siyahı daralır.',
|
||||
'Axtarışın altındakı Göstər açılan siyahısı Hamısı, Planlaşdırılmayıb (hələ heç bir gündə deyil), Planlaşdırılıb (gündədir) və İzlər (idxal edilmiş GPX izləri) arasında keçid edir, hər birinin yanında sayı göstərilir.',
|
||||
'help.guide.filter-places.step.2': 'Yuxarıdakı Axtar sahəsinə yazın; siz yazdıqca siyahı daralır.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Bütün kateqoriyalar bir və ya bir neçə kateqoriyanı, o cümlədən Kateqoriya yoxdur seçimini işarələmək üçün siyahı açır; onun aşağısındakı Filtri təmizlə onu sıfırlayır.',
|
||||
'Göstər siyahısının yanındakı etiket düyməsi kateqoriyaları sıralayır: bir və ya bir neçəsini işarələyin, o cümlədən Kateqoriya yoxdur. Düymə işarələnənləri sayır, siyahının aşağısındakı Filtri təmizlə isə hamısını ləğv edir.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Yanındakı ulduz minimum reytinq təyin edir: 5+, 4+ və s. yalnız ən azı o qədər qiymətləndirdiyiniz məkanları göstərir.',
|
||||
'Onun yanındakı ulduz minimum reytinq təyin edir: 5+, 4+ və s. yalnız ən azı o qədər qiymətləndirdiyiniz məkanları göstərir.',
|
||||
'help.guide.filter-places.result':
|
||||
'Sətirlərin üstündəki say neçə məkanın uyğun gəldiyini göstərir; filtrlər birlikdə tətbiq olunur.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
@@ -1947,7 +1948,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Sətrə sağ klikləyib Redaktə et seçin və ya məkanı açıb təfərrüatlarında Redaktə et düyməsinə klikləyin.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Lazım olanı dəyişin: Ad, Təsvir, Qeydlər, Ünvan, Enlik və Uzunluq, Kateqoriya, Veb-sayt. Gündən açıldıqda formada həmin gün üçün Bu gün üçün qeydlər, Başlanğıc və Son sahələri də olur.',
|
||||
'Lazım olanı dəyişin: dialoqun başlığındakı ad və Kateqoriya nişanı, Ünvan, Enlik və Uzunluq, Təsvir, Qeydlər və Veb-sayt. Gündən açıldıqda formada Başlanğıc və Son, həmçinin Bu gün üçün qeydlər də olur.',
|
||||
'help.guide.edit-place.step.3': 'Yenilə düyməsinə klikləyin.',
|
||||
'help.guide.edit-place.result':
|
||||
'Dəyişiklik məkanın göründüyü hər yerdə tətbiq olunur: siyahıda, xəritədə və onun olduğu hər gündə.',
|
||||
@@ -1961,22 +1962,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Sətrə sağ klikləyib Sil seçin və ya məkanın təfərrüatlarında Sil düyməsinə klikləyin.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Təsdiqləyin. Məkanda gecələmə rezerv edilibsə və ya ona rezervasiya bağlıdırsa, sual onunla birlikdə nəyin silinəcəyini bildirir.',
|
||||
'Sualda Sil düyməsinə klikləyin. Məkanda gecələmə rezerv edilibsə və ya ona rezervasiya bağlıdırsa, sual onunla birlikdə nəyin silinəcəyini bildirir.',
|
||||
'help.guide.delete-place.result':
|
||||
'Məkan siyahıdan, xəritədən və bütün günlərdən yox olur; günlərin üstündəki alətlər panelində Geri qaytar onu geri gətirir.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Məkanı yalnız bir gündən çıxarmaq üçün isə həmin dayanacaqda Gündən çıxar istifadə edin.',
|
||||
'help.guide.delete-place.tip.2': 'Bir neçə məkan birdən: filtrlərin yanındakı işarə seçim rejimini başladır.',
|
||||
'help.guide.delete-place.tip.2': 'Bir neçə məkan birdən: axtarışın yanındakı işarə seçim rejimini başladır.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Bir neçə məkanı birdən dəyişin və ya silin',
|
||||
'help.guide.select-places.goal': 'Siyahını məkan-məkan deyil, bir dəfəyə səliqəyə salın.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Filtr sətrinin sağ ucundakı işarəyə klikləyin. Sətirlərdə qeyd qutuları yaranır və əməliyyatlar paneli görünür.',
|
||||
'Axtarış sahəsinin yanındakı işarəyə klikləyin. Sətirlərdə dairəvi qeyd qutuları yaranır, sütunun aşağısında isə əməliyyatlar paneli qalxır.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Sətirləri işarələyin və ya paneldə Hamısını seç düyməsinə klikləyin; panel seçilənləri sayır.',
|
||||
'İşarələmək üçün sətirlərə klikləyin. Paneldəki ikiqat işarə olan Hamısını seç filtrlərin saxladığı bütün sətirləri götürür.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Kateqoriyanı dəyiş hamısına bir kateqoriya verir; Kolleksiyada yadda saxla onları kolleksiyalarınızdan birinə kopyalayır; Seçilənləri sil təsdiqdən sonra onları silir.',
|
||||
'help.guide.select-places.step.4': 'Seçim rejimindən çıxmaq üçün işarəyə yenidən klikləyin.',
|
||||
'Panel işarələnmiş məkanları sayır. Kateqoriyanı dəyiş hamısına bir kateqoriya verir; Kolleksiyada yadda saxla onları kolleksiyalarınızdan birinə kopyalayır; Seçilənləri sil təsdiqdən sonra onları silir.',
|
||||
'help.guide.select-places.step.4': 'Panelin sonundakı X, yəni Hazır, seçim rejimindən çıxır.',
|
||||
'help.guide.select-places.result':
|
||||
'Dəyişiklik hər seçilmiş məkana tətbiq olunur; silməni günlərin üstündəki alətlər panelindən geri qaytarmaq olar.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1987,7 +1988,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.title': 'GPX, KML və ya KMZ faylından məkanları idxal edin',
|
||||
'help.guide.import-places-file.goal': 'Google My Maps, Google Earth və ya GPS izləyicisinin ixrac etdiyini gətirin.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Faylı idxal et düyməsinə klikləyin və ya faylı məkanlar sütununun istənilən yerinə atın.',
|
||||
'Əlavə et düyməsinin yanındakı idxal düyməsinə klikləyin və Faylı idxal et seçin və ya faylı məkanlar sütununun istənilən yerinə atın.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Faylı seçin və ya qutuya sürüşdürün. GPX üçün nəyi idxal edəcəyinizi işarələyin: Yol nöqtələri, Marşrutlar, İzlər (marşrut xətti ilə); KML və KMZ üçün isə Nöqtələr (Placemarks) və Yollar (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -2003,7 +2004,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-list.title': 'Paylaşılmış Google Maps və ya Naver Maps siyahısını idxal edin',
|
||||
'help.guide.import-places-list.goal': 'Paylaşılmış siyahı linkini məkanlara çevirin.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Siyahı idxalı düyməsinə klikləyin və Google siyahısı və ya Naver siyahısı seçin.',
|
||||
'Əlavə et düyməsinin yanındakı idxal düyməsinə klikləyin və Google siyahısı seçin. Naver siyahıları da aktiv olduqda bu bənd Siyahı idxalı adlanır və dialoq ikisindən hansını istədiyinizi soruşur.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Siyahının paylaşılmış linkini yapışdırın. Google Maps istiqamət linki də işləyir: onun dayanacaqları sürüş ardıcıllığı ilə məkanlara çevrilir.',
|
||||
'help.guide.import-places-list.step.3': 'İdxal et düyməsinə klikləyin.',
|
||||
@@ -2020,24 +2021,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Yuxarıdakı alətlər paneli: İxrac et (PDF, təqvim, GPX), Bütün günləri genişləndir / Bütün günləri yığ, geri qaytarma oxu, Günlərin sırasını dəyiş və Bütün rezervasiya marşrutlarını göstər.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Gün kartı: başlıqda nömrə, hava, ad, tarix və günün xərci; günü açmaq üçün başlığa klikləyin, ox işarəsi onu yığır. İctimai nəqliyyat, Nəqliyyat əlavə et və Qeyd əlavə et də başlıqda yerləşir.',
|
||||
'Gün kartı: gün nömrəsi və hava proqnozu olan kiçik blok, ad və tarix, həmçinin rezerv edilmiş gecə, icarə avtomobili və günün xərci üçün nişanlar. Günü açmaq üçün başlığa klikləyin, ox işarəsi onu yığır, + isə menyu açır: Bu günə məkan əlavə et, Yaşayış yeri əlavə et, Nəqliyyat əlavə et, İctimai nəqliyyat və Qeyd əlavə et.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Günün içində: ardıcıl dayanacaqlar, hər biri şəkil, ad, vaxt və şəkil üzərində kilidlə; qeydlər; günə aid rezervasiyalar; dayanacaqlar arasında isə hər hissənin yol vaxtı.',
|
||||
'Günün içində: ardıcıl dayanacaqlar, hər biri şəkil, ad, vaxt, şəkil üzərində kilid və ona bağlanmış rezervasiyalarla; qeydlər; növünə görə rənglənmiş günün rezervasiyaları və nəqliyyatı; dayanacaqlar arasında isə hər hissənin yol vaxtı. Hər sətrin üç nöqtəli menyusu var, sağ klikin açdığı menyunun eynisi.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Dayanacaqların altında marşrut paneli: Marşrut günü xəritədə çəkir, Optimallaşdır dayanacaqları sıralayır, Avtomobillə / Piyada günün hərəkət rejimini təyin edir, Google Maps-də aç və CoMaps-də aç isə günü ora ötürür.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Məkanlar günə məkanlar sütunundan sətri sürüşdürməklə, həmin sətirdəki + ilə, boş gündə Bu günə məkan əlavə et ilə və ya məkanın təfərrüatlarından əlavə edilir.',
|
||||
'Məkanlar günə məkanlar sütunundan sətri sürüşdürməklə, həmin sətirdəki + Gün ilə, günün + menyusunda və ya boş gündə Bu günə məkan əlavə et ilə, yaxud məkanın təfərrüatlarından əlavə edilir.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Aşağıdakı Ümumi xərc qiyməti olan hər dayanacağı və rezervasiyanı səyahətin valyutasında toplayır.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Günü oxuyun',
|
||||
'help.guide.read-day-plan.goal': 'Nəyisə dəyişməzdən əvvəl gün kartının hər hissəsinin nə bildirdiyini öyrənin.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Başlıq: günün nömrəsi, gün üçün hava proqnozu, Gün 1 və ya ona verdiyiniz ad, tarix və günün xərci. Günü açmaq üçün başlığa klikləyin (onun təfərrüatlar paneli xəritənin üzərində açılır); sağdakı ox işarəsi kartı yığır və açır.',
|
||||
'Başlıq: gün nömrəsi və hava proqnozu olan kiçik blok, sonra 1-ci gün və ya ona verdiyiniz ad, tarix, həmçinin rezerv edilmiş gecə (giriş və ya çıxış), icarə avtomobili və günün xərci üçün nişanlar. Günü açmaq üçün başlığa klikləyin (onun təfərrüatlar paneli xəritənin üzərində açılır); sağdakı + məkan, yaşayış yeri, nəqliyyat, ictimai nəqliyyat əlaqəsi və ya qeyd əlavə edir, ox işarəsi isə kartı yığır.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Dayanacaq: soldakı tutacaq onu sürüşdürür, şəkildə marşrut optimallaşdırması üçün kilid var, sonra ad, təsvir və təyin edilibsə, bu gün üçün qeydlər. Dayanacağın Başlanğıc və Son vaxtı olduqda vaxt nişanı onları göstərir; sağ ucunda görünən oxlar onu yuxarı və ya aşağı daşıyır.',
|
||||
'Dayanacaq: soldakı tutacaq onu sürüşdürür, şəkildə marşrut optimallaşdırması üçün kilid var, sonra ad, dayanacağın Başlanğıc və Son vaxtı olduqda vaxt nişanı, təsvir və təyin edilibsə, bu gün üçün qeydlər. Sağ ucundakı oxlar onu yuxarı və ya aşağı daşıyır, üç nöqtə isə menyusunu açır.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Gündəki rezervasiya: dayanacaqdakı rezervasiya dayanacağı Rezervasiya təsdiqlənib və ya Rezervasiya gözləyir kimi işarələyir, nəqliyyat isə vaxtı və marşrutu ilə Yola düşmə və ya Çatma kimi göstərilir, yanında həmin marşrutu xəritədə çəkən kiçik keçirici olur.',
|
||||
'Dayanacaqdakı rezervasiya onun üzərində Rezervasiya nişanı kimi durur: təsdiqlənibsə yaşıl, gözləyirsə kəhrəba rəngində, vaxtı və daşıyıcısı ilə; rezervasiyanı açmaq üçün nişana klikləyin, yanındakı marşrut düyməsi isə onun marşrutunu çəkir. Nəqliyyat növünə görə rənglənmiş ayrıca sətirdir, Yola düşmə və ya Çatma və vaxtı ilə. Rezervasiyaya klikləyin, təfərrüatları açılır; oradakı Redaktə et onu dəyişir.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'İki dayanacaq arasındakı birləşdirici günün hərəkət rejimində həmin hissənin nə qədər vaxt apardığını və məsafəsini göstərir; yalnız həmin hissənin rejimini dəyişmək üçün ona klikləyin.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2045,7 +2046,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Kartdakı hər simvolun mənası var; aşağıdakı bələdçilər onların hər birini necə dəyişməyi göstərir.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Menyusunu açmaq üçün dayanacağa sağ klikləyin: Redaktə et, Gündən çıxar, Veb-saytı aç, naviqasiya tətbiqləri (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Kolleksiyada yadda saxla, Sil.',
|
||||
'Menyusunu açmaq üçün dayanacağa sağ klikləyin və ya üç nöqtəsinə klikləyin: Redaktə et, Gündən çıxar, Veb-saytı aç, naviqasiya tətbiqləri (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Kolleksiyada yadda saxla, Sil.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Dayanacağın üzərinə gəldikdə onun sonunda Rezervasiya əlavə et görünür: orada yaradılan rezervasiya bu gündəki bu dayanacağa bağlanır.',
|
||||
// place-onto-day
|
||||
@@ -2054,9 +2055,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Məkanlar sütunundan sətri gün kartının üzərinə sürüşdürün. Məhz oraya qoymaq üçün iki dayanacaq arasına, sona əlavə etmək üçün isə kartın istənilən yerinə buraxın.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Sürüşdürmədən: başlığına klikləyərək günü açın, sonra məkanın sətrinin sonundakı + düyməsinə klikləyin və ya sətrə sağ klikləyib Günə əlavə et seçin.',
|
||||
'Sürüşdürmədən: başlığına klikləyərək günü açın, sonra məkanın sətrinin sonundakı + Gün düyməsinə klikləyin və ya sətrə sağ klikləyib + Gün seçin.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Boş gündə Bu günə məkan əlavə et məkan formasını açır və yeni məkan dərhal günə düşür.',
|
||||
'Günün + menyusunda və ya boş gündə olan Bu günə məkan əlavə et məkan formasını açır və yeni məkan dərhal günə düşür.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Məkanın təfərrüatlarında Günə əlavə et hansı gün olduğunu soruşur; günü başlığından açdıqda isə məkanlar sütunundakı Günə əlavə et açıq gündə yeni məkan yaradır.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2085,7 +2086,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Dayanacağa vaxt təyin edin',
|
||||
'help.guide.set-stop-times.goal': 'Dayanacağın nə vaxt başlayıb bitdiyini təyin edin ki, gün cədvəl kimi oxunsun.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Dayanacağa sağ klikləyib Redaktə et seçin. Gündən açıldıqda formanın aşağısında Başlanğıc və Son olur.',
|
||||
'Dayanacağa sağ klikləyin və ya üç nöqtəsinə klikləyin, sonra Redaktə et seçin. Gündən açıldıqda formada həmin gün üçün Başlanğıc və Son olur, məkan sahəsinin düz altında.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Başlanğıc və istəsəniz Son daxil edin. Vaxt üst-üstə düşür: günün başqa vaxtlı dayanacağı ilə üst-üstə düşmə barədə xəbərdarlıq edir; Başlanğıcdan əvvəl olan Son Yenilə düyməsini bloklayır.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2124,13 +2125,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Günə qeyd əlavə edin',
|
||||
'help.guide.day-note.goal': 'Xatırlatmanı, bilet nömrəsini və ya B planını birbaşa gündə saxlayın.',
|
||||
'help.guide.day-note.step.1': 'Günün başlığında Qeyd əlavə et düyməsinə klikləyin.',
|
||||
'help.guide.day-note.step.1': 'Günün başlığındakı + düyməsinə klikləyin və Qeyd əlavə et seçin.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Qeyd altında ona ad verin (gün kartında məhz o göstərilir), qalanını isə Günlük qeyd altında yazın. Üstündəki alətlər paneli mətni formatlayır (qalın, siyahılar, linklər, sitatlar), soldakı Önizləmə isə alınacaq kartı göstərir.',
|
||||
'Qeydin adını dialoqun başlığında, Qeyd yazılan yerə yazın; gün kartında məhz o göstərilir. Qalanını Günlük qeyd altında yazın: üstündəki alətlər paneli mətni formatlayır (qalın, siyahılar, linklər, sitatlar), soldakı Önizləmə isə alınacaq sətri göstərir.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Qeyd dayanacaqlardan seçilsin deyə İkon və Rəng seçin, sonra Əlavə et düyməsinə klikləyin.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Qeyd gündə dayanacaq kimi yerləşir: onu yerinə sürüşdürün, Redaktə et və Sil üçün ona sağ klikləyin.',
|
||||
'Qeyd gündə dayanacaq kimi yerləşir: onu yerinə sürüşdürün, Redaktə et və Sil üçün isə ona sağ klikləyin və ya üç nöqtəsindən istifadə edin.',
|
||||
'help.guide.day-note.result':
|
||||
'Qeyd günün bir hissəsidir, PDF-də də; vaxtlı qeyd vaxtlı dayanacaqlarla birlikdə sıralanır.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2181,15 +2182,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Rezervasiya yarandıqdan sonra harada göründüyünü və hansı ekranda yaradıldığını bilin.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Nəqliyyat (uçuş, qatar, bərə, avtobus, avtomobil) yola düşdüyü gündə Yola düşmə, çatdığı gündə isə Çatma kimi, vaxtı və marşrutu ilə göstərilir; bir neçə günlük nəqliyyat aradakı günləri də əhatə edir.',
|
||||
'Nəqliyyat (uçuş, qatar, bərə, avtobus, avtomobil) növünə görə rənglənmiş sətirdir: yola düşdüyü gündə Yola düşmə, çatdığı gündə Çatma, vaxtı və marşrutu ilə; bir neçə günlük nəqliyyat aradakı günləri də əhatə edir. Sətrə klikləyin, rezervasiya açılır.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Dayanacağa bağlı rezervasiya (restoran, tur) həmin dayanacağı Rezervasiya təsdiqlənib və ya Rezervasiya gözləyir kimi işarələyir; günü olan, lakin dayanacağı olmayan rezervasiya gündə ayrıca sətirdir.',
|
||||
'Dayanacağa bağlı rezervasiya (restoran, tur) həmin dayanacaqda Rezervasiya nişanıdır: təsdiqlənibsə yaşıl, gözləyirsə kəhrəba rəngində, vaxtı ilə; günü olan, lakin dayanacağı olmayan rezervasiya gündə ayrıca sətirdir.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Oteldə gecələmə yaşayış yeridir: o, girişdən çıxışa qədər günün təfərrüatlar panelində Yaşayış yeri altında yer alır və həmin günlərin hər birinin marşrutu oradan başlayır.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Xəritədə nəqliyyat sətrindəki keçirici onun marşrutunu çəkir; alətlər panelindəki Bütün rezervasiya marşrutlarını göstər isə hamısını çəkir.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Yaratmaq: üzərinə gəlinmiş dayanacaqda Rezervasiya əlavə et, gün başlığında Nəqliyyat əlavə et və İctimai nəqliyyat, idxal və fayllarla tam siyahı üçün isə Rezervasiyalar və Nəqliyyat tabları.',
|
||||
'Yaratmaq: üzərinə gəlinmiş dayanacaqda Rezervasiya əlavə et, günün + menyusunda Nəqliyyat əlavə et və İctimai nəqliyyat, idxal və fayllarla tam siyahı üçün isə Rezervasiyalar və Nəqliyyat tabları.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Bir rezervasiya, plandakı bir yer; tablar eyni rezervasiyaları siyahı kimi göstərir.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2220,24 +2221,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Məkanlar sütununda sətrə, gündəki dayanacağa və ya xəritədəki markerə klikləyin, kart xəritənin üzərində açılır. Onu gün daxilində seçmək karta hansı dayanacağı nəzərdə tutduğunuzu bildirir və dayanacağın iştirakçılarını və rezervasiyasını da məhz bu gətirir.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Başlıq hissəsində dairəvi şəkil, ad, kateqoriya, ünvan və koordinatlar var. Öz şəklinizdən istifadə etmək üçün şəklə klikləyin, məkanın adını yerindəcə dəyişmək üçün ada iki dəfə klikləyin, sağdakı X isə kartı bağlayır.',
|
||||
'Başlıq hissəsində dairəvi şəkil, ad, bir sətirdə ünvan və məlum olanlar üçün nişanlar var: açıq və ya bağlı, kateqoriya, qiymət, telefon nömrəsi və koordinatlar. Öz şəklinizdən istifadə etmək üçün şəklə klikləyin, məkanın adını yerindəcə dəyişmək üçün ada iki dəfə klikləyin, sağdakı X isə kartı bağlayır.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Onun altında: varsa qiymət, hər səyahətçinin məkana verdiyi ulduzlar, təsvir və qeydlər, dayanacaqda varsa isə Bu gün üçün qeydlər.',
|
||||
'Onun altında: hər səyahətçinin məkana verdiyi ulduzlar, təsvir və qeydlər, dayanacaqda varsa isə Bu gün üçün qeydlər.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Sonra aid olduğu qədər İş saatları, Trekin rəngi, Trek statistikası və Fayllar gəlir. Fayllar qovluqlarınızdan istənilən faylı götürür və bu dayanacağın rezervasiyasına bağlı olanları da sadalayır.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Aşağıdakı sətir: gün açıq olduqda Günə əlavə et və ya Gündən çıxar, sonra Kolleksiyada yadda saxla, Naviqasiya, Veb-saytı aç, Redaktə et və Sil.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Axtarışdan seçilmiş məkan TREK indeksinin və ya OpenStreetMap-in onun haqqında bildiklərini daşıyır: şəklin ətrafında məkanın öz yerli vaxtına görə yaşıl Açıq və ya qırmızı Bağlanıb halqası, ulduzların altında telefon nömrəsi, daha aşağıda İş saatları (sətirdə günün saatları, bir klikdə isə bütün həftə) və Veb-saytı aç arxasında onun veb-saytı. Google reytinqi yalnız Google açarı olan TREK-də Google vasitəsilə tapılmış məkanda göstərilir.',
|
||||
'Axtarışdan seçilmiş məkan TREK indeksinin və ya OpenStreetMap-in onun haqqında bildiklərini daşıyır: başlığın nişanları arasında Açıqdır və ya Bağlıdır, şəklin ətrafında məkanın öz yerli vaxtına görə yaşıl və ya qırmızı halqa ilə, telefon nömrəsi də nişan kimi, daha aşağıda İş saatları (sətirdə günün saatları, bir klikdə isə bütün həftə) və Veb-saytı aç arxasında onun veb-saytı. Google reytinqi yalnız Google açarı olan TREK-də Google vasitəsilə tapılmış məkanda göstərilir.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Kart məkan haqqında nə deyir',
|
||||
'help.guide.read-place.goal': 'Səyahətin bir məkan haqqında bildiyi hər şeyi bir kartda oxuyun.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Günlər sütununda oxumaq istədiyiniz dayanacağa klikləyin. Kart xəritənin üzərində açılır və dayanacaq öz günündə işarələnmiş qalır.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Başlıq: dairəvi şəkil, ad, ünvan və dəqiq koordinatlar. TREK məkanın iş saatlarını bildikdə şəklin ətrafındakı Açıq yazılı yaşıl və ya Bağlanıb yazılı qırmızı halqa məkanın öz yerli vaxtına görə hazırda açıq olub-olmadığını göstərir. Sağdakı X kartı yenidən bağlayır.',
|
||||
'Başlıq: dairəvi şəkil, ad və bir sətirdə ünvan; onun ipucunda tam ünvan var. Altındakı nişanlar məkanın öz yerli vaxtına görə hazırda Açıqdır və ya Bağlıdır deyir, şəklin ətrafında uyğun yaşıl və ya qırmızı halqa ilə, həmçinin telefon nömrəsini (klik onu telefon tətbiqinizə ötürür) və dəqiq koordinatları daşıyır. Sağdakı X kartı yenidən bağlayır.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Onun altında hər səyahətçinin məkana verdiyi ulduzlar, orta qiymət və neçə nəfərin səs verdiyi. Hələ heç kim səs verməyibsə, Hələ qiymətləndirilməyib yazılır. Dərhal aşağıda, məkanın telefon nömrəsi varsa, o göstərilir: ona klikləmək nömrəni telefon tətbiqinizə ötürür.',
|
||||
'Başlığın altında ilk olaraq Reytinq gəlir: hər səyahətçinin məkana verdiyi ulduzlar, orta qiymət və neçə nəfərin səs verdiyi. Hələ heç kim səs verməyibsə, Hələ qiymətləndirilməyib yazılır.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Sonra təsvir, onun altında isə qeydlər. Hər ikisi məkanın formasındakı mətndir, formatlanmış şəkildə: siyahılar, linklər və qalın mətn işləyir.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2332,18 +2333,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'Dayanacaqdakı rezervasiya',
|
||||
'help.guide.place-booking.goal': 'Dayanacağa aid rezervasiyanı oxuyun, onu açın və ona yenisini bağlayın.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Rezervasiyanın aid olduğu dayanacağı açın. Kartda Təsdiqlənib və ya Gözləyir yazısı və rezervasiyanın adı olan zolaq görünür.',
|
||||
'Rezervasiyanın aid olduğu dayanacağı açın. Kart onu Rezervasiyalar altında rezervasiyanın adı və Təsdiqlənib və ya Gözləyir yazısı ilə ayrıca kiçik kart kimi göstərir.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Zolaqda Tarix, Vaxt və Rezervasiya kodu, həmçinin rezervasiyanın bütün qeydləri yer alır.',
|
||||
'help.guide.place-booking.step.3': 'Zolağa klikləyin. Rezervasiya xəritənin üzərində açılır.',
|
||||
'Rezervasiya kartında Tarix, Vaxt və Rezervasiya kodu, həmçinin rezervasiyanın bütün qeydləri yer alır.',
|
||||
'help.guide.place-booking.step.3': 'Rezervasiya kartına klikləyin. Rezervasiya xəritənin üzərində açılır.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Rezervasiyanın aşağısındakı Redaktə et onun öz formasını açır. Rezervasiyanı dayanacağa bağlayan oradakı Günlük planla əlaqələndir sahəsidir və burada artıq bu dayanacaq göstərilir. Formanı yenidən bağlayın.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Dayanacaq üçün yeni rezervasiya günlər sütunundan başlayır: kursoru dayanacağın üzərinə gətirin və sonundakı + düyməsinə klikləyin. Forma artıq ona bağlanmış Yeni rezervasiya kimi açılır.',
|
||||
'Dayanacaq üçün yeni rezervasiya günlər sütunundan başlayır: kursoru dayanacağın üzərinə gətirin və sonundakı bilet işarəsinə, yəni Rezervasiya əlavə et düyməsinə klikləyin. Forma artıq ona bağlanmış Yeni rezervasiya kimi açılır.',
|
||||
'help.guide.place-booking.result':
|
||||
'Rezervasiya dayanacağa bağlıdır: kartda görünür, gündə yer alır, faylları isə burada da Fayllar altında sıralanır.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Zolaq yalnız rezervasiyanın bağlandığı dayanacaqda görünür. Dayanacağı olmayan rezervasiya Rezervasiya bölməsində qalır.',
|
||||
'Rezervasiya kartı yalnız rezervasiyanın bağlandığı dayanacaqda görünür. Dayanacağı olmayan rezervasiya Rezervasiya bölməsində qalır.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Bir neçə rezervasiya eyni dayanacağa aid ola bilər: nahar və eyni qapıdan başlayan tur.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2428,7 +2429,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Yuxarıda günün havası göstərilir. Proqnoz sətri onun hansı yer üçün olduğunu bildirir: günün ilk dayanacağı və ya oyandığınız otel.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Rezervasiyalar həmin günün rezervasiyalarını göstərir, hər birinin növü, aid olduğu dayanacaq və vaxtları ilə. Yaşıl təsdiqlənib, kəhrəba rəngi isə hələ gözləyir deməkdir; bu yalnız göstəricidir, rezervasiyalar Rezervasiyalar bölməsində dəyişdirilir.',
|
||||
'Rezervasiyalar həmin günün rezervasiyalarını göstərir, hər birinin növü, aid olduğu dayanacaq və vaxtları ilə. Yaşıl təsdiqlənib, kəhrəba rəngi isə hələ gözləyir deməkdir; sətrə klikləmək rezervasiyanı açır.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Yaşayış yeri bu günə düşən bütün rezerv edilmiş gecələri göstərir: müvafiq günlərdə Giriş və Çıxış, giriş vaxt aralığı, çıxış vaxtı və təsdiq nömrəsi ilə.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2461,7 +2462,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Böyük rəqəm günün temperaturudur, yanında ən aşağı və ən yüksək temperatur, həmçinin havanın sözlə təsviri.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Altındakı kiçik bloklar: yağış ehtimalı, yağıntının miqdarı, ən güclü külək, gündoğumu və günbatımı.',
|
||||
'Sağındakı nişanlar: yağış ehtimalı, yağıntının miqdarı, ən güclü külək, gündoğumu və günbatımı.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Aşağıda gün saatbasaat, hər iki saatdan bir göstərilir: vaxt, ikon, temperatur və yağış ehtimalı. 50 faizdən yuxarı olan saat mavi rənglə vurğulanır.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2495,18 +2496,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.add-accommodation.step.2':
|
||||
'Gəldiyiniz günü açın və Yaşayış yeri altında Yaşayış yeri əlavə et düyməsinə klikləyin.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Günlərə tətbiq et qalmanın hansı gecələri əhatə etdiyini göstərir: solda giriş günü, sağda çıxış günü. Hamısı bütün səyahəti əhatə edir.',
|
||||
'Günlərə tətbiq et qalmanın hansı gecələri əhatə etdiyini göstərir: Başlanğıc giriş günü, Son çıxış günüdür, Hamısı isə bütün səyahəti əhatə edir. Dialoqun başlığı müddəti və gecələrin sayını göstərir.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Giriş, Qədər və Çıxış sahələrini doldurun, rezervasiya nömrəsini Təsdiq sahəsinə yazın. Dördü də boş qala bilər.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Obyekti səyahətin məkanlarından seçin. Siyahının üstündəki filtr düymələri onu bir kateqoriya ilə məhdudlaşdırır.',
|
||||
'Obyekti səyahətin məkanlarından seçin. Siyahının üstündəki Kateqoriya onu bir kateqoriya ilə məhdudlaşdırır.',
|
||||
'help.guide.add-accommodation.step.6': 'Yadda saxla düyməsinə klikləyin.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Qalma əhatə etdiyi hər gündə görünür: ilk gündə Giriş, sonuncuda Çıxış. Obyekt giriş günündə dayanacağa çevrilir, beləliklə xəritə ora gedən yolu çəkir və Rezervasiyalar altında Otel rezervasiyası yaranır.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Seçici gəldiyiniz gündə, çıxış isə növbəti gündə açılır; yadda saxlamazdan əvvəl hər ikisini dəyişmək olar.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Oteli yaradarkən ona Otel kateqoriyasını verin, siyahının üstündəki filtr düymələri bir kliklə onu otellərinizlə məhdudlaşdıracaq.',
|
||||
'Oteli yaradarkən ona Otel kateqoriyasını verin, siyahının üstündəki Kateqoriya bir kliklə onu otellərinizlə məhdudlaşdıracaq.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Vaxtların heç biri məcburi deyil: girişi və kodu olmayan qalma da öz gecələrini əhatə edir və marşrutunu çəkir.',
|
||||
// edit-accommodation
|
||||
@@ -2518,7 +2519,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Sağdakı karandaş qalmanı yenidən açır. Pəncərədə indi Yaşayış yerini redaktə et yazılır.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Sahələr sırasını düzəldin: Giriş, Qədər, Çıxış və Təsdiq. Yuxarıdakı günləri və aşağıdakı obyekti də burada dəyişmək olar.',
|
||||
'Giriş, Qədər, Çıxış və Təsdiq sahələrini düzəldin. Onların üstündəki günləri və aşağıdakı obyekti də burada dəyişmək olar.',
|
||||
'help.guide.edit-accommodation.step.4': 'Yadda saxla düyməsinə klikləyin.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'Karandaşın yanındakı X qalmanı bitirir. Heç nə soruşmur və ona aid Otel rezervasiyası da onunla birlikdə silinir.',
|
||||
@@ -2535,7 +2536,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Rezervasiyalar günün rezervasiyalarını göstərir: həmin tarixə düşənləri və dayanacaqlarından birinə bağlı olanları.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Sətir rezervasiyanın növünü, adını və dayanacağa aiddirsə, nöqtədən sonra həmin dayanacağı göstərir. Vaxtları sağ kənarda yerləşir.',
|
||||
'Sətir rezervasiyanın növünü, adını və dayanacağa aiddirsə, ondan sonra boz rəngdə həmin dayanacağı göstərir. Vaxtları sağ kənarda, status nöqtəsindən əvvəl yerləşir.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Rəng rezervasiyanın vəziyyətini bildirir: yaşıl sətir təsdiqlənib, kəhrəba rəngli sətir hələ gözləyir. Otellər bu siyahıda deyil, onların aşağıda öz bloku var.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Pagas por mim',
|
||||
'costs.filter.owed': 'Devem a mim',
|
||||
'costs.addExpense': 'Adicionar despesa',
|
||||
'costs.view.label': 'Visualização',
|
||||
'costs.view.list': 'Lista',
|
||||
'costs.view.table': 'Tabela',
|
||||
'costs.table.lockedPayer': 'Pago por alguém: altere o valor na despesa para que os saldos continuem corretos.',
|
||||
'costs.table.lockedCurrency': 'Lançado em {currency}: altere o valor na despesa.',
|
||||
'costs.table.summary': 'Resumo',
|
||||
'costs.table.byCategory': 'Categoria',
|
||||
'costs.table.byDate': 'Dia',
|
||||
'costs.table.byPayer': 'Pagador',
|
||||
'costs.table.byStatus': 'Status',
|
||||
'costs.table.noPayer': 'Sem pagador ainda',
|
||||
'costs.table.paid': 'Pago',
|
||||
'costs.table.open': 'Em aberto',
|
||||
'costs.editExpense': 'Editar despesa',
|
||||
'costs.noMatch': 'Nenhuma despesa corresponde à busca.',
|
||||
'costs.emptyText': 'Nenhuma despesa ainda. Adicione a primeira.',
|
||||
|
||||
+59
-57
@@ -1726,7 +1726,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Título, datas, capa e moeda são editados em Minhas viagens, com o lápis no cartão da viagem.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Os chevrons na borda interna de uma coluna a recolhem e o mapa ocupa o espaço; o divisor fino ao lado de uma coluna muda a largura dela.',
|
||||
'A lingueta na borda interna de uma coluna a recolhe e o mapa ocupa o espaço; o divisor fino ao lado de uma coluna muda a largura dela.',
|
||||
'help.ctx.trip.bullet.6': 'A seta de desfazer na barra de ferramentas dos dias reverte a última alteração no plano.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Adicionar um membro',
|
||||
@@ -1794,8 +1794,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Abrir espaço para o mapa',
|
||||
'help.guide.collapse-columns.goal': 'Recolha uma coluna ou dê mais largura a ela.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Clique no chevron na borda interna da coluna dos dias para recolhê-la; o mapa ocupa o espaço. A coluna dos lugares tem o mesmo chevron.',
|
||||
'help.guide.collapse-columns.step.2': 'Clique no chevron de novo para trazer a coluna de volta.',
|
||||
'Clique na lingueta na borda interna da coluna dos dias, a que tem o ícone de painel, para recolher a coluna; o mapa ocupa o espaço. A coluna dos lugares tem a mesma lingueta.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Uma coluna recolhida deixa um bloco no canto do mapa, Plano para os dias e Lugares para os lugares. Clique nele para trazer a coluna de volta.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Arraste o divisor fino entre uma coluna e o mapa para mudar a largura da coluna.',
|
||||
'help.guide.collapse-columns.result': 'As larguras são lembradas; as colunas voltam abertas na próxima visita.',
|
||||
@@ -1820,15 +1821,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Adicionar lugar/atividade no topo abre o formulário de um lugar que você digita ou busca. Enquanto um dia está aberto o botão diz Novo local, e Para o dia, ao lado, cria o lugar direto nesse dia.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importar arquivo aceita arquivos .gpx, .kml e .kmz; Importar lista aceita uma lista compartilhada do Google Maps ou do Naver Maps. Um arquivo também pode simplesmente ser solto sobre a coluna.',
|
||||
'O botão de importação ao lado oferece Importar arquivo, para arquivos .gpx, .kml e .kmz, e Lista Google (Importar lista quando as listas Naver também estão ativas) para uma lista compartilhada do Google Maps ou do Naver Maps. Um arquivo também pode simplesmente ser solto sobre a coluna.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'O menu suspenso alterna entre Todos, Não planejados, Planejados e, assim que uma trilha é importada, Trilhas; abaixo dele ficam a busca, o filtro de categoria e a estrela para uma avaliação mínima.',
|
||||
'Abaixo deles, a busca, com o tique que inicia uma seleção ao lado, e uma fileira de filtros: Mostrar alterna entre Todos, Não planejados, Planejados e, assim que uma trilha é importada, Trilhas, cada um com sua contagem; o botão de etiqueta filtra por categoria e a estrela por uma avaliação mínima.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Uma linha mostra imagem, nome e descrição ou endereço. Clique nela para ver os detalhes do lugar, arraste-a para um dia, ou clique com o botão direito para Editar, + Dia, Abrir site, Google Maps, Salvar na Coleção e Excluir.',
|
||||
'Uma linha mostra imagem, nome e descrição ou endereço. Clique nela para ver os detalhes do lugar, arraste-a para um dia, ou clique nela com o botão direito (ou nos três pontinhos dela) para Editar, + Dia, Abrir site, Google Maps, Salvar na Coleção e Excluir.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Com um dia aberto, um + no fim de uma linha não planejada põe o lugar nesse dia, e Planejados lista só esse dia, com Mostrar a viagem inteira para alargar de novo.',
|
||||
'Com um dia aberto, + Dia no fim de uma linha não planejada põe o lugar nesse dia, e Planejados lista só esse dia, com Mostrar a viagem inteira para alargar de novo.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'O tique na ponta direita da linha de filtros inicia uma seleção: várias linhas de uma vez recebem uma nova categoria, vão para uma coleção ou são excluídas.',
|
||||
'O tique ao lado da busca inicia uma seleção: pela barra no pé da coluna, várias linhas de uma vez recebem uma nova categoria, vão para uma coleção, são marcadas como visitadas ou são excluídas.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Criar um lugar',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1836,11 +1837,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Clique em Adicionar lugar/atividade no topo da coluna de lugares (Novo local enquanto um dia está aberto). O formulário abre.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Digite o lugar em Buscar lugares... no topo e escolha um resultado. Nome, Endereço, Latitude, Longitude e Site se preenchem, e Detalhes do lugar, à esquerda, mostra imagens, o horário de funcionamento e uma descrição sobre ele. Num TREK com chave do Google, Não é o lugar certo? Pesquisar no Google fica embaixo da lista e refaz a mesma busca pelo Google.',
|
||||
'Digite o lugar em Buscar lugares... e escolha um resultado. O nome no cabeçalho da janela, Endereço, Latitude, Longitude e Site se preenchem, e Detalhes do lugar, à esquerda, mostra imagens, o horário de funcionamento e uma descrição sobre ele. Num TREK com chave do Google, Não é o lugar certo? Pesquisar no Google fica embaixo da lista e refaz a mesma busca pelo Google. Lugares salvos, à direita, oferece os lugares das suas coleções do mesmo jeito.',
|
||||
'help.guide.create-place.step.3':
|
||||
'Em Detalhes do lugar, um clique numa imagem sob Escolher uma imagem a torna a imagem do lugar; Usar este texto leva a descrição para o formulário.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Confira os campos: Nome é obrigatório; Descrição e Notas são suas; Endereço, Latitude e Longitude vêm da busca ou são digitados; Categoria escolhe uma das categorias da viagem, e o + ao lado cria uma nova na hora; Site recebe o link.',
|
||||
'Confira o que o formulário traz: o nome fica no cabeçalho da janela e é o único campo obrigatório; o chip Categoria logo abaixo escolhe uma das categorias da viagem, e o + ao lado cria uma nova na hora. Endereço, Latitude e Longitude vêm da busca ou são digitados; Descrição e Notas são suas; Site recebe o link.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Clique em Adicionar. Se já houver um lugar com o mesmo nome na viagem, o formulário avisa e o botão vira Adicionar mesmo assim.',
|
||||
'help.guide.create-place.result': 'O lugar está na lista e no mapa, em Não planejados até ser posto em um dia.',
|
||||
@@ -1858,7 +1859,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Para o dia abre o mesmo formulário que Novo local, só que o lugar cai no dia aberto no momento em que você clica em Adicionar.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Um lugar que já existe vai para o dia aberto com o + no fim da linha dele, ou com o botão direito, + Dia.',
|
||||
'Um lugar que já existe vai para o dia aberto com + Dia no fim da linha dele, ou com o botão direito, + Dia.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'O caminho inverso também funciona, e sem abrir um dia antes: arraste a linha do lugar para fora da coluna e solte-a em um cartão de dia. Solto entre duas paradas, ele fica exatamente ali.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1870,12 +1871,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Achar um lugar na lista',
|
||||
'help.guide.filter-places.goal': 'Estreite a coluna até os lugares que você procura.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'O menu suspenso do topo alterna entre Todos, Não planejados (ainda em nenhum dia), Planejados (em um dia) e Trilhas (trilhas GPX importadas), cada um com sua contagem.',
|
||||
'help.guide.filter-places.step.2': 'Digite em Buscar lugares...; a lista estreita enquanto você digita.',
|
||||
'Mostrar, o menu suspenso abaixo da busca, alterna entre Todos, Não planejados (ainda em nenhum dia), Planejados (em um dia) e Trilhas (trilhas GPX importadas), cada um com sua contagem.',
|
||||
'help.guide.filter-places.step.2': 'Digite em Buscar, no topo; a lista estreita enquanto você digita.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Todas as categorias abre uma lista para marcar uma ou mais categorias, Sem categoria entre elas; Limpar filtro, no fim dela, a reinicia.',
|
||||
'O botão de etiqueta ao lado de Mostrar lista as categorias: marque uma ou mais, Sem categoria entre elas. O botão conta o que está marcado, e Limpar filtro, no pé da lista, desmarca todas.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'A estrela ao lado define uma avaliação mínima: 5+, 4+ e assim por diante mostram só lugares que você avaliou pelo menos tão alto.',
|
||||
'A estrela ao lado dele define uma avaliação mínima: 5+, 4+ e assim por diante mostram só lugares que você avaliou pelo menos tão alto.',
|
||||
'help.guide.filter-places.result': 'A contagem acima das linhas diz quantos lugares batem; os filtros se combinam.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'Com um dia aberto, Planejados lista só esse dia e avisa: Mostrando apenas o dia aberto, com Mostrar a viagem inteira ao lado.',
|
||||
@@ -1887,7 +1888,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Clique com o botão direito na linha e escolha Editar, ou abra o lugar e clique em Editar nos detalhes dele.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Mude o que precisar: Nome, Descrição, Notas, Endereço, Latitude e Longitude, Categoria, Site. Aberto a partir de um dia, o formulário tem também Notas para este dia e Início e Fim para aquele dia.',
|
||||
'Mude o que precisar: o nome e o chip Categoria no cabeçalho da janela, Endereço, Latitude e Longitude, Descrição, Notas e Site. Aberto a partir de um dia, o formulário tem também Início e Fim e Notas para este dia.',
|
||||
'help.guide.edit-place.step.3': 'Clique em Atualizar.',
|
||||
'help.guide.edit-place.result':
|
||||
'A alteração vale em todo lugar em que ele aparece: a lista, o mapa e cada dia em que ele está.',
|
||||
@@ -1901,21 +1902,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Clique com o botão direito na linha e escolha Excluir, ou clique em Excluir nos detalhes do lugar.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Confirme. Se uma noite foi reservada no lugar, ou se uma reserva está ligada a ele, a pergunta diz o que vai junto.',
|
||||
'Clique em Excluir na pergunta. Se uma noite foi reservada no lugar, ou se uma reserva está ligada a ele, a pergunta diz o que vai junto.',
|
||||
'help.guide.delete-place.result':
|
||||
'O lugar some da lista, do mapa e de cada dia; Desfazer na barra de ferramentas acima dos dias o traz de volta.',
|
||||
'help.guide.delete-place.tip.1': 'Para tirar um lugar de um dia só, use em vez disso Remover do dia naquela parada.',
|
||||
'help.guide.delete-place.tip.2': 'Vários lugares de uma vez: o tique ao lado dos filtros inicia uma seleção.',
|
||||
'help.guide.delete-place.tip.2': 'Vários lugares de uma vez: o tique ao lado da busca inicia uma seleção.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Alterar ou excluir vários lugares de uma vez',
|
||||
'help.guide.select-places.goal': 'Arrume a lista de uma só vez em vez de lugar por lugar.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Clique no tique na ponta direita da linha de filtros. As linhas ganham caixas de seleção e aparece uma barra com as ações.',
|
||||
'Clique no tique ao lado do campo de busca. As linhas ganham caixas de seleção redondas, e uma barra com as ações sobe no pé da coluna.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Marque as linhas, ou use Selecionar tudo na barra; a barra conta o que está selecionado.',
|
||||
'Clique nas linhas para marcá-las. Selecionar tudo, o tique duplo na barra, pega todas as linhas que os filtros deixam.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category dá a todos uma mesma categoria; Salvar na Coleção os copia para uma das suas coleções; Excluir seleção os remove depois de uma confirmação.',
|
||||
'help.guide.select-places.step.4': 'Clique no tique de novo para sair da seleção.',
|
||||
'A barra conta os lugares marcados. Alterar categoria dá a todos uma mesma categoria; Salvar na Coleção os copia para uma das suas coleções; Excluir seleção os remove depois de uma confirmação.',
|
||||
'help.guide.select-places.step.4': 'Concluído, o X no fim da barra, sai da seleção.',
|
||||
'help.guide.select-places.result':
|
||||
'A alteração vale para cada lugar selecionado; uma exclusão pode ser desfeita na barra de ferramentas acima dos dias.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1926,7 +1927,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.title': 'Importar lugares de um arquivo GPX, KML ou KMZ',
|
||||
'help.guide.import-places-file.goal': 'Traga o que o Google My Maps, o Google Earth ou um rastreador GPS exportou.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Clique em Importar arquivo, ou solte o arquivo em qualquer ponto da coluna de lugares.',
|
||||
'Clique no botão de importação ao lado do botão de adicionar e escolha Importar arquivo, ou solte o arquivo em qualquer ponto da coluna de lugares.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Escolha o arquivo ou arraste-o para a caixa. Para um GPX, marque o que importar: Pontos de caminho, Rotas, Trilhas (com geometria de percurso); para KML e KMZ, Pontos (Placemarks) e Caminhos (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1942,7 +1943,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Importar uma lista compartilhada do Google Maps ou do Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Transforme o link de uma lista compartilhada em lugares.',
|
||||
'help.guide.import-places-list.step.1': 'Clique em Importar lista e escolha Lista Google ou Lista Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Clique no botão de importação ao lado do botão de adicionar e escolha Lista Google. Quando as listas Naver também estão ativas, a opção se chama Importar lista e a janela pergunta qual das duas.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Cole o link compartilhado da lista. Um link de rotas do Google Maps também serve: as paradas dele viram lugares, na ordem do trajeto.',
|
||||
'help.guide.import-places-list.step.3': 'Clique em Importar.',
|
||||
@@ -1960,30 +1962,30 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'A barra de ferramentas no topo: Exportar (PDF, calendário, GPX), Expand all days / Collapse all days, a seta Desfazer, Reordenar dias e Mostrar todas as rotas de reservas.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Um cartão de dia: número, clima, título, data e o custo do dia no cabeçalho; clique no cabeçalho para abrir o dia, a setinha o dobra. Transporte público, Adicionar transporte e Adicionar nota também ficam no cabeçalho.',
|
||||
'Um cartão de dia: um bloco com o número do dia e a previsão, o título e a data, e chips para a noite reservada, um carro alugado e o custo do dia. Clique no cabeçalho para abrir o dia, a setinha o dobra, e o + abre um menu: Adicionar local a este dia, Adicionar hospedagem, Adicionar transporte, Transporte público e Adicionar nota.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Dentro de um dia: as paradas em ordem, cada uma com imagem, nome, horário e um cadeado sobre a imagem; as notas; as reservas que pertencem ao dia; e entre as paradas o tempo de viagem de cada trecho.',
|
||||
'Dentro de um dia: as paradas em ordem, cada uma com imagem, nome, horário, um cadeado sobre a imagem e as reservas presas a ela; as notas; as reservas e os transportes do dia, tingidos conforme o tipo; e entre as paradas o tempo de viagem de cada trecho. Toda linha tem um menu de três pontinhos, o mesmo que o botão direito abre.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Sob as paradas, a barra de rota: Rota desenha o dia no mapa, Otimizar ordena as paradas, De carro / A pé define o meio de transporte do dia, Abrir no Google Maps e Abrir no CoMaps entregam o dia.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Os lugares chegam a um dia arrastando uma linha da coluna de lugares, com o + dessa linha, com Adicionar local a este dia num dia vazio, ou a partir dos detalhes do lugar.',
|
||||
'Os lugares chegam a um dia arrastando uma linha da coluna de lugares, com + Dia nessa linha, com Adicionar local a este dia no + do dia ou num dia vazio, ou a partir dos detalhes do lugar.',
|
||||
'help.ctx.trip-days.bullet.6': 'Custo total, embaixo, soma cada parada e cada reserva com preço, na moeda da viagem.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Ler um dia',
|
||||
'help.guide.read-day-plan.goal': 'Saber o que cada parte de um cartão de dia diz antes de mudar qualquer coisa.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'O cabeçalho: o número do dia, a previsão para o dia, Dia 1 ou o título que você deu, a data e o custo do dia. Clique no cabeçalho para abrir o dia (os Detalhes do dia se abrem sobre o mapa); a setinha à direita dobra e desdobra o cartão.',
|
||||
'O cabeçalho: um bloco com o número do dia e a previsão, depois Dia 1 ou o título que você deu, a data, e chips para a noite reservada (check-in ou check-out), um carro alugado e o custo do dia. Clique no cabeçalho para abrir o dia (os Detalhes do dia se abrem sobre o mapa); o + à direita adiciona um lugar, uma hospedagem, um transporte, uma conexão de transporte público ou uma nota, e a setinha dobra o cartão.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Uma parada: a alça à esquerda a arrasta, a imagem carrega um cadeado para a otimização da rota, depois o nome, a descrição e, se houver, as Notas para este dia. Um selo de horário mostra Início e Fim quando a parada os tem; as setas que aparecem na ponta direita a sobem ou a descem.',
|
||||
'Uma parada: a alça à esquerda a arrasta, a imagem carrega um cadeado para a otimização da rota, depois o nome, um selo de horário quando a parada tem Início e Fim, a descrição e, se houver, as Notas para este dia. As setas na ponta direita a sobem ou a descem, e os três pontinhos abrem o menu dela.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Uma reserva no dia: uma reserva numa parada marca a parada como Reserva confirmada ou Reserva pendente, e um transporte aparece como Partida ou Chegada com seu horário e seu trajeto, com um pequeno botão que desenha essa rota no mapa.',
|
||||
'Uma reserva numa parada fica sobre ela como um selo Reserva, verde quando está confirmada e âmbar enquanto está pendente, com o horário e a empresa; clique no selo para abrir a reserva, e o botão de rota ao lado desenha o trajeto dela. Um transporte é uma linha própria, tingida conforme o tipo, com Partida ou Chegada e o horário. Clique numa reserva e os detalhes dela se abrem; Editar ali a altera.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Entre duas paradas, o conector diz quanto tempo o trecho leva e qual é a distância, no meio de transporte do dia; clique nele para mudar o meio só daquele trecho.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'A barra de rota no fim: Rota desenha o caminho do dia no mapa, Otimizar reordena as paradas, os botões de modo escolhem De carro ou A pé, Abrir no Google Maps e Abrir no CoMaps abrem o dia lá.',
|
||||
'help.guide.read-day-plan.result': 'Cada símbolo do cartão tem um significado; os guias abaixo mudam cada um deles.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Clique com o botão direito numa parada para ver o menu dela: Editar, Remover do dia, Abrir site, os apps de navegação (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Salvar na Coleção, Excluir.',
|
||||
'Clique com o botão direito numa parada, ou nos três pontinhos dela, para ver o menu: Editar, Remover do dia, Abrir site, os apps de navegação (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Salvar na Coleção, Excluir.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Passe o mouse sobre uma parada e Adicionar reserva aparece na ponta dela: uma reserva criada ali fica presa a esta parada neste dia.',
|
||||
// place-onto-day
|
||||
@@ -1992,9 +1994,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Arraste uma linha da coluna de lugares até o cartão do dia. Solte-a entre duas paradas para pô-la exatamente ali, ou em qualquer ponto do cartão para acrescentá-la no fim.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Sem arrastar: abra o dia clicando no cabeçalho, depois clique no + no fim da linha do lugar, ou clique com o botão direito na linha e escolha + Dia.',
|
||||
'Sem arrastar: abra o dia clicando no cabeçalho, depois clique em + Dia no fim da linha do lugar, ou clique com o botão direito na linha e escolha + Dia.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Num dia vazio, Adicionar local a este dia abre o formulário de lugar, e o novo lugar cai no dia na hora.',
|
||||
'Adicionar local a este dia, no menu + do dia ou num dia vazio, abre o formulário de lugar, e o novo lugar cai no dia na hora.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'A partir dos detalhes de um lugar, Adicionar ao dia pergunta qual dia; a partir do cabeçalho do dia, Para o dia na coluna de lugares cria um lugar novo no dia aberto.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2023,7 +2025,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Dar um horário a uma parada',
|
||||
'help.guide.set-stop-times.goal': 'Fixar quando uma parada começa e termina, para o dia se ler como uma programação.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Clique com o botão direito na parada e escolha Editar. Aberto a partir do dia, o formulário tem Início e Fim embaixo.',
|
||||
'Clique com o botão direito na parada, ou nos três pontinhos dela, e escolha Editar. Aberto a partir do dia, o formulário tem Início e Fim para aquele dia, logo abaixo da localização.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Preencha Início e, se quiser, Fim. Sobreposição de horário com: avisa que outra parada do dia com horário se sobrepõe; um Fim antes do Início bloqueia Atualizar.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2062,12 +2064,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Adicionar uma nota a um dia',
|
||||
'help.guide.day-note.goal': 'Guardar um lembrete, um número de ingresso ou um plano B dentro do dia.',
|
||||
'help.guide.day-note.step.1': 'Clique em Adicionar nota no cabeçalho do dia.',
|
||||
'help.guide.day-note.step.1': 'Clique no + no cabeçalho do dia e escolha Adicionar nota.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Dê um nome em Nota, é isso que aparece no dia, e escreva o resto em Nota do dia. A barra de ferramentas acima formata o texto (Negrito, Lista com marcadores, Link, Citação), e Pré-visualização, à esquerda, mostra como a nota vai ficar no dia.',
|
||||
'Digite o nome da nota no cabeçalho da janela, onde está escrito Nota; é isso que aparece no dia. Escreva o resto em Nota do dia: a barra de ferramentas acima formata o texto (negrito, listas, links, citações), e Pré-visualização, à esquerda, mostra a linha que a nota vai virar.',
|
||||
'help.guide.day-note.step.3': 'Escolha um Ícone e uma Cor, para a nota se destacar das paradas, e então Adicionar.',
|
||||
'help.guide.day-note.step.4':
|
||||
'A nota fica no dia como uma parada: arraste-a para o lugar certo, clique com o botão direito para Editar e Excluir.',
|
||||
'A nota fica no dia como uma parada: arraste-a para o lugar certo, e clique nela com o botão direito ou use os três pontinhos dela para Editar e Excluir.',
|
||||
'help.guide.day-note.result':
|
||||
'A nota faz parte do dia, no PDF também; uma nota com horário se ordena junto com as paradas com horário.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2116,15 +2118,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Ler reservas e transportes no plano',
|
||||
'help.guide.bookings-in-plan.goal': 'Saber onde uma reserva aparece depois que existe, e qual tela a cria.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Um transporte (Voo, Trem, Balsa, Ônibus, Carro) aparece no dia em que parte como Partida e no dia em que chega como Chegada, com horário e trajeto; um de vários dias se estende pelos dias no meio.',
|
||||
'Um transporte (voo, trem, balsa, ônibus, carro) é uma linha tingida conforme o tipo: Partida no dia em que sai, Chegada no dia em que chega, com horário e trajeto; um de vários dias se estende pelos dias no meio. Clique na linha e a reserva se abre.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Uma reserva presa a uma parada (um Restaurante, um Passeio) marca aquela parada como Reserva confirmada ou Reserva pendente; uma reserva com dia mas sem parada vira uma linha própria no dia.',
|
||||
'Uma reserva presa a uma parada (um restaurante, um passeio) é um selo Reserva nessa parada, verde quando confirmada e âmbar enquanto pendente, com o horário; uma reserva com dia mas sem parada vira uma linha própria no dia.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Uma noite de hotel é uma hospedagem: fica nos Detalhes do dia em Hospedagem, do Check-in ao Check-out, e a rota de cada um desses dias começa ali.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'No mapa, o botão numa linha de transporte desenha a rota dele; Mostrar todas as rotas de reservas, na barra de ferramentas, desenha todas.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Para criar: Adicionar reserva numa parada sob o mouse, Adicionar transporte e Transporte público no cabeçalho do dia, e as abas Reservas e Transportes para a lista completa com importação e arquivos.',
|
||||
'Para criar: Adicionar reserva numa parada sob o mouse, Adicionar transporte e Transporte público no menu + do dia, e as abas Reservas e Transportes para a lista completa com importação e arquivos.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Uma reserva, um lugar no plano; as abas são as mesmas reservas em forma de lista.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2155,24 +2157,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Clique numa linha da coluna de lugares, numa parada dentro de um dia ou num marcador do mapa, e o painel abre sobre o mapa. Escolhê-lo dentro de um dia diz ao painel de qual parada você fala, e é isso que traz junto os participantes da parada e a reserva dela.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'O cabeçalho traz a imagem redonda, o nome, a categoria, o endereço e as coordenadas. Clique na imagem para usar uma sua, dê um duplo clique no nome para renomear o lugar na hora, e o X à direita fecha o painel.',
|
||||
'O cabeçalho traz a imagem redonda, o nome, o endereço numa linha só e chips para o que se sabe: aberto ou fechado, a categoria, o preço, o telefone e as coordenadas. Clique na imagem para usar uma sua, dê um duplo clique no nome para renomear o lugar na hora, e o X à direita fecha o painel.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Abaixo dele: o preço se houver, as estrelas que cada viajante deu ao lugar, a descrição e as notas, e Notas para este dia quando a parada tem alguma.',
|
||||
'Abaixo dele: as estrelas que cada viajante deu ao lugar, a descrição e as notas, e Notas para este dia quando a parada tem alguma.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Horário de funcionamento, Cor da trilha, Dados da trilha e Arquivos vêm em seguida, conforme se apliquem. Arquivos aceita qualquer coisa das suas pastas e também lista o que está preso à reserva desta parada.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'A linha de baixo: Adicionar ao dia ou Remover do dia enquanto um dia está aberto, depois Salvar na Coleção, Navegação, Abrir site, Editar e Excluir.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Um lugar escolhido na busca carrega o que o índice do TREK ou o OpenStreetMap sabem dele: um anel verde Aberto ou vermelho Fechado em volta da imagem, julgado pelo relógio do próprio lugar, o telefone abaixo das estrelas, Horário de funcionamento mais abaixo com a linha do dia na fileira e a semana inteira atrás de um clique, e o site dele atrás de Abrir site. A avaliação do Google só aparece num lugar encontrado pelo Google, num TREK com uma chave do Google.',
|
||||
'Um lugar escolhido na busca carrega o que o índice do TREK ou o OpenStreetMap sabem dele: Aberto ou Fechado entre os chips do cabeçalho, com um anel verde ou vermelho em volta da imagem, julgado pelo relógio do próprio lugar, o telefone também como chip, Horário de funcionamento mais abaixo com a linha do dia na fileira e a semana inteira atrás de um clique, e o site dele atrás de Abrir site. A avaliação do Google só aparece num lugar encontrado pelo Google, num TREK com uma chave do Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'O que o painel conta sobre um lugar',
|
||||
'help.guide.read-place.goal': 'Leia tudo o que a viagem sabe de um lugar, num painel só.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Na coluna dos dias, clique na parada que você quer ler. O painel abre sobre o mapa e a parada continua marcada no dia dela.',
|
||||
'help.guide.read-place.step.2':
|
||||
'O cabeçalho: a imagem redonda, o nome, o endereço e as coordenadas exatas. Um anel verde com Aberto, ou vermelho com Fechado, em volta da imagem diz se o lugar está aberto agora, pelo relógio dele, assim que o TREK conhece o horário. O X à direita fecha o painel de novo.',
|
||||
'O cabeçalho: a imagem redonda, o nome e o endereço numa linha só; a dica dele mostra o endereço completo. Os chips abaixo dizem Aberto ou Fechado agora, pelo relógio do próprio lugar, com um anel verde ou vermelho combinando em volta da imagem, e trazem o telefone, que um clique entrega ao seu aplicativo de telefone, e as coordenadas exatas. O X à direita fecha o painel de novo.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Abaixo, as estrelas que cada viajante deu ao lugar, com a média e quantos votaram. Ainda sem avaliações enquanto ninguém votou. Logo abaixo, o telefone, onde o lugar tem um: um clique nele entrega o número ao seu aplicativo de telefone.',
|
||||
'Avaliação vem primeiro abaixo do cabeçalho: as estrelas que cada viajante deu ao lugar, com a média e quantos votaram. Ainda sem avaliações enquanto ninguém votou.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Depois a descrição e, abaixo dela, as notas. As duas são o texto do formulário do lugar, renderizado: listas, links e negrito funcionam.',
|
||||
'help.guide.read-place.step.5': 'Participantes diz quem vai a esta parada. Estão todos dentro até você tirar alguém.',
|
||||
@@ -2265,18 +2267,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'A reserva de uma parada',
|
||||
'help.guide.place-booking.goal': 'Leia a reserva que pertence a uma parada, abra-a, e prenda uma nova a ela.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Abra a parada a que a reserva pertence. O painel mostra uma faixa com Confirmada ou Pendente e o nome da reserva.',
|
||||
'Abra a parada a que a reserva pertence. O painel a lista em Reservas como um cartãozinho próprio, com o nome da reserva e Confirmada ou Pendente.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'A faixa traz a Data, a Hora e o Código da reserva, e as notas que a reserva tiver.',
|
||||
'help.guide.place-booking.step.3': 'Clique na faixa. A reserva abre sobre o mapa.',
|
||||
'O cartão da reserva traz a Data, a Hora e o Código da reserva, e as notas que a reserva tiver.',
|
||||
'help.guide.place-booking.step.3': 'Clique no cartão da reserva. A reserva abre sobre o mapa.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Editar, no pé da reserva, abre o formulário dela. Vincular à atribuição do dia, ali, é o que prende uma reserva a uma parada, e aqui já nomeia esta. Feche o formulário de novo.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Uma reserva nova para uma parada começa na coluna dos dias: passe o ponteiro pela parada e clique no + no fim dela. O formulário abre como Nova reserva, já vinculada a ela.',
|
||||
'Uma reserva nova para uma parada começa na coluna dos dias: passe o ponteiro pela parada e clique em Adicionar reserva, o bilhete no fim dela. O formulário abre como Nova reserva, já vinculada a ela.',
|
||||
'help.guide.place-booking.result':
|
||||
'A reserva fica presa à parada: está no painel, está no dia, e os arquivos dela também aparecem aqui sob Arquivos.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'A faixa só aparece na parada a que a reserva está presa. Uma reserva sem parada mora na aba Reservas.',
|
||||
'O cartão da reserva só aparece na parada a que a reserva está presa. Uma reserva sem parada mora na aba Reservas.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Várias reservas podem dividir uma parada: o almoço e o passeio que sai da mesma porta.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2517,7 +2519,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'No topo, o tempo do dia. Previsão para nomeia o lugar a que ela se refere: a primeira parada do dia, ou a hospedagem em que você acorda.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Reservas lista as reservas daquele dia, cada uma com seu tipo, a parada a que pertence e seus horários. Verde quer dizer confirmada, âmbar ainda pendente; é só uma leitura, as reservas se mudam na aba Reservas.',
|
||||
'Reservas lista as reservas daquele dia, cada uma com seu tipo, a parada a que pertence e seus horários. Verde quer dizer confirmada, âmbar ainda pendente, e um clique numa linha abre a reserva.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Hospedagem mostra cada noite reservada sobre este dia, com Check-in e Check-out nos dias em que acontecem, a janela de check-in, o horário de check-out e o número de confirmação.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2550,7 +2552,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'O número grande é a temperatura do dia, ao lado dele a mínima e a máxima, e a condição por extenso.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Os chips abaixo: a probabilidade de chuva, quanta chuva cai, o vento mais forte, e o nascer e o pôr do sol.',
|
||||
'Os chips à direita: a probabilidade de chuva, quanta chuva cai, o vento mais forte, e o nascer e o pôr do sol.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Embaixo, o dia hora a hora, de duas em duas horas: o horário, o ícone, a temperatura e a probabilidade de chuva. Uma hora acima de 50 por cento fica sombreada de azul.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2583,18 +2585,18 @@ const help: TranslationStrings = {
|
||||
'O estabelecimento precisa ser primeiro um lugar da viagem. Crie-o na coluna dos lugares como faria com qualquer outro lugar: o seletor só oferece o que já está lá.',
|
||||
'help.guide.add-accommodation.step.2': 'Abra o dia da sua chegada e clique em Adicionar hospedagem, sob Hospedagem.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Aplicar aos dias diz que noites a estadia cobre: o dia de check-in à esquerda, o dia de check-out à direita. Todos pega a viagem inteira.',
|
||||
'Aplicar aos dias diz que noites a estadia cobre: Início é o dia de check-in, Fim o dia de check-out, e Todos pega a viagem inteira. O cabeçalho da janela mostra o período e o número de noites.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Preencha Check-in, Até e Check-out, e ponha o número da reserva em Confirmação. Os quatro podem ficar vazios.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Escolha o estabelecimento entre os lugares da viagem. Os chips acima da lista a estreitam a uma categoria.',
|
||||
'Escolha o estabelecimento entre os lugares da viagem. Categoria, acima da lista, a estreita a uma categoria.',
|
||||
'help.guide.add-accommodation.step.6': 'Clique em Salvar.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'A estadia aparece em cada dia que cobre, Check-in no primeiro e Check-out no último. O estabelecimento vira uma parada no dia de check-in, então o mapa desenha o caminho até lá, e na aba Reservas surge uma reserva do tipo Hospedagem.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'O seletor abre no dia de onde você veio, com o check-out no dia seguinte; os dois podem ser movidos antes de salvar.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Dê ao hotel a categoria Hotel da viagem ao criá-lo e os chips acima da lista a estreitam aos seus hotéis num clique.',
|
||||
'Dê ao hotel a categoria Hotel ao criá-lo, e Categoria, acima da lista, a estreita aos seus hotéis num clique.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Os horários são todos opcionais: uma estadia sem check-in e sem código cobre as noites dela do mesmo jeito e desenha a rota dela do mesmo jeito.',
|
||||
// edit-accommodation
|
||||
@@ -2605,7 +2607,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'O lápis à direita dele reabre a estadia. A janela agora diz Editar hospedagem.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Corrija a fileira de campos: Check-in, Até, Check-out e Confirmação. Os dias acima dela e o estabelecimento abaixo também se mudam aqui.',
|
||||
'Corrija Check-in, Até, Check-out e Confirmação. Os dias acima deles e o estabelecimento abaixo também se mudam aqui.',
|
||||
'help.guide.edit-accommodation.step.4': 'Clique em Salvar.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'O xis ao lado do lápis encerra a estadia. Ele não pergunta nada, e a reserva do tipo Hospedagem que pertence a ela vai junto.',
|
||||
@@ -2621,7 +2623,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Reservas lista as reservas do dia: as datadas nele, e as que estão penduradas numa das paradas dele.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Uma linha mostra que tipo de reserva é, o nome dela e, quando pertence a uma parada, essa parada depois de um ponto. Os horários dela ficam na ponta direita.',
|
||||
'Uma linha mostra que tipo de reserva é, o nome dela e, quando pertence a uma parada, essa parada em cinza depois dele. Os horários ficam na ponta direita, antes do ponto de status.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'A cor diz como está uma reserva: uma linha verde está confirmada, uma âmbar ainda está pendente. As hospedagens não estão nesta lista, elas têm o bloco próprio logo abaixo.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -62,6 +62,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.allDays': 'Tots els dies',
|
||||
'costs.expensesCount': '{count} despeses',
|
||||
'costs.addExpense': 'Afegir despesa',
|
||||
'costs.view.label': 'Vista',
|
||||
'costs.view.list': 'Llista',
|
||||
'costs.view.table': 'Taula',
|
||||
'costs.table.lockedPayer': 'Pagat per algú: canvia l’import a la despesa perquè els saldos quadrin.',
|
||||
'costs.table.lockedCurrency': 'Introduït en {currency}: canvia l’import a la despesa.',
|
||||
'costs.table.summary': 'Resum',
|
||||
'costs.table.byCategory': 'Categoria',
|
||||
'costs.table.byDate': 'Dia',
|
||||
'costs.table.byPayer': 'Pagador',
|
||||
'costs.table.byStatus': 'Estat',
|
||||
'costs.table.noPayer': 'Encara sense pagador',
|
||||
'costs.table.paid': 'Pagat',
|
||||
'costs.table.open': 'Pendent',
|
||||
'costs.editExpense': 'Editar despesa',
|
||||
'costs.noMatch': 'Cap despesa coincideix amb la cerca.',
|
||||
'costs.emptyText': 'Encara no hi ha despeses. Afegeix la primera.',
|
||||
|
||||
+58
-56
@@ -1763,7 +1763,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'El títol, les dates, la portada i la moneda s’editen des d’Els meus viatges, amb el llapis de la targeta del viatge.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Els chevrons de la vora interior d’una columna la pleguen i el mapa ocupa l’espai; el separador prim al costat d’una columna en canvia l’amplada.',
|
||||
'La llengüeta de la vora interior d’una columna la plega i el mapa ocupa l’espai; el separador prim al costat d’una columna en canvia l’amplada.',
|
||||
'help.ctx.trip.bullet.6': 'La fletxa de desfer a la barra d’eines dels dies retira l’últim canvi al pla.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Afegir un membre',
|
||||
@@ -1832,8 +1832,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Fer lloc per al mapa',
|
||||
'help.guide.collapse-columns.goal': 'Plega una columna o dona-li més amplada.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Fes clic al chevron de la vora interior de la columna dels dies per plegar-la; el mapa ocupa l’espai. La columna dels llocs té el mateix chevron.',
|
||||
'help.guide.collapse-columns.step.2': 'Torna a fer clic al chevron per recuperar la columna.',
|
||||
'Fes clic a la llengüeta de la vora interior de la columna dels dies, la que té la icona de panell, per plegar la columna; el mapa ocupa l’espai. La columna dels llocs té la mateixa llengüeta.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Una columna plegada deixa un requadre a la cantonada del mapa, Planificació per als dies i Llocs per als llocs. Fes-hi clic per recuperar la columna.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Arrossega el separador prim entre una columna i el mapa per canviar l’amplada de la columna.',
|
||||
'help.guide.collapse-columns.result': 'Les amplades es recorden; les columnes tornen obertes a la propera visita.',
|
||||
@@ -1858,26 +1859,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Afegeix un lloc / activitat, a dalt, obre el formulari d’un lloc que escrius o cerques. Mentre hi ha un dia obert el botó diu Lloc nou, i Al dia, al costat, crea el lloc directament en aquell dia.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importa un fitxer accepta fitxers .gpx, .kml i .kmz; Importa una llista accepta una llista compartida de Google Maps o de Naver Maps. Un fitxer també es pot deixar caure simplement sobre la columna.',
|
||||
'El botó d’importació del costat ofereix Importa un fitxer, per a fitxers .gpx, .kml i .kmz, i Llista de Google (Importa una llista quan les llistes de Naver també estan activades) per a una llista compartida de Google Maps o de Naver Maps. Un fitxer també es pot deixar caure simplement sobre la columna.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'El desplegable canvia entre Tot, Sense planificar, Planificats i, un cop s’ha importat una ruta, Rutes; a sota hi ha la cerca, el filtre de categoria i l’estrella per a una valoració mínima.',
|
||||
'A sota, la cerca, amb la marca de selecció que inicia una selecció al costat, i una fila de filtres: Mostrar canvia entre Tot, Sense planificar, Planificats i, un cop s’ha importat una ruta, Rutes, cadascun amb el seu recompte; el botó d’etiqueta filtra per categoria i l’estrella per una valoració mínima.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Una fila mostra imatge, nom i descripció o adreça. Fes-hi clic per als detalls del lloc, arrossega-la a un dia, o fes clic dret per a Editar, + Dia, Obre el lloc web, Obre a Google Maps, Desar a la col·lecció i Eliminar.',
|
||||
'Una fila mostra imatge, nom i descripció o adreça. Fes-hi clic per als detalls del lloc, arrossega-la a un dia, o fes-hi clic dret (o clic als seus tres punts) per a Editar, + Dia, Obre el lloc web, Obre a Google Maps, Desar a la col·lecció i Eliminar.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Amb un dia obert, un + al final d’una fila sense planificar posa el lloc en aquell dia, i Planificats llista només aquell dia, amb Mostra tot el viatge per tornar a eixamplar.',
|
||||
'Amb un dia obert, + Dia al final d’una fila sense planificar posa el lloc en aquell dia, i Planificats llista només aquell dia, amb Mostra tot el viatge per tornar a eixamplar.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'La marca de selecció a l’extrem dret de la fila de filtres inicia una selecció: diverses files alhora reben una categoria nova, van a una col·lecció o s’eliminen.',
|
||||
'La marca de selecció al costat de la cerca inicia una selecció: des de la barra del peu de la columna, diverses files alhora reben una categoria nova, van a una col·lecció, es marquen com a visitades o s’eliminen.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Crear un lloc',
|
||||
'help.guide.create-place.goal': 'Afegeix un lloc o una activitat a mà, amb tot el que el pla n’ha de saber.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Fes clic a Afegeix un lloc / activitat, a dalt de la columna de llocs (Lloc nou mentre hi ha un dia obert). S’obre el formulari.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Escriu el lloc a Cerca llocs..., a dalt, i tria un resultat. Nom, Adreça, Latitud, Longitud i Lloc web s’omplen, i Detalls del lloc, a l’esquerra, mostra imatges, l’horari d’obertura i una descripció. En un TREK amb clau de Google, sota la llista hi ha No és el lloc correcte? Cerca a Google, que torna a fer la mateixa cerca amb Google.',
|
||||
'Escriu el lloc a Cerca llocs... i tria un resultat. El nom a la capçalera del diàleg, Adreça, Latitud, Longitud i Lloc web s’omplen, i Detalls del lloc, a l’esquerra, mostra imatges, l’horari d’obertura i una descripció. En un TREK amb clau de Google, sota la llista hi ha No és el lloc correcte? Cerca a Google, que torna a fer la mateixa cerca amb Google. Llocs desats, a la dreta, ofereix els llocs de les teves col·leccions de la mateixa manera.',
|
||||
'help.guide.create-place.step.3':
|
||||
'A Detalls del lloc, un clic en una imatge sota Tria una imatge la converteix en la imatge del lloc; Utilitza aquest text porta la descripció al formulari.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Revisa els camps: Nom és obligatori; Descripció i Notes són teves; Adreça, Latitud i Longitud surten de la cerca o s’escriuen; Categoria tria una de les categories del viatge, i el + del costat en crea una de nova a l’instant; Lloc web recull l’enllaç.',
|
||||
'Revisa què conté el formulari: el nom és a la capçalera del diàleg i és l’únic camp obligatori; el xip Categoria de sota tria una de les categories del viatge, i el + del costat en crea una de nova a l’instant. Adreça, Latitud i Longitud surten de la cerca o s’escriuen; Descripció i Notes són teves; Lloc web recull l’enllaç.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Fes clic a Afegir. Si ja hi ha un lloc amb el mateix nom al viatge, el formulari ho diu i el botó passa a ser Afegir igualment.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1896,7 +1897,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Al dia obre el mateix formulari que Lloc nou, només que el lloc va a parar al dia obert en el moment que fas clic a Afegir.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Un lloc que ja existeix va al dia obert amb el + al final de la seva fila, o amb clic dret, + Dia.',
|
||||
'Un lloc que ja existeix va al dia obert amb + Dia al final de la seva fila, o amb clic dret, + Dia.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'A l’inrevés també funciona, i sense obrir abans cap dia: arrossega la fila del lloc fora de la columna i deixa-la anar sobre una targeta de dia. Si la deixes entre dues parades, hi va a parar exactament.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1908,10 +1909,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Trobar un lloc a la llista',
|
||||
'help.guide.filter-places.goal': 'Estreny la columna fins als llocs que busques.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'El desplegable de dalt canvia entre Tot, Sense planificar (encara en cap dia), Planificats (en un dia) i Rutes (rutes GPX importades), cadascun amb el seu recompte.',
|
||||
'help.guide.filter-places.step.2': 'Escriu a Cerca llocs...; la llista s’estreny mentre escrius.',
|
||||
'Mostrar, el desplegable de sota la cerca, canvia entre Tot, Sense planificar (encara en cap dia), Planificats (en un dia) i Rutes (rutes GPX importades), cadascun amb el seu recompte.',
|
||||
'help.guide.filter-places.step.2': 'Escriu a Cercar, a dalt; la llista s’estreny mentre escrius.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Totes les categories obre una llista per marcar una o més categories, Sense categoria inclosa; Esborra el filtre, al final, la reinicia.',
|
||||
'El botó d’etiqueta al costat de Mostrar llista les categories: marca’n una o més, Sense categoria inclosa. El botó compta el que està marcat, i Esborra el filtre, al peu de la llista, les desmarca totes.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'L’estrella del costat fixa una valoració mínima: 5+, 4+ i així successivament mostren només els llocs que has valorat com a mínim tan amunt.',
|
||||
'help.guide.filter-places.result': 'El recompte sobre les files diu quants llocs encaixen; els filtres es combinen.',
|
||||
@@ -1925,7 +1926,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Fes clic dret a la fila i tria Editar, o obre el lloc i fes clic a Editar als seus detalls.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Canvia el que et calgui: Nom, Descripció, Notes, Adreça, Latitud i Longitud, Categoria, Lloc web. Obert des d’un dia, el formulari també té Notes per a aquest dia i Inici i Fi per a aquell dia.',
|
||||
'Canvia el que et calgui: el nom i el xip Categoria a la capçalera del diàleg, Adreça, Latitud i Longitud, Descripció, Notes i Lloc web. Obert des d’un dia, el formulari també té Inici i Fi i Notes per a aquest dia.',
|
||||
'help.guide.edit-place.step.3': 'Fes clic a Actualitzar.',
|
||||
'help.guide.edit-place.result':
|
||||
'El canvi s’aplica a tot arreu on apareix el lloc: la llista, el mapa i cada dia en què està.',
|
||||
@@ -1939,23 +1940,23 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Fes clic dret a la fila i tria Eliminar, o fes clic a Eliminar als detalls del lloc.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Confirma. Si al lloc hi havia una nit reservada, o hi ha una reserva lligada, la pregunta diu què se’n va amb ell.',
|
||||
'Fes clic a Eliminar a la pregunta. Si al lloc hi havia una nit reservada, o hi ha una reserva lligada, la pregunta diu què se’n va amb ell.',
|
||||
'help.guide.delete-place.result':
|
||||
'El lloc desapareix de la llista, del mapa i de cada dia; Desfés, a la barra d’eines sobre els dies, el torna.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Per treure un lloc només d’un dia, fes servir en lloc d’això Treure del dia en aquella parada.',
|
||||
'help.guide.delete-place.tip.2':
|
||||
'Diversos llocs alhora: la marca de selecció al costat dels filtres inicia una selecció.',
|
||||
'Diversos llocs alhora: la marca de selecció al costat de la cerca inicia una selecció.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Canviar o eliminar diversos llocs alhora',
|
||||
'help.guide.select-places.goal': 'Endreça la llista d’un sol cop en comptes de lloc per lloc.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Fes clic a la marca de selecció a l’extrem dret de la fila de filtres. Les files reben caselles i apareix una barra amb les accions.',
|
||||
'Fes clic a la marca de selecció al costat del camp de cerca. Les files reben caselles rodones, i al peu de la columna s’alça una barra amb les accions.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Marca les files, o fes servir Seleccionar-ho tot a la barra; la barra compta el que està seleccionat.',
|
||||
'Fes clic a les files per marcar-les. Seleccionar-ho tot, la doble marca de la barra, agafa totes les files que deixen els filtres.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Canviar categoria posa una mateixa categoria a tots; Desar a la col·lecció els copia a una de les teves col·leccions; Elimina la selecció els treu després d’una confirmació.',
|
||||
'help.guide.select-places.step.4': 'Torna a fer clic a la marca de selecció per sortir de la selecció.',
|
||||
'La barra compta els llocs marcats. Canviar categoria posa una mateixa categoria a tots; Desar a la col·lecció els copia a una de les teves col·leccions; Elimina la selecció els treu després d’una confirmació.',
|
||||
'help.guide.select-places.step.4': 'Fet, la X al final de la barra, surt de la selecció.',
|
||||
'help.guide.select-places.result':
|
||||
'El canvi s’aplica a cada lloc seleccionat; una eliminació es pot desfer des de la barra d’eines sobre els dies.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1967,7 +1968,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.goal':
|
||||
'Fes entrar el que han exportat Google My Maps, Google Earth o un registrador GPS.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Fes clic a Importa un fitxer, o deixa caure el fitxer en qualsevol punt de la columna de llocs.',
|
||||
'Fes clic al botó d’importació al costat del botó d’afegir i tria Importa un fitxer, o deixa caure el fitxer en qualsevol punt de la columna de llocs.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Tria el fitxer o arrossega’l dins el quadre. Per a un GPX, marca què vols importar: Punts de ruta, Rutes, Tracks (amb geometria de ruta); per a KML i KMZ, Punts (Placemarks) i Rutes (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1982,7 +1983,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Importar una llista compartida de Google Maps o de Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Converteix l’enllaç d’una llista compartida en llocs.',
|
||||
'help.guide.import-places-list.step.1': 'Fes clic a Importa una llista i tria Llista de Google o Llista de Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Fes clic al botó d’importació al costat del botó d’afegir i tria Llista de Google. Quan les llistes de Naver també estan activades, l’opció es diu Importa una llista i el diàleg pregunta quina de les dues.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Enganxa l’enllaç compartit de la llista. Un enllaç d’indicacions de Google Maps també serveix: les seves parades es converteixen en llocs, en l’ordre del trajecte.',
|
||||
'help.guide.import-places-list.step.3': 'Fes clic a Importar.',
|
||||
@@ -2000,24 +2002,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'La barra d’eines de dalt: Exporta (PDF, calendari, GPX), Expandeix tots els dies / Contreu tots els dies, la fletxa Desfés, Reordena els dies i Mostra totes les rutes de reserva.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Una targeta de dia: número, temps, títol, data i el cost del dia a la capçalera; fes clic a la capçalera per obrir el dia, la fletxeta la plega. Transport públic, Afegeix transport i Afegeix una nota també són a la capçalera.',
|
||||
'Una targeta de dia: un requadre amb el número del dia i la previsió, el títol i la data, i xips per a la nit reservada, un cotxe de lloguer i el cost del dia. Fes clic a la capçalera per obrir el dia, la fletxeta la plega, i el + obre un menú: Afegeix un lloc a aquest dia, Afegeix un allotjament, Afegeix transport, Transport públic i Afegeix una nota.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Dins d’un dia: les parades en ordre, cadascuna amb imatge, nom, hora i un cadenat sobre la imatge; les notes; les reserves que pertanyen al dia; i entre les parades el temps de viatge de cada tram.',
|
||||
'Dins d’un dia: les parades en ordre, cadascuna amb imatge, nom, hora, un cadenat sobre la imatge i les reserves que hi pengen; les notes; les reserves i els transports del dia, tenyits segons el tipus; i entre les parades el temps de viatge de cada tram. Cada fila té un menú de tres punts, el mateix que obre el clic dret.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Sota les parades, la barra de ruta: Ruta dibuixa el dia al mapa, Optimitza ordena les parades, En cotxe / A peu fixa el mitjà de transport del dia, Obre a Google Maps i Obre a CoMaps lliuren el dia.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Els llocs arriben a un dia arrossegant una fila de la columna de llocs, amb el + d’aquella fila, amb Afegeix un lloc a aquest dia en un dia buit, o des dels detalls del lloc.',
|
||||
'Els llocs arriben a un dia arrossegant una fila de la columna de llocs, amb + Dia d’aquella fila, amb Afegeix un lloc a aquest dia des del + del dia o en un dia buit, o des dels detalls del lloc.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Cost total, a baix, suma cada parada i cada reserva amb un preu, en la moneda del viatge.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Llegir un dia',
|
||||
'help.guide.read-day-plan.goal': 'Saber què et diu cada part d’una targeta de dia abans de canviar res.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'La capçalera: el número del dia, la previsió per al dia, Dia 1 o el títol que li has posat, la data i el cost del dia. Fes clic a la capçalera per obrir el dia (els Detalls del dia s’obren sobre el mapa); la fletxeta de la dreta plega i desplega la targeta.',
|
||||
'La capçalera: un requadre amb el número del dia i la previsió, després Dia 1 o el títol que li has posat, la data, i xips per a la nit reservada (entrada o sortida), un cotxe de lloguer i el cost del dia. Fes clic a la capçalera per obrir el dia (els Detalls del dia s’obren sobre el mapa); el + de la dreta afegeix un lloc, un allotjament, un transport, una connexió de transport públic o una nota, i la fletxeta plega la targeta.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Una parada: la nansa de l’esquerra l’arrossega, la imatge porta un cadenat per a l’optimització de ruta, després el nom, la descripció i, si n’hi ha, les Notes per a aquest dia. Una etiqueta d’hora mostra Inici i Fi quan la parada els té; les fletxes que apareixen al seu extrem dret la pugen o la baixen.',
|
||||
'Una parada: la nansa de l’esquerra l’arrossega, la imatge porta un cadenat per a l’optimització de ruta, després el nom, una etiqueta d’hora quan la parada té Inici i Fi, la descripció i, si n’hi ha, les Notes per a aquest dia. Les fletxes del seu extrem dret la pugen o la baixen, i els tres punts n’obren el menú.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Una reserva del dia: una reserva en una parada la marca com a Reserva confirmada o Reserva pendent, i un transport apareix com a Sortida o Arribada amb la seva hora i el seu trajecte, amb un petit interruptor que dibuixa aquesta ruta al mapa.',
|
||||
'Una reserva en una parada s’hi mostra com una etiqueta Reserva, verda quan està confirmada i ambre mentre està pendent, amb la seva hora i el seu proveïdor; fes clic a l’etiqueta per obrir la reserva, i el botó de ruta del costat en dibuixa el trajecte. Un transport és una fila pròpia, tenyida segons el tipus, amb Sortida o Arribada i la seva hora. Fes clic a una reserva i se n’obren els detalls; Editar, allà, la canvia.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Entre dues parades, el connector diu quant dura el tram i quina distància fa, en el mitjà de transport del dia; fes-hi clic per canviar el mitjà d’aquell sol tram.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2025,7 +2027,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Cada símbol de la targeta té un significat; les guies de sota els canvien un per un.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Fes clic dret en una parada per al seu menú: Editar, Treure del dia, Obre el lloc web, les aplicacions de navegació (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Desar a la col·lecció, Eliminar.',
|
||||
'Fes clic dret en una parada, o clic als seus tres punts, per al seu menú: Editar, Treure del dia, Obre el lloc web, les aplicacions de navegació (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Desar a la col·lecció, Eliminar.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Passa el ratolí per una parada i al seu extrem apareix Afegeix una reserva: una reserva creada allà queda lligada a aquesta parada en aquest dia.',
|
||||
// place-onto-day
|
||||
@@ -2034,9 +2036,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Arrossega una fila de la columna de llocs fins a la targeta del dia. Deixa-la anar entre dues parades per posar-la exactament allà, o en qualsevol punt de la targeta per afegir-la al final.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Sense arrossegar: obre el dia fent clic a la capçalera, després fes clic al + del final de la fila del lloc, o fes clic dret a la fila i tria + Dia.',
|
||||
'Sense arrossegar: obre el dia fent clic a la capçalera, després fes clic a + Dia al final de la fila del lloc, o fes clic dret a la fila i tria + Dia.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'En un dia buit, Afegeix un lloc a aquest dia obre el formulari de lloc, i el lloc nou cau al dia de seguida.',
|
||||
'Afegeix un lloc a aquest dia, al menú + del dia o en un dia buit, obre el formulari de lloc, i el lloc nou cau al dia de seguida.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Des dels detalls d’un lloc, Afegeix al dia pregunta quin dia; des de la capçalera del dia, Al dia a la columna de llocs crea un lloc nou al dia obert.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2066,7 +2068,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Fixar quan comença i quan acaba una parada, perquè el dia es llegeixi com un horari.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Fes clic dret a la parada i tria Editar. Obert des del dia, el formulari té Inici i Fi a baix.',
|
||||
'Fes clic dret a la parada, o clic als seus tres punts, i tria Editar. Obert des del dia, el formulari té Inici i Fi per a aquell dia, just a sota de la ubicació.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Posa Inici i, si vols, Fi. Solapament horari amb: avisa que una altra parada del dia amb hora se solapa; un Fi anterior a l’Inici bloqueja Actualitzar.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2106,13 +2108,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Afegir una nota a un dia',
|
||||
'help.guide.day-note.goal': 'Guardar un recordatori, un número d’entrada o un pla B dins el dia mateix.',
|
||||
'help.guide.day-note.step.1': 'Fes clic a Afegeix una nota a la capçalera del dia.',
|
||||
'help.guide.day-note.step.1': 'Fes clic al + de la capçalera del dia i tria Afegeix una nota.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Posa-li un nom a Nota, és el que es veu al dia, i escriu la resta a Nota diària. La barra d’eines de sobre dona format al text (Negreta, Llista amb pics, Enllaç, Cita), i Vista prèvia, a l’esquerra, mostra com quedarà la nota al dia.',
|
||||
'Escriu el nom de la nota a la capçalera del diàleg, on diu Nota; és el que es veu al dia. Escriu la resta a Nota diària: la barra d’eines de sobre dona format al text (negreta, llistes, enllaços, cites), i Vista prèvia, a l’esquerra, mostra la fila que en sortirà.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Tria una Icona i un Color, perquè la nota destaqui entre les parades, i després Afegir.',
|
||||
'help.guide.day-note.step.4':
|
||||
'La nota és al dia com una parada: arrossega-la al seu lloc, fes-hi clic dret per a Editar i Eliminar.',
|
||||
'La nota és al dia com una parada: arrossega-la al seu lloc, i fes-hi clic dret o fes servir els seus tres punts per a Editar i Eliminar.',
|
||||
'help.guide.day-note.result':
|
||||
'La nota forma part del dia, també al PDF; una nota amb hora s’ordena amb les parades amb hora.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2161,15 +2163,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Llegir reserves i transports al pla',
|
||||
'help.guide.bookings-in-plan.goal': 'Saber on apareix una reserva un cop existeix, i quina pantalla la crea.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Un transport (Vol, Tren, Ferri, Autobús, Cotxe) apareix al dia en què surt com a Sortida i al dia en què arriba com a Arribada, amb hora i trajecte; un de diversos dies abasta els dies del mig.',
|
||||
'Un transport (vol, tren, ferri, autobús, cotxe) és una fila tenyida segons el tipus: Sortida el dia que surt, Arribada el dia que arriba, amb hora i trajecte; un de diversos dies abasta els dies del mig. Fes clic a la fila i s’obre la reserva.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Una reserva lligada a una parada (un Restaurant, una Excursió) marca aquella parada com a Reserva confirmada o Reserva pendent; una reserva amb dia però sense parada és una fila pròpia dins el dia.',
|
||||
'Una reserva lligada a una parada (un restaurant, una excursió) és una etiqueta Reserva en aquella parada, verda quan està confirmada i ambre mentre està pendent, amb la seva hora; una reserva amb dia però sense parada és una fila pròpia dins el dia.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Una nit a l’hotel és un allotjament: és als Detalls del dia sota Allotjament, del Registre d’entrada al Registre de sortida, i la ruta de cadascun d’aquells dies comença allà.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Al mapa, l’interruptor d’una fila de transport dibuixa la seva ruta; Mostra totes les rutes de reserva, a la barra d’eines, les dibuixa totes.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Per crear-les: Afegeix una reserva en una parada amb el ratolí a sobre, Afegeix transport i Transport públic a la capçalera del dia, i les pestanyes Reserves i Transports per a la llista completa amb importació i fitxers.',
|
||||
'Per crear-les: Afegeix una reserva en una parada amb el ratolí a sobre, Afegeix transport i Transport públic al menú + del dia, i les pestanyes Reserves i Transports per a la llista completa amb importació i fitxers.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Una reserva, un lloc al pla; les pestanyes són les mateixes reserves en forma de llista.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2200,24 +2202,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Fes clic a una fila de la columna de llocs, a una parada dins d’un dia o a un marcador del mapa, i la fitxa s’obre damunt del mapa. Triar-lo dins d’un dia diu a la fitxa de quina parada parles, i això és el que hi porta els participants de la parada i la seva reserva.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'La capçalera duu la imatge rodona, el nom, la categoria, l’adreça i les coordenades. Fes clic a la imatge per posar-ne una de teva, fes doble clic al nom per canviar el nom del lloc a l’instant, i la X de la dreta tanca la fitxa.',
|
||||
'La capçalera duu la imatge rodona, el nom, l’adreça en una sola línia i xips per al que se’n sap: obert o tancat, la categoria, el preu, el telèfon i les coordenades. Fes clic a la imatge per posar-ne una de teva, fes doble clic al nom per canviar el nom del lloc a l’instant, i la X de la dreta tanca la fitxa.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'A sota: el preu si en té, les estrelles que cada viatger ha donat al lloc, la descripció i les notes, i Notes per a aquest dia quan la parada en duu.',
|
||||
'A sota: les estrelles que cada viatger ha donat al lloc, la descripció i les notes, i Notes per a aquest dia quan la parada en duu.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Horari d’obertura, Color de la ruta, Dades de la ruta i Fitxers vénen després, en la mesura que s’apliquin. Fitxers accepta qualsevol cosa de les teves carpetes i també llista el que penja de la reserva d’aquesta parada.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'La fila de baix: Afegeix al dia o Treure del dia mentre hi ha un dia obert, després Desar a la col·lecció, Navegació, Obre el lloc web, Editar i Eliminar.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Un lloc triat de la cerca porta el que l’índex de TREK o OpenStreetMap en saben: un anell verd Obert o vermell Tancat al voltant de la imatge, jutjat pel rellotge del lloc mateix, el telèfon sota les estrelles, Horari d’obertura més avall amb la línia del dia a la fila i tota la setmana darrere d’un clic, i el seu lloc web darrere d’Obre el lloc web. La valoració de Google només surt en un lloc trobat per Google, en un TREK amb una clau de Google.',
|
||||
'Un lloc triat de la cerca porta el que l’índex de TREK o OpenStreetMap en saben: Obert o Tancat entre els xips de la capçalera, amb un anell verd o vermell al voltant de la imatge, jutjat pel rellotge del lloc mateix, el telèfon també com a xip, Horari d’obertura més avall amb la línia del dia a la fila i tota la setmana darrere d’un clic, i el seu lloc web darrere d’Obre el lloc web. La valoració de Google només surt en un lloc trobat per Google, en un TREK amb una clau de Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Què et diu la fitxa d’un lloc',
|
||||
'help.guide.read-place.goal': 'Llegeix tot el que el viatge sap d’un lloc, en una sola fitxa.',
|
||||
'help.guide.read-place.step.1':
|
||||
'A la columna dels dies, fes clic a la parada que vols llegir. La fitxa s’obre damunt del mapa i la parada queda marcada al seu dia.',
|
||||
'help.guide.read-place.step.2':
|
||||
'La capçalera: la imatge rodona, el nom, l’adreça i les coordenades exactes. Un anell verd amb Obert, o un de vermell amb Tancat, al voltant de la imatge diu si el lloc és obert ara mateix, pel seu propi rellotge, un cop TREK en coneix l’horari. La X de la dreta torna a tancar la fitxa.',
|
||||
'La capçalera: la imatge rodona, el nom i l’adreça en una sola línia; la seva informació emergent mostra l’adreça sencera. Els xips de sota diuen Obert o Tancat ara mateix, pel rellotge del lloc mateix, amb un anell verd o vermell a joc al voltant de la imatge, i porten el telèfon, que un clic passa a la teva aplicació de telèfon, i les coordenades exactes. La X de la dreta torna a tancar la fitxa.',
|
||||
'help.guide.read-place.step.3':
|
||||
'A sota, les estrelles que cada viatger ha donat al lloc, amb la mitjana i quants han votat. Encara sense valoració mentre no ho hagi fet ningú. Just a sota, el telèfon on el lloc en té: un clic hi passa el número a la teva aplicació de telèfon.',
|
||||
'Valoració és el primer que hi ha sota la capçalera: les estrelles que cada viatger ha donat al lloc, amb la mitjana i quants han votat. Encara sense valoració mentre no ho hagi fet ningú.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Després la descripció i, a sota, les notes. Totes dues són el text del formulari del lloc, renderitzat: llistes, enllaços i negreta funcionen.',
|
||||
'help.guide.read-place.step.5': 'Participants diu qui va a aquesta parada. Hi són tots fins que en treus algú.',
|
||||
@@ -2311,18 +2313,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'La reserva d’una parada',
|
||||
'help.guide.place-booking.goal': 'Llegeix la reserva que pertany a una parada, obre-la, i penja-n’hi una de nova.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Obre la parada a la qual pertany la reserva. La fitxa mostra una franja amb Confirmada o Pendent i el nom de la reserva.',
|
||||
'Obre la parada a la qual pertany la reserva. La fitxa la mostra a Reserves com una petita targeta pròpia, amb el nom de la reserva i Confirmada o Pendent.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'La franja duu la Data, l’Hora i el Codi de reserva, i les notes que tingui la reserva.',
|
||||
'help.guide.place-booking.step.3': 'Fes clic a la franja. La reserva s’obre damunt del mapa.',
|
||||
'La targeta de la reserva duu la Data, l’Hora i el Codi de reserva, i les notes que tingui la reserva.',
|
||||
'help.guide.place-booking.step.3': 'Fes clic a la targeta de la reserva. La reserva s’obre damunt del mapa.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Editar, al peu de la reserva, n’obre el formulari. Vincula a una assignació del dia, allà, és el que penja una reserva d’una parada, i aquí ja n’anomena aquesta. Torna a tancar el formulari.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Una reserva nova per a una parada comença a la columna dels dies: passa per sobre de la parada i fes clic al + del seu extrem. El formulari s’obre com a Reserva nova, ja vinculada a ella.',
|
||||
'Una reserva nova per a una parada comença a la columna dels dies: passa per sobre de la parada i fes clic a Afegeix una reserva, el tiquet del seu extrem. El formulari s’obre com a Reserva nova, ja vinculada a ella.',
|
||||
'help.guide.place-booking.result':
|
||||
'La reserva penja de la parada: és a la fitxa, és al dia, i els seus fitxers també apareixen aquí sota Fitxers.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'La franja només es mostra a la parada de la qual penja la reserva. Una reserva sense parada viu a la pestanya Reserves.',
|
||||
'La targeta de la reserva només es mostra a la parada de la qual penja la reserva. Una reserva sense parada viu a la pestanya Reserves.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Diverses reserves poden compartir una parada: el dinar i la visita que surt de la mateixa porta.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2567,7 +2569,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'A dalt de tot, el temps del dia. Previsió per a anomena el lloc al qual correspon: la primera parada del dia, o l’allotjament on et despertes.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Reserves llista les reserves d’aquell dia, cadascuna amb el seu tipus, la parada a la qual pertany i els seus horaris. Verd vol dir confirmada, ambre encara pendent; només és una lectura, les reserves es canvien a la pestanya Reserves.',
|
||||
'Reserves llista les reserves d’aquell dia, cadascuna amb el seu tipus, la parada a la qual pertany i els seus horaris. Verd vol dir confirmada, ambre encara pendent, i un clic en una fila obre la reserva.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Allotjament mostra cada nit reservada sobre aquest dia, amb Registre d’entrada i Registre de sortida als dies en què passen, la franja d’entrada, l’hora de sortida i el número de confirmació.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2600,7 +2602,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'El número gran és la temperatura del dia, al costat la mínima i la màxima, i la condició en paraules.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Els xips de sota: la probabilitat de pluja, quanta en cau, el vent més fort, i l’alba i el capvespre.',
|
||||
'Els xips de la dreta: la probabilitat de pluja, quanta en cau, el vent més fort, i l’alba i el capvespre.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'A baix de tot, el dia hora per hora, cada dues hores: l’hora, la icona, la temperatura i la probabilitat de pluja. Una hora per sobre del 50 per cent queda ombrejada de blau.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2634,18 +2636,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.add-accommodation.step.2':
|
||||
'Obre el dia de la teva arribada i fes clic a Afegeix un allotjament, sota Allotjament.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Aplica als dies diu quines nits cobreix l’estada: el dia d’entrada a l’esquerra, el dia de sortida a la dreta. Tots agafa tot el viatge.',
|
||||
'Aplica als dies diu quines nits cobreix l’estada: Inici és el dia d’entrada, Fi el dia de sortida, i Tots agafa tot el viatge. La capçalera del diàleg mostra l’interval i el nombre de nits.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Omple Registre d’entrada, Fins a i Registre de sortida, i posa el número de la reserva a Confirmació. Tots quatre poden quedar buits.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Tria l’establiment entre els llocs del viatge. Els xips de sobre la llista la redueixen a una sola categoria.',
|
||||
'Tria l’establiment entre els llocs del viatge. Categoria, a sobre de la llista, la redueix a una sola categoria.',
|
||||
'help.guide.add-accommodation.step.6': 'Fes clic a Desar.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'L’estada surt a cada dia que cobreix, Registre d’entrada al primer i Registre de sortida a l’últim. L’establiment es converteix en una parada del dia d’entrada, de manera que el mapa dibuixa el camí fins allà, i a la pestanya Reserves apareix una reserva de tipus Allotjament.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'El selector s’obre al dia d’on venies, amb la sortida l’endemà; tots dos es poden moure abans de desar.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Dona a l’hotel la categoria Hotel del viatge quan el creïs i els xips de sobre la llista la redueixen als teus hotels amb un sol clic.',
|
||||
'Dona a l’hotel la categoria Hotel quan el creïs, i Categoria, a sobre de la llista, la redueix als teus hotels amb un sol clic.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Els horaris són tots opcionals: una estada sense entrada i sense codi cobreix igualment les seves nits i dibuixa igualment la seva ruta.',
|
||||
// edit-accommodation
|
||||
@@ -2656,7 +2658,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'El llapis de la seva dreta torna a obrir l’estada. La finestra ara diu Edita l’allotjament.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Corregeix la fila de camps: Registre d’entrada, Fins a, Registre de sortida i Confirmació. Els dies de sobre i l’establiment de sota també es canvien aquí.',
|
||||
'Corregeix Registre d’entrada, Fins a, Registre de sortida i Confirmació. Els dies de sobre i l’establiment de sota també es canvien aquí.',
|
||||
'help.guide.edit-accommodation.step.4': 'Fes clic a Desar.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'La creu del costat del llapis acaba l’estada. No pregunta res, i la reserva de tipus Allotjament que li pertany se’n va amb ella.',
|
||||
@@ -2672,7 +2674,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Reserves llista les reserves del dia: les datades en ell, i les que pengen d’alguna de les seves parades.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Una fila mostra de quin tipus de reserva es tracta, el seu nom i, quan pertany a una parada, aquella parada després d’un punt. Els seus horaris queden a l’extrem dret.',
|
||||
'Una fila mostra de quin tipus de reserva es tracta, el seu nom i, quan pertany a una parada, aquella parada en gris al darrere. Els seus horaris queden a l’extrem dret, abans del punt d’estat.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'El color diu com està una reserva: una fila verda està confirmada, una d’ambre encara està pendent. Els allotjaments no surten en aquesta llista, tenen el seu propi bloc a sota.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Zaplaceno mnou',
|
||||
'costs.filter.owed': 'Dluží mi',
|
||||
'costs.addExpense': 'Přidat výdaj',
|
||||
'costs.view.label': 'Zobrazení',
|
||||
'costs.view.list': 'Seznam',
|
||||
'costs.view.table': 'Tabulka',
|
||||
'costs.table.lockedPayer': 'Zaplatil někdo: změňte částku ve výdaji, aby zůstatky seděly.',
|
||||
'costs.table.lockedCurrency': 'Zadáno v {currency}: změňte částku ve výdaji.',
|
||||
'costs.table.summary': 'Souhrn',
|
||||
'costs.table.byCategory': 'Kategorie',
|
||||
'costs.table.byDate': 'Den',
|
||||
'costs.table.byPayer': 'Plátce',
|
||||
'costs.table.byStatus': 'Stav',
|
||||
'costs.table.noPayer': 'Zatím bez plátce',
|
||||
'costs.table.paid': 'Zaplaceno',
|
||||
'costs.table.open': 'Otevřené',
|
||||
'costs.editExpense': 'Upravit výdaj',
|
||||
'costs.noMatch': 'Žádné výdaje neodpovídají vašemu hledání.',
|
||||
'costs.emptyText': 'Zatím žádné výdaje. Přidejte první.',
|
||||
|
||||
+62
-57
@@ -1682,7 +1682,7 @@ const help: TranslationStrings = {
|
||||
'Sdílet vpravo nahoře otevře lidi cesty: členy, hosty, odkaz pro pozvání a veřejný odkaz jen pro čtení.',
|
||||
'help.ctx.trip.bullet.4': 'Název, data, úvodní fotku a měnu upravíte z Moje cesty, tužkou na kartě cesty.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Šipky na vnitřním okraji sloupce ho složí a místo zabere mapa; tenký oddělovač vedle sloupce mění jeho šířku.',
|
||||
'Ouško na vnitřním okraji sloupce ho složí a místo zabere mapa; tenký oddělovač vedle sloupce mění jeho šířku.',
|
||||
'help.ctx.trip.bullet.6': 'Šipka zpět v liště nástrojů dnů vrátí poslední změnu plánu.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Přidat člena',
|
||||
@@ -1746,8 +1746,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Udělat místo mapě',
|
||||
'help.guide.collapse-columns.goal': 'Složte sloupec, nebo mu dejte větší šířku.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Klikněte na šipku na vnitřním okraji sloupce dnů a sloupec se složí; místo zabere mapa. Sloupec míst má stejnou šipku.',
|
||||
'help.guide.collapse-columns.step.2': 'Kliknutím na šipku znovu sloupec vrátíte.',
|
||||
'Klikněte na ouško na vnitřním okraji sloupce dnů, to s ikonou panelu, a sloupec se složí; místo zabere mapa. Sloupec míst má stejné ouško.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Složený sloupec nechá v rohu mapy dlaždici, Plán pro dny a Místa pro místa. Kliknutím na ni sloupec vrátíte.',
|
||||
'help.guide.collapse-columns.step.3': 'Tažením tenkého oddělovače mezi sloupcem a mapou změníte šířku sloupce.',
|
||||
'help.guide.collapse-columns.result': 'Šířky si aplikace pamatuje; sloupce se při příští návštěvě vrátí otevřené.',
|
||||
'help.guide.collapse-columns.tip.1': 'Oba sloupce lze složit najednou pro zobrazení jen s mapou.',
|
||||
@@ -1769,26 +1770,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Přidat místo/aktivitu nahoře otevře formulář pro místo, které napíšete nebo vyhledáte. Když je otevřený den, tlačítko říká Nové místo a Ke dni vedle něj vytvoří místo rovnou na tom dni.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importovat soubor bere soubory .gpx, .kml a .kmz; Import seznamu bere sdílený seznam z Google Maps nebo Naver Maps. Soubor lze také jen pustit na sloupec.',
|
||||
'Tlačítko importu vedle něj nabízí Importovat soubor pro soubory .gpx, .kml a .kmz a Google Seznam (Import seznamu, když jsou zapnuté i seznamy Naver) pro seznam sdílený z Google Maps nebo Naver Maps. Soubor lze také jen pustit na sloupec.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Rozbalovací nabídka přepíná mezi Vše, Nezařazené, Naplánované a, jakmile je importovaná trasa, Trasy; pod ní sedí hledání, filtr kategorií a hvězda pro minimální hodnocení.',
|
||||
'Pod nimi hledání, vedle něj ikona zaškrtnutí, která spustí výběr, a řada filtrů: Zobrazit přepíná mezi Vše, Nezařazené, Naplánované a, jakmile je importovaná trasa, Trasy, každé se svým počtem; tlačítko se štítkem filtruje podle kategorie a hvězda podle minimálního hodnocení.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Řádek ukazuje obrázek, název a popis nebo adresu. Kliknutím otevřete podrobnosti místa, přetažením ho položíte na den, pravým tlačítkem dostanete Upravit, + Den, Otevřít webové stránky, Google Maps, Uložit do sbírky a Smazat.',
|
||||
'Řádek ukazuje obrázek, název a popis nebo adresu. Kliknutím otevřete podrobnosti místa, přetažením ho položíte na den, pravým tlačítkem (nebo přes jeho tři tečky) dostanete Upravit, + Den, Otevřít webové stránky, Google Maps, Uložit do sbírky a Smazat.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Když je otevřený den, + na konci nezařazeného řádku položí místo na ten den a Naplánované vypíší jen ten den, se Zobrazit celou cestu pro návrat k celku.',
|
||||
'Když je otevřený den, + Den na konci nezařazeného řádku položí místo na ten den a Naplánované vypíší jen ten den, se Zobrazit celou cestu pro návrat k celku.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Ikona zaškrtnutí na pravém konci řádku s filtry spustí výběr: několik řádků naráz dostane novou kategorii, jde do sbírky nebo se smaže.',
|
||||
'Ikona zaškrtnutí vedle hledání spustí výběr: přes lištu u spodního okraje sloupce několik řádků naráz dostane novou kategorii, jde do sbírky, označí se jako navštívené nebo se smaže.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Vytvořit místo',
|
||||
'help.guide.create-place.goal': 'Přidejte místo nebo aktivitu ručně, se vším, co o něm plán potřebuje vědět.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Klikněte nahoře ve sloupci míst na Přidat místo/aktivitu (Nové místo, když je otevřený den). Otevře se formulář.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Napište místo nahoře do Hledat místa... a vyberte výsledek. Název, Adresa, Zeměpisná šířka, Zeměpisná délka a Webové stránky se vyplní a Podrobnosti místa vlevo ukážou obrázky, otevírací dobu a popis k němu. Na TREKu s klíčem Google sedí pod seznamem Není to správné místo? Hledat na Googlu a spustí stejné hledání přes Google.',
|
||||
'Napište místo do Hledat místa... a vyberte výsledek. Název v záhlaví dialogu, Adresa, Zeměpisná šířka, Zeměpisná délka a Webové stránky se vyplní a Podrobnosti místa vlevo ukážou obrázky, otevírací dobu a popis k němu. Na TREKu s klíčem Google sedí pod seznamem Není to správné místo? Hledat na Googlu a spustí stejné hledání přes Google. Uložená místa vpravo stejným způsobem nabízejí místa z vašich sbírek.',
|
||||
'help.guide.create-place.step.3':
|
||||
'V Podrobnostech místa se kliknutím na obrázek pod Vybrat obrázek stane tento obrázek obrázkem místa; Použít tento text převezme popis do formuláře.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Zkontrolujte pole: Název je povinný; Popis a Poznámky jsou vaše; Adresa, Zeměpisná šířka a Zeměpisná délka pocházejí z hledání nebo se napíší; Kategorie vybírá jednu z kategorií cesty a + vedle ní vytvoří na místě novou; Webové stránky berou odkaz.',
|
||||
'Zkontrolujte, co formulář obsahuje: název sedí v záhlaví dialogu a je jediným povinným polem; štítek Kategorie pod ním vybírá jednu z kategorií cesty a + vedle něj vytvoří na místě novou. Adresa, Zeměpisná šířka a Zeměpisná délka pocházejí z hledání nebo se napíší; Popis a Poznámky jsou vaše; Webové stránky berou odkaz.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Klikněte na Přidat. Pokud už v cestě je místo stejného názvu, formulář to řekne a tlačítko se změní na Přesto přidat.',
|
||||
'help.guide.create-place.result': 'Místo je v seznamu a na mapě, pod Nezařazené, dokud ho nepoložíte na den.',
|
||||
@@ -1806,7 +1807,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Ke dni otevře stejný formulář jako Nové místo, jen místo přistane na otevřeném dni ve chvíli, kdy kliknete na Přidat.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Místo, které už existuje, jde na otevřený den přes + na konci svého řádku nebo pravým tlačítkem, + Den.',
|
||||
'Místo, které už existuje, jde na otevřený den přes + Den na konci svého řádku nebo pravým tlačítkem, + Den.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Funguje to i obráceně, a bez toho, abys nejdřív otevřel den: přetáhni řádek místa ze sloupce a pusť ho na kartu dne. Když ho pustíš mezi dvě zastávky, přistane přesně tam.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1818,12 +1819,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Najít místo v seznamu',
|
||||
'help.guide.filter-places.goal': 'Zužte sloupec na místa, která hledáte.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Rozbalovací nabídka nahoře přepíná mezi Vše, Nezařazené (ještě na žádném dni), Naplánované (na dni) a Trasy (importované trasy GPX), každé se svým počtem.',
|
||||
'help.guide.filter-places.step.2': 'Pište do Hledat místa...; seznam se zužuje, jak píšete.',
|
||||
'Zobrazit, rozbalovací nabídka pod hledáním, přepíná mezi Vše, Nezařazené (ještě na žádném dni), Naplánované (na dni) a Trasy (importované trasy GPX), každé se svým počtem.',
|
||||
'help.guide.filter-places.step.2': 'Pište nahoře do Hledat; seznam se zužuje, jak píšete.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Všechny kategorie otevřou seznam, kde zaškrtnete jednu nebo víc kategorií, mezi nimi Bez kategorie; Vymazat filtr dole ho zruší.',
|
||||
'Tlačítko se štítkem vedle Zobrazit vypíše kategorie: zaškrtněte jednu nebo víc, mezi nimi Bez kategorie. Tlačítko počítá, co je zaškrtnuté, a Vymazat filtr dole v seznamu zruší všechny.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Hvězda vedle nastaví minimální hodnocení: 5+, 4+ a tak dál ukážou jen místa, která jste ohodnotili aspoň tak vysoko.',
|
||||
'Hvězda vedle něj nastaví minimální hodnocení: 5+, 4+ a tak dál ukážou jen místa, která jste ohodnotili aspoň tak vysoko.',
|
||||
'help.guide.filter-places.result': 'Počet nad řádky říká, kolik míst odpovídá; filtry se kombinují.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'Když je otevřený den, Naplánované vypíší jen ten den a říkají to: Zobrazuje se jen otevřený den, se Zobrazit celou cestu vedle.',
|
||||
@@ -1834,7 +1835,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Klikněte na řádek pravým tlačítkem a zvolte Upravit, nebo místo otevřete a klikněte na Upravit v jeho podrobnostech.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Změňte, co potřebujete: Název, Popis, Poznámky, Adresa, Zeměpisná šířka a Zeměpisná délka, Kategorie, Webové stránky. Otevřený ze dne má formulář navíc Poznámky pro tento den a Od a Do pro ten den.',
|
||||
'Změňte, co potřebujete: název a štítek Kategorie v záhlaví dialogu, Adresa, Zeměpisná šířka a Zeměpisná délka, Popis, Poznámky a Webové stránky. Otevřený ze dne má formulář navíc Od a Do a Poznámky pro tento den.',
|
||||
'help.guide.edit-place.step.3': 'Klikněte na Aktualizovat.',
|
||||
'help.guide.edit-place.result':
|
||||
'Změna platí všude, kde se místo objevuje: v seznamu, na mapě a na každém dni, na kterém je.',
|
||||
@@ -1848,21 +1849,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Klikněte na řádek pravým tlačítkem a zvolte Smazat, nebo klikněte na Smazat v podrobnostech místa.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Potvrďte. Pokud byla na místě zamluvená noc nebo je k němu navázaná rezervace, otázka řekne, co jde s ním.',
|
||||
'V otázce klikněte na Smazat. Pokud byla na místě zamluvená noc nebo je k němu navázaná rezervace, otázka řekne, co jde s ním.',
|
||||
'help.guide.delete-place.result':
|
||||
'Místo zmizí ze seznamu, z mapy i ze všech dnů; Zpět v liště nástrojů nad dny ho vrátí.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Chcete-li místo sundat jen z jednoho dne, použijte na té zastávce raději Odebrat ze dne.',
|
||||
'help.guide.delete-place.tip.2': 'Několik míst naráz: ikona zaškrtnutí vedle filtrů spustí výběr.',
|
||||
'help.guide.delete-place.tip.2': 'Několik míst naráz: ikona zaškrtnutí vedle hledání spustí výběr.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Změnit nebo smazat několik míst naráz',
|
||||
'help.guide.select-places.goal': 'Ukliďte seznam jedním tahem, ne místo po místu.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Klikněte na ikonu zaškrtnutí na pravém konci řádku s filtry. Řádky dostanou zaškrtávací políčka a objeví se lišta s akcemi.',
|
||||
'help.guide.select-places.step.2': 'Zaškrtněte řádky, nebo v liště Vybrat vše; lišta počítá, co je vybrané.',
|
||||
'Klikněte na ikonu zaškrtnutí vedle pole hledání. Řádky dostanou kulatá zaškrtávací políčka a u spodního okraje sloupce vyjede lišta s akcemi.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Kliknutím na řádky je zaškrtnete. Vybrat vše, dvojité zaškrtnutí v liště, vezme každý řádek, který filtry nechají.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category dá všem jednu kategorii; Uložit do sbírky je zkopíruje do některé z vašich sbírek; Smazat vybrané je po potvrzení odstraní.',
|
||||
'help.guide.select-places.step.4': 'Dalším kliknutím na ikonu zaškrtnutí výběr opustíte.',
|
||||
'Lišta počítá zaškrtnutá místa. Změnit kategorii dá všem jednu kategorii; Uložit do sbírky je zkopíruje do některé z vašich sbírek; Smazat vybrané je po potvrzení odstraní.',
|
||||
'help.guide.select-places.step.4': 'Hotovo, X na konci lišty, výběr ukončí.',
|
||||
'help.guide.select-places.result':
|
||||
'Změna platí pro každé vybrané místo; smazání lze vrátit z lišty nástrojů nad dny.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1873,7 +1875,8 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.title': 'Importovat místa ze souboru GPX, KML nebo KMZ',
|
||||
'help.guide.import-places-file.goal':
|
||||
'Dostaňte dovnitř to, co vyexportovaly Google My Maps, Google Earth nebo GPS tracker.',
|
||||
'help.guide.import-places-file.step.1': 'Klikněte na Importovat soubor, nebo pusťte soubor kamkoli na sloupec míst.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Klikněte na tlačítko importu vedle tlačítka pro přidání a zvolte Importovat soubor, nebo pusťte soubor kamkoli na sloupec míst.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Vyberte soubor nebo ho přetáhněte do rámečku. U GPX zaškrtněte, co se má importovat: Trasové body, Trasy, Trasy GPS (s geometrií); u KML a KMZ Body (Placemarks) a Trasy (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1888,7 +1891,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Importovat sdílený seznam z Google Maps nebo Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Proměňte odkaz na sdílený seznam v místa.',
|
||||
'help.guide.import-places-list.step.1': 'Klikněte na Import seznamu a zvolte Google Seznam nebo Naver Seznam.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Klikněte na tlačítko importu vedle tlačítka pro přidání a zvolte Google Seznam. Když jsou zapnuté i seznamy Naver, položka se jmenuje Import seznamu a dialog se zeptá, který z obou.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Vložte sdílený odkaz seznamu. Funguje i odkaz na trasu v Google Maps: jeho zastávky se stanou místy, v pořadí jízdy.',
|
||||
'help.guide.import-places-list.step.3': 'Klikněte na Importovat.',
|
||||
@@ -1905,30 +1909,30 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Lišta nástrojů nahoře: Exportovat (PDF, kalendář, GPX), Expand all days / Collapse all days, šipka zpět, Změnit pořadí dnů a Zobrazit všechny trasy rezervací.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Karta dne: číslo, počasí, název, datum a náklady dne v záhlaví; kliknutím na záhlaví den otevřete, šipka vpravo kartu sbalí. Veřejná doprava, Přidat dopravu a Přidat poznámku sedí v záhlaví také.',
|
||||
'Karta dne: dlaždice s číslem dne a předpovědí, název a datum a štítky pro zamluvenou noc, půjčené auto a náklady dne. Kliknutím na záhlaví den otevřete, šipka ho sbalí a + otevře nabídku: Přidat místo k tomuto dni, Přidat ubytování, Přidat dopravu, Veřejná doprava a Přidat poznámku.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Uvnitř dne: zastávky v pořadí, každá s obrázkem, názvem, časem a zámkem na obrázku; poznámky; rezervace, které ke dni patří; a mezi zastávkami čas jízdy každého úseku.',
|
||||
'Uvnitř dne: zastávky v pořadí, každá s obrázkem, názvem, časem, zámkem na obrázku a rezervacemi, které jsou k ní připnuté; poznámky; rezervace a doprava dne, zabarvené podle druhu; a mezi zastávkami čas jízdy každého úseku. Každý řádek má nabídku se třemi tečkami, stejnou, jakou otevře pravé tlačítko.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Pod zastávkami lišta trasy: Trasa vykreslí den na mapě, Optimalizovat seřadí zastávky, Autem / Pěšky nastaví způsob dopravy dne, Otevřít v Google Mapách a Otevřít v CoMaps den předají dál.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Místa se na den dostanou přetažením řádku ze sloupce míst, přes + na tom řádku, přes Přidat místo k tomuto dni na prázdném dni nebo z podrobností místa.',
|
||||
'Místa se na den dostanou přetažením řádku ze sloupce míst, přes + Den na tom řádku, přes Přidat místo k tomuto dni v nabídce + dne nebo na prázdném dni, nebo z podrobností místa.',
|
||||
'help.ctx.trip-days.bullet.6': 'Celkové náklady dole sečtou každou zastávku a rezervaci s cenou, v měně cesty.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Přečíst den',
|
||||
'help.guide.read-day-plan.goal': 'Poznejte, co vám každá část karty dne říká, dřív než cokoli změníte.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Záhlaví: číslo dne, předpověď na ten den, Den 1 nebo název, který jste dni dali, datum a náklady dne. Kliknutím na záhlaví den otevřete (nad mapou se otevřou jeho podrobnosti); šipka vpravo kartu sbalí a rozbalí.',
|
||||
'Záhlaví: dlaždice s číslem dne a předpovědí, pak Den 1 nebo název, který jste dni dali, datum a štítky pro zamluvenou noc (check-in nebo check-out), půjčené auto a náklady dne. Kliknutím na záhlaví den otevřete (nad mapou se otevřou jeho podrobnosti); + vpravo přidá místo, ubytování, dopravu, spojení veřejnou dopravou nebo poznámku a šipka kartu sbalí.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Zastávka: úchyt vlevo ji táhne, obrázek nese zámek pro optimalizaci trasy, pak jde název, popis a, pokud jsou nastavené, Poznámky pro tento den. Časový štítek ukazuje Od a Do, když je zastávka má; šipky, které se objeví na jejím pravém konci, s ní posunou nahoru nebo dolů.',
|
||||
'Zastávka: úchyt vlevo ji táhne, obrázek nese zámek pro optimalizaci trasy, pak jde název, časový štítek, když má zastávka Od a Do, popis a, pokud jsou nastavené, Poznámky pro tento den. Šipky na jejím pravém konci ji posunou nahoru nebo dolů a tři tečky otevřou její nabídku.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Rezervace na dni: rezervace u zastávky označí zastávku Rezervace potvrzena nebo Rezervace čeká a doprava se ukáže jako Odlet nebo Přílet se svým časem a trasou, s malým přepínačem, který tu trasu vykreslí na mapě.',
|
||||
'Rezervace u zastávky na ní sedí jako štítek Rezervace, zelený, když je potvrzená, a jantarový, dokud čeká, s časem a poskytovatelem; kliknutím na štítek rezervaci otevřete a tlačítko trasy vedle něj vykreslí její trasu. Doprava je samostatný řádek zabarvený podle druhu, s Odlet nebo Přílet a časem. Klikněte na rezervaci a otevřou se její podrobnosti; Upravit ji tam změní.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Mezi dvěma zastávkami říká spojnice, jak dlouho úsek trvá a jak je dlouhý, ve způsobu dopravy dne; kliknutím na ni změníte způsob pro ten jeden úsek.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'Lišta trasy na konci: Trasa vykreslí cestu dne na mapě, Optimalizovat přeuspořádá zastávky, tlačítka způsobu vyberou Autem nebo Pěšky, Otevřít v Google Mapách a Otevřít v CoMaps den otevřou tam.',
|
||||
'help.guide.read-day-plan.result': 'Každý symbol na kartě něco znamená; návody níže každý z nich mění.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Klikněte na zastávku pravým tlačítkem a dostanete její nabídku: Upravit, Odebrat ze dne, Otevřít webové stránky, navigační aplikace (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Uložit do sbírky, Smazat.',
|
||||
'Klikněte na zastávku pravým tlačítkem nebo na její tři tečky a dostanete její nabídku: Upravit, Odebrat ze dne, Otevřít webové stránky, navigační aplikace (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Uložit do sbírky, Smazat.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Najeďte na zastávku a na jejím konci se objeví Přidat rezervaci: rezervace vytvořená tam patří k této zastávce na tomto dni.',
|
||||
// place-onto-day
|
||||
@@ -1937,9 +1941,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Přetáhněte řádek ze sloupce míst na kartu dne. Pusťte ho mezi dvě zastávky, aby skončil přesně tam, nebo kamkoli na kartu, aby se připojil na konec.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Bez přetahování: otevřete den kliknutím na jeho záhlaví, pak klikněte na + na konci řádku místa, nebo klikněte na řádek pravým tlačítkem a zvolte + Den.',
|
||||
'Bez přetahování: otevřete den kliknutím na jeho záhlaví, pak klikněte na + Den na konci řádku místa, nebo klikněte na řádek pravým tlačítkem a zvolte + Den.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Na prázdném dni otevře Přidat místo k tomuto dni formulář místa a nové místo přistane na dni hned.',
|
||||
'Přidat místo k tomuto dni, v nabídce + dne nebo na prázdném dni, otevře formulář místa a nové místo přistane na dni hned.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Z podrobností místa se Přidat ke dni zeptá, na který den; s dnem otevřeným z jeho záhlaví vytvoří Ke dni ve sloupci míst nové místo rovnou na otevřeném dni.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -1966,7 +1970,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Dát zastávce čas',
|
||||
'help.guide.set-stop-times.goal': 'Určete, kdy zastávka začíná a končí, aby se den četl jako rozvrh.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Klikněte na zastávku pravým tlačítkem a zvolte Upravit. Otevřený ze dne má formulář dole Od a Do.',
|
||||
'Klikněte na zastávku pravým tlačítkem nebo na její tři tečky a zvolte Upravit. Otevřený ze dne má formulář Od a Do pro ten den, hned pod polohou.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Zadejte Od a, chcete-li, Do. Časový překryv s: upozorní, že se s ní překrývá jiná zastávka dne, která má čas; Do dřív než Od zablokuje Aktualizovat.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2001,13 +2005,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Přidat ke dni poznámku',
|
||||
'help.guide.day-note.goal': 'Mějte připomínku, číslo vstupenky nebo plán B rovnou ve dni.',
|
||||
'help.guide.day-note.step.1': 'Klikněte v záhlaví dne na Přidat poznámku.',
|
||||
'help.guide.day-note.step.1': 'Klikněte na + v záhlaví dne a zvolte Přidat poznámku.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Pojmenujte ji v poli Poznámka, to karta dne ukáže, a zbytek napište pod Poznámka ke dni. Lišta nad textem ho formátuje (Tučné, seznamy, odkazy, citace) a Náhled vlevo ukáže kartu, která z něj vznikne.',
|
||||
'Název poznámky napište do záhlaví dialogu, kde stojí Poznámka; to ukáže karta dne. Zbytek napište pod Poznámka ke dni: lišta nad ním formátuje text (tučné, seznamy, odkazy, citace) a Náhled vlevo ukáže řádek, který z něj vznikne.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Vyberte Ikonu a Barvu, aby se poznámka od zastávek odlišila, a pak klikněte na Přidat.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Poznámka sedí ve dni jako zastávka: přetažením ji dáte na místo, pravým tlačítkem dostanete Upravit a Smazat.',
|
||||
'Poznámka sedí ve dni jako zastávka: přetažením ji dáte na místo a pravým tlačítkem nebo přes její tři tečky dostanete Upravit a Smazat.',
|
||||
'help.guide.day-note.result': 'Poznámka je součástí dne, i v PDF; poznámka s časem se řadí mezi zastávky s časem.',
|
||||
'help.guide.day-note.tip.1':
|
||||
'Poznámka s časem může zastoupit dopravu, na kterou nemáte rezervaci: „08:15 S3 z hlavního nádraží“.',
|
||||
@@ -2054,15 +2058,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Poznejte, kde se rezervace ukáže, jakmile existuje, a která obrazovka ji zakládá.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Doprava (Let, Vlak, Trajekt, Autobus, Auto) se ukáže ve dni odjezdu jako Odlet a ve dni příjezdu jako Přílet, s časem a trasou; vícedenní se táhne přes dny mezi tím.',
|
||||
'Doprava (let, vlak, trajekt, autobus, auto) je řádek zabarvený podle druhu: Odlet ve dni odjezdu, Přílet ve dni příjezdu, s časem a trasou; vícedenní se táhne přes dny mezi tím. Klikněte na řádek a rezervace se otevře.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Rezervace navázaná na zastávku (Restaurace, Prohlídka) označí tu zastávku Rezervace potvrzena nebo Rezervace čeká; rezervace, která má den, ale ne zastávku, má ve dni vlastní řádek.',
|
||||
'Rezervace navázaná na zastávku (restaurace, prohlídka) je na té zastávce štítek Rezervace, zelený, když je potvrzená, a jantarový, dokud čeká, s časem; rezervace, která má den, ale ne zastávku, má ve dni vlastní řádek.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Noc v hotelu je ubytování: sedí v podrobnostech dne pod Ubytování, od Check-in po Check-out, a trasa každého z těch dnů tam začíná.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Na mapě vykreslí přepínač na řádku dopravy její trasu; Zobrazit všechny trasy rezervací v liště nástrojů vykreslí všechny.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Zakládání: Přidat rezervaci na zastávce pod kurzorem, Přidat dopravu a Veřejná doprava v záhlaví dne a karty Rezervace a Doprava pro celý seznam s importem a soubory.',
|
||||
'Zakládání: Přidat rezervaci na zastávce pod kurzorem, Přidat dopravu a Veřejná doprava v nabídce + dne a karty Rezervace a Doprava pro celý seznam s importem a soubory.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Jedna rezervace, jedno místo v plánu; karty jsou ty samé rezervace jako seznam.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2092,24 +2096,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Klikněte na řádek ve sloupci míst, na zastávku uvnitř dne nebo na značku na mapě a karta se otevře přes mapu. Výběr uvnitř dne kartě řekne, kterou zastávku myslíte, a právě to s sebou přinese účastníky zastávky a její rezervaci.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Hlavička nese kulatý obrázek, název, kategorii, adresu a souřadnice. Kliknutím na obrázek použijete vlastní, dvojklikem na název místo na místě přejmenujete a X vpravo kartu zavře.',
|
||||
'Hlavička nese kulatý obrázek, název, adresu na jednom řádku a štítky pro to, co je známo: otevřeno nebo zavřeno, kategorii, cenu, telefonní číslo a souřadnice. Kliknutím na obrázek použijete vlastní, dvojklikem na název místo na místě přejmenujete a X vpravo kartu zavře.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Pod tím: cena, pokud ji má, hvězdy, které místu dal každý cestující, popis a poznámky, a Poznámky pro tento den, když je zastávka nese.',
|
||||
'Pod tím: hvězdy, které místu dal každý cestující, popis a poznámky, a Poznámky pro tento den, když je zastávka nese.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Následují Otevírací doba, Barva trasy, Data trasy a Soubory, pokud se na místo hodí. Soubory berou cokoli z vašich složek a vypisují také to, co visí na rezervaci této zastávky.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Řádek dole: Přidat ke dni nebo Odebrat ze dne, dokud je otevřený den, pak Uložit do sbírky, Navigace, Otevřít webové stránky, Upravit a Smazat.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Místo vybrané z hledání nese to, co o něm ví index TREKu nebo OpenStreetMap: zelený prstenec Otevřeno nebo červený Zavřeno kolem obrázku, posouzený podle hodin samotného místa, telefonní číslo pod hvězdami, Otevírací doba níže s hodinami toho dne na řádku a celým týdnem za kliknutím, a jeho web za Otevřít webové stránky. Hodnocení od Googlu se ukáže jen u místa nalezeného přes Google, na TREKu s klíčem Google.',
|
||||
'Místo vybrané z hledání nese to, co o něm ví index TREKu nebo OpenStreetMap: Otevřeno nebo Zavřeno mezi štítky hlavičky, se zeleným nebo červeným prstencem kolem obrázku, posouzeno podle hodin samotného místa, telefonní číslo rovněž jako štítek, Otevírací doba níže s hodinami toho dne na řádku a celým týdnem za kliknutím, a jeho web za Otevřít webové stránky. Hodnocení od Googlu se ukáže jen u místa nalezeného přes Google, na TREKu s klíčem Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Co vám karta o místě řekne',
|
||||
'help.guide.read-place.goal': 'Přečtěte si vše, co cesta o jednom místě ví, v jediné kartě.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Klikněte ve sloupci dnů na zastávku, kterou si chcete přečíst. Karta se otevře přes mapu a zastávka zůstane ve svém dni zvýrazněná.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Hlavička: kulatý obrázek, název, adresa a přesné souřadnice. Zelený prstenec s Otevřeno nebo červený se Zavřeno kolem obrázku říká, zda má místo právě teď otevřeno, podle jeho vlastních hodin, jakmile TREK zná jeho otevírací dobu. X vpravo kartu zase zavře.',
|
||||
'Hlavička: kulatý obrázek, název a adresa na jednom řádku; její popisek ukáže celou adresu. Štítky pod nimi říkají, zda má místo právě teď Otevřeno nebo Zavřeno, podle jeho vlastních hodin, s odpovídajícím zeleným nebo červeným prstencem kolem obrázku, a nesou telefonní číslo, které kliknutím předáte své telefonní aplikaci, a přesné souřadnice. X vpravo kartu zase zavře.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Pod tím hvězdy, které místu dal každý cestující, s průměrem a počtem hlasů. Zatím bez hodnocení, dokud nehlasoval nikdo. Hned pod tím telefonní číslo tam, kde ho místo má: kliknutím na něj číslo předáte své telefonní aplikaci.',
|
||||
'Hodnocení přichází pod hlavičkou jako první: hvězdy, které místu dal každý cestující, s průměrem a počtem hlasů. Zatím bez hodnocení, dokud nehlasoval nikdo.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Pak popis a pod ním poznámky. Obojí je text z formuláře místa, vykreslený: seznamy, odkazy i tučné písmo fungují.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2201,18 +2205,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'Rezervace na zastávce',
|
||||
'help.guide.place-booking.goal': 'Přečtěte si rezervaci, která patří k zastávce, otevřete ji a připněte k ní novou.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Otevřete zastávku, ke které rezervace patří. Karta ukáže proužek s Potvrzeno nebo Čeká na potvrzení a s názvem rezervace.',
|
||||
'Otevřete zastávku, ke které rezervace patří. Karta ji vypíše pod Rezervace jako vlastní malou kartičku s názvem rezervace a Potvrzeno nebo Čeká na potvrzení.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Proužek nese Datum, Čas a Rezervační kód, a jakékoli poznámky, které rezervace má.',
|
||||
'help.guide.place-booking.step.3': 'Klikněte na proužek. Rezervace se otevře nad mapou.',
|
||||
'Kartička rezervace nese Datum, Čas a Rezervační kód, a jakékoli poznámky, které rezervace má.',
|
||||
'help.guide.place-booking.step.3': 'Klikněte na kartičku rezervace. Rezervace se otevře nad mapou.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Upravit na patě rezervace otevře její vlastní formulář. Rezervaci k zastávce tam připíná Propojit s přiřazením dne a tady už tuhle zastávku jmenuje. Formulář zase zavřete.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Nová rezervace pro zastávku začíná ve sloupci dnů: najeďte na zastávku a klikněte na + na jejím konci. Formulář se otevře jako Nová rezervace, už s ní propojený.',
|
||||
'Nová rezervace pro zastávku začíná ve sloupci dnů: najeďte na zastávku a klikněte na Přidat rezervaci, lístek na jejím konci. Formulář se otevře jako Nová rezervace, už s ní propojený.',
|
||||
'help.guide.place-booking.result':
|
||||
'Rezervace visí na zastávce: je na kartě, je ve dni a její soubory jsou vypsané i tady pod Soubory.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Proužek se ukáže jen u zastávky, ke které je rezervace připnutá. Rezervace bez zastávky žije na kartě Rezervace.',
|
||||
'Kartička rezervace se ukáže jen u zastávky, ke které je rezervace připnutá. Rezervace bez zastávky žije na kartě Rezervace.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Jednu zastávku může sdílet několik rezervací: oběd a prohlídka, která vychází ze stejných dveří.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2453,7 +2457,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Nahoře počasí dne. Předpověď pro pojmenuje místo, kterého se týká: první zastávku dne, nebo hotel, ve kterém se probudíte.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Rezervace vypisují rezervace toho dne, každou s jejím druhem, zastávkou, ke které patří, a časy. Zelená znamená potvrzeno, jantarová ještě čeká na potvrzení; je to jen výpis, rezervace se mění na kartě Rezervace.',
|
||||
'Rezervace vypisují rezervace toho dne, každou s jejím druhem, zastávkou, ke které patří, a časy. Zelená znamená potvrzeno, jantarová ještě čeká na potvrzení a kliknutím na řádek se rezervace otevře.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Ubytování ukazuje každou noc rezervovanou přes tento den, s Check-in a Check-out ve dnech, kdy nastanou, s časovým oknem check-inu, časem check-outu a číslem potvrzení.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2483,7 +2487,7 @@ const help: TranslationStrings = {
|
||||
'Předpověď pro pojmenuje místo, kterého se čísla týkají: první zastávku dne, nebo, ve dni bez ní, hotel, ve kterém se probudíte.',
|
||||
'help.guide.day-weather.step.2': 'Velké číslo je teplota dne, vedle něj minimum a maximum a stav počasí slovy.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Štítky pod ním: pravděpodobnost srážek, kolik jich bude, nejsilnější vítr a východ a západ slunce.',
|
||||
'Štítky vpravo od něj: pravděpodobnost srážek, kolik jich bude, nejsilnější vítr a východ a západ slunce.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Dole den hodinu po hodině, každou druhou hodinu: čas, ikona, teplota a pravděpodobnost srážek. Hodina nad 50 procent je podbarvená modře.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2516,17 +2520,18 @@ const help: TranslationStrings = {
|
||||
'Objekt musí být nejprve místem cesty. Vytvořte ho ve sloupci míst jako kterékoli jiné místo: výběr nabízí jen to, co už tam je.',
|
||||
'help.guide.add-accommodation.step.2': 'Otevřete den, kdy přijíždíte, a klikněte na Přidat ubytování pod Ubytování.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Použít na dny říká, které noci pobyt pokrývá: den check-inu vlevo, den check-outu vpravo. Vše pokrývá celou cestu.',
|
||||
'Použít na dny říká, které noci pobyt pokrývá: Začátek je den check-inu, Konec den check-outu a Vše pokrývá celou cestu. Záhlaví dialogu ukazuje rozsah a počet nocí.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Vyplňte Check-in, Do a Check-out a číslo rezervace dejte pod Potvrzení. Všechna čtyři mohou zůstat prázdná.',
|
||||
'help.guide.add-accommodation.step.5': 'Vyberte objekt z míst cesty. Štítky nad seznamem ho zúží na jednu kategorii.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Vyberte objekt z míst cesty. Kategorie nad seznamem ho zúží na jednu kategorii.',
|
||||
'help.guide.add-accommodation.step.6': 'Klikněte na Uložit.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Pobyt se ukáže na každém dni, který pokrývá, Check-in na prvním a Check-out na posledním. Objekt se stane zastávkou na dni check-inu, takže mapa nakreslí cestu tam, a na kartě Rezervace se objeví rezervace typu Ubytování.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Výběr se otevře na dni, ze kterého jste přišli, s check-outem den poté; obojí lze před uložením posunout.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Dejte hotelu při vytváření kategorii cesty Hotel a štítky nad seznamem ho jedním kliknutím zúží na vaše hotely.',
|
||||
'Dejte hotelu při vytváření kategorii Hotel a Kategorie nad seznamem ho jedním kliknutím zúží na vaše hotely.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Časy jsou všechny nepovinné: pobyt bez check-inu a bez kódu stále pokrývá své noci a stále kreslí svou trasu.',
|
||||
// edit-accommodation
|
||||
@@ -2536,7 +2541,7 @@ const help: TranslationStrings = {
|
||||
'Na každém dni pobytu ukazuje karta objekt, okno check-inu, čas check-outu a číslo potvrzení.',
|
||||
'help.guide.edit-accommodation.step.2': 'Tužka vpravo od ní pobyt zase otevře. Okno teď hlásí Upravit ubytování.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Opravte řádek polí: Check-in, Do, Check-out a Potvrzení. Dny nad ním a objekt pod ním se dají změnit také tady.',
|
||||
'Opravte Check-in, Do, Check-out a Potvrzení. Dny nad nimi a objekt pod nimi se dají změnit také tady.',
|
||||
'help.guide.edit-accommodation.step.4': 'Klikněte na Uložit.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'X vedle tužky pobyt ukončí. Na nic se neptá a rezervace typu Ubytování, která k němu patří, jde s ním.',
|
||||
@@ -2552,7 +2557,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Rezervace vypisují rezervace dne: ty datované na něj a ty, které visí na některé z jeho zastávek.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Řádek ukazuje, jaký druh rezervace to je, její název a, když patří k zastávce, tu zastávku za tečkou. Její časy sedí na pravém konci.',
|
||||
'Řádek ukazuje, jaký druh rezervace to je, její název a, když patří k zastávce, tu zastávku šedě za ním. Její časy sedí na pravém konci, před tečkou stavu.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Barva říká, jak rezervace stojí: zelený řádek je potvrzený, jantarový ještě čeká na potvrzení. Hotely v tomto seznamu nejsou, mají vlastní blok níže.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -67,6 +67,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.allDays': 'Alle Tage',
|
||||
'costs.expensesCount': '{count} Ausgaben',
|
||||
'costs.addExpense': 'Ausgabe hinzufügen',
|
||||
'costs.view.label': 'Ansicht',
|
||||
'costs.view.list': 'Liste',
|
||||
'costs.view.table': 'Tabelle',
|
||||
'costs.table.lockedPayer': 'Von jemandem bezahlt: Ändere den Betrag in der Ausgabe, damit die Salden stimmen.',
|
||||
'costs.table.lockedCurrency': 'In {currency} eingetragen: Ändere den Betrag in der Ausgabe.',
|
||||
'costs.table.summary': 'Übersicht',
|
||||
'costs.table.byCategory': 'Kategorie',
|
||||
'costs.table.byDate': 'Tag',
|
||||
'costs.table.byPayer': 'Zahler',
|
||||
'costs.table.byStatus': 'Status',
|
||||
'costs.table.noPayer': 'Noch kein Zahler',
|
||||
'costs.table.paid': 'Bezahlt',
|
||||
'costs.table.open': 'Offen',
|
||||
'costs.editExpense': 'Ausgabe bearbeiten',
|
||||
'costs.noMatch': 'Keine Ausgaben passen zur Suche.',
|
||||
'costs.emptyText': 'Noch keine Ausgaben. Füge die erste hinzu.',
|
||||
|
||||
+58
-56
@@ -1773,7 +1773,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Titel, Daten, Cover und Währung bearbeitest du unter Meine Trips, mit dem Stift auf der Reisekarte.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Die Chevrons an der Innenkante einer Spalte klappen sie weg, und die Karte nimmt den Platz; der schmale Trenner neben einer Spalte ändert ihre Breite.',
|
||||
'Die Lasche an der Innenkante einer Spalte klappt sie weg, und die Karte nimmt den Platz; der schmale Trenner neben einer Spalte ändert ihre Breite.',
|
||||
'help.ctx.trip.bullet.6':
|
||||
'Der Rückgängig-Pfeil in der Werkzeugleiste der Tage nimmt die letzte Änderung am Plan zurück.',
|
||||
// add-member
|
||||
@@ -1841,8 +1841,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Platz für die Karte schaffen',
|
||||
'help.guide.collapse-columns.goal': 'Klapp eine Spalte weg oder gib ihr mehr Breite.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Klick auf den Chevron an der Innenkante der Tage-Spalte, um sie einzuklappen; die Karte nimmt den Platz. Die Orte-Spalte hat denselben Chevron.',
|
||||
'help.guide.collapse-columns.step.2': 'Klick noch einmal auf den Chevron, um die Spalte zurückzuholen.',
|
||||
'Klick auf die Lasche an der Innenkante der Tage-Spalte, die mit dem Seitenleisten-Symbol, um die Spalte wegzuklappen; die Karte nimmt den Platz. Die Orte-Spalte hat dieselbe Lasche.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Eine weggeklappte Spalte lässt eine Kachel in der Ecke der Karte zurück, Planung für die Tage und Orte für die Orte. Klick darauf, um die Spalte zurückzuholen.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Zieh den schmalen Trenner zwischen einer Spalte und der Karte, um die Breite der Spalte zu ändern.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1869,15 +1870,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Ort/Aktivität hinzufügen oben öffnet das Formular für einen Ort, den du eintippst oder suchst. Solange ein Tag geöffnet ist, heißt der Knopf Neuer Ort, und Zum Tag daneben legt den Ort direkt auf diesem Tag an.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Dateimport nimmt .gpx-, .kml- und .kmz-Dateien; Listenimport nimmt eine geteilte Liste aus Google Maps oder Naver Maps. Eine Datei lässt sich auch einfach auf die Spalte fallen lassen.',
|
||||
'Der Import-Knopf daneben bietet Dateimport für .gpx-, .kml- und .kmz-Dateien und Google Liste (Listenimport, wenn auch Naver-Listen an sind) für eine geteilte Liste aus Google Maps oder Naver Maps. Eine Datei lässt sich auch einfach auf die Spalte fallen lassen.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Das Auswahlmenü wechselt zwischen Alle, Ungeplant, Geplant und, sobald ein Track importiert wurde, Tracks; darunter sitzen die Suche, der Kategoriefilter und der Stern für eine Mindestbewertung.',
|
||||
'Darunter die Suche, mit dem Haken daneben, der eine Auswahl startet, und eine Reihe Filter: Anzeigen wechselt zwischen Alle, Ungeplant, Geplant und, sobald ein Track importiert wurde, Tracks, jeweils mit ihrer Anzahl; der Etiketten-Knopf filtert nach Kategorie und der Stern nach einer Mindestbewertung.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Eine Zeile zeigt Bild, Name und Beschreibung oder Adresse. Klick sie für die Ortsdetails an, zieh sie auf einen Tag, oder öffne mit Rechtsklick Bearbeiten, + Tag, Webseite öffnen, Google Maps, In Sammlung speichern und Löschen.',
|
||||
'Eine Zeile zeigt Bild, Name und Beschreibung oder Adresse. Klick sie für die Ortsdetails an, zieh sie auf einen Tag, oder öffne mit Rechtsklick (oder über ihre drei Punkte) Bearbeiten, + Tag, Webseite öffnen, Google Maps, In Sammlung speichern und Löschen.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Bei geöffnetem Tag legt ein + am Ende einer ungeplanten Zeile den Ort auf diesen Tag, und Geplant listet nur diesen Tag, mit Ganze Reise anzeigen zum Aufweiten.',
|
||||
'Bei geöffnetem Tag legt + Tag am Ende einer ungeplanten Zeile den Ort auf diesen Tag, und Geplant listet nur diesen Tag, mit Ganze Reise anzeigen zum Aufweiten.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Der Haken am rechten Ende der Filterzeile startet eine Auswahl: mehrere Zeilen auf einmal bekommen eine neue Kategorie, wandern in eine Sammlung oder werden gelöscht.',
|
||||
'Der Haken neben der Suche startet eine Auswahl: über die Leiste am Fuß der Spalte bekommen mehrere Zeilen auf einmal eine neue Kategorie, wandern in eine Sammlung, werden als besucht markiert oder gelöscht.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Einen Ort anlegen',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1885,11 +1886,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Klick oben in der Orte-Spalte auf Ort/Aktivität hinzufügen (Neuer Ort, solange ein Tag geöffnet ist). Das Formular öffnet sich.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Tipp den Ort oben in Ortssuche... ein und wähl ein Ergebnis. Name, Adresse, Breitengrad, Längengrad und Website füllen sich, und Ortsdetails links zeigt Bilder, Öffnungszeiten und eine Beschreibung dazu. Auf einem TREK mit Google-Schlüssel steht unter der Liste Nicht der richtige Ort? Stattdessen bei Google suchen und schickt dieselbe Suche noch einmal über Google.',
|
||||
'Tipp den Ort in Ortssuche... ein und wähl ein Ergebnis. Der Name im Kopf des Dialogs, Adresse, Breitengrad, Längengrad und Website füllen sich, und Ortsdetails links zeigt Bilder, Öffnungszeiten und eine Beschreibung dazu. Auf einem TREK mit Google-Schlüssel steht unter der Liste Nicht der richtige Ort? Stattdessen bei Google suchen und schickt dieselbe Suche noch einmal über Google. Gespeicherte Orte rechts bietet die Orte deiner Sammlungen auf dieselbe Weise an.',
|
||||
'help.guide.create-place.step.3':
|
||||
'In den Ortsdetails macht ein Klick auf ein Bild unter Bild auswählen es zum Bild des Ortes; Text übernehmen trägt die Beschreibung ins Formular.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Prüf die Felder: Name ist Pflicht; Beschreibung und Notizen gehören dir; Adresse, Breitengrad und Längengrad kommen aus der Suche oder werden getippt; Kategorie wählt eine der Kategorien der Reise, und das + daneben legt auf der Stelle eine neue an; Website nimmt den Link.',
|
||||
'Prüf, was im Formular steht: der Name sitzt im Kopf des Dialogs und ist das einzige Pflichtfeld; die Kategorie-Pille darunter wählt eine der Kategorien der Reise, und das + daneben legt auf der Stelle eine neue an. Adresse, Breitengrad und Längengrad kommen aus der Suche oder werden getippt; Beschreibung und Notizen gehören dir; Website nimmt den Link.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Klick auf Hinzufügen. Liegt schon ein Ort gleichen Namens in der Reise, sagt das Formular es, und der Knopf wird zu Trotzdem hinzufügen.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1909,7 +1910,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Zum Tag öffnet dasselbe Formular wie Neuer Ort, nur landet der Ort in dem Moment auf dem geöffneten Tag, in dem du auf Hinzufügen klickst.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Ein Ort, den es schon gibt, kommt mit dem + am Ende seiner Zeile auf den geöffneten Tag, oder per Rechtsklick über + Tag.',
|
||||
'Ein Ort, den es schon gibt, kommt mit + Tag am Ende seiner Zeile auf den geöffneten Tag, oder per Rechtsklick über + Tag.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Andersherum geht es auch, und ohne vorher einen Tag zu öffnen: Zieh die Zeile des Ortes aus der Spalte und lass sie auf einer Tageskarte los. Zwischen zwei Stopps abgelegt, landet er genau dort.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1921,10 +1922,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Einen Ort in der Liste finden',
|
||||
'help.guide.filter-places.goal': 'Eng die Spalte auf die Orte ein, die du suchst.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Das Auswahlmenü oben wechselt zwischen Alle, Ungeplant (noch auf keinem Tag), Geplant (auf einem Tag) und Tracks (importierte GPX-Tracks), jeweils mit seiner Anzahl.',
|
||||
'help.guide.filter-places.step.2': 'Tipp in Orte suchen...; die Liste wird mit jedem Zeichen enger.',
|
||||
'Anzeigen, das Auswahlmenü unter der Suche, wechselt zwischen Alle, Ungeplant (noch auf keinem Tag), Geplant (auf einem Tag) und Tracks (importierte GPX-Tracks), jeweils mit seiner Anzahl.',
|
||||
'help.guide.filter-places.step.2': 'Tipp oben in Suchen; die Liste wird mit jedem Zeichen enger.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Alle Kategorien öffnet eine Liste, in der du eine oder mehrere Kategorien ankreuzt, Keine Kategorie darunter; Filter zurücksetzen an ihrem Ende setzt sie zurück.',
|
||||
'Der Etiketten-Knopf neben Anzeigen listet die Kategorien: hak eine oder mehrere an, Keine Kategorie darunter. Der Knopf zählt, was angehakt ist, und Filter zurücksetzen am Ende der Liste hebt alle wieder auf.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Der Stern daneben setzt eine Mindestbewertung: 5+, 4+ und so weiter zeigen nur Orte, die du mindestens so hoch bewertet hast.',
|
||||
'help.guide.filter-places.result':
|
||||
@@ -1940,7 +1941,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Rechtsklick auf die Zeile und Bearbeiten wählen, oder den Ort öffnen und in seinen Details auf Bearbeiten klicken.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Ändere, was du brauchst: Name, Beschreibung, Notizen, Adresse, Breitengrad und Längengrad, Kategorie, Website. Von einem Tag aus geöffnet, hat das Formular zusätzlich Notizen für diesen Tag sowie Startzeit und Ende für diesen Tag.',
|
||||
'Ändere, was du brauchst: den Namen und die Kategorie-Pille im Kopf des Dialogs, Adresse, Breitengrad und Längengrad, Beschreibung, Notizen und Website. Von einem Tag aus geöffnet, hat das Formular zusätzlich Startzeit und Ende sowie Notizen für diesen Tag.',
|
||||
'help.guide.edit-place.step.3': 'Klick auf Aktualisieren.',
|
||||
'help.guide.edit-place.result':
|
||||
'Die Änderung gilt überall, wo der Ort auftaucht: in der Liste, auf der Karte und an jedem Tag, an dem er hängt.',
|
||||
@@ -1954,22 +1955,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Rechtsklick auf die Zeile und Löschen wählen, oder in den Ortsdetails auf Löschen klicken.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Bestätige. Wurde an dem Ort eine Nacht gebucht oder hängt eine Buchung daran, sagt die Frage, was mitgeht.',
|
||||
'Klick in der Frage auf Löschen. Wurde an dem Ort eine Nacht gebucht oder hängt eine Buchung daran, sagt die Frage, was mitgeht.',
|
||||
'help.guide.delete-place.result':
|
||||
'Der Ort ist aus der Liste, von der Karte und von jedem Tag verschwunden; Rückgängig in der Werkzeugleiste über den Tagen holt ihn zurück.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Um einen Ort nur von einem Tag zu nehmen, nutz stattdessen Vom Tag entfernen an diesem Stopp.',
|
||||
'help.guide.delete-place.tip.2': 'Mehrere Orte auf einmal: Der Haken neben den Filtern startet eine Auswahl.',
|
||||
'help.guide.delete-place.tip.2': 'Mehrere Orte auf einmal: Der Haken neben der Suche startet eine Auswahl.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Mehrere Orte auf einmal ändern oder löschen',
|
||||
'help.guide.select-places.goal': 'Räum die Liste in einem Zug auf, statt Ort für Ort.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Klick auf den Haken am rechten Ende der Filterzeile. Die Zeilen bekommen Kästchen, und eine Leiste mit den Aktionen erscheint.',
|
||||
'Klick auf den Haken neben dem Suchfeld. Die Zeilen bekommen runde Kästchen, und am Fuß der Spalte erscheint eine Leiste mit den Aktionen.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Hak die Zeilen an, oder nutz Alle auswählen in der Leiste; die Leiste zählt, was ausgewählt ist.',
|
||||
'Klick die Zeilen an, um sie anzuhaken. Alle auswählen, der doppelte Haken in der Leiste, nimmt jede Zeile, die die Filter übrig lassen.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Kategorie ändern gibt allen eine Kategorie; In Sammlung speichern kopiert sie in eine deiner Sammlungen; Auswahl löschen entfernt sie nach einer Bestätigung.',
|
||||
'help.guide.select-places.step.4': 'Klick noch einmal auf den Haken, um die Auswahl zu verlassen.',
|
||||
'Die Leiste zählt die angehakten Orte. Kategorie ändern gibt allen eine Kategorie; In Sammlung speichern kopiert sie in eine deiner Sammlungen; Auswahl löschen entfernt sie nach einer Bestätigung.',
|
||||
'help.guide.select-places.step.4': 'Fertig, das X am Ende der Leiste, beendet die Auswahl.',
|
||||
'help.guide.select-places.result':
|
||||
'Die Änderung gilt für jeden ausgewählten Ort; ein Löschen lässt sich über die Werkzeugleiste über den Tagen rückgängig machen.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1981,7 +1982,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.goal':
|
||||
'Hol herein, was Google My Maps, Google Earth oder ein GPS-Tracker exportiert hat.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Klick auf Dateimport, oder lass die Datei irgendwo auf der Orte-Spalte fallen.',
|
||||
'Klick auf den Import-Knopf neben dem Hinzufügen-Knopf und wähl Dateimport, oder lass die Datei irgendwo auf der Orte-Spalte fallen.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Wähl die Datei oder zieh sie in das Feld. Bei einer GPX hakst du an, was importiert wird: Wegpunkte, Routen, Tracks (mit Streckenverlauf); bei KML und KMZ Punkte (Placemarks) und Pfade (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1997,7 +1998,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Eine geteilte Liste aus Google Maps oder Naver Maps importieren',
|
||||
'help.guide.import-places-list.goal': 'Mach aus dem Link einer geteilten Liste Orte.',
|
||||
'help.guide.import-places-list.step.1': 'Klick auf Listenimport und wähl Google Liste oder Naver Liste.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Klick auf den Import-Knopf neben dem Hinzufügen-Knopf und wähl Google Liste. Wenn auch Naver-Listen an sind, heißt der Eintrag Listenimport, und der Dialog fragt, welche der beiden.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Füg den geteilten Link der Liste ein. Ein Routenlink von Google Maps geht auch: Seine Stopps werden zu Orten, in der Reihenfolge der Fahrt.',
|
||||
'help.guide.import-places-list.step.3': 'Klick auf Importieren.',
|
||||
@@ -2015,24 +2017,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Die Leiste oben: Exportieren (PDF, Kalender, GPX), Alle Tage ausklappen / Alle Tage einklappen, der Rückgängig-Pfeil, Tage neu anordnen und Alle Buchungsrouten anzeigen.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Eine Tageskarte: Nummer, Wetter, Titel, Datum und die Kosten des Tages im Kopf; ein Klick auf den Kopf öffnet den Tag, der Pfeil daneben klappt sie zu. Öffentliche Verkehrsmittel, Transport hinzufügen und Notiz hinzufügen sitzen ebenfalls im Kopf.',
|
||||
'Eine Tageskarte: eine Kachel mit der Tagesnummer und der Vorhersage, Titel und Datum, dazu Pillen für die gebuchte Nacht, einen Mietwagen und die Kosten des Tages. Ein Klick auf den Kopf öffnet den Tag, der Pfeil klappt ihn zu, und das + öffnet ein Menü: Ort zu diesem Tag, Unterkunft hinzufügen, Transport hinzufügen, Öffentliche Verkehrsmittel und Notiz hinzufügen.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Im Tag: die Stopps in ihrer Reihenfolge, jeder mit Bild, Name, Uhrzeit und einem Schloss auf dem Bild; Notizen; Buchungen, die zum Tag gehören; und zwischen den Stopps die Fahrzeit jeder Etappe.',
|
||||
'Im Tag: die Stopps in ihrer Reihenfolge, jeder mit Bild, Name, Uhrzeit, einem Schloss auf dem Bild und den Buchungen, die an ihm hängen; Notizen; die Buchungen und Transporte des Tages, getönt nach ihrer Art; und zwischen den Stopps die Fahrzeit jeder Etappe. Jede Zeile hat ein Drei-Punkte-Menü, dasselbe wie beim Rechtsklick.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Unter den Stopps die Routenleiste: Route zeichnet den Tag auf die Karte, Optimieren sortiert die Stopps, Auto / Fußweg setzt das Verkehrsmittel des Tages, In Google Maps öffnen und In CoMaps öffnen geben den Tag weiter.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Orte kommen auf einen Tag, indem du eine Zeile aus der Orte-Spalte ziehst, über das + in dieser Zeile, über Ort zu diesem Tag auf einem leeren Tag oder aus den Ortsdetails.',
|
||||
'Orte kommen auf einen Tag, indem du eine Zeile aus der Orte-Spalte ziehst, über + Tag in dieser Zeile, über Ort zu diesem Tag im + des Tages oder auf einem leeren Tag, oder aus den Ortsdetails.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Gesamtkosten unten zählt jeden Stopp und jede Buchung mit einem Preis zusammen, in der Währung der Reise.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Einen Tag lesen',
|
||||
'help.guide.read-day-plan.goal': 'Wisse, was jeder Teil einer Tageskarte sagt, bevor du etwas änderst.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Der Kopf: die Tagesnummer, die Vorhersage für den Tag, Tag 1 oder der Titel, den du vergeben hast, das Datum und die Kosten des Tages. Klick auf den Kopf, um den Tag zu öffnen (seine Tagesdetails öffnen sich über der Karte); der Pfeil rechts klappt die Karte zu und wieder auf.',
|
||||
'Der Kopf: eine Kachel mit der Tagesnummer und der Vorhersage, dann Tag 1 oder der Titel, den du vergeben hast, das Datum und Pillen für die gebuchte Nacht (Check-in oder Check-out), einen Mietwagen und die Kosten des Tages. Klick auf den Kopf, um den Tag zu öffnen (seine Tagesdetails öffnen sich über der Karte); das + rechts legt einen Ort, eine Unterkunft, einen Transport, eine Verbindung oder eine Notiz an, und der Pfeil klappt die Karte zu.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Ein Stopp: der Griff links zieht ihn, das Bild trägt ein Schloss für die Routenoptimierung, dann der Name, die Beschreibung und, wenn gesetzt, die Notizen für diesen Tag. Ein Zeit-Abzeichen zeigt Startzeit und Ende, wenn der Stopp sie hat; die Pfeile, die an seinem rechten Ende erscheinen, schieben ihn nach oben oder nach unten.',
|
||||
'Ein Stopp: der Griff links zieht ihn, das Bild trägt ein Schloss für die Routenoptimierung, dann der Name, ein Zeit-Abzeichen, wenn der Stopp Startzeit und Ende hat, die Beschreibung und, wenn gesetzt, die Notizen für diesen Tag. Die Pfeile an seinem rechten Ende schieben ihn nach oben oder unten, die drei Punkte öffnen sein Menü.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Eine Buchung am Tag: eine Reservierung an einem Stopp markiert den Stopp als Reservierung bestätigt oder Reservierung ausstehend, und ein Transport erscheint als Abflug oder Ankunft mit seiner Zeit und seiner Strecke, mit einem kleinen Schalter, der diese Route auf der Karte zeichnet.',
|
||||
'Eine Buchung an einem Stopp sitzt als Abzeichen Reservierung darauf, grün, wenn sie bestätigt ist, und gelb, solange sie aussteht, mit ihrer Zeit und ihrem Anbieter; ein Klick auf das Abzeichen öffnet die Buchung, der Routenknopf daneben zeichnet ihre Route. Ein Transport ist eine eigene Zeile, getönt nach seiner Art, mit Abflug oder Ankunft und seiner Zeit. Klick auf eine Buchung, und ihre Details öffnen sich; Bearbeiten dort ändert sie.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Zwischen zwei Stopps sagt das Verbindungsstück, wie lange die Etappe dauert und wie weit sie ist, im Verkehrsmittel des Tages; klick es an, um das Verkehrsmittel für diese eine Etappe zu ändern.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2040,7 +2042,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Jedes Symbol auf der Karte hat eine Bedeutung; die Anleitungen unten ändern jedes davon.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Rechtsklick auf einen Stopp öffnet sein Menü: Bearbeiten, Aus Tag entfernen, Webseite öffnen, die Navigations-Apps (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), In Sammlung speichern, Löschen.',
|
||||
'Rechtsklick auf einen Stopp oder ein Klick auf seine drei Punkte öffnet sein Menü: Bearbeiten, Aus Tag entfernen, Webseite öffnen, die Navigations-Apps (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), In Sammlung speichern, Löschen.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Fahr über einen Stopp, und an seinem Ende erscheint Buchung hinzufügen: eine dort angelegte Reservierung hängt an diesem Stopp an diesem Tag.',
|
||||
// place-onto-day
|
||||
@@ -2050,9 +2052,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Zieh eine Zeile aus der Orte-Spalte auf die Tageskarte. Lass sie zwischen zwei Stopps fallen, um sie genau dorthin zu setzen, oder irgendwo auf der Karte, um sie anzuhängen.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Ohne Ziehen: öffne den Tag mit einem Klick auf seinen Kopf, dann klick auf das + am Ende der Zeile des Ortes, oder klick mit der rechten Maustaste auf die Zeile und wähl + Tag.',
|
||||
'Ohne Ziehen: öffne den Tag mit einem Klick auf seinen Kopf, dann klick auf + Tag am Ende der Zeile des Ortes, oder klick mit der rechten Maustaste auf die Zeile und wähl + Tag.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Auf einem leeren Tag öffnet Ort zu diesem Tag das Ortsformular, und der neue Ort landet sofort auf dem Tag.',
|
||||
'Ort zu diesem Tag, im +-Menü des Tages oder auf einem leeren Tag, öffnet das Ortsformular, und der neue Ort landet sofort auf dem Tag.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Aus den Ortsdetails fragt Zum Tag hinzufügen, welcher Tag es sein soll; bei einem über seinen Kopf geöffneten Tag legt Zum Tag in der Orte-Spalte einen neuen Ort auf dem geöffneten Tag an.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2082,7 +2084,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Leg fest, wann ein Stopp beginnt und endet, damit der Tag sich wie ein Zeitplan liest.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Rechtsklick auf den Stopp und Bearbeiten wählen. Vom Tag aus geöffnet, hat das Formular unten Startzeit und Ende.',
|
||||
'Rechtsklick auf den Stopp oder ein Klick auf seine drei Punkte, dann Bearbeiten wählen. Vom Tag aus geöffnet, hat das Formular Startzeit und Ende für diesen Tag, gleich unter dem Ort.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Trag Startzeit und, wenn du magst, Ende ein. Zeitliche Überschneidung mit: warnt, dass ein anderer Stopp des Tages mit Uhrzeit überlappt; ein Ende vor der Startzeit blockiert Aktualisieren.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2121,13 +2123,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Eine Notiz zu einem Tag schreiben',
|
||||
'help.guide.day-note.goal': 'Halt eine Erinnerung, eine Ticketnummer oder einen Plan B direkt im Tag fest.',
|
||||
'help.guide.day-note.step.1': 'Klick auf Notiz hinzufügen im Kopf des Tages.',
|
||||
'help.guide.day-note.step.1': 'Klick auf das + im Kopf des Tages und wähl Notiz hinzufügen.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Gib ihr unter Notiz einen Namen, das ist, was im Tag zu sehen ist, und schreib den Rest unter Tagesnotiz. Die Werkzeugleiste darüber formatiert den Text (Fett, Aufzählung, Link, Zitat), und Vorschau links zeigt, wie die Notiz im Tag aussehen wird.',
|
||||
'Tipp den Namen der Notiz oben in den Kopf des Dialogs, wo Notiz steht; das ist, was im Tag zu sehen ist. Den Rest schreibst du unter Tagesnotiz: die Werkzeugleiste darüber formatiert den Text (Fett, Aufzählung, Link, Zitat), und Vorschau links zeigt die Zeile, die daraus wird.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Wähl ein Symbol und eine Farbe, damit sich die Notiz von den Stopps abhebt, und dann Hinzufügen.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Die Notiz sitzt im Tag wie ein Stopp: zieh sie an ihre Stelle, öffne mit Rechtsklick Bearbeiten und Löschen.',
|
||||
'Die Notiz sitzt im Tag wie ein Stopp: zieh sie an ihre Stelle, und öffne mit Rechtsklick oder über ihre drei Punkte Bearbeiten und Löschen.',
|
||||
'help.guide.day-note.result':
|
||||
'Die Notiz ist Teil des Tages, auch im PDF; eine Notiz mit Uhrzeit sortiert sich zu den Stopps mit Uhrzeit.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2178,15 +2180,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Wisse, wo eine Buchung auftaucht, sobald es sie gibt, und welcher Bildschirm sie anlegt.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Ein Transport (Flug, Zug, Fähre, Bus, Auto) erscheint am Tag der Abreise als Abflug und am Tag der Ankunft als Ankunft, mit Zeit und Strecke; ein mehrtägiger spannt sich über die Tage dazwischen.',
|
||||
'Ein Transport (Flug, Zug, Fähre, Bus, Auto) ist eine Zeile, getönt nach seiner Art: Abflug am Tag der Abreise, Ankunft am Tag der Landung, mit Zeit und Strecke; ein mehrtägiger spannt sich über die Tage dazwischen. Klick auf die Zeile, und die Buchung öffnet sich.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Eine Reservierung an einem Stopp (ein Restaurant, eine Tour) markiert diesen Stopp als Reservierung bestätigt oder Reservierung ausstehend; eine Buchung mit einem Tag, aber ohne Stopp, ist eine eigene Zeile im Tag.',
|
||||
'Eine Reservierung an einem Stopp (ein Restaurant, eine Tour) ist ein Abzeichen Reservierung an diesem Stopp, grün, wenn sie bestätigt ist, und gelb, solange sie aussteht, mit ihrer Zeit; eine Buchung mit einem Tag, aber ohne Stopp, ist eine eigene Zeile im Tag.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Eine Nacht im Hotel ist eine Unterkunft: sie sitzt in den Tagesdetails unter Unterkunft, von Check-in bis Check-out, und die Route jedes dieser Tage beginnt dort.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Auf der Karte zeichnet der Schalter in einer Transportzeile dessen Route; Alle Buchungsrouten anzeigen in der Leiste zeichnet sie alle.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Anlegen: Buchung hinzufügen an einem Stopp, über den du fährst, Transport hinzufügen und Öffentliche Verkehrsmittel im Kopf des Tages, und die Reiter Buchungen und Transport für die ganze Liste mit Import und Dateien.',
|
||||
'Anlegen: Buchung hinzufügen an einem Stopp, über den du fährst, Transport hinzufügen und Öffentliche Verkehrsmittel im +-Menü des Tages, und die Reiter Buchungen und Transport für die ganze Liste mit Import und Dateien.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Eine Buchung, ein Platz im Plan; die Reiter sind dieselben Buchungen als Liste.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2217,24 +2219,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Klick auf eine Zeile in der Orte-Spalte, auf einen Stopp in einem Tag oder auf einen Marker auf der Karte, und die Ortsdetails öffnen sich über der Karte. Wählst du den Ort in einem Tag, wissen die Details, welchen Stopp du meinst, und genau das bringt die Teilnehmer des Stopps und seine Buchung mit.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Der Kopf trägt das runde Bild, den Namen, die Kategorie, die Adresse und die Koordinaten. Klick auf das Bild, um ein eigenes zu nehmen, doppelklick auf den Namen, um den Ort auf der Stelle umzubenennen, und das X rechts schließt die Ansicht.',
|
||||
'Der Kopf trägt das runde Bild, den Namen, die Adresse in einer Zeile und Pillen für das, was bekannt ist: geöffnet oder geschlossen, die Kategorie, den Preis, die Telefonnummer und die Koordinaten. Klick auf das Bild, um ein eigenes zu nehmen, doppelklick auf den Namen, um den Ort auf der Stelle umzubenennen, und das X rechts schließt die Ansicht.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Darunter: der Preis, falls er einen hat, die Sterne, die jeder Mitreisende dem Ort gegeben hat, die Beschreibung und die Notizen, und Notizen für diesen Tag, wenn der Stopp welche trägt.',
|
||||
'Darunter: die Sterne, die jeder Mitreisende dem Ort gegeben hat, die Beschreibung und die Notizen, und Notizen für diesen Tag, wenn der Stopp welche trägt.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Öffnungszeiten, Streckenfarbe, Streckendaten und Dateien folgen, soweit sie zutreffen. Dateien nimmt alles aus deinen Ordnern und listet außerdem, was an der Buchung dieses Stopps hängt.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Die Zeile ganz unten: Zum Tag hinzufügen oder Vom Tag entfernen, solange ein Tag geöffnet ist, dann In Sammlung speichern, Navigation, Webseite öffnen, Bearbeiten und Löschen.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Ein Ort, der aus der Suche gewählt wurde, trägt, was der TREK-Index oder OpenStreetMap über ihn wissen: einen grünen Ring mit Geöffnet oder einen roten mit Geschlossen um das Bild, nach der Uhr des Ortes beurteilt, die Telefonnummer unter den Sternen, Öffnungszeiten weiter unten mit der Zeile des Tages auf der Zeile und der ganzen Woche hinter einem Klick, und seine Webseite hinter Webseite öffnen. Googles Bewertung zeigt sich nur bei einem Ort, der über Google gefunden wurde, auf einem TREK mit Google-Schlüssel.',
|
||||
'Ein Ort, der aus der Suche gewählt wurde, trägt, was der TREK-Index oder OpenStreetMap über ihn wissen: Geöffnet oder Geschlossen unter den Pillen des Kopfes, mit einem grünen oder roten Ring um das Bild, nach der Uhr des Ortes beurteilt, seine Telefonnummer ebenfalls als Pille, Öffnungszeiten weiter unten mit der Zeile des Tages auf der Zeile und der ganzen Woche hinter einem Klick, und seine Webseite hinter Webseite öffnen. Googles Bewertung zeigt sich nur bei einem Ort, der über Google gefunden wurde, auf einem TREK mit Google-Schlüssel.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Was die Ortsdetails über einen Ort sagen',
|
||||
'help.guide.read-place.goal': 'Lies alles, was die Reise über einen Ort weiß, in einer Ansicht.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Klick in der Tage-Spalte den Stopp an, den du lesen willst. Die Ortsdetails öffnen sich über der Karte, und der Stopp bleibt in seinem Tag markiert.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Der Kopf: das runde Bild, der Name, die Adresse und die genauen Koordinaten. Ein grüner Ring mit Geöffnet oder ein roter mit Geschlossen um das Bild sagt, ob der Ort gerade offen hat, nach seiner eigenen Uhr, sobald TREK seine Zeiten kennt. Das X rechts schließt die Ansicht wieder.',
|
||||
'Der Kopf: das runde Bild, der Name und die Adresse in einer Zeile; ihr Tooltip hält die ganze Adresse. Die Pillen darunter sagen, ob der Ort gerade geöffnet oder geschlossen hat, nach seiner eigenen Uhr, mit einem grünen oder roten Ring um das Bild dazu, und tragen die Telefonnummer, die ein Klick an deine Telefon-App weiterreicht, und die genauen Koordinaten. Das X rechts schließt die Ansicht wieder.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Darunter die Sterne, die jeder Mitreisende dem Ort gegeben hat, mit dem Durchschnitt und der Zahl der Stimmen. Noch nicht bewertet, solange niemand gestimmt hat. Gleich darunter die Telefonnummer, wo der Ort eine hat: Ein Klick darauf reicht die Nummer an deine Telefon-App weiter.',
|
||||
'Bewertung kommt als Erstes unter dem Kopf: die Sterne, die jeder Mitreisende dem Ort gegeben hat, mit dem Durchschnitt und der Zahl der Stimmen. Noch nicht bewertet, solange niemand gestimmt hat.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Dann die Beschreibung und darunter die Notizen. Beides ist der Text aus dem Formular des Ortes, gerendert: Listen, Links und Fettes funktionieren.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2328,18 +2330,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'Die Buchung an einem Stopp',
|
||||
'help.guide.place-booking.goal': 'Lies die Buchung, die zu einem Stopp gehört, öffne sie, und häng eine neue an ihn.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Öffne den Stopp, zu dem die Buchung gehört. Die Ortsdetails zeigen einen Streifen mit Bestätigt oder Ausstehend und dem Namen der Buchung.',
|
||||
'Öffne den Stopp, zu dem die Buchung gehört. Die Ortsdetails listen sie unter Buchungen als eigene kleine Karte, mit dem Namen der Buchung und Bestätigt oder Ausstehend.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Der Streifen trägt Datum, Uhrzeit und Buchungscode, dazu alle Notizen, die die Buchung hat.',
|
||||
'help.guide.place-booking.step.3': 'Klick auf den Streifen. Die Buchung öffnet sich über der Karte.',
|
||||
'Die Buchungskarte trägt Datum, Uhrzeit und Buchungscode, dazu alle Notizen, die die Buchung hat.',
|
||||
'help.guide.place-booking.step.3': 'Klick auf die Buchungskarte. Die Buchung öffnet sich über der Karte.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Bearbeiten am Fuß der Buchung öffnet ihr eigenes Formular. Mit Tagesplanung verknüpfen ist dort das, was eine Buchung an einen Stopp hängt, und hier nennt es schon diesen. Schließ das Formular wieder.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Eine neue Buchung für einen Stopp beginnt in der Tage-Spalte: Fahr über den Stopp und klick auf das + an seinem Ende. Das Formular öffnet sich als Neue Buchung, schon mit ihm verknüpft.',
|
||||
'Eine neue Buchung für einen Stopp beginnt in der Tage-Spalte: Fahr über den Stopp und klick auf Buchung hinzufügen, das Ticket an seinem Ende. Das Formular öffnet sich als Neue Buchung, schon mit ihm verknüpft.',
|
||||
'help.guide.place-booking.result':
|
||||
'Die Buchung hängt am Stopp: Sie steht in den Ortsdetails, sie steht im Tag, und ihre Dateien sind hier ebenfalls unter Dateien gelistet.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Der Streifen erscheint nur bei dem Stopp, an dem die Buchung hängt. Eine Buchung ohne Stopp lebt im Tab Buchung.',
|
||||
'Die Buchungskarte erscheint nur bei dem Stopp, an dem die Buchung hängt. Eine Buchung ohne Stopp lebt im Tab Buchung.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Mehrere Buchungen können sich einen Stopp teilen: das Mittagessen und die Tour, die an derselben Tür startet.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2588,7 +2590,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Ganz oben das Wetter des Tages. Vorhersage für nennt den Ort, für den es gilt: der erste Stopp des Tages oder das Hotel, in dem du aufwachst.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Reservierungen listet die Buchungen dieses Tages, jede mit ihrer Art, dem Stopp, zu dem sie gehört, und ihren Zeiten. Grün heißt bestätigt, bernsteinfarben noch ausstehend; es ist nur eine Anzeige, geändert werden Buchungen unter Buchungen.',
|
||||
'Reservierungen listet die Buchungen dieses Tages, jede mit ihrer Art, dem Stopp, zu dem sie gehört, und ihren Zeiten. Grün heißt bestätigt, gelb noch ausstehend, und ein Klick auf eine Zeile öffnet die Buchung.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Unterkunft zeigt jede Nacht, die über diesem Tag gebucht ist, mit Check-in und Check-out an den Tagen, an denen sie stattfinden, dem Check-in-Fenster, der Check-out-Zeit und der Bestätigungsnummer.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2623,7 +2625,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Die große Zahl ist die Temperatur des Tages, daneben der Tiefst- und der Höchstwert und die Wetterlage in Worten.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Die Chips darunter: die Regenwahrscheinlichkeit, wie viel Niederschlag fällt, der stärkste Wind sowie Sonnenaufgang und Sonnenuntergang.',
|
||||
'Die Pillen rechts daneben: die Regenwahrscheinlichkeit, wie viel Niederschlag fällt, der stärkste Wind sowie Sonnenaufgang und Sonnenuntergang.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Ganz unten der Tag Stunde für Stunde, jede zweite Stunde: die Zeit, das Symbol, die Temperatur und die Regenwahrscheinlichkeit. Eine Stunde über 50 Prozent ist blau hinterlegt.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2657,18 +2659,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.add-accommodation.step.2':
|
||||
'Öffne den Tag deiner Ankunft und klick unter Unterkunft auf Unterkunft hinzufügen.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Auf Tage anwenden sagt, welche Nächte der Aufenthalt abdeckt: links der Check-in-Tag, rechts der Check-out-Tag. Alle nimmt die ganze Reise.',
|
||||
'Auf Tage anwenden sagt, welche Nächte der Aufenthalt abdeckt: Beginn ist der Check-in-Tag, Ende der Check-out-Tag, und Alle nimmt die ganze Reise. Der Kopf des Dialogs zeigt den Zeitraum und die Zahl der Nächte.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Füll Check-in, Bis und Check-out aus und trag die Nummer der Buchung unter Bestätigung ein. Alle vier dürfen leer bleiben.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Wähl das Haus aus den Orten der Reise. Die Chips über der Liste engen sie auf eine Kategorie ein.',
|
||||
'Wähl das Haus aus den Orten der Reise. Kategorie über der Liste engt sie auf eine Kategorie ein.',
|
||||
'help.guide.add-accommodation.step.6': 'Klick auf Speichern.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Der Aufenthalt erscheint an jedem Tag, den er abdeckt, Check-in am ersten und Check-out am letzten. Das Haus wird zum Stopp am Check-in-Tag, sodass die Karte den Weg dorthin zeichnet, und unter Buchungen taucht eine Buchung vom Typ Unterkunft auf.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Die Auswahl öffnet auf dem Tag, von dem du kamst, mit Check-out am Tag darauf; beide lassen sich vor dem Speichern verschieben.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Gib dem Hotel beim Anlegen die Kategorie Hotel der Reise, dann engen die Chips über der Liste sie mit einem Klick auf deine Hotels ein.',
|
||||
'Gib dem Hotel beim Anlegen die Kategorie Hotel, dann engt Kategorie über der Liste sie mit einem Klick auf deine Hotels ein.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Die Zeiten sind alle optional: ein Aufenthalt ohne Check-in und ohne Code deckt seine Nächte trotzdem ab und zeichnet trotzdem seine Route.',
|
||||
// edit-accommodation
|
||||
@@ -2680,7 +2682,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Der Stift an ihrem rechten Rand öffnet den Aufenthalt wieder. Das Fenster heißt jetzt Unterkunft bearbeiten.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Korrigier die Reihe der Felder: Check-in, Bis, Check-out und Bestätigung. Die Tage darüber und das Haus darunter lassen sich hier ebenfalls ändern.',
|
||||
'Korrigier Check-in, Bis, Check-out und Bestätigung. Die Tage darüber und das Haus darunter lassen sich hier ebenfalls ändern.',
|
||||
'help.guide.edit-accommodation.step.4': 'Klick auf Speichern.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'Das X neben dem Stift beendet den Aufenthalt. Es fragt nichts, und die Buchung vom Typ Unterkunft, die zu ihm gehört, geht mit.',
|
||||
@@ -2697,7 +2699,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Reservierungen listet die Buchungen des Tages: die, die auf ihn datiert sind, und die, die an einem seiner Stopps hängen.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Eine Zeile zeigt, welche Art von Buchung es ist, ihren Namen und, wenn sie zu einem Stopp gehört, diesen Stopp nach einem Punkt. Ihre Zeiten stehen am rechten Ende.',
|
||||
'Eine Zeile zeigt, welche Art von Buchung es ist, ihren Namen und, wenn sie zu einem Stopp gehört, diesen Stopp in Grau dahinter. Ihre Zeiten stehen am rechten Ende, vor dem Statuspunkt.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Die Farbe sagt, wo eine Buchung steht: eine grüne Zeile ist bestätigt, eine bernsteinfarbene noch ausstehend. Unterkünfte stehen nicht in dieser Liste, sie haben ihren eigenen Block darunter.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -67,6 +67,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.allDays': 'All days',
|
||||
'costs.expensesCount': '{count} expenses',
|
||||
'costs.addExpense': 'Add expense',
|
||||
'costs.view.label': 'View',
|
||||
'costs.view.list': 'List',
|
||||
'costs.view.table': 'Table',
|
||||
'costs.table.lockedPayer': 'Paid by someone: change the amount in the expense so the balances stay right.',
|
||||
'costs.table.lockedCurrency': 'Entered in {currency}: change the amount in the expense.',
|
||||
'costs.table.summary': 'Summary',
|
||||
'costs.table.byCategory': 'Category',
|
||||
'costs.table.byDate': 'Day',
|
||||
'costs.table.byPayer': 'Payer',
|
||||
'costs.table.byStatus': 'Status',
|
||||
'costs.table.noPayer': 'No payer yet',
|
||||
'costs.table.paid': 'Paid',
|
||||
'costs.table.open': 'Open',
|
||||
'costs.editExpense': 'Edit expense',
|
||||
'costs.noMatch': 'No expenses match your search.',
|
||||
'costs.emptyText': 'No expenses yet. Add your first one.',
|
||||
|
||||
+61
-57
@@ -1675,7 +1675,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'The title, dates, cover and currency are edited from My Trips, with the pencil on the trip card.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'The chevrons at the inner edge of a column fold it away and the map takes the room; the thin divider next to a column changes its width.',
|
||||
'The tab at the inner edge of a column folds it away and the map takes the room; the thin divider next to a column changes its width.',
|
||||
'help.ctx.trip.bullet.6': 'The undo arrow in the toolbar of the days takes back the last change to the plan.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Add a member',
|
||||
@@ -1741,8 +1741,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Make room for the map',
|
||||
'help.guide.collapse-columns.goal': 'Fold a column away or give it more width.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Click the chevron at the inner edge of the days column to collapse it; the map takes the space. The places column has the same chevron.',
|
||||
'help.guide.collapse-columns.step.2': 'Click the chevron again to bring the column back.',
|
||||
'Click the tab at the inner edge of the days column, the one with the panel icon, to fold the column away; the map takes the space. The places column has the same tab.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'A folded column leaves a tile in the corner of the map, Plan for the days and Places for the places. Click it to bring the column back.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Drag the thin divider between a column and the map to change the column’s width.',
|
||||
'help.guide.collapse-columns.result': 'The widths are remembered; the columns come back open on the next visit.',
|
||||
@@ -1767,26 +1768,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Add Place/Activity at the top opens the form for a place you type or search. While a day is open the button reads New place, and To day next to it creates the place straight on that day.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Import file takes .gpx, .kml and .kmz files; List Import takes a shared Google Maps or Naver Maps list. A file can also just be dropped onto the column.',
|
||||
'The import button beside it offers Import file, for .gpx, .kml and .kmz files, and Google List (List Import where Naver lists are on too) for a list shared from Google Maps or Naver Maps. A file can also just be dropped onto the column.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'The dropdown switches between All, Unplanned, Planned and, once a track was imported, Tracks; below it sit the search, the category filter and the star for a minimum rating.',
|
||||
'Below them the search, with the tick that starts a selection next to it, and a row of filters: Show switches between All, Unplanned, Planned and, once a track was imported, Tracks, each with its count; the tag button filters by category and the star by a minimum rating.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'A row shows picture, name and description or address. Click it for the place’s details, drag it onto a day, or right-click it for Edit, Add to day, Open Website, Google Maps, Save to Collection and Delete.',
|
||||
'A row shows picture, name and description or address. Click it for the place’s details, drag it onto a day, or right-click it (or click its three dots) for Edit, + Day, Open Website, Google Maps, Save to Collection and Delete.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'With a day open, a + at the end of an unplanned row puts the place on that day, and Planned lists only that day, with Show the whole trip to widen again.',
|
||||
'With a day open, + Day at the end of an unplanned row puts the place on that day, and Planned lists only that day, with Show the whole trip to widen again.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'The tick at the right end of the filter row starts a selection: several rows at once get a new category, go into a collection or are deleted.',
|
||||
'The tick next to the search starts a selection: from the bar at the foot of the column, several rows at once get a new category, go into a collection, are marked visited or are deleted.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Create a place',
|
||||
'help.guide.create-place.goal': 'Add a place or activity by hand, with everything the plan needs to know about it.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Click Add Place/Activity at the top of the places column (New place while a day is open). The form opens.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Type the place into Search places… at the top and pick a result. Name, Address, Latitude, Longitude and Website fill in, and Place details on the left shows pictures, opening hours and a description for it. On a TREK with a Google key, Not the right place? Search Google instead sits under the list and runs the same search through Google.',
|
||||
'Type the place into Search places… and pick a result. The name in the head of the dialog, Address, Latitude, Longitude and Website fill in, and Place details on the left shows pictures, opening hours and a description for it. On a TREK with a Google key, Not the right place? Search Google instead sits under the list and runs the same search through Google. Saved places on the right offers the places of your collections the same way.',
|
||||
'help.guide.create-place.step.3':
|
||||
'In Place details, a click on a picture under Pick a picture makes it the place’s image; Use this text takes the description over into the form.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Check the fields: Name is required; Description and Notes are yours; Address, Latitude and Longitude come from the search or are typed; Category picks one of the trip’s categories, and the + next to it creates a new one on the spot; Website takes the link.',
|
||||
'Check what the form holds: the name sits in the head of the dialog and is the one required field; the Category pill under it picks one of the trip’s categories, and the + beside it creates a new one on the spot. Address, Latitude and Longitude come from the search or are typed; Description and Notes are yours; Website takes the link.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Click Add. If a place of the same name is already in the trip, the form says so and the button turns into Add anyway.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1805,7 +1806,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'To day opens the same form as New place, only the place lands on the open day the moment you click Add.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'A place that already exists goes onto the open day with the + at the end of its row, or by right-click, Add to day.',
|
||||
'A place that already exists goes onto the open day with + Day at the end of its row, or by right-click, + Day.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'The other way round works too, and without opening a day first: drag the place’s row out of the column and drop it on a day card. Dropped between two stops it lands exactly there.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1817,12 +1818,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Find a place in the list',
|
||||
'help.guide.filter-places.goal': 'Narrow the column to the places you are after.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'The dropdown at the top switches between All, Unplanned (not on any day yet), Planned (on a day) and Tracks (imported GPX tracks), each with its count.',
|
||||
'help.guide.filter-places.step.2': 'Type into Search places…; the list narrows as you type.',
|
||||
'Show, the dropdown under the search, switches between All, Unplanned (not on any day yet), Planned (on a day) and Tracks (imported GPX tracks), each with its count.',
|
||||
'help.guide.filter-places.step.2': 'Type into Search at the top; the list narrows as you type.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'All Categories opens a list to tick one or more categories, No Category among them; Clear filter at its bottom resets it.',
|
||||
'The tag button next to Show lists the categories: tick one or more, No Category among them. The button counts what is ticked, and Clear filter at the foot of the list lifts them all.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'The star next to it sets a minimum rating: 5+, 4+ and so on show only places you rated at least that high.',
|
||||
'The star beside it sets a minimum rating: 5+, 4+ and so on show only places you rated at least that high.',
|
||||
'help.guide.filter-places.result': 'The count above the rows says how many places match; the filters combine.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'With a day open, Planned lists that day only and says so: Showing the open day only, with Show the whole trip next to it.',
|
||||
@@ -1834,7 +1835,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Right-click the row and choose Edit, or open the place and click Edit in its details.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Change what you need: Name, Description, Notes, Address, Latitude and Longitude, Category, Website. Opened from a day, the form also has Notes for this day and Start and End for that day.',
|
||||
'Change what you need: the name and the Category pill in the head of the dialog, Address, Latitude and Longitude, Description, Notes and Website. Opened from a day, the form also has Start and End and Notes for this day.',
|
||||
'help.guide.edit-place.step.3': 'Click Update.',
|
||||
'help.guide.edit-place.result':
|
||||
'The change applies everywhere the place appears: the list, the map and every day it is on.',
|
||||
@@ -1847,20 +1848,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.goal': 'Take a place out of the trip for good.',
|
||||
'help.guide.delete-place.step.1': 'Right-click the row and choose Delete, or click Delete in the place’s details.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Confirm. If a night was booked at the place, or a booking is linked to it, the question says what goes with it.',
|
||||
'Click Delete in the question. If a night was booked at the place, or a booking is linked to it, the question says what goes with it.',
|
||||
'help.guide.delete-place.result':
|
||||
'The place is gone from the list, the map and every day; Undo in the toolbar above the days brings it back.',
|
||||
'help.guide.delete-place.tip.1': 'To take a place off one day only, use Remove from Day on that stop instead.',
|
||||
'help.guide.delete-place.tip.2': 'Several places at once: the tick next to the filters starts a selection.',
|
||||
'help.guide.delete-place.tip.2': 'Several places at once: the tick next to the search starts a selection.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Change or delete several places at once',
|
||||
'help.guide.select-places.goal': 'Tidy the list in one go instead of place by place.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Click the tick at the right end of the filter row. The rows get checkboxes and a bar with the actions appears.',
|
||||
'help.guide.select-places.step.2': 'Tick the rows, or Select all in the bar; the bar counts what is selected.',
|
||||
'Click the tick next to the search field. The rows get round checkboxes, and a bar with the actions rises at the foot of the column.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Click the rows to tick them. Select all, the double tick in the bar, takes every row the filters leave.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category gives all of them one category; Save to Collection copies them into one of your collections; Delete selected removes them after a confirmation.',
|
||||
'help.guide.select-places.step.4': 'Click the tick again to leave the selection.',
|
||||
'The bar counts the ticked places. Change category gives all of them one category; Save to Collection copies them into one of your collections; Delete selected removes them after a confirmation.',
|
||||
'help.guide.select-places.step.4': 'Done, the X at the end of the bar, leaves the selection.',
|
||||
'help.guide.select-places.result':
|
||||
'The change applies to every selected place; a deletion can be undone from the toolbar above the days.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1870,7 +1872,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'Import places from a GPX, KML or KMZ file',
|
||||
'help.guide.import-places-file.goal': 'Bring in what Google My Maps, Google Earth or a GPS tracker exported.',
|
||||
'help.guide.import-places-file.step.1': 'Click Import file, or drop the file anywhere on the places column.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Click the import button next to the add button and choose Import file, or drop the file anywhere on the places column.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Pick the file or drag it into the box. For a GPX, tick what to import: Waypoints, Routes, Tracks (with path geometry); for KML and KMZ, Points (Placemarks) and Paths (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1885,7 +1888,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Import a shared Google Maps or Naver Maps list',
|
||||
'help.guide.import-places-list.goal': 'Turn a shared list link into places.',
|
||||
'help.guide.import-places-list.step.1': 'Click List Import and choose Google List or Naver List.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Click the import button next to the add button and choose Google List. Where Naver lists are on too, the entry reads List Import and the dialog asks which of the two.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Paste the shared link of the list. A Google Maps directions link works too: its stops become places, in driving order.',
|
||||
'help.guide.import-places-list.step.3': 'Click Import.',
|
||||
@@ -1903,31 +1907,31 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'The toolbar at the top: Export (PDF, calendar, GPX), Expand all days / Collapse all days, the undo arrow, Reorder days and Show all booking routes.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'A day card: number, weather, title, date and the day’s cost in the header; click the header to open the day, its chevron folds it. Public transit, Add transport and Add Note sit in the header as well.',
|
||||
'A day card: a tile with the day number and the forecast, the title and the date, and pills for the night booked, a rental car and the day’s cost. Click the head to open the day, the chevron folds it, and the + opens a menu: Add place to this day, Add accommodation, Add transport, Public transit and Add Note.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Inside a day: the stops in order, each with picture, name, time and a lock on the picture; notes; bookings that belong to the day; and between the stops the travel time of each leg.',
|
||||
'Inside a day: the stops in order, each with picture, name, time, a lock on the picture and the bookings pinned to it; notes; the bookings and transports of the day, tinted by their type; and between the stops the travel time of each leg. Every row has a three-dot menu, the same one a right-click opens.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Under the stops the route bar: Route draws the day on the map, Optimize sorts the stops, Driving / Walking sets the day’s travel mode, Open in Google Maps and Open in CoMaps hand the day over.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Places come onto a day by dragging a row from the places column, with the + on that row, with Add place to this day on an empty day, or from the place’s details.',
|
||||
'Places come onto a day by dragging a row from the places column, with + Day on that row, with Add place to this day from the day’s + or on an empty day, or from the place’s details.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Total Cost at the bottom adds up every stop and booking with a price, in the trip’s currency.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Read a day',
|
||||
'help.guide.read-day-plan.goal': 'Know what every part of a day card tells you before you change anything.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'The header: the day number, the forecast for the day, Day 1 or the title you gave it, the date and the cost of the day. Click the header to open the day (its details panel opens over the map); the chevron at the right folds and unfolds the card.',
|
||||
'The head: a tile with the day number and the forecast, then Day 1 or the title you gave it, the date, and pills for the night booked (check-in or check-out), a rental car and the day’s cost. Click the head to open the day (its details panel opens over the map); the + on the right adds a place, a stay, a transport, a transit connection or a note, and the chevron folds the card.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'A stop: the grip on the left drags it, the picture carries a lock for route optimization, then the name, the description and, if set, the notes for this day. A time badge shows Start and End when the stop has them; the arrows that appear at its right end move it up or down.',
|
||||
'A stop: the grip on the left drags it, the picture carries a lock for route optimization, then the name, a time badge when the stop has Start and End, the description and, if set, the notes for this day. The arrows at its right end move it up or down, and the three dots open its menu.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'A booking on the day: a reservation at a stop marks the stop Reservation confirmed or Reservation pending, and a transport shows as Departure or Arrival with its time and its route, with a small toggle that draws that route on the map.',
|
||||
'A booking at a stop sits on it as a Reservation badge, green when it is confirmed and amber while it is pending, with its time and its carrier; click the badge to open the booking, and the route button beside it draws its route. A transport is a row of its own, tinted by its type, with Departure or Arrival and its time. Click a booking and its details open; Edit there changes it.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Between two stops the connector says how long the leg takes and how far it is, in the day’s travel mode; click it to change the mode for that one leg.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'The route bar at the end: Route draws the day’s way on the map, Optimize reorders the stops, the mode buttons pick Driving or Walking, Open in Google Maps and Open in CoMaps open the day there.',
|
||||
'help.guide.read-day-plan.result': 'Every symbol on the card has a meaning; the guides below change each of them.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Right-click a stop for its menu: Edit, Remove from day, Open Website, the navigation apps (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Save to Collection, Delete.',
|
||||
'Right-click a stop, or click its three dots, for its menu: Edit, Remove from day, Open Website, the navigation apps (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Save to Collection, Delete.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Hover a stop and Add booking appears at its end: a reservation created there is tied to this stop on this day.',
|
||||
// place-onto-day
|
||||
@@ -1936,9 +1940,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Drag a row from the places column onto the day card. Drop it between two stops to put it exactly there, or anywhere on the card to append it.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Without dragging: open the day by clicking its header, then click the + at the end of the place’s row, or right-click the row and choose Add to day.',
|
||||
'Without dragging: open the day by clicking its head, then click + Day at the end of the place’s row, or right-click the row and choose + Day.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'On an empty day, Add place to this day opens the place form, and the new place lands on the day at once.',
|
||||
'Add place to this day, in the day’s + menu or on an empty day, opens the place form, and the new place lands on the day at once.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'From a place’s details, Add to Day asks which day; from the day’s header, To day in the places column creates a new place on the open day.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -1965,7 +1969,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Give a stop a time',
|
||||
'help.guide.set-stop-times.goal': 'Fix when a stop starts and ends, so the day reads like a schedule.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Right-click the stop and choose Edit. Opened from the day, the form has Start and End at the bottom.',
|
||||
'Right-click the stop, or click its three dots, and choose Edit. Opened from the day, the form has Start and End for that day, right under the location.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Enter Start and, if you like, End. Time overlap with: warns that another timed stop of the day overlaps; an End before the Start blocks Update.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2001,12 +2005,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Add a note to a day',
|
||||
'help.guide.day-note.goal': 'Keep a reminder, a ticket number or a plan B right in the day.',
|
||||
'help.guide.day-note.step.1': 'Click Add Note in the day’s header.',
|
||||
'help.guide.day-note.step.1': 'Click the + in the day’s head and choose Add Note.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Give it a name under Note, that is what the day card shows, and write the rest under Daily Note. The toolbar above it formats the text (bold, lists, links, quotes) and Preview on the left shows the card it becomes.',
|
||||
'Type the note’s name into the head of the dialog, where it says Note; that is what the day card shows. Write the rest under Daily Note: the toolbar above it formats the text (bold, lists, links, quotes), and Preview on the left shows the row it becomes.',
|
||||
'help.guide.day-note.step.3': 'Pick an Icon and a Colour, so the note stands out from the stops, then Add.',
|
||||
'help.guide.day-note.step.4':
|
||||
'The note sits in the day like a stop: drag it into place, right-click it for Edit and Delete.',
|
||||
'The note sits in the day like a stop: drag it into place, and right-click it or use its three dots for Edit and Delete.',
|
||||
'help.guide.day-note.result': 'The note is part of the day, in the PDF too; a timed note sorts with the timed stops.',
|
||||
'help.guide.day-note.tip.1':
|
||||
'A note with a time can stand in for a transport you have no booking for: “08:15 S3 from central station”.',
|
||||
@@ -2051,15 +2055,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Read bookings and transports in the plan',
|
||||
'help.guide.bookings-in-plan.goal': 'Know where a booking shows up once it exists, and which screen creates it.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'A transport (flight, train, ferry, bus, car) shows in the day it departs as Departure and in the day it arrives as Arrival, with time and route; a multi-day one spans the days in between.',
|
||||
'A transport (flight, train, ferry, bus, car) is a row tinted by its type: Departure on the day it leaves, Arrival on the day it lands, with time and route; a multi-day one spans the days in between. Click the row and the booking opens.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'A reservation tied to a stop (a restaurant, a tour) marks that stop Reservation confirmed or Reservation pending; a booking with a day but no stop is its own row in the day.',
|
||||
'A reservation tied to a stop (a restaurant, a tour) is a Reservation badge on that stop, green when confirmed and amber while pending, with its time; a booking with a day but no stop is its own row in the day.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'A night at a hotel is an accommodation: it sits in the day’s details panel under Accommodation, from check-in to check-out, and the route of each of those days starts there.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'On the map, the toggle on a transport row draws its route; Show all booking routes in the toolbar draws them all.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Creating: Add booking on a hovered stop, Add transport and Public transit in the day header, and the Bookings and Transports tabs for the full list with import and files.',
|
||||
'Creating: Add booking on a hovered stop, Add transport and Public transit in the day’s + menu, and the Bookings and Transports tabs for the full list with import and files.',
|
||||
'help.guide.bookings-in-plan.result': 'One booking, one place in the plan; the tabs are the same bookings as a list.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
'Confirmed and pending is a status you set on the booking; the plan shows it on the stop, the Bookings tab counts both.',
|
||||
@@ -2089,24 +2093,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Click a row in the places column, a stop inside a day, or a marker on the map, and the card opens over the map. Picking it inside a day tells the card which stop you mean, and that is what brings the stop’s participants and its booking along.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'The head carries the round picture, the name, the category, the address and the coordinates. Click the picture to use one of your own, double-click the name to rename the place on the spot, and the X on the right closes the card.',
|
||||
'The head carries the round picture, the name, the address on one line and pills for what is known: open or closed, the category, the price, the phone number and the coordinates. Click the picture to use one of your own, double-click the name to rename the place on the spot, and the X on the right closes the card.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Under it: the price if it has one, the stars every traveller gave the place, the description and the notes, and Notes for this day when the stop carries one.',
|
||||
'Under it: the stars every traveller gave the place, the description and the notes, and Notes for this day when the stop carries one.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Opening Hours, Track color, Track Stats and Files follow, as far as they apply. Files takes anything out of your folders and also lists what hangs on the booking of this stop.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'The row at the bottom: Add to Day or Remove from Day while a day is open, then Save to Collection, Navigation, Open Website, Edit and Delete.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'A place picked out of the search carries what the TREK index or OpenStreetMap know about it: a green Open or red Closed ring around the picture, judged by the place’s own clock, the phone number under the stars, Opening Hours further down with the day’s line on the row and the whole week behind a click, and its website behind Open Website. Google’s rating shows only on a place found through Google, on a TREK with a Google key.',
|
||||
'A place picked out of the search carries what the TREK index or OpenStreetMap know about it: Open or Closed among the pills of the head, with a green or red ring around the picture, judged by the place’s own clock, its phone number as a pill too, Opening Hours further down with the day’s line on the row and the whole week behind a click, and its website behind Open Website. Google’s rating shows only on a place found through Google, on a TREK with a Google key.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'What the card tells you about a place',
|
||||
'help.guide.read-place.goal': 'Read everything the trip knows about one place, in one card.',
|
||||
'help.guide.read-place.step.1':
|
||||
'In the days column, click the stop you want to read. The card opens over the map and the stop stays marked in its day.',
|
||||
'help.guide.read-place.step.2':
|
||||
'The head: the round picture, the name, the address and the exact coordinates. A green ring with Open, or a red one with Closed, around the picture says whether the place is open right now, by its own clock, once TREK knows its hours. The X on the right closes the card again.',
|
||||
'The head: the round picture, the name and the address on one line; its tooltip holds the whole address. The pills under them say Open or Closed right now, by the place’s own clock, with a green or red ring around the picture to match, and carry the phone number, which a click hands to your phone app, and the exact coordinates. The X on the right closes the card again.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Under it the stars every traveller gave the place, with the average and how many voted. Not rated yet while nobody has. Right below, the phone number where the place has one: a click on it hands the number to your phone app.',
|
||||
'Rating comes first below the head: the stars every traveller gave the place, with the average and how many voted. Not rated yet while nobody has.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Then the description and, below it, the notes. Both are the text from the place’s form, rendered: lists, links and bold all work.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2201,18 +2205,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'The booking on a stop',
|
||||
'help.guide.place-booking.goal': 'Read the booking that belongs to a stop, open it, and pin a new one to it.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Open the stop the booking belongs to. The card shows a strip with Confirmed or Pending and the booking’s name.',
|
||||
'Open the stop the booking belongs to. The card lists it under Bookings as a small card of its own, with the booking’s name and Confirmed or Pending.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'The strip carries the Date, the Time and the Booking Code, and whatever notes the booking has.',
|
||||
'help.guide.place-booking.step.3': 'Click the strip. The booking opens over the map.',
|
||||
'The booking card carries the Date, the Time and the Booking Code, and whatever notes the booking has.',
|
||||
'help.guide.place-booking.step.3': 'Click the booking card. The booking opens over the map.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Edit at the foot of the booking opens its own form. Link to day assignment there is what pins a booking to a stop, and here it already names this one. Close the form again.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'A new booking for a stop starts in the days column: hover the stop and click the + at its end. The form opens as New Reservation, already linked to it.',
|
||||
'A new booking for a stop starts in the days column: hover the stop and click Add booking, the ticket at its end. The form opens as New Reservation, already linked to it.',
|
||||
'help.guide.place-booking.result':
|
||||
'The booking hangs on the stop: it is on the card, it is in the day, and its files are listed under Files here as well.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'The strip only shows for the stop the booking is pinned to. A booking with no stop lives on the Book tab.',
|
||||
'The booking card only shows for the stop the booking is pinned to. A booking with no stop lives on the Book tab.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Several bookings can share one stop: the lunch and the tour that starts from the same door.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2297,7 +2301,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'At the top, the weather of the day. Forecast for names the place it is for: the day’s first stop, or the hotel you wake up in.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Reservations lists the bookings of that day, each with its kind, the stop it belongs to and its times. Green means confirmed, amber still pending; it is a read-out, bookings are changed under Bookings.',
|
||||
'Reservations lists the bookings of that day, each with its kind, the stop it belongs to and its times. Green means confirmed, amber still pending, and a click on a row opens the booking.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Accommodation shows every night booked over this day, with Check-in and Check-out on the days they happen, the check-in window, the check-out time and the confirmation number.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2330,7 +2334,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'The big number is the day’s temperature, next to it the low and the high, and the condition in words.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'The chips under it: the chance of rain, how much of it, the strongest wind, and sunrise and sunset.',
|
||||
'The pills to the right of it: the chance of rain, how much of it, the strongest wind, and sunrise and sunset.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'At the bottom, the day hour by hour, every second hour: the time, the icon, the temperature and the chance of rain. An hour over 50 percent is shaded blue.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2363,18 +2367,18 @@ const help: TranslationStrings = {
|
||||
'The property has to be a place of the trip first. Create it in the places column the way you would any other place: the picker only offers what is already there.',
|
||||
'help.guide.add-accommodation.step.2': 'Open the day you arrive on and click Add accommodation under Accommodation.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Apply to days says which nights the stay covers: the check-in day on the left, the check-out day on the right. All covers the whole trip.',
|
||||
'Apply to days says which nights the stay covers: Start is the check-in day, End the check-out day, and All covers the whole trip. The head of the dialog shows the range and the number of nights.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Fill in Check-in, Until and Check-out, and put the booking’s number under Confirmation. All four may stay empty.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Pick the property from the trip’s places. The chips above the list narrow it to one category.',
|
||||
'Pick the property from the trip’s places. Category above the list narrows it to one category.',
|
||||
'help.guide.add-accommodation.step.6': 'Click Save.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'The stay shows on every day it covers, Check-in on the first and Check-out on the last. The property becomes a stop on the check-in day, so the map draws the way there, and a Hotel booking appears under Bookings.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'The picker opens on the day you came from, with check-out the day after; both can be moved before you save.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Give the hotel the Hotel category when you create it and the chips above the list narrow it to your hotels in one click.',
|
||||
'Give the hotel the Hotel category when you create it, and Category above the list narrows it to your hotels in one click.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'The times are all optional: a stay with no check-in and no code still covers its nights and still draws its route.',
|
||||
// edit-accommodation
|
||||
@@ -2385,7 +2389,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'The pencil at its right opens the stay again. The popup now reads Edit accommodation.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Correct the row of fields: Check-in, Until, Check-out and Confirmation. The days above it and the property below it can be changed here too.',
|
||||
'Correct Check-in, Until, Check-out and Confirmation. The days above them and the property below can be changed here too.',
|
||||
'help.guide.edit-accommodation.step.4': 'Click Save.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'The X next to the pencil ends the stay. It asks nothing, and the Hotel booking that belongs to it goes with it.',
|
||||
@@ -2401,7 +2405,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Reservations lists the bookings of the day: the ones dated on it, and the ones hanging off one of its stops.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'A row shows what kind of booking it is, its name and, when it belongs to a stop, that stop after a dot. Its times sit at the right end.',
|
||||
'A row shows what kind of booking it is, its name and, when it belongs to a stop, that stop in grey after it. Its times sit at the right end, before the status dot.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'The colour says where a booking stands: a green row is confirmed, an amber one is still pending. Hotels are not in this list, they have their own block below.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Pagados por mí',
|
||||
'costs.filter.owed': 'Me deben',
|
||||
'costs.addExpense': 'Añadir gasto',
|
||||
'costs.view.label': 'Vista',
|
||||
'costs.view.list': 'Lista',
|
||||
'costs.view.table': 'Tabla',
|
||||
'costs.table.lockedPayer': 'Lo pagó alguien: cambia el importe en el gasto para que los saldos cuadren.',
|
||||
'costs.table.lockedCurrency': 'Introducido en {currency}: cambia el importe en el gasto.',
|
||||
'costs.table.summary': 'Resumen',
|
||||
'costs.table.byCategory': 'Categoría',
|
||||
'costs.table.byDate': 'Día',
|
||||
'costs.table.byPayer': 'Pagador',
|
||||
'costs.table.byStatus': 'Estado',
|
||||
'costs.table.noPayer': 'Aún sin pagador',
|
||||
'costs.table.paid': 'Pagado',
|
||||
'costs.table.open': 'Pendiente',
|
||||
'costs.editExpense': 'Editar gasto',
|
||||
'costs.noMatch': 'Ningún gasto coincide con tu búsqueda.',
|
||||
'costs.emptyText': 'Aún no hay gastos. Añade el primero.',
|
||||
|
||||
+58
-56
@@ -1768,7 +1768,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'El título, las fechas, la portada y la moneda se editan desde Mis viajes, con el lápiz de la tarjeta del viaje.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Los chevrones del borde interior de una columna la pliegan y el mapa ocupa el sitio; el separador fino junto a una columna cambia su anchura.',
|
||||
'La lengüeta del borde interior de una columna la pliega y el mapa ocupa el sitio; el separador fino junto a una columna cambia su anchura.',
|
||||
'help.ctx.trip.bullet.6':
|
||||
'La flecha de deshacer en la barra de herramientas de los días revierte el último cambio al plan.',
|
||||
// add-member
|
||||
@@ -1838,8 +1838,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Hacer sitio para el mapa',
|
||||
'help.guide.collapse-columns.goal': 'Pliega una columna o dale más anchura.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Haz clic en el chevrón del borde interior de la columna de días para plegarla; el mapa ocupa el espacio. La columna de lugares tiene el mismo chevrón.',
|
||||
'help.guide.collapse-columns.step.2': 'Haz clic de nuevo en el chevrón para recuperar la columna.',
|
||||
'Haz clic en la lengüeta del borde interior de la columna de días, la del icono de panel, para plegar la columna; el mapa ocupa el espacio. La columna de lugares tiene la misma lengüeta.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Una columna plegada deja un recuadro en la esquina del mapa, Plan para los días y Lugares para los lugares. Haz clic en él para recuperar la columna.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Arrastra el separador fino entre una columna y el mapa para cambiar la anchura de la columna.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1866,15 +1867,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Añadir lugar/actividad, arriba, abre el formulario de un lugar que escribes o buscas. Mientras hay un día abierto el botón dice Nuevo lugar, y Al día, a su lado, crea el lugar directamente en ese día.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importar archivo acepta archivos .gpx, .kml y .kmz; Importar lista acepta una lista compartida de Google Maps o de Naver Maps. Un archivo también se puede soltar sin más sobre la columna.',
|
||||
'El botón de importar de al lado ofrece Importar archivo, para archivos .gpx, .kml y .kmz, y Lista Google (Importar lista cuando las listas de Naver también están activadas) para una lista compartida de Google Maps o de Naver Maps. Un archivo también se puede soltar sin más sobre la columna.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'El desplegable cambia entre Todo, Sin planificar, Planificados y, en cuanto se importa una ruta, Rutas; debajo están la búsqueda, el filtro de categoría y la estrella para una valoración mínima.',
|
||||
'Debajo, la búsqueda, con la marca que inicia una selección a su lado, y una fila de filtros: Mostrar cambia entre Todo, Sin planificar, Planificados y, en cuanto se importa una ruta, Rutas, cada uno con su número; el botón de etiqueta filtra por categoría y la estrella por una valoración mínima.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Una fila muestra imagen, nombre y descripción o dirección. Haz clic en ella para ver los detalles del lugar, arrástrala a un día, o haz clic derecho para Editar, + Día, Abrir la web, Google Maps, Guardar en colección y Eliminar.',
|
||||
'Una fila muestra imagen, nombre y descripción o dirección. Haz clic en ella para ver los detalles del lugar, arrástrala a un día, o haz clic derecho en ella (o en sus tres puntos) para Editar, + Día, Abrir la web, Google Maps, Guardar en colección y Eliminar.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Con un día abierto, un + al final de una fila sin planificar pone el lugar en ese día, y Planificados lista solo ese día, con Mostrar todo el viaje para volver a ampliar.',
|
||||
'Con un día abierto, + Día al final de una fila sin planificar pone el lugar en ese día, y Planificados lista solo ese día, con Mostrar todo el viaje para volver a ampliar.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'La marca al extremo derecho de la fila de filtros inicia una selección: varias filas a la vez reciben una categoría nueva, van a una colección o se eliminan.',
|
||||
'La marca junto a la búsqueda inicia una selección: desde la barra al pie de la columna, varias filas a la vez reciben una categoría nueva, van a una colección, se marcan como visitadas o se eliminan.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Crear un lugar',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1882,11 +1883,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Haz clic en Añadir lugar/actividad, arriba en la columna de lugares (Nuevo lugar mientras hay un día abierto). Se abre el formulario.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Escribe el lugar en Buscar lugares... arriba y elige un resultado. Nombre, Dirección, Latitud, Longitud y Página web se rellenan, y Detalles del lugar, a la izquierda, muestra imágenes, el horario de apertura y una descripción. En un TREK con clave de Google, ¿No es el lugar correcto? Buscar en Google está bajo la lista y repite la misma búsqueda a través de Google.',
|
||||
'Escribe el lugar en Buscar lugares... y elige un resultado. El nombre en la cabecera del diálogo, Dirección, Latitud, Longitud y Página web se rellenan, y Detalles del lugar, a la izquierda, muestra imágenes, el horario de apertura y una descripción. En un TREK con clave de Google, ¿No es el lugar correcto? Buscar en Google está bajo la lista y repite la misma búsqueda a través de Google. Lugares guardados, a la derecha, ofrece los lugares de tus colecciones de la misma manera.',
|
||||
'help.guide.create-place.step.3':
|
||||
'En Detalles del lugar, un clic en una imagen bajo Elegir una imagen la convierte en la imagen del lugar; Usar este texto lleva la descripción al formulario.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Revisa los campos: Nombre es obligatorio; Descripción y Notas son tuyas; Dirección, Latitud y Longitud vienen de la búsqueda o se escriben; Categoría elige una de las categorías del viaje, y el + de al lado crea una nueva en el acto; Página web recoge el enlace.',
|
||||
'Revisa lo que contiene el formulario: el nombre está en la cabecera del diálogo y es el único campo obligatorio; el chip Categoría de debajo elige una de las categorías del viaje, y el + de al lado crea una nueva en el acto. Dirección, Latitud y Longitud vienen de la búsqueda o se escriben; Descripción y Notas son tuyas; Página web recoge el enlace.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Haz clic en Añadir. Si ya hay un lugar con el mismo nombre en el viaje, el formulario lo avisa y el botón pasa a ser Añadir de todos modos.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1905,7 +1906,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Al día abre el mismo formulario que Nuevo lugar, solo que el lugar cae en el día abierto en cuanto haces clic en Añadir.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Un lugar que ya existe va al día abierto con el + al final de su fila, o con clic derecho, + Día.',
|
||||
'Un lugar que ya existe va al día abierto con + Día al final de su fila, o con clic derecho, + Día.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Al revés también funciona, y sin abrir antes ningún día: arrastra la fila del lugar fuera de la columna y suéltala sobre una tarjeta de día. Si la sueltas entre dos paradas, aterriza justo ahí.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1917,10 +1918,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Encontrar un lugar en la lista',
|
||||
'help.guide.filter-places.goal': 'Estrecha la columna a los lugares que buscas.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'El desplegable de arriba cambia entre Todo, Sin planificar (aún en ningún día), Planificados (en un día) y Rutas (rutas GPX importadas), cada uno con su número.',
|
||||
'help.guide.filter-places.step.2': 'Escribe en Buscar lugares...; la lista se estrecha mientras escribes.',
|
||||
'Mostrar, el desplegable bajo la búsqueda, cambia entre Todo, Sin planificar (aún en ningún día), Planificados (en un día) y Rutas (rutas GPX importadas), cada uno con su número.',
|
||||
'help.guide.filter-places.step.2': 'Escribe en Buscar, arriba; la lista se estrecha mientras escribes.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Todas las categorías abre una lista para marcar una o varias categorías, Sin categoría entre ellas; Borrar filtro, abajo del todo, lo reinicia.',
|
||||
'El botón de etiqueta junto a Mostrar lista las categorías: marca una o varias, Sin categoría entre ellas. El botón cuenta lo que está marcado, y Borrar filtro, al pie de la lista, las quita todas.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'La estrella de al lado fija una valoración mínima: 5+, 4+ y así sucesivamente muestran solo lugares que has valorado al menos así de alto.',
|
||||
'help.guide.filter-places.result': 'El número sobre las filas dice cuántos lugares encajan; los filtros se combinan.',
|
||||
@@ -1934,7 +1935,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Haz clic derecho en la fila y elige Editar, o abre el lugar y haz clic en Editar en sus detalles.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Cambia lo que necesites: Nombre, Descripción, Notas, Dirección, Latitud y Longitud, Categoría, Página web. Abierto desde un día, el formulario tiene además Notas para este día e Inicio y Fin para ese día.',
|
||||
'Cambia lo que necesites: el nombre y el chip Categoría en la cabecera del diálogo, Dirección, Latitud y Longitud, Descripción, Notas y Página web. Abierto desde un día, el formulario tiene además Inicio y Fin y Notas para este día.',
|
||||
'help.guide.edit-place.step.3': 'Haz clic en Actualizar.',
|
||||
'help.guide.edit-place.result':
|
||||
'El cambio se aplica en todos los sitios donde aparece el lugar: la lista, el mapa y cada día en el que está.',
|
||||
@@ -1948,21 +1949,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Haz clic derecho en la fila y elige Eliminar, o haz clic en Eliminar en los detalles del lugar.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Confirma. Si se reservó una noche en el lugar, o hay una reserva vinculada a él, la pregunta dice qué se va con él.',
|
||||
'Haz clic en Eliminar en la pregunta. Si se reservó una noche en el lugar, o hay una reserva vinculada a él, la pregunta dice qué se va con él.',
|
||||
'help.guide.delete-place.result':
|
||||
'El lugar desaparece de la lista, del mapa y de cada día; Deshacer, en la barra de herramientas sobre los días, lo trae de vuelta.',
|
||||
'help.guide.delete-place.tip.1': 'Para quitar un lugar de un solo día, usa en su lugar Quitar del día en esa parada.',
|
||||
'help.guide.delete-place.tip.2': 'Varios lugares a la vez: la marca junto a los filtros inicia una selección.',
|
||||
'help.guide.delete-place.tip.2': 'Varios lugares a la vez: la marca junto a la búsqueda inicia una selección.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Cambiar o eliminar varios lugares a la vez',
|
||||
'help.guide.select-places.goal': 'Ordena la lista de una sola vez en lugar de uno por uno.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Haz clic en la marca al extremo derecho de la fila de filtros. Las filas reciben casillas y aparece una barra con las acciones.',
|
||||
'Haz clic en la marca junto al campo de búsqueda. Las filas reciben casillas redondas, y al pie de la columna sube una barra con las acciones.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Marca las filas, o usa Seleccionar todo en la barra; la barra cuenta lo que está seleccionado.',
|
||||
'Haz clic en las filas para marcarlas. Seleccionar todo, la doble marca de la barra, toma todas las filas que dejan los filtros.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category les da a todos una misma categoría; Guardar en colección los copia a una de tus colecciones; Eliminar selección los quita tras una confirmación.',
|
||||
'help.guide.select-places.step.4': 'Haz clic de nuevo en la marca para salir de la selección.',
|
||||
'La barra cuenta los lugares marcados. Cambiar categoría les da a todos una misma categoría; Guardar en colección los copia a una de tus colecciones; Eliminar selección los quita tras una confirmación.',
|
||||
'help.guide.select-places.step.4': 'Listo, la X al final de la barra, sale de la selección.',
|
||||
'help.guide.select-places.result':
|
||||
'El cambio se aplica a cada lugar seleccionado; un borrado se puede deshacer desde la barra de herramientas sobre los días.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1973,7 +1974,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.title': 'Importar lugares desde un archivo GPX, KML o KMZ',
|
||||
'help.guide.import-places-file.goal': 'Trae lo que exportaron Google My Maps, Google Earth o un rastreador GPS.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Haz clic en Importar archivo, o suelta el archivo en cualquier punto de la columna de lugares.',
|
||||
'Haz clic en el botón de importar junto al botón de añadir y elige Importar archivo, o suelta el archivo en cualquier punto de la columna de lugares.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Elige el archivo o arrástralo al recuadro. Para un GPX, marca qué importar: Puntos de ruta, Rutas, Tracks (con geometría de ruta); para KML y KMZ, Puntos (Placemarks) y Rutas (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1989,7 +1990,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Importar una lista compartida de Google Maps o de Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Convierte el enlace de una lista compartida en lugares.',
|
||||
'help.guide.import-places-list.step.1': 'Haz clic en Importar lista y elige Lista Google o Lista Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Haz clic en el botón de importar junto al botón de añadir y elige Lista Google. Cuando las listas de Naver también están activadas, la opción se llama Importar lista y el diálogo pregunta cuál de las dos.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Pega el enlace compartido de la lista. Un enlace de indicaciones de Google Maps también sirve: sus paradas se convierten en lugares, en orden de conducción.',
|
||||
'help.guide.import-places-list.step.3': 'Haz clic en Importar.',
|
||||
@@ -2007,24 +2009,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'La barra de arriba: Exportar (PDF, calendario, GPX), Expand all days / Collapse all days, la flecha de Deshacer, Reordenar días y Mostrar todas las rutas de reservas.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Una tarjeta de día: número, tiempo, título, fecha y el coste del día en la cabecera; haz clic en la cabecera para abrir el día, su flecha la pliega. Transporte público, Añadir transporte y Añadir nota están también en la cabecera.',
|
||||
'Una tarjeta de día: un recuadro con el número del día y el pronóstico, el título y la fecha, y chips para la noche reservada, un coche de alquiler y el coste del día. Haz clic en la cabecera para abrir el día, la flecha la pliega, y el + abre un menú: Añadir lugar a este día, Añadir alojamiento, Añadir transporte, Transporte público y Añadir nota.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Dentro de un día: las paradas en orden, cada una con imagen, nombre, hora y un candado sobre la imagen; las notas; las reservas que pertenecen al día; y entre las paradas el tiempo de viaje de cada tramo.',
|
||||
'Dentro de un día: las paradas en orden, cada una con imagen, nombre, hora, un candado sobre la imagen y las reservas enganchadas a ella; las notas; las reservas y los transportes del día, teñidos según su tipo; y entre las paradas el tiempo de viaje de cada tramo. Cada fila tiene un menú de tres puntos, el mismo que abre el clic derecho.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Bajo las paradas, la barra de ruta: Ruta dibuja el día en el mapa, Optimizar ordena las paradas, En coche / A pie fija el medio de transporte del día, Abrir en Google Maps y Abrir en CoMaps entregan el día.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Los lugares llegan a un día arrastrando una fila de la columna de lugares, con el + de esa fila, con Añadir lugar a este día en un día vacío, o desde los detalles del lugar.',
|
||||
'Los lugares llegan a un día arrastrando una fila de la columna de lugares, con + Día en esa fila, con Añadir lugar a este día desde el + del día o en un día vacío, o desde los detalles del lugar.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Coste total, abajo, suma cada parada y cada reserva con precio, en la moneda del viaje.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Leer un día',
|
||||
'help.guide.read-day-plan.goal': 'Saber qué te dice cada parte de una tarjeta de día antes de cambiar nada.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'La cabecera: el número del día, el pronóstico para el día, Día 1 o el título que le pusiste, la fecha y el coste del día. Haz clic en la cabecera para abrir el día (sus Detalles del día se abren sobre el mapa); la flecha de la derecha pliega y despliega la tarjeta.',
|
||||
'La cabecera: un recuadro con el número del día y el pronóstico, luego Día 1 o el título que le pusiste, la fecha, y chips para la noche reservada (entrada o salida), un coche de alquiler y el coste del día. Haz clic en la cabecera para abrir el día (sus Detalles del día se abren sobre el mapa); el + de la derecha añade un lugar, un alojamiento, un transporte, una conexión de transporte público o una nota, y la flecha pliega la tarjeta.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Una parada: el asidero de la izquierda la arrastra, la imagen lleva un candado para la optimización de ruta, luego el nombre, la descripción y, si las hay, las Notas para este día. Una insignia de hora muestra Inicio y Fin cuando la parada los tiene; las flechas que aparecen en su extremo derecho la suben o la bajan.',
|
||||
'Una parada: el asidero de la izquierda la arrastra, la imagen lleva un candado para la optimización de ruta, luego el nombre, una insignia de hora cuando la parada tiene Inicio y Fin, la descripción y, si las hay, las Notas para este día. Las flechas de su extremo derecho la suben o la bajan, y los tres puntos abren su menú.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Una reserva del día: una reserva en una parada la marca como Reserva confirmada o Reserva pendiente, y un transporte aparece como Salida o Llegada con su hora y su trayecto, con un pequeño interruptor que dibuja esa ruta en el mapa.',
|
||||
'Una reserva en una parada aparece sobre ella como una insignia Reserva, verde cuando está confirmada y ámbar mientras está pendiente, con su hora y su proveedor; haz clic en la insignia para abrir la reserva, y el botón de ruta de al lado dibuja su trayecto. Un transporte es una fila propia, teñida según su tipo, con Salida o Llegada y su hora. Haz clic en una reserva y se abren sus detalles; Editar, ahí, la cambia.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Entre dos paradas el conector dice cuánto dura el tramo y qué distancia tiene, en el medio de transporte del día; haz clic en él para cambiar el medio de ese único tramo.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2032,7 +2034,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Cada símbolo de la tarjeta tiene un significado; las guías de abajo cambian cada uno de ellos.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Haz clic derecho en una parada para su menú: Editar, Quitar del día, Abrir la web, las apps de navegación (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Guardar en colección, Eliminar.',
|
||||
'Haz clic derecho en una parada, o en sus tres puntos, para su menú: Editar, Quitar del día, Abrir la web, las apps de navegación (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Guardar en colección, Eliminar.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Pasa el ratón por una parada y Añadir reserva aparece en su extremo: una reserva creada ahí queda atada a esta parada en este día.',
|
||||
// place-onto-day
|
||||
@@ -2041,9 +2043,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Arrastra una fila de la columna de lugares hasta la tarjeta del día. Suéltala entre dos paradas para ponerla exactamente ahí, o en cualquier punto de la tarjeta para añadirla al final.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Sin arrastrar: abre el día haciendo clic en su cabecera, luego haz clic en el + del final de la fila del lugar, o haz clic derecho en la fila y elige + Día.',
|
||||
'Sin arrastrar: abre el día haciendo clic en su cabecera, luego haz clic en + Día al final de la fila del lugar, o haz clic derecho en la fila y elige + Día.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'En un día vacío, Añadir lugar a este día abre el formulario de lugar, y el lugar nuevo cae en el día de inmediato.',
|
||||
'Añadir lugar a este día, en el menú + del día o en un día vacío, abre el formulario de lugar, y el lugar nuevo cae en el día de inmediato.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Desde los detalles de un lugar, Añadir al día pregunta a qué día; desde la cabecera del día, Al día en la columna de lugares crea un lugar nuevo en el día abierto.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2072,7 +2074,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Fijar cuándo empieza y termina una parada, para que el día se lea como un horario.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Haz clic derecho en la parada y elige Editar. Abierto desde el día, el formulario tiene Inicio y Fin abajo.',
|
||||
'Haz clic derecho en la parada, o en sus tres puntos, y elige Editar. Abierto desde el día, el formulario tiene Inicio y Fin para ese día, justo debajo de la ubicación.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Pon Inicio y, si quieres, Fin. Solapamiento horario con: avisa de que otra parada del día con hora se solapa; un Fin anterior al Inicio bloquea Actualizar.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2113,13 +2115,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Añadir una nota a un día',
|
||||
'help.guide.day-note.goal': 'Guardar un recordatorio, un número de entrada o un plan B dentro del día.',
|
||||
'help.guide.day-note.step.1': 'Haz clic en Añadir nota en la cabecera del día.',
|
||||
'help.guide.day-note.step.1': 'Haz clic en el + de la cabecera del día y elige Añadir nota.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Dale un nombre en Nota, que es lo que se ve en el día, y escribe el resto en Nota diaria. La barra de herramientas de encima da formato al texto (Negrita, Lista con viñetas, Enlace, Cita), y Vista previa, a la izquierda, muestra cómo quedará la nota en el día.',
|
||||
'Escribe el nombre de la nota en la cabecera del diálogo, donde pone Nota; es lo que se ve en el día. Escribe el resto en Nota diaria: la barra de herramientas de encima da formato al texto (negrita, listas, enlaces, citas), y Vista previa, a la izquierda, muestra la fila en la que se convertirá.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Elige un Icono y un Color, para que la nota destaque entre las paradas, y luego Añadir.',
|
||||
'help.guide.day-note.step.4':
|
||||
'La nota está en el día como una parada: arrástrala a su sitio, haz clic derecho para Editar y Eliminar.',
|
||||
'La nota está en el día como una parada: arrástrala a su sitio, y haz clic derecho en ella o usa sus tres puntos para Editar y Eliminar.',
|
||||
'help.guide.day-note.result':
|
||||
'La nota forma parte del día, también en el PDF; una nota con hora se ordena con las paradas que tienen hora.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2168,15 +2170,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Leer reservas y transportes en el plan',
|
||||
'help.guide.bookings-in-plan.goal': 'Saber dónde aparece una reserva una vez existe, y qué pantalla la crea.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Un transporte (Vuelo, Tren, Ferry, Autobús, Coche) aparece en el día en que sale como Salida y en el día en que llega como Llegada, con hora y trayecto; uno de varios días abarca los días intermedios.',
|
||||
'Un transporte (vuelo, tren, ferry, autobús, coche) es una fila teñida según su tipo: Salida el día en que sale, Llegada el día en que llega, con hora y trayecto; uno de varios días abarca los días intermedios. Haz clic en la fila y se abre la reserva.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Una reserva atada a una parada (un Restaurante, una Excursión) marca esa parada como Reserva confirmada o Reserva pendiente; una reserva con día pero sin parada es una fila propia dentro del día.',
|
||||
'Una reserva atada a una parada (un restaurante, una excursión) es una insignia Reserva en esa parada, verde cuando está confirmada y ámbar mientras está pendiente, con su hora; una reserva con día pero sin parada es una fila propia dentro del día.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Una noche de hotel es un alojamiento: está en los Detalles del día bajo Alojamiento, del Registro de entrada al Registro de salida, y la ruta de cada uno de esos días empieza ahí.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'En el mapa, el interruptor de una fila de transporte dibuja su ruta; Mostrar todas las rutas de reservas, en la barra, las dibuja todas.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Para crearlas: Añadir reserva en una parada con el ratón encima, Añadir transporte y Transporte público en la cabecera del día, y las pestañas Reservas y Transportes para la lista completa con importación y archivos.',
|
||||
'Para crearlas: Añadir reserva en una parada con el ratón encima, Añadir transporte y Transporte público en el menú + del día, y las pestañas Reservas y Transportes para la lista completa con importación y archivos.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Una reserva, un sitio en el plan; las pestañas son las mismas reservas en forma de lista.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2207,24 +2209,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Haz clic en una fila de la columna de lugares, en una parada dentro de un día o en un marcador del mapa, y la ficha se abre sobre el mapa. Elegirlo dentro de un día le dice a la ficha a qué parada te refieres, y eso es lo que trae consigo los participantes de la parada y su reserva.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'La cabecera lleva la imagen redonda, el nombre, la categoría, la dirección y las coordenadas. Haz clic en la imagen para poner una tuya, doble clic en el nombre para renombrar el lugar en el acto, y la X de la derecha cierra la ficha.',
|
||||
'La cabecera lleva la imagen redonda, el nombre, la dirección en una sola línea y chips para lo que se sabe: abierto o cerrado, la categoría, el precio, el número de teléfono y las coordenadas. Haz clic en la imagen para poner una tuya, doble clic en el nombre para renombrar el lugar en el acto, y la X de la derecha cierra la ficha.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Debajo: el precio si lo tiene, las estrellas que cada viajero le ha dado al lugar, la descripción y las notas, y Notas para este día cuando la parada lleva alguna.',
|
||||
'Debajo: las estrellas que cada viajero le ha dado al lugar, la descripción y las notas, y Notas para este día cuando la parada lleva alguna.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Horario de apertura, Color de la ruta, Datos de la ruta y Archivos siguen a continuación, en la medida en que apliquen. Archivos acepta cualquier cosa de tus carpetas y lista además lo que cuelga de la reserva de esta parada.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'La fila de abajo: Añadir al día o Quitar del día mientras hay un día abierto, luego Guardar en colección, Navegación, Abrir la web, Editar y Eliminar.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Un lugar elegido desde la búsqueda lleva lo que el índice de TREK u OpenStreetMap saben de él: un anillo verde Abierto o rojo Cerrado alrededor de la imagen, juzgado por el reloj del propio lugar, el número de teléfono bajo las estrellas, Horario de apertura más abajo con la línea del día en la fila y toda la semana tras un clic, y su web tras Abrir la web. La valoración de Google solo se muestra en un lugar encontrado a través de Google, en un TREK con clave de Google.',
|
||||
'Un lugar elegido desde la búsqueda lleva lo que el índice de TREK u OpenStreetMap saben de él: Abierto o Cerrado entre los chips de la cabecera, con un anillo verde o rojo alrededor de la imagen, juzgado por el reloj del propio lugar, su número de teléfono también como chip, Horario de apertura más abajo con la línea del día en la fila y toda la semana tras un clic, y su web tras Abrir la web. La valoración de Google solo se muestra en un lugar encontrado a través de Google, en un TREK con clave de Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Lo que la ficha te dice de un lugar',
|
||||
'help.guide.read-place.goal': 'Lee todo lo que el viaje sabe de un lugar, en una sola ficha.',
|
||||
'help.guide.read-place.step.1':
|
||||
'En la columna de días, haz clic en la parada que quieres leer. La ficha se abre sobre el mapa y la parada se queda marcada en su día.',
|
||||
'help.guide.read-place.step.2':
|
||||
'La cabecera: la imagen redonda, el nombre, la dirección y las coordenadas exactas. Un anillo verde con Abierto, o rojo con Cerrado, alrededor de la imagen dice si el lugar está abierto ahora mismo, según su propio reloj, en cuanto TREK conoce su horario. La X de la derecha vuelve a cerrar la ficha.',
|
||||
'La cabecera: la imagen redonda, el nombre y la dirección en una sola línea; su texto emergente muestra la dirección completa. Los chips de debajo dicen si está Abierto o Cerrado ahora mismo, según el reloj del propio lugar, con un anillo verde o rojo a juego alrededor de la imagen, y llevan el número de teléfono, que un clic pasa a tu aplicación de teléfono, y las coordenadas exactas. La X de la derecha vuelve a cerrar la ficha.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Debajo, las estrellas que cada viajero le ha dado al lugar, con la media y cuántos han votado. Sin valorar todavía mientras no lo haya hecho nadie. Justo debajo, el número de teléfono cuando el lugar tiene uno: un clic en él pasa el número a tu aplicación de teléfono.',
|
||||
'Valoración va primero bajo la cabecera: las estrellas que cada viajero le ha dado al lugar, con la media y cuántos han votado. Sin valorar todavía mientras no lo haya hecho nadie.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Luego la descripción y, bajo ella, las notas. Ambas son el texto del formulario del lugar, renderizado: listas, enlaces y negritas funcionan.',
|
||||
'help.guide.read-place.step.5': 'Participantes dice quién va a esta parada. Están todos hasta que saques a alguien.',
|
||||
@@ -2318,18 +2320,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'La reserva de una parada',
|
||||
'help.guide.place-booking.goal': 'Lee la reserva que pertenece a una parada, ábrela y engancha una nueva a ella.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Abre la parada a la que pertenece la reserva. La ficha muestra una franja con Confirmada o Pendiente y el nombre de la reserva.',
|
||||
'Abre la parada a la que pertenece la reserva. La ficha la lista en Reservas como una pequeña tarjeta propia, con el nombre de la reserva y Confirmada o Pendiente.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'La franja lleva la Fecha, la Hora y el Código de reserva, y las notas que tenga la reserva.',
|
||||
'help.guide.place-booking.step.3': 'Haz clic en la franja. La reserva se abre encima del mapa.',
|
||||
'La tarjeta de la reserva lleva la Fecha, la Hora y el Código de reserva, y las notas que tenga la reserva.',
|
||||
'help.guide.place-booking.step.3': 'Haz clic en la tarjeta de la reserva. La reserva se abre encima del mapa.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Editar, al pie de la reserva, abre su propio formulario. Allí, Vincular a una asignación del día es lo que engancha una reserva a una parada, y aquí ya nombra esta. Cierra el formulario otra vez.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Una reserva nueva para una parada empieza en la columna de días: pasa el puntero por la parada y haz clic en el + de su extremo. El formulario se abre como Nueva reserva, ya vinculada a ella.',
|
||||
'Una reserva nueva para una parada empieza en la columna de días: pasa el puntero por la parada y haz clic en Añadir reserva, el billete de su extremo. El formulario se abre como Nueva reserva, ya vinculada a ella.',
|
||||
'help.guide.place-booking.result':
|
||||
'La reserva cuelga de la parada: está en la ficha, está en el día, y sus archivos aparecen aquí también bajo Archivos.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'La franja solo se muestra en la parada a la que la reserva está enganchada. Una reserva sin parada vive en la pestaña Reservas.',
|
||||
'La tarjeta de la reserva solo se muestra en la parada a la que la reserva está enganchada. Una reserva sin parada vive en la pestaña Reservas.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Varias reservas pueden compartir una parada: la comida y la visita que sale de la misma puerta.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2577,7 +2579,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Arriba del todo, el tiempo del día. Pronóstico para nombra el lugar al que corresponde: la primera parada del día, o el alojamiento donde te despiertas.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Reservas lista las reservas de ese día, cada una con su tipo, la parada a la que pertenece y sus horas. Verde significa confirmada, ámbar todavía pendiente; es solo una lectura, las reservas se cambian en la pestaña Reservas.',
|
||||
'Reservas lista las reservas de ese día, cada una con su tipo, la parada a la que pertenece y sus horas. Verde significa confirmada, ámbar todavía pendiente, y un clic en una fila abre la reserva.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Alojamiento muestra cada noche reservada sobre este día, con Registro de entrada y Registro de salida en los días en que ocurren, la franja de entrada, la hora de salida y el número de confirmación.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2609,7 +2611,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'El número grande es la temperatura del día, a su lado la mínima y la máxima, y la condición en palabras.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Los chips de debajo: la probabilidad de lluvia, cuánta cae, el viento más fuerte, y el amanecer y el atardecer.',
|
||||
'Los chips a su derecha: la probabilidad de lluvia, cuánta cae, el viento más fuerte, y el amanecer y el atardecer.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Abajo del todo, el día hora por hora, cada dos horas: la hora, el icono, la temperatura y la probabilidad de lluvia. Una hora por encima del 50 por ciento se sombrea en azul.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2643,18 +2645,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.add-accommodation.step.2':
|
||||
'Abre el día de tu llegada y haz clic en Añadir alojamiento, bajo Alojamiento.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Aplicar a los días dice qué noches cubre la estancia: el día de entrada a la izquierda, el día de salida a la derecha. Todos toma el viaje entero.',
|
||||
'Aplicar a los días dice qué noches cubre la estancia: Inicio es el día de entrada, Fin el día de salida, y Todos toma el viaje entero. La cabecera del diálogo muestra el intervalo y el número de noches.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Rellena Registro de entrada, Hasta y Registro de salida, y pon el número de la reserva bajo Confirmación. Los cuatro pueden quedar vacíos.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Elige el establecimiento entre los lugares del viaje. Los chips sobre la lista la reducen a una categoría.',
|
||||
'Elige el establecimiento entre los lugares del viaje. Categoría, sobre la lista, la reduce a una categoría.',
|
||||
'help.guide.add-accommodation.step.6': 'Haz clic en Guardar.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'La estancia aparece en cada día que cubre, Registro de entrada en el primero y Registro de salida en el último. El establecimiento se convierte en parada del día de entrada, de modo que el mapa dibuja el camino hasta allí, y en la pestaña Reservas aparece una reserva de tipo Alojamiento.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'El selector se abre en el día del que venías, con la salida al día siguiente; ambos se pueden mover antes de guardar.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Dale al hotel la categoría Hotel del viaje al crearlo y los chips sobre la lista la reducen a tus hoteles con un solo clic.',
|
||||
'Dale al hotel la categoría Hotel al crearlo, y Categoría, sobre la lista, la reduce a tus hoteles con un solo clic.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Las horas son todas opcionales: una estancia sin entrada y sin código cubre igualmente sus noches y dibuja igualmente su ruta.',
|
||||
// edit-accommodation
|
||||
@@ -2665,7 +2667,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'El lápiz de su derecha vuelve a abrir la estancia. La ventana dice ahora Editar alojamiento.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Corrige la fila de campos: Registro de entrada, Hasta, Registro de salida y Confirmación. Los días de arriba y el establecimiento de abajo también se cambian aquí.',
|
||||
'Corrige Registro de entrada, Hasta, Registro de salida y Confirmación. Los días de arriba y el establecimiento de abajo también se cambian aquí.',
|
||||
'help.guide.edit-accommodation.step.4': 'Haz clic en Guardar.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'La equis de al lado del lápiz termina la estancia. No pregunta nada, y la reserva de tipo Alojamiento que le pertenece se va con ella.',
|
||||
@@ -2681,7 +2683,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Reservas lista las reservas del día: las fechadas en él, y las que cuelgan de alguna de sus paradas.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Una fila muestra de qué tipo de reserva se trata, su nombre y, cuando pertenece a una parada, esa parada tras un punto. Sus horas van al extremo derecho.',
|
||||
'Una fila muestra de qué tipo de reserva se trata, su nombre y, cuando pertenece a una parada, esa parada en gris detrás. Sus horas van al extremo derecho, antes del punto de estado.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'El color dice cómo está una reserva: una fila verde está confirmada, una ámbar sigue pendiente. Los alojamientos no están en esta lista, tienen su propio bloque debajo.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -67,6 +67,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.allDays': 'Kõik päevad',
|
||||
'costs.expensesCount': '{count} kulu',
|
||||
'costs.addExpense': 'Lisa kulu',
|
||||
'costs.view.label': 'Vaade',
|
||||
'costs.view.list': 'Loend',
|
||||
'costs.view.table': 'Tabel',
|
||||
'costs.table.lockedPayer': 'Keegi on maksnud: muuda summat kulus endas, et saldod jääksid õigeks.',
|
||||
'costs.table.lockedCurrency': 'Sisestatud valuutas {currency}: muuda summat kulus endas.',
|
||||
'costs.table.summary': 'Kokkuvõte',
|
||||
'costs.table.byCategory': 'Kategooria',
|
||||
'costs.table.byDate': 'Päev',
|
||||
'costs.table.byPayer': 'Maksja',
|
||||
'costs.table.byStatus': 'Olek',
|
||||
'costs.table.noPayer': 'Maksjat veel pole',
|
||||
'costs.table.paid': 'Makstud',
|
||||
'costs.table.open': 'Avatud',
|
||||
'costs.editExpense': 'Muuda kulu',
|
||||
'costs.noMatch': 'Otsingule vastavaid kulusid pole.',
|
||||
'costs.emptyText': 'Kulusid veel pole. Lisa esimene.',
|
||||
|
||||
+61
-56
@@ -1734,7 +1734,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Pealkirja, kuupäevi, kaanepilti ja valuutat muudetakse lehel Minu reisid reisikaardil oleva pliiatsiga.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Veeru siseservas olevad noolekesed ahendavad veeru ja kaart võtab ruumi enda alla; veeru kõrval olev õhuke eraldaja muudab selle laiust.',
|
||||
'Veeru siseservas olev sakk ahendab veeru ja kaart võtab ruumi enda alla; veeru kõrval olev õhuke eraldaja muudab selle laiust.',
|
||||
'help.ctx.trip.bullet.6': 'Päevade tööriistaribal olev tagasivõtmise nool võtab tagasi viimase plaanimuudatuse.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Lisa liige',
|
||||
@@ -1798,8 +1798,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Tee kaardile ruumi',
|
||||
'help.guide.collapse-columns.goal': 'Ahenda veerg või anna sellele rohkem laiust.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Klõpsa päevade veeru siseservas olevat noolekest, et veerg ahendada; kaart võtab ruumi enda alla. Kohtade veerul on sama noolekene.',
|
||||
'help.guide.collapse-columns.step.2': 'Veeru tagasitoomiseks klõpsa noolekest uuesti.',
|
||||
'Klõpsa päevade veeru siseservas olevat sakki, seda paneeliikooniga, et veerg ahendada; kaart võtab ruumi enda alla. Kohtade veerul on sama sakk.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Ahendatud veerg jätab kaardi nurka plaadi, päevade jaoks Plaan ja kohtade jaoks Kohad. Veeru tagasitoomiseks klõpsa sellel.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Veeru laiuse muutmiseks lohista veeru ja kaardi vahel olevat õhukest eraldajat.',
|
||||
'help.guide.collapse-columns.result': 'Laiused jäetakse meelde; järgmisel külastusel on veerud taas avatud.',
|
||||
@@ -1823,15 +1824,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Ülal olev Lisa koht või tegevus avab vormi kohale, mille sisestad või otsid. Kui päev on avatud, on nupul tekst Uus koht ja selle kõrval olev Päevale loob koha otse sellele päevale.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Impordi fail võtab vastu .gpx-, .kml- ja .kmz-faile; Nimekirja import võtab vastu jagatud Google Mapsi või Naver Mapsi nimekirja. Faili võib ka lihtsalt veergu lohistada.',
|
||||
"Selle kõrval olev impordinupp pakub valikut Impordi fail .gpx-, .kml- ja .kmz-failide jaoks ning Google'i nimekiri (Nimekirja import, kui ka Naveri nimekirjad on sisse lülitatud) Google Mapsist või Naver Mapsist jagatud nimekirja jaoks. Faili võib ka lihtsalt veergu lohistada.",
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Rippmenüüs saab valida Kõik, Planeerimata, Plaanis ja pärast raja importimist Rajad; selle all on otsing, kategooriafilter ja täht minimaalse hinnangu jaoks.',
|
||||
'Nende all on otsing, selle kõrval valikut alustav linnuke, ja filtrite rida: Näita vahetab valikute Kõik, Planeerimata, Plaanis ja pärast raja importimist Rajad vahel, igaühel oma arv; sildinupp filtreerib kategooria ja täht minimaalse hinnangu järgi.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Real on pilt, nimi ja kirjeldus või aadress. Klõpsa sellel koha üksikasjade nägemiseks, lohista see päevale või paremklõpsa, et näha valikuid Muuda, Lisa päevale, Ava veebisait, Google Maps, Salvesta kogumikku ja Kustuta.',
|
||||
'Real on pilt, nimi ja kirjeldus või aadress. Klõpsa sellel koha üksikasjade nägemiseks, lohista see päevale või paremklõpsa sellel (või klõpsa selle kolmel punktil), et näha valikuid Muuda, + Päev, Ava veebisait, Google Maps, Salvesta kogumikku ja Kustuta.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Kui päev on avatud, lisab planeerimata rea lõpus olev + koha sellele päevale ja Plaanis näitab ainult seda päeva; Näita kogu reisi laiendab vaate taas.',
|
||||
'Kui päev on avatud, lisab planeerimata rea lõpus olev + Päev koha sellele päevale ja Plaanis näitab ainult seda päeva; Näita kogu reisi laiendab vaate taas.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Filtririda paremas otsas olev linnuke alustab valikut: mitmele reale korraga saab määrata uue kategooria, lisada need kogumikku või need kustutada.',
|
||||
'Otsingu kõrval olev linnuke alustab valikut: veeru allservas olevalt ribalt saab mitmele reale korraga määrata uue kategooria, lisada need kogumikku, märkida need külastatuks või need kustutada.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Loo koht',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1839,11 +1840,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Klõpsa kohtade veeru ülaosas Lisa koht või tegevus (kui päev on avatud, siis Uus koht). Avaneb vorm.',
|
||||
'help.guide.create-place.step.2':
|
||||
"Sisesta koht ülal olevale väljale Otsi kohti… ja vali tulemus. Nimi, Aadress, Laiuskraad, Pikkuskraad ja Veebisait täidetakse ning vasakul olev Koha üksikasjad näitab selle pilte, lahtiolekuaegu ja kirjeldust. Google'i võtmega TREKis on loendi all Pole õige koht? Otsi Google'ist, mis teeb sama otsingu Google'i kaudu.",
|
||||
"Sisesta koht väljale Otsi kohti… ja vali tulemus. Akna päises olev nimi, Aadress, Laiuskraad, Pikkuskraad ja Veebisait täidetakse ning vasakul olev Koha üksikasjad näitab selle pilte, lahtiolekuaegu ja kirjeldust. Google'i võtmega TREKis on loendi all Pole õige koht? Otsi Google'ist, mis teeb sama otsingu Google'i kaudu. Paremal olev Salvestatud kohad pakub samamoodi sinu kogumike kohti.",
|
||||
'help.guide.create-place.step.3':
|
||||
'Jaotises Koha üksikasjad teeb klõps pildil jaotises Vali pilt sellest koha pildi; Kasuta seda teksti tõstab kirjelduse vormi.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Kontrolli välju: Nimi on kohustuslik; Kirjeldus ja Märkmed on sinu täita; Aadress, Laiuskraad ja Pikkuskraad tulevad otsingust või sisestatakse käsitsi; Kategooria valib ühe reisi kategooriatest ja selle kõrval olev + loob kohe uue; Veebisait on lingi jaoks.',
|
||||
'Kontrolli, mis vormis on: nimi asub akna päises ja on ainus kohustuslik väli; selle all olev Kategooria kiip valib ühe reisi kategooriatest ja selle kõrval olev + loob kohe uue. Aadress, Laiuskraad ja Pikkuskraad tulevad otsingust või sisestatakse käsitsi; Kirjeldus ja Märkmed on sinu täita; Veebisait on lingi jaoks.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Klõpsa Lisa. Kui sama nimega koht on reisil juba olemas, annab vorm sellest teada ja nupuks saab Lisa siiski.',
|
||||
'help.guide.create-place.result': 'Koht on loendis ja kaardil, jaotises Planeerimata, kuni see päevale lisatakse.',
|
||||
@@ -1861,7 +1862,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Päevale avab sama vormi mis Uus koht, ainult et koht lisatakse avatud päevale kohe, kui klõpsad Lisa.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Juba olemasoleva koha saab avatud päevale lisada selle rea lõpus oleva + abil või paremklõpsuga, Lisa päevale.',
|
||||
'Juba olemasoleva koha saab avatud päevale lisada selle rea lõpus oleva + Päev abil või paremklõpsuga, + Päev.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Toimib ka teistpidi ja ilma päeva enne avamata: lohista koha rida veerust välja ja aseta see päeva kaardile. Kahe peatuse vahele asetatuna jõuab see täpselt sinna.',
|
||||
'help.guide.place-to-open-day.result': 'Koht on päeva all loendi lõpus; lohista see üles või alla õigesse kohta.',
|
||||
@@ -1872,10 +1873,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Leia koht loendist',
|
||||
'help.guide.filter-places.goal': 'Kitsenda veergu kohtadeni, mida otsid.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Ülal olevas rippmenüüs saab valida Kõik, Planeerimata (pole veel üheski päevas), Plaanis (on mõnel päeval) ja Rajad (imporditud GPX-rajad), igaühel oma arv.',
|
||||
'help.guide.filter-places.step.2': 'Kirjuta väljale Otsi kohti…; loend kitseneb kirjutamise ajal.',
|
||||
'Otsingu all olevas rippmenüüs Näita saab valida Kõik, Planeerimata (pole veel üheski päevas), Plaanis (on mõnel päeval) ja Rajad (imporditud GPX-rajad), igaühel oma arv.',
|
||||
'help.guide.filter-places.step.2': 'Kirjuta ülal väljale Otsi; loend kitseneb kirjutamise ajal.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Kõik kategooriad avab loendi, kus saab märkida ühe või mitu kategooriat, sealhulgas Kategooriata; selle allosas olev Tühjenda filter lähtestab valiku.',
|
||||
'Näita kõrval olev sildinupp loetleb kategooriad: märgi üks või mitu, sealhulgas Kategooriata. Nupp näitab märgitute arvu ja loendi allosas olev Tühjenda filter tühistab need kõik.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Selle kõrval olev täht määrab minimaalse hinnangu: 5+, 4+ jne näitavad ainult kohti, mida oled hinnanud vähemalt nii kõrgelt.',
|
||||
'help.guide.filter-places.result': 'Ridade kohal olev arv näitab, mitu kohta sobib; filtrid toimivad koos.',
|
||||
@@ -1887,7 +1888,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.goal': 'Paranda nime, liiguta nõela, lisa veebisait või muuda kategooriat.',
|
||||
'help.guide.edit-place.step.1': 'Paremklõpsa real ja vali Muuda või ava koht ja klõpsa selle üksikasjades Muuda.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Muuda, mida vaja: Nimi, Kirjeldus, Märkmed, Aadress, Laiuskraad ja Pikkuskraad, Kategooria, Veebisait. Päevalt avatuna on vormis ka Selle päeva märkmed ning selle päeva Algus ja Lõpp.',
|
||||
'Muuda, mida vaja: akna päises olev nimi ja Kategooria kiip, Aadress, Laiuskraad ja Pikkuskraad, Kirjeldus, Märkmed ja Veebisait. Päevalt avatuna on vormis ka Algus ja Lõpp ning Selle päeva märkmed.',
|
||||
'help.guide.edit-place.step.3': 'Klõpsa Uuenda.',
|
||||
'help.guide.edit-place.result':
|
||||
'Muudatus kehtib kõikjal, kus koht esineb: loendis, kaardil ja igal päeval, kus see on.',
|
||||
@@ -1900,21 +1901,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.goal': 'Eemalda koht reisilt jäädavalt.',
|
||||
'help.guide.delete-place.step.1': 'Paremklõpsa real ja vali Kustuta või klõpsa koha üksikasjades Kustuta.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Kinnita. Kui kohas on broneeritud öö või kohaga on seotud broneering, ütleb küsimus, mis sellega koos kaob.',
|
||||
'Klõpsa küsimuses Kustuta. Kui kohas on broneeritud öö või kohaga on seotud broneering, ütleb küsimus, mis sellega koos kaob.',
|
||||
'help.guide.delete-place.result':
|
||||
'Koht on kadunud loendist, kaardilt ja kõigilt päevadelt; päevade kohal oleva tööriistariba nupp Võta tagasi toob selle tagasi.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Koha eemaldamiseks ainult ühelt päevalt kasuta hoopis selle peatuse juures Eemalda päevast.',
|
||||
'help.guide.delete-place.tip.2': 'Mitu kohta korraga: filtrite kõrval olev linnuke alustab valikut.',
|
||||
'help.guide.delete-place.tip.2': 'Mitu kohta korraga: otsingu kõrval olev linnuke alustab valikut.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Muuda või kustuta mitu kohta korraga',
|
||||
'help.guide.select-places.goal': 'Korrasta loend ühe korraga, mitte koht-kohalt.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Klõpsa filtrirea paremas otsas olevat linnukest. Ridadele ilmuvad märkeruudud ja kuvatakse toimingute riba.',
|
||||
'help.guide.select-places.step.2': 'Märgi read või klõpsa ribal Vali kõik; riba näitab valitute arvu.',
|
||||
'Klõpsa otsinguvälja kõrval olevat linnukest. Ridadele ilmuvad ümmargused märkeruudud ja veeru allservas tõuseb esile toimingute riba.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Klõpsa ridu, et need märkida. Vali kõik, ribal olev topeltlinnuke, võtab kõik read, mis filtritest alles jäävad.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Muuda kategooriat annab neile kõigile ühe kategooria; Salvesta kogumikku kopeerib need ühte sinu kogumikku; Kustuta valitud eemaldab need pärast kinnitust.',
|
||||
'help.guide.select-places.step.4': 'Valikust väljumiseks klõpsa linnukest uuesti.',
|
||||
'Riba näitab märgitud kohtade arvu. Muuda kategooriat annab neile kõigile ühe kategooria; Salvesta kogumikku kopeerib need ühte sinu kogumikku; Kustuta valitud eemaldab need pärast kinnitust.',
|
||||
'help.guide.select-places.step.4': 'Valmis, riba lõpus olev X, lõpetab valiku.',
|
||||
'help.guide.select-places.result':
|
||||
'Muudatus kehtib igale valitud kohale; kustutamise saab tagasi võtta päevade kohal olevalt tööriistaribalt.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1924,7 +1926,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'Impordi kohad GPX-, KML- või KMZ-failist',
|
||||
'help.guide.import-places-file.goal': 'Too sisse see, mida Google My Maps, Google Earth või GPS-seade eksportis.',
|
||||
'help.guide.import-places-file.step.1': 'Klõpsa Impordi fail või lohista fail kuhu tahes kohtade veergu.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Klõpsa lisamisnupu kõrval olevat impordinuppu ja vali Impordi fail või lohista fail kuhu tahes kohtade veergu.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Vali fail või lohista see kasti. GPX-i puhul märgi, mida importida: Teekonnapunktid, Marsruudid, Rajad (koos teekonna geomeetriaga); KML-i ja KMZ-i puhul Punktid (Placemarks) ja Teekonnad (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1940,7 +1943,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Impordi jagatud Google Mapsi või Naver Mapsi nimekiri',
|
||||
'help.guide.import-places-list.goal': 'Muuda jagatud nimekirja link kohtadeks.',
|
||||
'help.guide.import-places-list.step.1': "Klõpsa Nimekirja import ja vali Google'i nimekiri või Naveri nimekiri.",
|
||||
'help.guide.import-places-list.step.1':
|
||||
"Klõpsa lisamisnupu kõrval olevat impordinuppu ja vali Google'i nimekiri. Kui ka Naveri nimekirjad on sisse lülitatud, on kirje nimi Nimekirja import ja aken küsib, kumba neist soovid.",
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Kleebi nimekirja jagatud link. Sobib ka Google Mapsi teejuhiste link: selle peatustest saavad kohad sõidujärjekorras.',
|
||||
'help.guide.import-places-list.step.3': 'Klõpsa Impordi.',
|
||||
@@ -1958,24 +1962,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Ülal olev tööriistariba: Ekspordi (PDF, kalender, GPX), Laienda kõik päevad / Ahenda kõik päevad, tagasivõtmise nool, Muuda päevade järjekorda ja Näita kõiki broneeringute marsruute.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Päeva kaart: päises on number, ilm, pealkiri, kuupäev ja päeva kulu; klõpsa päisel päeva avamiseks, noolekene ahendab päeva kaardi. Päises on ka Ühistransport, Lisa transport ja Lisa märge.',
|
||||
'Päeva kaart: plaat päeva numbri ja ilmaprognoosiga, pealkiri ja kuupäev ning kiibid broneeritud öö, rendiauto ja päeva kulu jaoks. Klõpsa päisel päeva avamiseks, noolekene ahendab selle ja + avab menüü: Lisa koht sellele päevale, Lisa majutus, Lisa transport, Ühistransport ja Lisa märge.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Päeva sees: peatused järjekorras, igaühel pilt, nimi, aeg ja pildil lukk; märkmed; päevale kuuluvad broneeringud; ning peatuste vahel iga teelõigu sõiduaeg.',
|
||||
'Päeva sees: peatused järjekorras, igaühel pilt, nimi, aeg, pildil lukk ja sellega seotud broneeringud; märkmed; päeva broneeringud ja transport, toonitud tüübi järgi; ning peatuste vahel iga teelõigu sõiduaeg. Igal real on kolme punktiga menüü, sama, mis avaneb paremklõpsuga.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Peatuste all on marsruudiriba: Marsruut joonistab päeva kaardile, Optimeeri järjestab peatused, Autoga / Jalgsi määrab päeva liikumisviisi, Ava Google Mapsis ja Ava CoMapsis annavad päeva neile rakendustele üle.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Kohad jõuavad päevale, kui lohistad rea kohtade veerust, kasutad selle rea +-i, tühjal päeval nuppu Lisa koht sellele päevale või koha üksikasju.',
|
||||
'Kohad jõuavad päevale, kui lohistad rea kohtade veerust, kasutad selle rea nuppu + Päev, päeva + menüüs või tühjal päeval nuppu Lisa koht sellele päevale või koha üksikasju.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Allosas olev Kogukulu liidab kokku kõik hinnaga peatused ja broneeringud reisi valuutas.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Loe päeva kaarti',
|
||||
'help.guide.read-day-plan.goal': 'Tea enne muutmist, mida päeva kaardi iga osa sulle ütleb.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Päis: päeva number, päeva ilmaprognoos, Päev 1 või sinu antud pealkiri, kuupäev ja päeva kulu. Klõpsa päisel päeva avamiseks (selle üksikasjade paneel avaneb kaardi kohal); paremal olev noolekene ahendab ja laiendab päeva kaarti.',
|
||||
'Päis: plaat päeva numbri ja ilmaprognoosiga, seejärel Päev 1 või sinu antud pealkiri, kuupäev ning kiibid broneeritud öö (sisse- või väljaregistreerimine), rendiauto ja päeva kulu jaoks. Klõpsa päisel päeva avamiseks (selle üksikasjade paneel avaneb kaardi kohal); paremal olev + lisab koha, majutuse, transpordi, ühistranspordiühenduse või märke ning noolekene ahendab kaardi.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Peatus: vasakul olevast pidemest saab seda lohistada, pildil on lukk marsruudi optimeerimise jaoks, seejärel nimi, kirjeldus ja kui on määratud, selle päeva märkmed. Ajamärk näitab Algust ja Lõppu, kui peatusel need on; selle paremas otsas ilmuvad nooled liigutavad peatust üles või alla.',
|
||||
'Peatus: vasakul olevast pidemest saab seda lohistada, pildil on lukk marsruudi optimeerimise jaoks, seejärel nimi, ajamärk, kui peatusel on Algus ja Lõpp, kirjeldus ja kui on määratud, selle päeva märkmed. Selle paremas otsas olevad nooled liigutavad peatust üles või alla ja kolm punkti avavad selle menüü.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Päeva broneering: peatuse broneering märgib peatuse kui Broneering kinnitatud või Broneering ootel ning transport kuvatakse kui Väljumine või Saabumine koos aja ja marsruudiga ning väikese lülitiga, mis joonistab selle marsruudi kaardile.',
|
||||
'Peatuse broneering asub sellel märgina Broneering, roheline, kui see on kinnitatud, ja merevaigukollane, kui see on ootel, koos aja ja teenusepakkujaga; klõpsa märgil broneeringu avamiseks ja selle kõrval olev marsruudinupp joonistab selle marsruudi. Transport on eraldi rida, toonitud tüübi järgi, tekstiga Väljumine või Saabumine ja ajaga. Klõpsa broneeringul ja selle üksikasjad avanevad; seal olev Muuda muudab seda.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Kahe peatuse vahel näitab ühendaja päeva liikumisviisi järgi, kui kaua teelõik aega võtab ja kui pikk see on; klõpsa sellel, et muuta ainult selle teelõigu liikumisviisi.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -1983,7 +1987,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Igal päeva kaardi sümbolil on tähendus; allolevad juhendid näitavad, kuidas igaüht neist muuta.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Paremklõpsa peatusel, et avada selle menüü: Muuda, Eemalda päevast, Ava veebisait, navigeerimisrakendused (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Salvesta kogumikku, Kustuta.',
|
||||
'Paremklõpsa peatusel või klõpsa selle kolmel punktil, et avada selle menüü: Muuda, Eemalda päevast, Ava veebisait, navigeerimisrakendused (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Salvesta kogumikku, Kustuta.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Vii hiirekursor peatuse kohale ja selle lõppu ilmub Lisa broneering: seal loodud broneering on seotud selle peatusega sellel päeval.',
|
||||
// place-onto-day
|
||||
@@ -1992,9 +1996,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Lohista rida kohtade veerust päeva kaardile. Aseta see kahe peatuse vahele, et see täpselt sinna panna, või ükskõik kuhu päeva kaardil, et lisada see lõppu.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Lohistamata: ava päev selle päisel klõpsates, seejärel klõpsa koha rea lõpus olevat + või paremklõpsa real ja vali Lisa päevale.',
|
||||
'Lohistamata: ava päev selle päisel klõpsates, seejärel klõpsa koha rea lõpus olevat + Päev või paremklõpsa real ja vali + Päev.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Tühjal päeval avab Lisa koht sellele päevale kohavormi ja uus koht lisatakse kohe päevale.',
|
||||
'Lisa koht sellele päevale, päeva + menüüs või tühjal päeval, avab kohavormi ja uus koht lisatakse kohe päevale.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Koha üksikasjades küsib Lisa päevale, milline päev; kui päev on päisest avatud, loob kohtade veerus olev Päevale uue koha avatud päevale.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2023,7 +2027,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Määra peatusele kellaaeg',
|
||||
'help.guide.set-stop-times.goal': 'Määra, millal peatus algab ja lõpeb, et päev oleks loetav nagu ajakava.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Paremklõpsa peatusel ja vali Muuda. Päevalt avatuna on vormi allosas Algus ja Lõpp.',
|
||||
'Paremklõpsa peatusel või klõpsa selle kolmel punktil ja vali Muuda. Päevalt avatuna on vormis selle päeva Algus ja Lõpp, kohe asukoha all.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Sisesta Algus ja soovi korral Lõpp. Ajaline kattuvus: hoiatab, et päeva mõni teine kellaajaga peatus kattub; kui Lõpp on enne Algust, ei saa Uuenda klõpsata.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2060,12 +2064,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Lisa päevale märge',
|
||||
'help.guide.day-note.goal': 'Hoia meeldetuletust, piletinumbrit või plaani B otse päevas.',
|
||||
'help.guide.day-note.step.1': 'Klõpsa päeva päises Lisa märge.',
|
||||
'help.guide.day-note.step.1': 'Klõpsa päeva päises olevat + ja vali Lisa märge.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Anna sellele nimi väljal Märkus (see kuvatakse päeva kaardil) ja kirjuta ülejäänu väljale Päevamärge. Selle kohal olev tööriistariba vormindab teksti (paks kiri, loendid, lingid, tsitaadid) ja vasakul olev Eelvaade näitab, milline kaart sellest saab.',
|
||||
'Kirjuta märke nimi akna päisesse, kus on kirjas Märge; see kuvatakse päeva kaardil. Ülejäänu kirjuta väljale Päevamärge: selle kohal olev tööriistariba vormindab teksti (paks kiri, loendid, lingid, tsitaadid) ja vasakul olev Eelvaade näitab, milline rida sellest saab.',
|
||||
'help.guide.day-note.step.3': 'Vali Ikoon ja Värv, et märge peatuste seast silma paistaks, seejärel klõpsa Lisa.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Märge asub päevas nagu peatus: lohista see õigesse kohta, paremklõpsa sellel, et valida Muuda või Kustuta.',
|
||||
'Märge asub päevas nagu peatus: lohista see õigesse kohta ning paremklõpsa sellel või kasuta selle kolme punkti, et valida Muuda või Kustuta.',
|
||||
'help.guide.day-note.result': 'Märge on päeva osa, ka PDF-is; kellaajaga märge järjestub koos kellaajaga peatustega.',
|
||||
'help.guide.day-note.tip.1':
|
||||
'Kellaajaga märge võib asendada transporti, mille kohta sul broneeringut pole: „08:15 S3 keskjaamast“.',
|
||||
@@ -2110,15 +2114,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Loe plaanis broneeringuid ja transporti',
|
||||
'help.guide.bookings-in-plan.goal': 'Tea, kus broneering pärast loomist kuvatakse ja millisel ekraanil seda luuakse.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Transport (lend, rong, praam, buss, auto) kuvatakse väljumise päeval kui Väljumine ja saabumise päeval kui Saabumine koos aja ja marsruudiga; mitmepäevane transport ulatub üle vahepealsete päevade.',
|
||||
'Transport (lend, rong, praam, buss, auto) on tüübi järgi toonitud rida: väljumise päeval Väljumine, saabumise päeval Saabumine, koos aja ja marsruudiga; mitmepäevane transport ulatub üle vahepealsete päevade. Klõpsa real ja broneering avaneb.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Peatusega seotud broneering (restoran, ekskursioon) märgib selle peatuse kui Broneering kinnitatud või Broneering ootel; päevaga, kuid peatuseta broneering on päevas eraldi real.',
|
||||
'Peatusega seotud broneering (restoran, ekskursioon) on sellel peatusel märk Broneering, roheline, kui see on kinnitatud, ja merevaigukollane, kui see on ootel, koos ajaga; päevaga, kuid peatuseta broneering on päevas eraldi real.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Öö hotellis on majutus: see on päeva üksikasjade paneelil jaotises Majutus sisseregistreerimisest väljaregistreerimiseni ja kõigi nende päevade marsruut algab sealt.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Transpordi real olev lüliti joonistab selle marsruudi kaardile; tööriistariba nupp Näita kõiki broneeringute marsruute joonistab need kõik.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Loomine: Lisa broneering peatusel, mille kohal on hiirekursor, Lisa transport ja Ühistransport päeva päises ning vahekaardid Broneeringud ja Transport täieliku loendi, importimise ja failide jaoks.',
|
||||
'Loomine: Lisa broneering peatusel, mille kohal on hiirekursor, Lisa transport ja Ühistransport päeva + menüüs ning vahekaardid Broneeringud ja Transport täieliku loendi, importimise ja failide jaoks.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Üks broneering, üks koht plaanis; vahekaardid näitavad samu broneeringuid loendina.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2149,24 +2153,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Klõpsa kohtade veerus real, päeva sees peatusel või kaardil markeril ja paneel avaneb kaardi kohal. Kui valid koha päeva seest, teab paneel, millist peatust mõtled, ning just see toob kaasa peatuse osalejad ja broneeringu.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Päises on ümmargune pilt, nimi, kategooria, aadress ja koordinaadid. Klõpsa pildil, et kasutada oma pilti, topeltklõpsa nimel, et koht kohe ümber nimetada, ning paremal olev X sulgeb paneeli.',
|
||||
'Päises on ümmargune pilt, nimi, aadress ühel real ja kiibid selle kohta, mis on teada: avatud või suletud, kategooria, hind, telefoninumber ja koordinaadid. Klõpsa pildil, et kasutada oma pilti, topeltklõpsa nimel, et koht kohe ümber nimetada, ning paremal olev X sulgeb paneeli.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Selle all: hind, kui see on olemas, iga reisija antud tärnid, kirjeldus ja märkmed ning Selle päeva märkmed, kui peatusel need on.',
|
||||
'Selle all: iga reisija antud tärnid, kirjeldus ja märkmed ning Selle päeva märkmed, kui peatusel need on.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Edasi tulevad Lahtiolekuajad, Raja värv, Raja statistika ja Failid, kui need on asjakohased. Failid võtab vastu mis tahes faili sinu kaustadest ja näitab ka seda, mis on selle peatuse broneeringu küljes.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Allosas olev rida: kui päev on avatud, Lisa päevale või Eemalda päevast, seejärel Salvesta kogumikku, Navigeerimine, Ava veebisait, Muuda ja Kustuta.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
"Otsingust valitud kohal on see, mida TREKi indeks või OpenStreetMap selle kohta teab: pildi ümber roheline rõngas tekstiga Avatud või punane tekstiga Suletud, koha enda kellaaja järgi, telefoninumber tärnide all, allpool Lahtiolekuajad, mille real on päeva lahtiolekuaeg ja klõpsuga kogu nädal, ning veebisait nupu Ava veebisait taga. Google'i hinnang kuvatakse ainult Google'i kaudu leitud kohal Google'i võtmega TREKis.",
|
||||
"Otsingust valitud kohal on see, mida TREKi indeks või OpenStreetMap selle kohta teab: päise kiipide seas Avatud või Suletud, koos rohelise või punase rõngaga pildi ümber, koha enda kellaaja järgi, ka telefoninumber kiibina, allpool Lahtiolekuajad, mille real on päeva lahtiolekuaeg ja klõpsuga kogu nädal, ning veebisait nupu Ava veebisait taga. Google'i hinnang kuvatakse ainult Google'i kaudu leitud kohal Google'i võtmega TREKis.",
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Mida paneel kohast ütleb',
|
||||
'help.guide.read-place.goal': 'Loe ühest paneelist kõike, mida reis ühe koha kohta teab.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Klõpsa päevade veerus peatusel, mille kohta soovid lugeda. Paneel avaneb kaardi kohal ja peatus jääb oma päevas märgituks.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Päis: ümmargune pilt, nimi, aadress ja täpsed koordinaadid. Roheline rõngas tekstiga Avatud või punane tekstiga Suletud pildi ümber näitab koha enda kellaaja järgi, kas koht on praegu avatud, kui TREK teab selle lahtiolekuaegu. Paremal olev X sulgeb paneeli.',
|
||||
'Päis: ümmargune pilt, nimi ja aadress ühel real; selle kohtspikker näitab kogu aadressi. Nende all olevad kiibid ütlevad koha enda kellaaja järgi, kas see on praegu Avatud või Suletud, koos sobiva rohelise või punase rõngaga pildi ümber, ning kannavad telefoninumbrit, mille klõps annab su telefonirakendusele, ja täpseid koordinaate. Paremal olev X sulgeb paneeli.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Selle all on iga reisija antud tärnid koos keskmise ja hääletanute arvuga. Veel hindamata, kui keegi pole hinnanud. Kohe allpool telefoninumber, kui kohal see on: klõps sellel annab numbri su telefonirakendusele.',
|
||||
'Päise all on esimesena Hinnang: iga reisija antud tärnid koos keskmise ja hääletanute arvuga. Veel hindamata, kui keegi pole hinnanud.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Seejärel kirjeldus ja selle all märkmed. Mõlemad on koha vormist pärit vormindatud tekst: loendid, lingid ja paks kiri töötavad.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2258,17 +2262,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'Peatuse broneering',
|
||||
'help.guide.place-booking.goal': 'Vaata peatusega seotud broneeringut, ava see ja seo peatusega uus broneering.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Ava peatus, millega broneering on seotud. Kaardil on riba, kus on kirjas Kinnitatud või Ootel ja broneeringu nimi.',
|
||||
'help.guide.place-booking.step.2': 'Ribal on Kuupäev, Aeg ja Broneerimiskood ning broneeringu märkmed, kui neid on.',
|
||||
'help.guide.place-booking.step.3': 'Klõpsa ribal. Broneering avaneb kaardi kohal.',
|
||||
'Ava peatus, millega broneering on seotud. Paneel näitab seda jaotises Broneeringud eraldi väikese kaardina, broneeringu nime ja olekuga Kinnitatud või Ootel.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Broneeringu kaardil on Kuupäev, Kellaaeg ja Broneerimiskood ning broneeringu märkmed, kui neid on.',
|
||||
'help.guide.place-booking.step.3': 'Klõpsa broneeringu kaardil. Broneering avaneb kaardi kohal.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Broneeringu allosas olev Muuda avab selle oma vormi. Seal seob väli Seo päevaplaani kirjega broneeringu peatusega ja siin on selleks juba see peatus valitud. Sulge vorm uuesti.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Peatuse uus broneering algab päevade veerust: vii kursor peatusele ja klõpsa rea lõpus nuppu +. Vorm avaneb pealkirjaga Uus broneering ja on juba peatusega seotud.',
|
||||
'Peatuse uus broneering algab päevade veerust: vii kursor peatusele ja klõpsa selle lõpus olevat piletiikooni Lisa broneering. Vorm avaneb pealkirjaga Uus broneering ja on juba peatusega seotud.',
|
||||
'help.guide.place-booking.result':
|
||||
'Broneering on peatusega seotud: see on kaardil, see on päevas ja selle failid on siin ka jaotises Failid.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Riba on näha ainult selle peatuse juures, millega broneering on seotud. Peatuseta broneering asub vahekaardil Broneer.',
|
||||
'Broneeringu kaart on näha ainult selle peatuse juures, millega broneering on seotud. Peatuseta broneering asub vahekaardil Broneer.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Ühel peatusel võib olla mitu broneeringut: lõuna ja ekskursioon, mis algab samast uksest.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2352,7 +2357,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Üleval on päeva ilm. Prognoosi juures on nimetatud koht, mille kohta see käib: päeva esimene peatus või hotell, kus sa ärkad.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Broneeringud loetleb selle päeva broneeringud, igaühe juures tüüp, peatus, millega see on seotud, ja kellaajad. Roheline tähendab kinnitatud, merevaigukollane veel ootel; see on ainult ülevaade, broneeringuid muudetakse vahekaardil Broneeringud.',
|
||||
'Broneeringud loetleb selle päeva broneeringud, igaühe juures tüüp, peatus, millega see on seotud, ja kellaajad. Roheline tähendab kinnitatud, merevaigukollane veel ootel, ja klõps real avab broneeringu.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Majutus näitab kõiki sellele päevale broneeritud öid: vastavatel päevadel sildid Sisseregistreerimine ja Väljaregistreerimine, sisseregistreerimise ajavahemik, väljaregistreerimise aeg ja kinnitusnumber.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2386,7 +2391,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Suur number on päeva temperatuur, selle kõrval madalaim ja kõrgeim ning ilm sõnadega.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Selle all olevad kiibid: vihmatõenäosus, sademete hulk, tugevaim tuul ning päikesetõus ja -loojang.',
|
||||
'Sellest paremal olevad kiibid: vihmatõenäosus, sademete hulk, tugevaim tuul ning päikesetõus ja -loojang.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'All on päev tunni kaupa, iga teine tund: kellaaeg, ikoon, temperatuur ja vihmatõenäosus. Tund, mille vihmatõenäosus on üle 50 protsendi, on sinisega varjutatud.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2420,18 +2425,18 @@ const help: TranslationStrings = {
|
||||
'Majutuskoht peab kõigepealt olema reisi koht. Loo see kohtade veerus nagu iga teine koht: valija pakub ainult seda, mis seal juba on.',
|
||||
'help.guide.add-accommodation.step.2': 'Ava saabumispäev ja klõpsa jaotises Majutus nuppu Lisa majutus.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Rakenda päevadele määrab, milliseid öid peatumine hõlmab: vasakul sisseregistreerimise päev, paremal väljaregistreerimise päev. Kõik hõlmab kogu reisi.',
|
||||
'Rakenda päevadele määrab, milliseid öid peatumine hõlmab: Algus on sisseregistreerimise päev, Lõpp väljaregistreerimise päev ja Kõik hõlmab kogu reisi. Akna päis näitab ajavahemikku ja ööde arvu.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Täida väljad Sisseregistreerimine, Kuni ja Väljaregistreerimine ning sisesta broneeringu number välja Kinnitus. Kõik neli võivad jääda tühjaks.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Vali majutuskoht reisi kohtade hulgast. Loendi kohal olevad kiibid kitsendavad selle ühele kategooriale.',
|
||||
'Vali majutuskoht reisi kohtade hulgast. Loendi kohal olev Kategooria kitsendab selle ühele kategooriale.',
|
||||
'help.guide.add-accommodation.step.6': 'Klõpsa Salvesta.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Peatumine on näha igal päeval, mida see hõlmab, esimesel päeval Sisseregistreerimine ja viimasel Väljaregistreerimine. Majutuskohast saab sisseregistreerimise päeval peatus, nii et kaart joonistab tee sinna, ja vahekaardile Broneeringud ilmub hotellibroneering.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Valija avaneb päevaga, kust sa tulid, ja väljaregistreerimine on järgmisel päeval; mõlemat saab enne salvestamist muuta.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Anna hotellile loomisel kategooria Hotell ja loendi kohal olevad kiibid kitsendavad selle ühe klõpsuga sinu hotellideni.',
|
||||
'Anna hotellile loomisel kategooria Hotell ja loendi kohal olev Kategooria kitsendab selle ühe klõpsuga sinu hotellideni.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Kõik kellaajad on valikulised: ilma sisseregistreerimisaja ja koodita peatumine hõlmab ikkagi oma öid ja joonistab ikkagi oma marsruudi.',
|
||||
// edit-accommodation
|
||||
@@ -2442,7 +2447,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Paremal olev pliiats avab peatumise uuesti. Hüpikaknas on nüüd kirjas Muuda majutust.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Paranda väljade rida: Sisseregistreerimine, Kuni, Väljaregistreerimine ja Kinnitus. Siin saab muuta ka selle kohal olevaid päevi ja all olevat majutuskohta.',
|
||||
'Paranda välju Sisseregistreerimine, Kuni, Väljaregistreerimine ja Kinnitus. Siin saab muuta ka nende kohal olevaid päevi ja all olevat majutuskohta.',
|
||||
'help.guide.edit-accommodation.step.4': 'Klõpsa Salvesta.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'Pliiatsi kõrval olev X lõpetab peatumise. See ei küsi midagi ja kaob ka sellega seotud hotellibroneering.',
|
||||
@@ -2459,7 +2464,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Broneeringud loetleb päeva broneeringud: need, mille kuupäev on sellel päeval, ja need, mis on seotud mõne selle päeva peatusega.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Real on broneeringu tüüp, nimi ja, kui see on seotud peatusega, pärast punkti see peatus. Kellaajad on rea paremas otsas.',
|
||||
'Real on broneeringu tüüp, nimi ja, kui see on seotud peatusega, selle järel hallis kirjas see peatus. Kellaajad on rea paremas otsas, enne olekupunkti.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Värv näitab broneeringu olekut: roheline rida on kinnitatud, merevaigukollane veel ootel. Hotelle selles loendis pole, neil on all oma plokk.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,20 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Payées par moi',
|
||||
'costs.filter.owed': 'On me doit',
|
||||
'costs.addExpense': 'Ajouter une dépense',
|
||||
'costs.view.label': 'Affichage',
|
||||
'costs.view.list': 'Liste',
|
||||
'costs.view.table': 'Tableau',
|
||||
'costs.table.lockedPayer':
|
||||
'Payé par quelqu’un : modifiez le montant dans la dépense pour que les soldes restent justes.',
|
||||
'costs.table.lockedCurrency': 'Saisi en {currency} : modifiez le montant dans la dépense.',
|
||||
'costs.table.summary': 'Résumé',
|
||||
'costs.table.byCategory': 'Catégorie',
|
||||
'costs.table.byDate': 'Jour',
|
||||
'costs.table.byPayer': 'Payeur',
|
||||
'costs.table.byStatus': 'Statut',
|
||||
'costs.table.noPayer': 'Pas encore de payeur',
|
||||
'costs.table.paid': 'Payé',
|
||||
'costs.table.open': 'En attente',
|
||||
'costs.editExpense': 'Modifier la dépense',
|
||||
'costs.noMatch': 'Aucune dépense ne correspond à votre recherche.',
|
||||
'costs.emptyText': 'Aucune dépense pour le moment. Ajoutez la première.',
|
||||
|
||||
+59
-56
@@ -1807,7 +1807,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Le titre, les dates, la couverture et la devise se modifient depuis Mes voyages, avec le crayon sur la carte du voyage.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Les chevrons au bord intérieur d’une colonne la replient et la carte prend la place ; le fin séparateur à côté d’une colonne change sa largeur.',
|
||||
'La languette au bord intérieur d’une colonne la replie et la carte prend la place ; le fin séparateur à côté d’une colonne change sa largeur.',
|
||||
'help.ctx.trip.bullet.6':
|
||||
'La flèche d’annulation dans la barre d’outils des jours reprend la dernière modification du plan.',
|
||||
// add-member
|
||||
@@ -1880,8 +1880,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Faire de la place pour la carte',
|
||||
'help.guide.collapse-columns.goal': 'Repliez une colonne ou donnez-lui plus de largeur.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Cliquez sur le chevron au bord intérieur de la colonne des jours pour la replier ; la carte prend l’espace. La colonne des lieux a le même chevron.',
|
||||
'help.guide.collapse-columns.step.2': 'Cliquez de nouveau sur le chevron pour ramener la colonne.',
|
||||
'Cliquez sur la languette au bord intérieur de la colonne des jours, celle avec l’icône de panneau, pour replier la colonne ; la carte prend l’espace. La colonne des lieux a la même languette.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Une colonne repliée laisse une tuile dans le coin de la carte, Plan pour les jours et Lieux pour les lieux. Cliquez dessus pour ramener la colonne.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Faites glisser le fin séparateur entre une colonne et la carte pour changer la largeur de la colonne.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1908,26 +1909,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Ajouter un lieu/activité en haut ouvre le formulaire pour un lieu que vous tapez ou cherchez. Tant qu’un jour est ouvert, le bouton affiche Nouveau lieu, et Au jour à côté crée le lieu directement sur ce jour.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importer un fichier prend les fichiers .gpx, .kml et .kmz ; Import de liste prend une liste partagée de Google Maps ou de Naver Maps. Un fichier peut aussi être simplement déposé sur la colonne.',
|
||||
'Le bouton d’import à côté propose Importer un fichier, pour les fichiers .gpx, .kml et .kmz, et Liste Google (Import de liste quand les listes Naver sont aussi activées) pour une liste partagée depuis Google Maps ou Naver Maps. Un fichier peut aussi être simplement déposé sur la colonne.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Le menu déroulant bascule entre Tous, Non planifiés, Planifiés et, dès qu’une trace a été importée, Traces ; en dessous se trouvent la recherche, le filtre de catégorie et l’étoile pour une note minimale.',
|
||||
'En dessous, la recherche, avec à côté la coche qui démarre une sélection, et une rangée de filtres : Afficher bascule entre Tous, Non planifiés, Planifiés et, dès qu’une trace a été importée, Traces, chacun avec son compte ; le bouton étiquette filtre par catégorie et l’étoile par note minimale.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Une ligne montre l’image, le nom et la description ou l’adresse. Cliquez dessus pour les détails du lieu, glissez-la sur un jour, ou faites un clic droit pour Modifier, + Jour, Ouvrir le site web, Google Maps, Enregistrer dans une collection et Supprimer.',
|
||||
'Une ligne montre l’image, le nom et la description ou l’adresse. Cliquez dessus pour les détails du lieu, glissez-la sur un jour, ou faites un clic droit dessus (ou cliquez sur ses trois points) pour Modifier, + Jour, Ouvrir le site web, Google Maps, Enregistrer dans une collection et Supprimer.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Avec un jour ouvert, un + au bout d’une ligne non planifiée pose le lieu sur ce jour, et Planifiés ne liste que ce jour, avec Afficher tout le voyage pour élargir de nouveau.',
|
||||
'Avec un jour ouvert, + Jour au bout d’une ligne non planifiée pose le lieu sur ce jour, et Planifiés ne liste que ce jour, avec Afficher tout le voyage pour élargir de nouveau.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'La coche au bout droit de la ligne de filtres démarre une sélection : plusieurs lignes à la fois reçoivent une nouvelle catégorie, partent dans une collection ou sont supprimées.',
|
||||
'La coche à côté de la recherche démarre une sélection : depuis la barre au pied de la colonne, plusieurs lignes à la fois reçoivent une nouvelle catégorie, partent dans une collection, sont marquées comme visitées ou sont supprimées.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Créer un lieu',
|
||||
'help.guide.create-place.goal': 'Ajoutez un lieu ou une activité à la main, avec tout ce que le plan doit en savoir.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Cliquez sur Ajouter un lieu/activité en haut de la colonne des lieux (Nouveau lieu tant qu’un jour est ouvert). Le formulaire s’ouvre.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Tapez le lieu dans Rechercher des lieux… en haut et choisissez un résultat. Nom, Adresse, Latitude, Longitude et Site web se remplissent, et Détails du lieu à gauche montre des images, les horaires d’ouverture et une description. Sur un TREK avec clé Google, Ce n’est pas le bon lieu ? Rechercher sur Google se trouve sous la liste et relance la même recherche via Google.',
|
||||
'Tapez le lieu dans Rechercher des lieux… et choisissez un résultat. Le nom dans l’en-tête de la boîte de dialogue, Adresse, Latitude, Longitude et Site web se remplissent, et Détails du lieu à gauche montre des images, les horaires d’ouverture et une description. Sur un TREK avec clé Google, Ce n’est pas le bon lieu ? Rechercher sur Google se trouve sous la liste et relance la même recherche via Google. Lieux enregistrés, à droite, propose de la même façon les lieux de vos collections.',
|
||||
'help.guide.create-place.step.3':
|
||||
'Dans Détails du lieu, un clic sur une image sous Choisir une image en fait l’image du lieu ; Utiliser ce texte reprend la description dans le formulaire.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Vérifiez les champs : Nom est obligatoire ; Description et Notes sont à vous ; Adresse, Latitude et Longitude viennent de la recherche ou se tapent ; Catégorie choisit une des catégories du voyage, et le + à côté en crée une nouvelle sur place ; Site web prend le lien.',
|
||||
'Vérifiez ce que contient le formulaire : le nom se trouve dans l’en-tête de la boîte de dialogue et c’est le seul champ obligatoire ; la pastille Catégorie en dessous choisit une des catégories du voyage, et le + à côté en crée une nouvelle sur place. Adresse, Latitude et Longitude viennent de la recherche ou se tapent ; Description et Notes sont à vous ; Site web prend le lien.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Cliquez sur Ajouter. Si un lieu du même nom est déjà dans le voyage, le formulaire le signale et le bouton devient Ajouter quand même.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1947,7 +1948,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Au jour ouvre le même formulaire que Nouveau lieu, sauf que le lieu se pose sur le jour ouvert au moment où vous cliquez sur Ajouter.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Un lieu qui existe déjà va sur le jour ouvert avec le + au bout de sa ligne, ou par un clic droit, + Jour.',
|
||||
'Un lieu qui existe déjà va sur le jour ouvert avec + Jour au bout de sa ligne, ou par un clic droit, + Jour.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'L’inverse marche aussi, et sans ouvrir de jour au préalable : fais glisser la ligne du lieu hors de la colonne et lâche-la sur une carte de jour. Lâchée entre deux étapes, elle se pose exactement là.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1959,10 +1960,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Trouver un lieu dans la liste',
|
||||
'help.guide.filter-places.goal': 'Resserrez la colonne sur les lieux que vous cherchez.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Le menu déroulant en haut bascule entre Tous, Non planifiés (pas encore sur un jour), Planifiés (sur un jour) et Traces (traces GPX importées), chacun avec son compte.',
|
||||
'help.guide.filter-places.step.2': 'Tapez dans Rechercher des lieux… ; la liste se resserre à mesure que vous tapez.',
|
||||
'Afficher, le menu déroulant sous la recherche, bascule entre Tous, Non planifiés (pas encore sur un jour), Planifiés (sur un jour) et Traces (traces GPX importées), chacun avec son compte.',
|
||||
'help.guide.filter-places.step.2': 'Tapez dans Rechercher, en haut ; la liste se resserre à mesure que vous tapez.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Toutes les catégories ouvre une liste où cocher une ou plusieurs catégories, Sans catégorie comprise ; Effacer le filtre, en bas, la remet à zéro.',
|
||||
'Le bouton étiquette à côté d’Afficher liste les catégories : cochez-en une ou plusieurs, Sans catégorie comprise. Le bouton compte ce qui est coché, et Effacer le filtre, au pied de la liste, les lève toutes.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'L’étoile à côté fixe une note minimale : 5+, 4+ et ainsi de suite ne montrent que les lieux que vous avez notés au moins aussi haut.',
|
||||
'help.guide.filter-places.result':
|
||||
@@ -1977,7 +1978,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Faites un clic droit sur la ligne et choisissez Modifier, ou ouvrez le lieu et cliquez sur Modifier dans ses détails.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Changez ce qu’il faut : Nom, Description, Notes, Adresse, Latitude et Longitude, Catégorie, Site web. Ouvert depuis un jour, le formulaire a aussi Notes pour ce jour ainsi que Début et Fin pour ce jour.',
|
||||
'Changez ce qu’il faut : le nom et la pastille Catégorie dans l’en-tête de la boîte de dialogue, Adresse, Latitude et Longitude, Description, Notes et Site web. Ouvert depuis un jour, le formulaire a aussi Début et Fin ainsi que Notes pour ce jour.',
|
||||
'help.guide.edit-place.step.3': 'Cliquez sur Mettre à jour.',
|
||||
'help.guide.edit-place.result':
|
||||
'La modification s’applique partout où le lieu apparaît : la liste, la carte et chaque jour où il se trouve.',
|
||||
@@ -1991,22 +1992,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Faites un clic droit sur la ligne et choisissez Supprimer, ou cliquez sur Supprimer dans les détails du lieu.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Confirmez. Si une nuit a été réservée au lieu, ou si une réservation y est liée, la question dit ce qui part avec.',
|
||||
'Cliquez sur Supprimer dans la question. Si une nuit a été réservée au lieu, ou si une réservation y est liée, la question dit ce qui part avec.',
|
||||
'help.guide.delete-place.result':
|
||||
'Le lieu a disparu de la liste, de la carte et de chaque jour ; Annuler dans la barre d’outils au-dessus des jours le ramène.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Pour retirer un lieu d’un seul jour, utilisez plutôt Retirer du jour sur cette étape.',
|
||||
'help.guide.delete-place.tip.2': 'Plusieurs lieux à la fois : la coche à côté des filtres démarre une sélection.',
|
||||
'help.guide.delete-place.tip.2': 'Plusieurs lieux à la fois : la coche à côté de la recherche démarre une sélection.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Modifier ou supprimer plusieurs lieux à la fois',
|
||||
'help.guide.select-places.goal': 'Rangez la liste en une seule fois au lieu d’y aller lieu par lieu.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Cliquez sur la coche au bout droit de la ligne de filtres. Les lignes reçoivent des cases et une barre avec les actions apparaît.',
|
||||
'Cliquez sur la coche à côté du champ de recherche. Les lignes reçoivent des cases rondes, et une barre avec les actions monte au pied de la colonne.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Cochez les lignes, ou Tout sélectionner dans la barre ; la barre compte ce qui est sélectionné.',
|
||||
'Cliquez sur les lignes pour les cocher. Tout sélectionner, la double coche dans la barre, prend toutes les lignes que les filtres laissent.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category donne à tous une seule catégorie ; Enregistrer dans une collection les copie dans une de vos collections ; Supprimer la sélection les retire après une confirmation.',
|
||||
'help.guide.select-places.step.4': 'Cliquez de nouveau sur la coche pour quitter la sélection.',
|
||||
'La barre compte les lieux cochés. Changer de catégorie donne à tous une seule catégorie ; Enregistrer dans une collection les copie dans une de vos collections ; Supprimer la sélection les retire après une confirmation.',
|
||||
'help.guide.select-places.step.4': 'Terminé, le X au bout de la barre, quitte la sélection.',
|
||||
'help.guide.select-places.result':
|
||||
'La modification s’applique à chaque lieu sélectionné ; une suppression peut être annulée depuis la barre d’outils au-dessus des jours.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -2018,7 +2019,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.goal':
|
||||
'Faites entrer ce que Google My Maps, Google Earth ou un traceur GPS a exporté.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Cliquez sur Importer un fichier, ou déposez le fichier n’importe où sur la colonne des lieux.',
|
||||
'Cliquez sur le bouton d’import à côté du bouton d’ajout et choisissez Importer un fichier, ou déposez le fichier n’importe où sur la colonne des lieux.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Choisissez le fichier ou glissez-le dans le cadre. Pour un GPX, cochez ce qui doit être importé : Points de passage, Itinéraires, Traces (avec géométrie) ; pour KML et KMZ, Points (Placemarks) et Chemins (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -2034,7 +2035,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Importer une liste partagée de Google Maps ou de Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Transformez le lien d’une liste partagée en lieux.',
|
||||
'help.guide.import-places-list.step.1': 'Cliquez sur Import de liste et choisissez Liste Google ou Liste Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Cliquez sur le bouton d’import à côté du bouton d’ajout et choisissez Liste Google. Quand les listes Naver sont aussi activées, l’entrée s’appelle Import de liste et la boîte de dialogue demande laquelle des deux.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Collez le lien partagé de la liste. Un lien d’itinéraire Google Maps marche aussi : ses étapes deviennent des lieux, dans l’ordre du trajet.',
|
||||
'help.guide.import-places-list.step.3': 'Cliquez sur Importer.',
|
||||
@@ -2052,13 +2054,13 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'La barre d’outils en haut : Exporter (PDF, agenda, GPX), Expand all days / Collapse all days, la flèche Annuler, Réorganiser les jours et Afficher tous les itinéraires.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Une carte de jour : numéro, météo, titre, date et coût du jour dans l’en-tête ; cliquez sur l’en-tête pour ouvrir le jour, son chevron la replie. Transports en commun, Ajouter un transport et Ajouter une note se trouvent aussi dans l’en-tête.',
|
||||
'Une carte de jour : une tuile avec le numéro du jour et les prévisions, le titre et la date, et des pastilles pour la nuit réservée, une voiture de location et le coût du jour. Cliquez sur l’en-tête pour ouvrir le jour, le chevron le replie, et le + ouvre un menu : Ajouter un lieu à ce jour, Ajouter un hébergement, Ajouter un transport, Transports en commun et Ajouter une note.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Dans un jour : les étapes dans l’ordre, chacune avec image, nom, heure et un cadenas sur l’image ; les notes ; les réservations qui appartiennent au jour ; et entre les étapes le temps de trajet de chaque tronçon.',
|
||||
'Dans un jour : les étapes dans l’ordre, chacune avec image, nom, heure, un cadenas sur l’image et les réservations qui y sont accrochées ; les notes ; les réservations et transports du jour, teintés selon leur type ; et entre les étapes le temps de trajet de chaque tronçon. Chaque ligne a un menu à trois points, le même que celui qu’ouvre un clic droit.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Sous les étapes, la barre d’itinéraire : Itinéraire trace le jour sur la carte, Optimiser trie les étapes, Voiture / Marche règle le mode de transport du jour, Ouvrir dans Google Maps et Ouvrir dans CoMaps transmettent le jour.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Les lieux arrivent sur un jour en glissant une ligne de la colonne des lieux, avec le + de cette ligne, avec Ajouter un lieu à ce jour sur un jour vide, ou depuis les détails du lieu.',
|
||||
'Les lieux arrivent sur un jour en glissant une ligne de la colonne des lieux, avec + Jour sur cette ligne, avec Ajouter un lieu à ce jour depuis le + du jour ou sur un jour vide, ou depuis les détails du lieu.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Coût total, en bas, additionne chaque étape et chaque réservation qui porte un prix, dans la devise du voyage.',
|
||||
// read-day-plan
|
||||
@@ -2066,11 +2068,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.goal':
|
||||
'Savoir ce que chaque partie d’une carte de jour vous dit, avant de changer quoi que ce soit.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'L’en-tête : le numéro du jour, les prévisions du jour, Jour 1 ou le titre que vous lui avez donné, la date et le coût du jour. Cliquez sur l’en-tête pour ouvrir le jour (ses Détails du jour s’ouvrent au-dessus de la carte) ; le chevron à droite replie et déplie la carte.',
|
||||
'L’en-tête : une tuile avec le numéro du jour et les prévisions, puis Jour 1 ou le titre que vous lui avez donné, la date, et des pastilles pour la nuit réservée (arrivée ou départ), une voiture de location et le coût du jour. Cliquez sur l’en-tête pour ouvrir le jour (ses Détails du jour s’ouvrent au-dessus de la carte) ; le + à droite ajoute un lieu, un hébergement, un transport, une liaison en transports en commun ou une note, et le chevron replie la carte.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Une étape : la poignée à gauche la fait glisser, l’image porte un cadenas pour l’optimisation de l’itinéraire, puis le nom, la description et, si elles sont remplies, les Notes pour ce jour. Un badge horaire affiche Début et Fin quand l’étape en a ; les flèches qui apparaissent à son extrémité droite la montent ou la descendent.',
|
||||
'Une étape : la poignée à gauche la fait glisser, l’image porte un cadenas pour l’optimisation de l’itinéraire, puis le nom, un badge horaire quand l’étape a Début et Fin, la description et, si elles sont remplies, les Notes pour ce jour. Les flèches à son extrémité droite la montent ou la descendent, et les trois points ouvrent son menu.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Une réservation du jour : une réservation liée à une étape marque celle-ci Réservation confirmée ou Réservation en attente, et un transport s’affiche comme Départ ou Arrivée avec son heure et son trajet, avec un petit interrupteur qui trace cet itinéraire sur la carte.',
|
||||
'Une réservation sur une étape s’y affiche comme un badge Réservation, vert quand elle est confirmée et ambre tant qu’elle est en attente, avec son heure et son prestataire ; cliquez sur le badge pour ouvrir la réservation, et le bouton d’itinéraire à côté trace son trajet. Un transport forme sa propre ligne, teintée selon son type, avec Départ ou Arrivée et son heure. Cliquez sur une réservation et ses détails s’ouvrent ; Modifier, là, la change.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Entre deux étapes, le connecteur indique combien de temps dure le tronçon et quelle distance il fait, dans le mode de transport du jour ; cliquez dessus pour changer le mode de ce seul tronçon.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2078,7 +2080,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Chaque symbole de la carte a un sens ; les guides ci-dessous changent chacun d’eux.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Faites un clic droit sur une étape pour son menu : Modifier, Retirer du jour, Ouvrir le site web, les applications de navigation (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Enregistrer dans une collection, Supprimer.',
|
||||
'Faites un clic droit sur une étape, ou cliquez sur ses trois points, pour son menu : Modifier, Retirer du jour, Ouvrir le site web, les applications de navigation (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Enregistrer dans une collection, Supprimer.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Survolez une étape et Ajouter une réservation apparaît à son extrémité : une réservation créée là est liée à cette étape, ce jour-là.',
|
||||
// place-onto-day
|
||||
@@ -2087,9 +2089,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Glissez une ligne de la colonne des lieux sur la carte du jour. Déposez-la entre deux étapes pour la mettre exactement là, ou n’importe où sur la carte pour l’ajouter à la fin.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Sans glisser : ouvrez le jour en cliquant sur son en-tête, puis cliquez sur le + au bout de la ligne du lieu, ou faites un clic droit sur la ligne et choisissez + Jour.',
|
||||
'Sans glisser : ouvrez le jour en cliquant sur son en-tête, puis cliquez sur + Jour au bout de la ligne du lieu, ou faites un clic droit sur la ligne et choisissez + Jour.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Sur un jour vide, Ajouter un lieu à ce jour ouvre le formulaire de lieu, et le nouveau lieu se pose aussitôt sur le jour.',
|
||||
'Ajouter un lieu à ce jour, dans le menu + du jour ou sur un jour vide, ouvre le formulaire de lieu, et le nouveau lieu se pose aussitôt sur le jour.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Depuis les détails d’un lieu, Ajouter au jour demande quel jour ; depuis l’en-tête du jour, Au jour dans la colonne des lieux crée un nouveau lieu sur le jour ouvert.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2119,7 +2121,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Fixer quand une étape commence et finit, pour que le jour se lise comme un horaire.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Faites un clic droit sur l’étape et choisissez Modifier. Ouvert depuis le jour, le formulaire a Début et Fin en bas.',
|
||||
'Faites un clic droit sur l’étape, ou cliquez sur ses trois points, et choisissez Modifier. Ouvert depuis le jour, le formulaire a Début et Fin pour ce jour, juste sous l’emplacement.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Saisissez Début et, si vous voulez, Fin. Chevauchement horaire avec : prévient qu’une autre étape du jour avec une heure se chevauche ; une Fin avant le Début bloque Mettre à jour.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2160,13 +2162,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Ajouter une note à un jour',
|
||||
'help.guide.day-note.goal': 'Garder un rappel, un numéro de billet ou un plan B directement dans le jour.',
|
||||
'help.guide.day-note.step.1': 'Cliquez sur Ajouter une note dans l’en-tête du jour.',
|
||||
'help.guide.day-note.step.1': 'Cliquez sur le + dans l’en-tête du jour et choisissez Ajouter une note.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Donnez-lui un nom sous Note, c’est ce qui s’affiche dans le jour, et écrivez le reste sous Note du jour. La barre d’outils au-dessus met le texte en forme (Gras, Liste à puces, Lien, Citation), et Aperçu, à gauche, montre ce que la note donnera dans le jour.',
|
||||
'Tapez le nom de la note dans l’en-tête de la boîte de dialogue, là où il est écrit Note ; c’est ce qui s’affiche dans le jour. Écrivez le reste sous Note du jour : la barre d’outils au-dessus met le texte en forme (gras, listes, liens, citations), et Aperçu, à gauche, montre la ligne que la note donnera.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Choisissez une Icône et une Couleur, pour que la note se distingue des étapes, puis Ajouter.',
|
||||
'help.guide.day-note.step.4':
|
||||
'La note tient dans le jour comme une étape : glissez-la à sa place, faites un clic droit dessus pour Modifier et Supprimer.',
|
||||
'La note tient dans le jour comme une étape : glissez-la à sa place, et faites un clic droit dessus ou utilisez ses trois points pour Modifier et Supprimer.',
|
||||
'help.guide.day-note.result':
|
||||
'La note fait partie du jour, dans le PDF aussi ; une note avec une heure se range avec les étapes qui en ont une.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2218,15 +2220,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Savoir où une réservation apparaît une fois qu’elle existe, et quel écran la crée.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Un transport (Vol, Train, Ferry, Bus, Voiture) s’affiche le jour de son départ comme Départ et le jour de son arrivée comme Arrivée, avec heure et trajet ; un transport sur plusieurs jours couvre les jours intermédiaires.',
|
||||
'Un transport (vol, train, ferry, bus, voiture) est une ligne teintée selon son type : Départ le jour où il part, Arrivée le jour où il arrive, avec heure et trajet ; un transport sur plusieurs jours couvre les jours intermédiaires. Cliquez sur la ligne et la réservation s’ouvre.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Une réservation liée à une étape (un Restaurant, une Visite) marque cette étape Réservation confirmée ou Réservation en attente ; une réservation avec un jour mais sans étape forme sa propre ligne dans le jour.',
|
||||
'Une réservation liée à une étape (un restaurant, une visite) est un badge Réservation sur cette étape, vert quand elle est confirmée et ambre tant qu’elle est en attente, avec son heure ; une réservation avec un jour mais sans étape forme sa propre ligne dans le jour.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Une nuit à l’hôtel est un hébergement : elle se trouve dans les Détails du jour sous Hébergement, de l’Arrivée au Départ, et l’itinéraire de chacun de ces jours part de là.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Sur la carte, l’interrupteur d’une ligne de transport trace son itinéraire ; Afficher tous les itinéraires dans la barre d’outils les trace tous.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Pour créer : Ajouter une réservation sur une étape survolée, Ajouter un transport et Transports en commun dans l’en-tête du jour, et les onglets Réservations et Transports pour la liste complète avec import et fichiers.',
|
||||
'Pour créer : Ajouter une réservation sur une étape survolée, Ajouter un transport et Transports en commun dans le menu + du jour, et les onglets Réservations et Transports pour la liste complète avec import et fichiers.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Une réservation, une place dans le plan ; les onglets montrent les mêmes réservations sous forme de liste.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2257,24 +2259,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Cliquez sur une ligne dans la colonne des lieux, sur une étape dans un jour ou sur un marqueur sur la carte, et la fiche s’ouvre par-dessus la carte. La choisir dans un jour dit à la fiche de quelle étape il s’agit, et c’est ce qui amène les participants de l’étape et sa réservation.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'L’en-tête porte l’image ronde, le nom, la catégorie, l’adresse et les coordonnées. Cliquez sur l’image pour en mettre une à vous, double-cliquez sur le nom pour renommer le lieu sur place, et le X à droite ferme la fiche.',
|
||||
'L’en-tête porte l’image ronde, le nom, l’adresse sur une ligne et des pastilles pour ce qui est connu : ouvert ou fermé, la catégorie, le prix, le numéro de téléphone et les coordonnées. Cliquez sur l’image pour en mettre une à vous, double-cliquez sur le nom pour renommer le lieu sur place, et le X à droite ferme la fiche.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'En dessous : le prix s’il en a un, les étoiles que chaque voyageur a données au lieu, la description et les notes, et Notes pour ce jour quand l’étape en porte.',
|
||||
'En dessous : les étoiles que chaque voyageur a données au lieu, la description et les notes, et Notes pour ce jour quand l’étape en porte.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Horaires d’ouverture, Couleur du parcours, Données du parcours et Fichiers suivent, dans la mesure où ils s’appliquent. Fichiers prend n’importe quoi dans vos dossiers et liste aussi ce qui est accroché à la réservation de cette étape.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'La ligne du bas : Ajouter au jour ou Retirer du jour tant qu’un jour est ouvert, puis Enregistrer dans une collection, Navigation, Ouvrir le site web, Modifier et Supprimer.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Un lieu choisi dans la recherche porte ce que l’index TREK ou OpenStreetMap savent de lui : un anneau vert Ouvert ou rouge Fermé autour de l’image, jugé à l’heure du lieu lui-même, le numéro de téléphone sous les étoiles, Horaires d’ouverture plus bas avec la ligne du jour sur la ligne et toute la semaine derrière un clic, et son site web derrière Ouvrir le site web. La note de Google ne s’affiche que sur un lieu trouvé par Google, sur un TREK avec une clé Google.',
|
||||
'Un lieu choisi dans la recherche porte ce que l’index TREK ou OpenStreetMap savent de lui : Ouvert ou Fermé parmi les pastilles de l’en-tête, avec un anneau vert ou rouge autour de l’image, jugé à l’heure du lieu lui-même, son numéro de téléphone aussi en pastille, Horaires d’ouverture plus bas avec la ligne du jour sur la ligne et toute la semaine derrière un clic, et son site web derrière Ouvrir le site web. La note de Google ne s’affiche que sur un lieu trouvé par Google, sur un TREK avec une clé Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Ce que la fiche vous dit d’un lieu',
|
||||
'help.guide.read-place.goal': 'Lisez tout ce que le voyage sait d’un lieu, dans une seule fiche.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Dans la colonne des jours, cliquez sur l’étape que vous voulez lire. La fiche s’ouvre par-dessus la carte et l’étape reste marquée dans son jour.',
|
||||
'help.guide.read-place.step.2':
|
||||
'L’en-tête : l’image ronde, le nom, l’adresse et les coordonnées exactes. Un anneau vert avec Ouvert, ou rouge avec Fermé, autour de l’image dit si le lieu est ouvert en ce moment, à sa propre heure, dès que TREK connaît ses horaires. Le X à droite referme la fiche.',
|
||||
'L’en-tête : l’image ronde, le nom et l’adresse sur une ligne ; son info-bulle contient l’adresse complète. Les pastilles en dessous disent Ouvert ou Fermé en ce moment, à l’heure du lieu lui-même, avec un anneau vert ou rouge assorti autour de l’image, et portent le numéro de téléphone, qu’un clic passe à votre application de téléphone, et les coordonnées exactes. Le X à droite referme la fiche.',
|
||||
'help.guide.read-place.step.3':
|
||||
'En dessous, les étoiles que chaque voyageur a données au lieu, avec la moyenne et le nombre de votants. Pas encore noté tant que personne n’a voté. Juste en dessous, le numéro de téléphone quand le lieu en a un : un clic dessus passe le numéro à votre application de téléphone.',
|
||||
'Note vient en premier sous l’en-tête : les étoiles que chaque voyageur a données au lieu, avec la moyenne et le nombre de votants. Pas encore noté tant que personne n’a voté.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Puis la description et, en dessous, les notes. Les deux sont le texte du formulaire du lieu, rendu : listes, liens et gras fonctionnent.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2370,18 +2372,19 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.goal':
|
||||
'Lisez la réservation qui appartient à une étape, ouvrez-la, et accrochez-en une nouvelle à cette étape.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Ouvrez l’étape à laquelle appartient la réservation. La fiche montre un bandeau avec Confirmée ou En attente et le nom de la réservation.',
|
||||
'Ouvrez l’étape à laquelle appartient la réservation. La fiche la liste sous Réservations comme une petite vignette à part, avec le nom de la réservation et Confirmée ou En attente.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Le bandeau porte la Date, l’Heure et le Code de réservation, ainsi que les notes de la réservation.',
|
||||
'help.guide.place-booking.step.3': 'Cliquez sur le bandeau. La réservation s’ouvre par-dessus la carte.',
|
||||
'La vignette de réservation porte la Date, l’Heure et le Code de réservation, ainsi que les notes de la réservation.',
|
||||
'help.guide.place-booking.step.3':
|
||||
'Cliquez sur la vignette de réservation. La réservation s’ouvre par-dessus la carte.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Modifier, au pied de la réservation, ouvre son propre formulaire. Lier à l’affectation du jour y est ce qui accroche une réservation à une étape, et ici il nomme déjà celle-ci. Refermez le formulaire.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Une nouvelle réservation pour une étape commence dans la colonne des jours : survolez l’étape et cliquez sur le + à son bout. Le formulaire s’ouvre en Nouvelle réservation, déjà liée à elle.',
|
||||
'Une nouvelle réservation pour une étape commence dans la colonne des jours : survolez l’étape et cliquez sur Ajouter une réservation, le ticket à son bout. Le formulaire s’ouvre en Nouvelle réservation, déjà liée à elle.',
|
||||
'help.guide.place-booking.result':
|
||||
'La réservation est accrochée à l’étape : elle est sur la fiche, elle est dans le jour, et ses fichiers sont listés sous Fichiers ici aussi.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Le bandeau ne s’affiche que pour l’étape à laquelle la réservation est accrochée. Une réservation sans étape vit dans l’onglet Résa.',
|
||||
'La vignette de réservation ne s’affiche que pour l’étape à laquelle la réservation est accrochée. Une réservation sans étape vit dans l’onglet Résa.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Plusieurs réservations peuvent partager une étape : le déjeuner et la visite qui part de la même porte.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2629,7 +2632,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Tout en haut, la météo du jour. Prévisions pour nomme le lieu concerné : la première étape du jour, ou l’hébergement où vous vous réveillez.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Réservations liste les réservations de ce jour, chacune avec son type, l’étape à laquelle elle appartient et ses horaires. Vert veut dire confirmée, ambre encore en attente ; c’est un simple relevé, les réservations se modifient dans l’onglet Réservations.',
|
||||
'Réservations liste les réservations de ce jour, chacune avec son type, l’étape à laquelle elle appartient et ses horaires. Vert veut dire confirmée, ambre encore en attente, et un clic sur une ligne ouvre la réservation.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Hébergement montre chaque nuit réservée sur ce jour, avec Arrivée et Départ aux jours où ils ont lieu, la plage horaire d’arrivée, l’heure de départ et le numéro de confirmation.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2664,7 +2667,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Le grand chiffre est la température du jour, à côté le minimum et le maximum, et la condition en toutes lettres.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Les pastilles en dessous : la probabilité de pluie, la quantité de précipitations, le vent le plus fort, et le lever et le coucher du soleil.',
|
||||
'Les pastilles à sa droite : la probabilité de pluie, la quantité de précipitations, le vent le plus fort, et le lever et le coucher du soleil.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Tout en bas, le jour heure par heure, une heure sur deux : l’heure, l’icône, la température et la probabilité de pluie. Une heure au-dessus de 50 pour cent est teintée de bleu.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2699,18 +2702,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.add-accommodation.step.2':
|
||||
'Ouvrez le jour de votre arrivée et cliquez sur Ajouter un hébergement sous Hébergement.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Appliquer aux jours dit quelles nuits le séjour couvre : le jour d’arrivée à gauche, le jour de départ à droite. Tous prend le voyage entier.',
|
||||
'Appliquer aux jours dit quelles nuits le séjour couvre : Début est le jour d’arrivée, Fin le jour de départ, et Tous prend le voyage entier. L’en-tête de la boîte de dialogue montre la période et le nombre de nuits.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Remplissez Arrivée, Jusqu’à et Départ, et mettez le numéro de la réservation sous Confirmation. Les quatre peuvent rester vides.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Choisissez l’établissement parmi les lieux du voyage. Les pastilles au-dessus de la liste la réduisent à une seule catégorie.',
|
||||
'Choisissez l’établissement parmi les lieux du voyage. Catégorie, au-dessus de la liste, la réduit à une seule catégorie.',
|
||||
'help.guide.add-accommodation.step.6': 'Cliquez sur Enregistrer.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Le séjour s’affiche sur chaque jour qu’il couvre, Arrivée sur le premier et Départ sur le dernier. L’établissement devient une étape du jour d’arrivée, si bien que la carte trace le chemin jusque-là, et une réservation de type Hébergement apparaît dans l’onglet Réservations.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Le sélecteur s’ouvre sur le jour d’où vous venez, avec le départ le lendemain ; les deux peuvent être déplacés avant d’enregistrer.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Donnez à l’hôtel la catégorie Hotel du voyage à sa création et les pastilles au-dessus de la liste la réduisent à vos hôtels en un clic.',
|
||||
'Donnez à l’hôtel la catégorie Hotel à sa création, et Catégorie, au-dessus de la liste, la réduit à vos hôtels en un clic.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Les horaires sont tous facultatifs : un séjour sans arrivée et sans code couvre quand même ses nuits et trace quand même son itinéraire.',
|
||||
// edit-accommodation
|
||||
@@ -2721,7 +2724,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Le crayon à sa droite rouvre le séjour. La fenêtre s’intitule maintenant Modifier l’hébergement.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Corrigez la rangée de champs : Arrivée, Jusqu’à, Départ et Confirmation. Les jours au-dessus et l’établissement en dessous se changent aussi ici.',
|
||||
'Corrigez Arrivée, Jusqu’à, Départ et Confirmation. Les jours au-dessus et l’établissement en dessous se changent aussi ici.',
|
||||
'help.guide.edit-accommodation.step.4': 'Cliquez sur Enregistrer.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'La croix à côté du crayon met fin au séjour. Elle ne demande rien, et la réservation de type Hébergement qui lui appartient part avec lui.',
|
||||
@@ -2737,7 +2740,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Réservations liste les réservations du jour : celles qui y sont datées, et celles qui sont rattachées à l’une de ses étapes.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Une ligne montre le type de réservation, son nom et, quand elle appartient à une étape, cette étape après un point. Ses horaires se trouvent tout à droite.',
|
||||
'Une ligne montre le type de réservation, son nom et, quand elle appartient à une étape, cette étape en gris derrière. Ses horaires se trouvent tout à droite, avant le point d’état.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'La couleur dit où en est une réservation : une ligne verte est confirmée, une ligne ambre est encore en attente. Les hébergements ne sont pas dans cette liste, ils ont leur propre bloc en dessous.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -65,6 +65,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Πληρωμένα από εμένα',
|
||||
'costs.filter.owed': 'Μου χρωστούν',
|
||||
'costs.addExpense': 'Προσθήκη εξόδου',
|
||||
'costs.view.label': 'Προβολή',
|
||||
'costs.view.list': 'Λίστα',
|
||||
'costs.view.table': 'Πίνακας',
|
||||
'costs.table.lockedPayer': 'Το πλήρωσε κάποιος: αλλάξτε το ποσό στο έξοδο, ώστε τα υπόλοιπα να μένουν σωστά.',
|
||||
'costs.table.lockedCurrency': 'Καταχωρήθηκε σε {currency}: αλλάξτε το ποσό στο έξοδο.',
|
||||
'costs.table.summary': 'Σύνοψη',
|
||||
'costs.table.byCategory': 'Κατηγορία',
|
||||
'costs.table.byDate': 'Ημέρα',
|
||||
'costs.table.byPayer': 'Πληρωτής',
|
||||
'costs.table.byStatus': 'Κατάσταση',
|
||||
'costs.table.noPayer': 'Χωρίς πληρωτή ακόμα',
|
||||
'costs.table.paid': 'Πληρωμένο',
|
||||
'costs.table.open': 'Ανοιχτό',
|
||||
'costs.editExpense': 'Επεξεργασία εξόδου',
|
||||
'costs.noMatch': 'Κανένα έξοδο δεν ταιριάζει με την αναζήτησή σας.',
|
||||
'costs.emptyText': 'Δεν υπάρχουν έξοδα ακόμη. Προσθέστε το πρώτο σας.',
|
||||
|
||||
+59
-57
@@ -1818,7 +1818,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Ο τίτλος, οι ημερομηνίες, το εξώφυλλο και το νόμισμα επεξεργάζονται από Τα Ταξίδια μου, με το μολύβι στην κάρτα του ταξιδιού.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Τα βελάκια στην εσωτερική άκρη μιας στήλης την αναδιπλώνουν και ο χάρτης παίρνει τον χώρο· ο λεπτός διαχωριστής δίπλα σε μια στήλη αλλάζει το πλάτος της.',
|
||||
'Η γλωττίδα στην εσωτερική άκρη μιας στήλης την αναδιπλώνει και ο χάρτης παίρνει τον χώρο· ο λεπτός διαχωριστής δίπλα σε μια στήλη αλλάζει το πλάτος της.',
|
||||
'help.ctx.trip.bullet.6':
|
||||
'Το βέλος αναίρεσης στη γραμμή εργαλείων των ημερών παίρνει πίσω την τελευταία αλλαγή στο πλάνο.',
|
||||
// add-member
|
||||
@@ -1890,8 +1890,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Χώρος για τον χάρτη',
|
||||
'help.guide.collapse-columns.goal': 'Αναδιπλώστε μια στήλη ή δώστε της περισσότερο πλάτος.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Κάντε κλικ στο βελάκι στην εσωτερική άκρη της στήλης των ημερών για να τη συμπτύξετε· ο χάρτης παίρνει τον χώρο. Η στήλη των μερών έχει το ίδιο βελάκι.',
|
||||
'help.guide.collapse-columns.step.2': 'Κάντε ξανά κλικ στο βελάκι για να επαναφέρετε τη στήλη.',
|
||||
'Κάντε κλικ στη γλωττίδα στην εσωτερική άκρη της στήλης των ημερών, αυτή με το εικονίδιο πάνελ, για να αναδιπλώσετε τη στήλη· ο χάρτης παίρνει τον χώρο. Η στήλη των μερών έχει την ίδια γλωττίδα.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Μια αναδιπλωμένη στήλη αφήνει ένα πλακίδιο στη γωνία του χάρτη, Πλάνο για τις ημέρες και Μέρη για τα μέρη. Κάντε κλικ σε αυτό για να επαναφέρετε τη στήλη.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Σύρετε τον λεπτό διαχωριστή ανάμεσα σε μια στήλη και τον χάρτη για να αλλάξετε το πλάτος της στήλης.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1917,15 +1918,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Το Προσθήκη Μέρους/Δραστηριότητας στην κορυφή ανοίγει τη φόρμα για ένα μέρος που γράφετε ή αναζητάτε. Όσο μια ημέρα είναι ανοιχτή το κουμπί γράφει Νέο σημείο, και το Στην ημέρα δίπλα του δημιουργεί το μέρος κατευθείαν σε εκείνη την ημέρα.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Το Εισαγωγή αρχείου δέχεται αρχεία .gpx, .kml και .kmz· το Εισαγωγή Λίστας δέχεται μια κοινόχρηστη λίστα Google Maps ή Naver Maps. Ένα αρχείο μπορεί επίσης απλώς να αφεθεί πάνω στη στήλη.',
|
||||
'Το κουμπί εισαγωγής δίπλα του προσφέρει το Εισαγωγή αρχείου, για αρχεία .gpx, .kml και .kmz, και το Λίστα Google (Εισαγωγή Λίστας όπου είναι ενεργές και οι λίστες Naver) για μια λίστα κοινοποιημένη από το Google Maps ή το Naver Maps. Ένα αρχείο μπορεί επίσης απλώς να αφεθεί πάνω στη στήλη.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Το αναπτυσσόμενο εναλλάσσει ανάμεσα σε Όλα, Μη προγραμματισμένα, Προγραμματισμένα και, μόλις εισαχθεί ένα ίχνος, Ίχνη· από κάτω κάθονται η αναζήτηση, το φίλτρο κατηγοριών και το αστέρι για ελάχιστη βαθμολογία.',
|
||||
'Από κάτω η αναζήτηση, με το σημάδι επιλογής δίπλα της που ξεκινά μια επιλογή, και μια γραμμή φίλτρων: το Εμφάνιση εναλλάσσει ανάμεσα σε Όλα, Μη προγραμματισμένα, Προγραμματισμένα και, μόλις εισαχθεί ένα ίχνος, Ίχνη, καθένα με τον αριθμό του· το κουμπί ετικέτας φιλτράρει κατά κατηγορία και το αστέρι κατά ελάχιστη βαθμολογία.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Μια σειρά δείχνει εικόνα, όνομα και περιγραφή ή διεύθυνση. Κάντε κλικ για τις λεπτομέρειες του μέρους, σύρετέ τη σε μια ημέρα ή κάντε δεξί κλικ για Επεξεργασία, + Ημέρα, Άνοιγμα Ιστοσελίδας, Google Maps, Αποθήκευση στη Συλλογή και Διαγραφή.',
|
||||
'Μια σειρά δείχνει εικόνα, όνομα και περιγραφή ή διεύθυνση. Κάντε κλικ για τις λεπτομέρειες του μέρους, σύρετέ τη σε μια ημέρα ή κάντε δεξί κλικ (ή κλικ στις τρεις τελείες της) για Επεξεργασία, + Ημέρα, Άνοιγμα Ιστοσελίδας, Google Maps, Αποθήκευση στη Συλλογή και Διαγραφή.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Με μια ημέρα ανοιχτή, ένα + στο τέλος μιας μη προγραμματισμένης σειράς βάζει το μέρος σε εκείνη την ημέρα, και το Προγραμματισμένα απαριθμεί μόνο εκείνη την ημέρα, με το Εμφάνιση όλου του ταξιδιού για να ανοίξει ξανά.',
|
||||
'Με μια ημέρα ανοιχτή, το + Ημέρα στο τέλος μιας μη προγραμματισμένης σειράς βάζει το μέρος σε εκείνη την ημέρα, και το Προγραμματισμένα απαριθμεί μόνο εκείνη την ημέρα, με το Εμφάνιση όλου του ταξιδιού για να ανοίξει ξανά.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Το σημάδι επιλογής στο δεξί άκρο της γραμμής φίλτρων ξεκινά μια επιλογή: πολλές σειρές μαζί παίρνουν νέα κατηγορία, πάνε σε μια συλλογή ή διαγράφονται.',
|
||||
'Το σημάδι επιλογής δίπλα στην αναζήτηση ξεκινά μια επιλογή: από τη μπάρα στο κάτω μέρος της στήλης, πολλές σειρές μαζί παίρνουν νέα κατηγορία, πάνε σε μια συλλογή, σημειώνονται ως επισκεφθέντα ή διαγράφονται.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Δημιουργία μέρους',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1933,11 +1934,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Κάντε κλικ στο Προσθήκη Μέρους/Δραστηριότητας στην κορυφή της στήλης μερών (Νέο σημείο όσο μια ημέρα είναι ανοιχτή). Η φόρμα ανοίγει.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Γράψτε το μέρος στο Αναζήτηση μερών... στην κορυφή και διαλέξτε ένα αποτέλεσμα. Το Όνομα, η Διεύθυνση, το Γεωγραφικό Πλάτος, το Γεωγραφικό Μήκος και η Ιστοσελίδα συμπληρώνονται, και οι Λεπτομέρειες τοποθεσίας αριστερά δείχνουν εικόνες, ωράριο και μια περιγραφή για αυτό. Σε ένα TREK με κλειδί Google, κάτω από τη λίστα κάθεται το Δεν είναι το σωστό μέρος; Αναζήτηση στο Google και τρέχει την ίδια αναζήτηση μέσω Google.',
|
||||
'Γράψτε το μέρος στο Αναζήτηση μερών... και διαλέξτε ένα αποτέλεσμα. Το όνομα στην κεφαλίδα του παραθύρου, η Διεύθυνση, το Γεωγραφικό Πλάτος, το Γεωγραφικό Μήκος και η Ιστοσελίδα συμπληρώνονται, και οι Λεπτομέρειες τοποθεσίας αριστερά δείχνουν εικόνες, ωράριο και μια περιγραφή για αυτό. Σε ένα TREK με κλειδί Google, κάτω από τη λίστα κάθεται το Δεν είναι το σωστό μέρος; Αναζήτηση στο Google και τρέχει την ίδια αναζήτηση μέσω Google. Τα Αποθηκευμένα μέρη δεξιά προσφέρουν με τον ίδιο τρόπο τα μέρη των συλλογών σας.',
|
||||
'help.guide.create-place.step.3':
|
||||
'Στις Λεπτομέρειες τοποθεσίας, ένα κλικ σε μια εικόνα κάτω από το Διάλεξε εικόνα την κάνει εικόνα του μέρους· το Χρήση αυτού του κειμένου παίρνει την περιγραφή μέσα στη φόρμα.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Ελέγξτε τα πεδία: το Όνομα είναι υποχρεωτικό· η Περιγραφή και οι Σημειώσεις είναι δικές σας· η Διεύθυνση, το Γεωγραφικό Πλάτος και το Γεωγραφικό Μήκος έρχονται από την αναζήτηση ή γράφονται· η Κατηγορία διαλέγει μία από τις κατηγορίες του ταξιδιού, και το + δίπλα της δημιουργεί νέα επιτόπου· η Ιστοσελίδα παίρνει τον σύνδεσμο.',
|
||||
'Ελέγξτε τι περιέχει η φόρμα: το όνομα βρίσκεται στην κεφαλίδα του παραθύρου και είναι το μόνο υποχρεωτικό πεδίο· το σήμα Κατηγορία από κάτω διαλέγει μία από τις κατηγορίες του ταξιδιού, και το + δίπλα του δημιουργεί νέα επιτόπου. Η Διεύθυνση, το Γεωγραφικό Πλάτος και το Γεωγραφικό Μήκος έρχονται από την αναζήτηση ή γράφονται· η Περιγραφή και οι Σημειώσεις είναι δικές σας· η Ιστοσελίδα παίρνει τον σύνδεσμο.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Κάντε κλικ στο Προσθήκη. Αν ένα μέρος με το ίδιο όνομα είναι ήδη στο ταξίδι, η φόρμα το λέει και το κουμπί γίνεται Προσθήκη ούτως ή άλλως.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1957,7 +1958,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Το Στην ημέρα ανοίγει την ίδια φόρμα με το Νέο σημείο, μόνο που το μέρος προσγειώνεται στην ανοιχτή ημέρα τη στιγμή που κάνετε κλικ στο Προσθήκη.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Ένα μέρος που υπάρχει ήδη πάει στην ανοιχτή ημέρα με το + στο τέλος της σειράς του ή με δεξί κλικ, + Ημέρα.',
|
||||
'Ένα μέρος που υπάρχει ήδη πάει στην ανοιχτή ημέρα με το + Ημέρα στο τέλος της σειράς του ή με δεξί κλικ, + Ημέρα.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Και το αντίστροφο δουλεύει, χωρίς να ανοίξεις πρώτα μια ημέρα: σύρε τη σειρά του μέρους έξω από τη στήλη και άσε την πάνω σε μια κάρτα ημέρας. Αν την αφήσεις ανάμεσα σε δύο στάσεις, προσγειώνεται ακριβώς εκεί.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1969,12 +1970,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Εύρεση μέρους στη λίστα',
|
||||
'help.guide.filter-places.goal': 'Στενέψτε τη στήλη στα μέρη που ψάχνετε.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Το αναπτυσσόμενο στην κορυφή εναλλάσσει ανάμεσα σε Όλα, Μη προγραμματισμένα (σε καμία ημέρα ακόμη), Προγραμματισμένα (σε μια ημέρα) και Ίχνη (εισηγμένα ίχνη GPX), καθένα με τον αριθμό του.',
|
||||
'help.guide.filter-places.step.2': 'Γράψτε στο Αναζήτηση μερών...· η λίστα στενεύει καθώς γράφετε.',
|
||||
'Το Εμφάνιση, το αναπτυσσόμενο κάτω από την αναζήτηση, εναλλάσσει ανάμεσα σε Όλα, Μη προγραμματισμένα (σε καμία ημέρα ακόμη), Προγραμματισμένα (σε μια ημέρα) και Ίχνη (εισηγμένα ίχνη GPX), καθένα με τον αριθμό του.',
|
||||
'help.guide.filter-places.step.2': 'Γράψτε στο Αναζήτηση στην κορυφή· η λίστα στενεύει καθώς γράφετε.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Το Όλες οι Κατηγορίες ανοίγει μια λίστα για να τσεκάρετε μία ή περισσότερες κατηγορίες, ανάμεσά τους και το Χωρίς Κατηγορία· το Καθαρισμός φίλτρου στο κάτω μέρος της το μηδενίζει.',
|
||||
'Το κουμπί ετικέτας δίπλα στο Εμφάνιση απαριθμεί τις κατηγορίες: τσεκάρετε μία ή περισσότερες, ανάμεσά τους και το Χωρίς Κατηγορία. Το κουμπί μετρά ό,τι είναι τσεκαρισμένο, και το Καθαρισμός φίλτρου στο κάτω μέρος της λίστας τα αναιρεί όλα.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Το αστέρι δίπλα ορίζει ελάχιστη βαθμολογία: το 5+, το 4+ και ούτω καθεξής δείχνουν μόνο μέρη που βαθμολογήσατε τουλάχιστον τόσο ψηλά.',
|
||||
'Το αστέρι δίπλα του ορίζει ελάχιστη βαθμολογία: το 5+, το 4+ και ούτω καθεξής δείχνουν μόνο μέρη που βαθμολογήσατε τουλάχιστον τόσο ψηλά.',
|
||||
'help.guide.filter-places.result': 'Ο αριθμός πάνω από τις σειρές λέει πόσα μέρη ταιριάζουν· τα φίλτρα συνδυάζονται.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'Με μια ημέρα ανοιχτή, το Προγραμματισμένα απαριθμεί μόνο εκείνη την ημέρα και το λέει: Εμφανίζεται μόνο η ανοιχτή ημέρα, με το Εμφάνιση όλου του ταξιδιού δίπλα του.',
|
||||
@@ -1987,7 +1988,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Κάντε δεξί κλικ στη σειρά και διαλέξτε Επεξεργασία, ή ανοίξτε το μέρος και κάντε κλικ στο Επεξεργασία στις λεπτομέρειές του.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Αλλάξτε ό,τι χρειάζεστε: Όνομα, Περιγραφή, Σημειώσεις, Διεύθυνση, Γεωγραφικό Πλάτος και Γεωγραφικό Μήκος, Κατηγορία, Ιστοσελίδα. Ανοιγμένη από μια ημέρα, η φόρμα έχει επίσης Σημειώσεις για αυτή την ημέρα και Έναρξη και Λήξη για εκείνη την ημέρα.',
|
||||
'Αλλάξτε ό,τι χρειάζεστε: το όνομα και το σήμα Κατηγορία στην κεφαλίδα του παραθύρου, Διεύθυνση, Γεωγραφικό Πλάτος και Γεωγραφικό Μήκος, Περιγραφή, Σημειώσεις και Ιστοσελίδα. Ανοιγμένη από μια ημέρα, η φόρμα έχει επίσης Έναρξη και Λήξη και Σημειώσεις για αυτή την ημέρα.',
|
||||
'help.guide.edit-place.step.3': 'Κάντε κλικ στο Ενημέρωση.',
|
||||
'help.guide.edit-place.result':
|
||||
'Η αλλαγή ισχύει παντού όπου εμφανίζεται το μέρος: στη λίστα, στον χάρτη και σε κάθε ημέρα στην οποία βρίσκεται.',
|
||||
@@ -2001,22 +2002,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Κάντε δεξί κλικ στη σειρά και διαλέξτε Διαγραφή, ή κάντε κλικ στο Διαγραφή στις λεπτομέρειες του μέρους.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Επιβεβαιώστε. Αν μια νύχτα ήταν κρατημένη στο μέρος, ή μια κράτηση είναι δεμένη με αυτό, η ερώτηση λέει τι φεύγει μαζί του.',
|
||||
'Κάντε κλικ στο Διαγραφή στην ερώτηση. Αν μια νύχτα ήταν κρατημένη στο μέρος, ή μια κράτηση είναι δεμένη με αυτό, η ερώτηση λέει τι φεύγει μαζί του.',
|
||||
'help.guide.delete-place.result':
|
||||
'Το μέρος χάνεται από τη λίστα, τον χάρτη και κάθε ημέρα· η Αναίρεση στη γραμμή εργαλείων πάνω από τις ημέρες το φέρνει πίσω.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Για να βγάλετε ένα μέρος μόνο από μία ημέρα, χρησιμοποιήστε το Αφαίρεση από την Ημέρα σε εκείνη τη στάση.',
|
||||
'help.guide.delete-place.tip.2': 'Πολλά μέρη μαζί: το σημάδι επιλογής δίπλα στα φίλτρα ξεκινά μια επιλογή.',
|
||||
'help.guide.delete-place.tip.2': 'Πολλά μέρη μαζί: το σημάδι επιλογής δίπλα στην αναζήτηση ξεκινά μια επιλογή.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Αλλαγή ή διαγραφή πολλών μερών μαζί',
|
||||
'help.guide.select-places.goal': 'Τακτοποιήστε τη λίστα με μια κίνηση αντί για μέρος προς μέρος.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Κάντε κλικ στο σημάδι επιλογής στο δεξί άκρο της γραμμής φίλτρων. Οι σειρές αποκτούν πλαίσια ελέγχου και εμφανίζεται μια μπάρα με τις ενέργειες.',
|
||||
'Κάντε κλικ στο σημάδι επιλογής δίπλα στο πεδίο αναζήτησης. Οι σειρές αποκτούν στρογγυλά πλαίσια ελέγχου, και μια μπάρα με τις ενέργειες ανεβαίνει στο κάτω μέρος της στήλης.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Τσεκάρετε τις σειρές, ή το Επιλογή όλων στη μπάρα· η μπάρα μετρά τι είναι επιλεγμένο.',
|
||||
'Κάντε κλικ στις σειρές για να τις τσεκάρετε. Το Επιλογή όλων, το διπλό σημάδι επιλογής στη μπάρα, παίρνει κάθε σειρά που αφήνουν τα φίλτρα.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Το Change category δίνει σε όλα μία κατηγορία· το Αποθήκευση στη Συλλογή τα αντιγράφει σε μία από τις συλλογές σας· το Διαγραφή επιλεγμένων τα αφαιρεί μετά από επιβεβαίωση.',
|
||||
'help.guide.select-places.step.4': 'Κάντε ξανά κλικ στο σημάδι επιλογής για να βγείτε από την επιλογή.',
|
||||
'Η μπάρα μετρά τα τσεκαρισμένα μέρη. Το Αλλαγή κατηγορίας δίνει σε όλα μία κατηγορία· το Αποθήκευση στη Συλλογή τα αντιγράφει σε μία από τις συλλογές σας· το Διαγραφή επιλεγμένων τα αφαιρεί μετά από επιβεβαίωση.',
|
||||
'help.guide.select-places.step.4': 'Το Τέλος, το X στην άκρη της μπάρας, τερματίζει την επιλογή.',
|
||||
'help.guide.select-places.result':
|
||||
'Η αλλαγή ισχύει για κάθε επιλεγμένο μέρος· μια διαγραφή μπορεί να αναιρεθεί από τη γραμμή εργαλείων πάνω από τις ημέρες.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -2028,7 +2029,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.goal':
|
||||
'Φέρτε μέσα ό,τι εξήγαγαν τα Google My Maps, το Google Earth ή ένας ιχνηλάτης GPS.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Κάντε κλικ στο Εισαγωγή αρχείου, ή αφήστε το αρχείο οπουδήποτε πάνω στη στήλη μερών.',
|
||||
'Κάντε κλικ στο κουμπί εισαγωγής δίπλα στο κουμπί προσθήκης και διαλέξτε Εισαγωγή αρχείου, ή αφήστε το αρχείο οπουδήποτε πάνω στη στήλη μερών.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Διαλέξτε το αρχείο ή σύρετέ το μέσα στο πλαίσιο. Για ένα GPX, τσεκάρετε τι θα εισαχθεί: Σημεία διαδρομής, Διαδρομές, Ίχνη (με γεωμετρία διαδρομής)· για KML και KMZ, Σημεία (Placemarks) και Διαδρομές (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -2044,7 +2045,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Εισαγωγή κοινόχρηστης λίστας Google Maps ή Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Μετατρέψτε έναν σύνδεσμο κοινόχρηστης λίστας σε μέρη.',
|
||||
'help.guide.import-places-list.step.1': 'Κάντε κλικ στο Εισαγωγή Λίστας και διαλέξτε Λίστα Google ή Λίστα Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Κάντε κλικ στο κουμπί εισαγωγής δίπλα στο κουμπί προσθήκης και διαλέξτε Λίστα Google. Όπου είναι ενεργές και οι λίστες Naver, η επιλογή λέγεται Εισαγωγή Λίστας και το παράθυρο ρωτά ποια από τις δύο.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Επικολλήστε τον κοινόχρηστο σύνδεσμο της λίστας. Ένας σύνδεσμος οδηγιών Google Maps δουλεύει επίσης: οι στάσεις του γίνονται μέρη, με σειρά οδήγησης.',
|
||||
'help.guide.import-places-list.step.3': 'Κάντε κλικ στο Εισαγωγή.',
|
||||
@@ -2062,24 +2064,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Η γραμμή εργαλείων στην κορυφή: Εξαγωγή (PDF, ημερολόγιο, GPX), Ανάπτυξη όλων των ημερών / Σύμπτυξη όλων των ημερών, το βέλος αναίρεσης, Αναδιάταξη ημερών και Εμφάνιση όλων των διαδρομών κρατήσεων.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Μια κάρτα ημέρας: αριθμός, καιρός, τίτλος, ημερομηνία και το κόστος της ημέρας στην κεφαλίδα· κάντε κλικ στην κεφαλίδα για να ανοίξετε την ημέρα, το βέλος δεξιά τη διπλώνει. Τα Μέσα μαζικής μεταφοράς, η Προσθήκη μεταφοράς και η Προσθήκη Σημείωσης κάθονται επίσης στην κεφαλίδα.',
|
||||
'Μια κάρτα ημέρας: ένα πλακίδιο με τον αριθμό της ημέρας και την πρόγνωση, ο τίτλος και η ημερομηνία, και σήματα για τη νύχτα που έχει κρατηθεί, ένα ενοικιαζόμενο αυτοκίνητο και το κόστος της ημέρας. Κάντε κλικ στην κεφαλίδα για να ανοίξετε την ημέρα, το βελάκι τη διπλώνει, και το + ανοίγει ένα μενού: Προσθήκη τόπου σε αυτήν την ημέρα, Προσθήκη διαμονής, Προσθήκη μεταφοράς, Μέσα μαζικής μεταφοράς και Προσθήκη Σημείωσης.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Μέσα σε μια ημέρα: οι στάσεις στη σειρά, καθεμία με εικόνα, όνομα, ώρα και ένα λουκέτο πάνω στην εικόνα· σημειώσεις· κρατήσεις που ανήκουν στην ημέρα· και ανάμεσα στις στάσεις ο χρόνος ταξιδιού κάθε σκέλους.',
|
||||
'Μέσα σε μια ημέρα: οι στάσεις στη σειρά, καθεμία με εικόνα, όνομα, ώρα, ένα λουκέτο πάνω στην εικόνα και τις κρατήσεις που είναι καρφιτσωμένες σε αυτήν· σημειώσεις· οι κρατήσεις και οι μεταφορές της ημέρας, χρωματισμένες ανάλογα με το είδος τους· και ανάμεσα στις στάσεις ο χρόνος ταξιδιού κάθε σκέλους. Κάθε σειρά έχει ένα μενού με τρεις τελείες, το ίδιο που ανοίγει με δεξί κλικ.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Κάτω από τις στάσεις η γραμμή διαδρομής: το Διαδρομή σχεδιάζει την ημέρα στον χάρτη, το Βελτιστοποίηση ταξινομεί τις στάσεις, το Με αυτοκίνητο / Με τα πόδια ορίζει το μέσο μεταφοράς της ημέρας, και το Άνοιγμα στο Google Maps και το Άνοιγμα στο CoMaps παραδίδουν την ημέρα.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Τα μέρη μπαίνουν σε μια ημέρα σύροντας μια σειρά από τη στήλη μερών, με το + πάνω σε εκείνη τη σειρά, με το Προσθήκη τόπου σε αυτήν την ημέρα σε μια άδεια ημέρα, ή από τις λεπτομέρειες του μέρους.',
|
||||
'Τα μέρη μπαίνουν σε μια ημέρα σύροντας μια σειρά από τη στήλη μερών, με το + Ημέρα πάνω σε εκείνη τη σειρά, με το Προσθήκη τόπου σε αυτήν την ημέρα από το + της ημέρας ή σε μια άδεια ημέρα, ή από τις λεπτομέρειες του μέρους.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Το Συνολικό Κόστος στο κάτω μέρος αθροίζει κάθε στάση και κάθε κράτηση με τιμή, στο νόμισμα του ταξιδιού.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Ανάγνωση μιας ημέρας',
|
||||
'help.guide.read-day-plan.goal': 'Μάθετε τι σας λέει κάθε κομμάτι της κάρτας μιας ημέρας πριν αλλάξετε οτιδήποτε.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Η κεφαλίδα: ο αριθμός της ημέρας, η πρόγνωση για την ημέρα, το Ημέρα 1 ή ο τίτλος που της δώσατε, η ημερομηνία και το κόστος της ημέρας. Κάντε κλικ στην κεφαλίδα για να ανοίξετε την ημέρα (το πάνελ λεπτομερειών της ανοίγει πάνω από τον χάρτη)· το βέλος δεξιά διπλώνει και ξεδιπλώνει την κάρτα.',
|
||||
'Η κεφαλίδα: ένα πλακίδιο με τον αριθμό της ημέρας και την πρόγνωση, μετά το Ημέρα 1 ή ο τίτλος που της δώσατε, η ημερομηνία, και σήματα για τη νύχτα που έχει κρατηθεί (check-in ή check-out), ένα ενοικιαζόμενο αυτοκίνητο και το κόστος της ημέρας. Κάντε κλικ στην κεφαλίδα για να ανοίξετε την ημέρα (το πάνελ λεπτομερειών της ανοίγει πάνω από τον χάρτη)· το + δεξιά προσθέτει ένα μέρος, μια διαμονή, μια μεταφορά, μια σύνδεση μέσων μαζικής μεταφοράς ή μια σημείωση, και το βελάκι διπλώνει την κάρτα.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Μια στάση: η λαβή αριστερά τη σύρει, η εικόνα κουβαλά ένα λουκέτο για τη βελτιστοποίηση διαδρομής, μετά έρχονται το όνομα, η περιγραφή και, αν έχουν οριστεί, οι Σημειώσεις για αυτή την ημέρα. Ένα σήμα ώρας δείχνει Έναρξη και Λήξη όταν η στάση τις έχει· τα βέλη που εμφανίζονται στο δεξί της άκρο τη μετακινούν πάνω ή κάτω.',
|
||||
'Μια στάση: η λαβή αριστερά τη σύρει, η εικόνα κουβαλά ένα λουκέτο για τη βελτιστοποίηση διαδρομής, μετά έρχονται το όνομα, ένα σήμα ώρας όταν η στάση έχει Έναρξη και Λήξη, η περιγραφή και, αν έχουν οριστεί, οι Σημειώσεις για αυτή την ημέρα. Τα βέλη στο δεξί της άκρο τη μετακινούν πάνω ή κάτω, και οι τρεις τελείες ανοίγουν το μενού της.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Μια κράτηση στην ημέρα: μια κράτηση σε μια στάση σημειώνει τη στάση Κράτηση επιβεβαιωμένη ή Κράτηση σε εκκρεμότητα, και μια μεταφορά εμφανίζεται ως Αναχώρηση ή Άφιξη με την ώρα και τη διαδρομή της, με έναν μικρό διακόπτη που σχεδιάζει αυτή τη διαδρομή στον χάρτη.',
|
||||
'Μια κράτηση σε μια στάση κάθεται πάνω της ως σήμα Κράτηση, πράσινο όταν είναι επιβεβαιωμένη και κεχριμπαρένιο όσο εκκρεμεί, με την ώρα και τον πάροχό της· κάντε κλικ στο σήμα για να ανοίξετε την κράτηση, και το κουμπί διαδρομής δίπλα του σχεδιάζει τη διαδρομή της. Μια μεταφορά είναι δική της σειρά, χρωματισμένη ανάλογα με το είδος της, με Αναχώρηση ή Άφιξη και την ώρα της. Κάντε κλικ σε μια κράτηση και ανοίγουν οι λεπτομέρειές της· το Επεξεργασία εκεί την αλλάζει.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Ανάμεσα σε δύο στάσεις ο συνδετήρας λέει πόσο κρατά το σκέλος και πόσο μακριά είναι, στο μέσο μεταφοράς της ημέρας· κάντε κλικ πάνω του για να αλλάξετε το μέσο για εκείνο μόνο το σκέλος.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2087,7 +2089,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Κάθε σύμβολο στην κάρτα σημαίνει κάτι· οι οδηγοί παρακάτω αλλάζουν τον καθένα από αυτούς.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Κάντε δεξί κλικ σε μια στάση για το μενού της: Επεξεργασία, Αφαίρεση από την ημέρα, Άνοιγμα Ιστοσελίδας, οι εφαρμογές πλοήγησης (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Αποθήκευση στη Συλλογή, Διαγραφή.',
|
||||
'Κάντε δεξί κλικ σε μια στάση, ή κλικ στις τρεις τελείες της, για το μενού της: Επεξεργασία, Αφαίρεση από την ημέρα, Άνοιγμα Ιστοσελίδας, οι εφαρμογές πλοήγησης (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Αποθήκευση στη Συλλογή, Διαγραφή.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Περάστε τον δείκτη πάνω από μια στάση και στο τέλος της εμφανίζεται το Προσθήκη κράτησης: μια κράτηση που φτιάχνεται εκεί είναι δεμένη με αυτή τη στάση σε αυτή την ημέρα.',
|
||||
// place-onto-day
|
||||
@@ -2096,9 +2098,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Σύρετε μια σειρά από τη στήλη μερών πάνω στην κάρτα της ημέρας. Αφήστε τη ανάμεσα σε δύο στάσεις για να μπει ακριβώς εκεί, ή οπουδήποτε στην κάρτα για να προστεθεί στο τέλος.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Χωρίς σύρσιμο: ανοίξτε την ημέρα κάνοντας κλικ στην κεφαλίδα της, μετά κάντε κλικ στο + στο τέλος της σειράς του μέρους, ή κάντε δεξί κλικ στη σειρά και διαλέξτε + Ημέρα.',
|
||||
'Χωρίς σύρσιμο: ανοίξτε την ημέρα κάνοντας κλικ στην κεφαλίδα της, μετά κάντε κλικ στο + Ημέρα στο τέλος της σειράς του μέρους, ή κάντε δεξί κλικ στη σειρά και διαλέξτε + Ημέρα.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Σε μια άδεια ημέρα, το Προσθήκη τόπου σε αυτήν την ημέρα ανοίγει τη φόρμα του μέρους, και το νέο μέρος προσγειώνεται στην ημέρα αμέσως.',
|
||||
'Το Προσθήκη τόπου σε αυτήν την ημέρα, στο μενού + της ημέρας ή σε μια άδεια ημέρα, ανοίγει τη φόρμα του μέρους, και το νέο μέρος προσγειώνεται στην ημέρα αμέσως.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Από τις λεπτομέρειες ενός μέρους, το Προσθήκη στην Ημέρα ρωτά σε ποια ημέρα· με την ημέρα ανοιχτή από την κεφαλίδα της, το Στην ημέρα στη στήλη μερών δημιουργεί νέο μέρος κατευθείαν στην ανοιχτή ημέρα.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2128,7 +2130,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Ορίστε πότε αρχίζει και πότε τελειώνει μια στάση, ώστε η ημέρα να διαβάζεται σαν πρόγραμμα.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Κάντε δεξί κλικ στη στάση και διαλέξτε Επεξεργασία. Ανοιγμένη από την ημέρα, η φόρμα έχει Έναρξη και Λήξη στο κάτω μέρος.',
|
||||
'Κάντε δεξί κλικ στη στάση, ή κλικ στις τρεις τελείες της, και διαλέξτε Επεξεργασία. Ανοιγμένη από την ημέρα, η φόρμα έχει Έναρξη και Λήξη για εκείνη την ημέρα, ακριβώς κάτω από την τοποθεσία.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Συμπληρώστε Έναρξη και, αν θέλετε, Λήξη. Το Επικάλυψη ώρας με: προειδοποιεί ότι μια άλλη στάση της ημέρας με ώρα επικαλύπτεται· μια Λήξη πριν από την Έναρξη μπλοκάρει το Ενημέρωση.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2170,13 +2172,13 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-note.title': 'Προσθήκη σημείωσης σε μια ημέρα',
|
||||
'help.guide.day-note.goal':
|
||||
'Κρατήστε μια υπενθύμιση, έναν αριθμό εισιτηρίου ή ένα εναλλακτικό σχέδιο μέσα στην ίδια την ημέρα.',
|
||||
'help.guide.day-note.step.1': 'Κάντε κλικ στο Προσθήκη Σημείωσης στην κεφαλίδα της ημέρας.',
|
||||
'help.guide.day-note.step.1': 'Κάντε κλικ στο + στην κεφαλίδα της ημέρας και διαλέξτε Προσθήκη Σημείωσης.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Δώστε της όνομα στο πεδίο Σημείωση, αυτό δείχνει η κάρτα της ημέρας, και γράψτε τα υπόλοιπα κάτω από την Ημερήσια Σημείωση. Η γραμμή πάνω από το κείμενο το μορφοποιεί (Έντονα, λίστες, σύνδεσμοι, παραθέσεις) και η Προεπισκόπηση στα αριστερά δείχνει την κάρτα που θα προκύψει.',
|
||||
'Γράψτε το όνομα της σημείωσης στην κεφαλίδα του παραθύρου, εκεί που λέει Σημείωση· αυτό δείχνει η κάρτα της ημέρας. Γράψτε τα υπόλοιπα κάτω από την Ημερήσια Σημείωση: η γραμμή εργαλείων από πάνω μορφοποιεί το κείμενο (Έντονα, λίστες, σύνδεσμοι, παραθέσεις), και η Προεπισκόπηση στα αριστερά δείχνει τη σειρά που θα προκύψει.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Διαλέξτε Εικονίδιο και Χρώμα, ώστε η σημείωση να ξεχωρίζει από τις στάσεις, και μετά κάντε κλικ στην Προσθήκη.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Η σημείωση κάθεται μέσα στην ημέρα σαν στάση: σύρετέ τη στη θέση της, κάντε δεξί κλικ για Επεξεργασία και Διαγραφή.',
|
||||
'Η σημείωση κάθεται μέσα στην ημέρα σαν στάση: σύρετέ τη στη θέση της, και κάντε δεξί κλικ ή χρησιμοποιήστε τις τρεις τελείες της για Επεξεργασία και Διαγραφή.',
|
||||
'help.guide.day-note.result':
|
||||
'Η σημείωση είναι μέρος της ημέρας, και μέσα στο PDF· μια σημείωση με ώρα ταξινομείται μαζί με τις στάσεις που έχουν ώρα.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2225,15 +2227,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Ανάγνωση κρατήσεων και μεταφορών στο πλάνο',
|
||||
'help.guide.bookings-in-plan.goal': 'Μάθετε πού εμφανίζεται μια κράτηση μόλις υπάρξει, και ποια οθόνη τη δημιουργεί.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Μια μεταφορά (Πτήση, Τρένο, Φέρι, Λεωφορείο, Αυτοκίνητο) εμφανίζεται στην ημέρα που αναχωρεί ως Αναχώρηση και στην ημέρα που φτάνει ως Άφιξη, με ώρα και διαδρομή· μια πολυήμερη απλώνεται στις ενδιάμεσες ημέρες.',
|
||||
'Μια μεταφορά (Πτήση, Τρένο, Φέρι, Λεωφορείο, Αυτοκίνητο) είναι μια σειρά χρωματισμένη ανάλογα με το είδος της: Αναχώρηση την ημέρα που φεύγει, Άφιξη την ημέρα που φτάνει, με ώρα και διαδρομή· μια πολυήμερη απλώνεται στις ενδιάμεσες ημέρες. Κάντε κλικ στη σειρά και ανοίγει η κράτηση.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Μια κράτηση δεμένη με μια στάση (ένα Εστιατόριο, μια Περιήγηση) σημειώνει εκείνη τη στάση Κράτηση επιβεβαιωμένη ή Κράτηση σε εκκρεμότητα· μια κράτηση με ημέρα αλλά χωρίς στάση είναι δική της σειρά μέσα στην ημέρα.',
|
||||
'Μια κράτηση δεμένη με μια στάση (ένα Εστιατόριο, μια Περιήγηση) είναι ένα σήμα Κράτηση πάνω σε εκείνη τη στάση, πράσινο όταν είναι επιβεβαιωμένη και κεχριμπαρένιο όσο εκκρεμεί, με την ώρα της· μια κράτηση με ημέρα αλλά χωρίς στάση είναι δική της σειρά μέσα στην ημέρα.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Μια νύχτα σε ξενοδοχείο είναι διαμονή: κάθεται στο πάνελ λεπτομερειών της ημέρας κάτω από τη Διαμονή, από το check-in ως το check-out, και η διαδρομή καθεμιάς από εκείνες τις ημέρες ξεκινά από εκεί.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Στον χάρτη, ο διακόπτης πάνω σε μια σειρά μεταφοράς σχεδιάζει τη διαδρομή της· το Εμφάνιση όλων των διαδρομών κρατήσεων στη γραμμή εργαλείων τις σχεδιάζει όλες.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Δημιουργία: Προσθήκη κράτησης πάνω σε μια στάση με τον δείκτη από πάνω, Προσθήκη μεταφοράς και Μέσα μαζικής μεταφοράς στην κεφαλίδα της ημέρας, και οι καρτέλες Κρατήσεις και Μεταφορές για την πλήρη λίστα με εισαγωγή και αρχεία.',
|
||||
'Δημιουργία: Προσθήκη κράτησης πάνω σε μια στάση με τον δείκτη από πάνω, Προσθήκη μεταφοράς και Μέσα μαζικής μεταφοράς στο μενού + της ημέρας, και οι καρτέλες Κρατήσεις και Μεταφορές για την πλήρη λίστα με εισαγωγή και αρχεία.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Μία κράτηση, μία θέση στο πλάνο· οι καρτέλες είναι οι ίδιες κρατήσεις σε μορφή λίστας.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2264,24 +2266,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Κάντε κλικ σε μια σειρά στη στήλη μερών, σε μια στάση μέσα σε μια ημέρα ή σε έναν δείκτη στον χάρτη, και η κάρτα ανοίγει πάνω από τον χάρτη. Το να το διαλέξετε μέσα σε μια ημέρα λέει στην κάρτα ποια στάση εννοείτε, και αυτό είναι που φέρνει μαζί τους συμμετέχοντες της στάσης και την κράτησή της.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Η κεφαλή κουβαλά τη στρογγυλή εικόνα, το όνομα, την κατηγορία, τη διεύθυνση και τις συντεταγμένες. Κάντε κλικ στην εικόνα για να βάλετε μια δική σας, διπλό κλικ στο όνομα για να μετονομάσετε το μέρος επιτόπου, και το X δεξιά κλείνει την κάρτα.',
|
||||
'Η κεφαλή κουβαλά τη στρογγυλή εικόνα, το όνομα, τη διεύθυνση σε μία γραμμή και σήματα για ό,τι είναι γνωστό: ανοιχτό ή κλειστό, την κατηγορία, την τιμή, τον αριθμό τηλεφώνου και τις συντεταγμένες. Κάντε κλικ στην εικόνα για να βάλετε μια δική σας, διπλό κλικ στο όνομα για να μετονομάσετε το μέρος επιτόπου, και το X δεξιά κλείνει την κάρτα.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Από κάτω: η τιμή αν έχει, τα αστέρια που έδωσε στο μέρος κάθε ταξιδιώτης, η περιγραφή και οι σημειώσεις, και οι Σημειώσεις για αυτή την ημέρα όταν η στάση κουβαλά κάποια.',
|
||||
'Από κάτω: τα αστέρια που έδωσε στο μέρος κάθε ταξιδιώτης, η περιγραφή και οι σημειώσεις, και οι Σημειώσεις για αυτή την ημέρα όταν η στάση κουβαλά κάποια.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Ακολουθούν οι Ώρες Λειτουργίας, το Χρώμα διαδρομής, τα Στατιστικά Διαδρομής και τα Αρχεία, στον βαθμό που ισχύουν. Τα Αρχεία παίρνουν οτιδήποτε από τους φακέλους σας και απαριθμούν επίσης ό,τι κρέμεται στην κράτηση αυτής της στάσης.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Η σειρά στο κάτω μέρος: Προσθήκη στην Ημέρα ή Αφαίρεση από την Ημέρα όσο μια ημέρα είναι ανοιχτή, έπειτα Αποθήκευση στη Συλλογή, Πλοήγηση, Άνοιγμα Ιστοσελίδας, Επεξεργασία και Διαγραφή.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Ένα μέρος διαλεγμένο από την αναζήτηση κουβαλά όσα ξέρουν γι’ αυτό το ευρετήριο του TREK ή το OpenStreetMap: έναν πράσινο δακτύλιο Ανοιχτό ή κόκκινο Κλειστό γύρω από την εικόνα, κρινόμενο με το ρολόι του ίδιου του μέρους, τον αριθμό τηλεφώνου κάτω από τα αστέρια, τις Ώρες Λειτουργίας πιο κάτω με τη γραμμή της ημέρας στη σειρά και ολόκληρη την εβδομάδα πίσω από ένα κλικ, και την ιστοσελίδα του πίσω από το Άνοιγμα Ιστοσελίδας. Η βαθμολογία της Google εμφανίζεται μόνο σε μέρος που βρέθηκε μέσω Google, σε ένα TREK με κλειδί Google.',
|
||||
'Ένα μέρος διαλεγμένο από την αναζήτηση κουβαλά όσα ξέρουν γι’ αυτό το ευρετήριο του TREK ή το OpenStreetMap: Ανοιχτό ή Κλειστό ανάμεσα στα σήματα της κεφαλής, με έναν πράσινο ή κόκκινο δακτύλιο γύρω από την εικόνα, κρινόμενο με το ρολόι του ίδιου του μέρους, τον αριθμό τηλεφώνου του επίσης ως σήμα, τις Ώρες Λειτουργίας πιο κάτω με τη γραμμή της ημέρας στη σειρά και ολόκληρη την εβδομάδα πίσω από ένα κλικ, και την ιστοσελίδα του πίσω από το Άνοιγμα Ιστοσελίδας. Η βαθμολογία της Google εμφανίζεται μόνο σε μέρος που βρέθηκε μέσω Google, σε ένα TREK με κλειδί Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Τι σας λέει η κάρτα για ένα μέρος',
|
||||
'help.guide.read-place.goal': 'Διαβάστε όλα όσα ξέρει το ταξίδι για ένα μέρος, σε μία κάρτα.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Στη στήλη ημερών, κάντε κλικ στη στάση που θέλετε να διαβάσετε. Η κάρτα ανοίγει πάνω από τον χάρτη και η στάση μένει σημειωμένη στην ημέρα της.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Η κεφαλή: η στρογγυλή εικόνα, το όνομα, η διεύθυνση και οι ακριβείς συντεταγμένες. Ένας πράσινος δακτύλιος με Ανοιχτό, ή ένας κόκκινος με Κλειστό, γύρω από την εικόνα λέει αν το μέρος είναι ανοιχτό αυτή τη στιγμή, με το δικό του ρολόι, μόλις το TREK μάθει τις ώρες του. Το X δεξιά κλείνει ξανά την κάρτα.',
|
||||
'Η κεφαλή: η στρογγυλή εικόνα, το όνομα και η διεύθυνση σε μία γραμμή· η υπόδειξή της κρατά ολόκληρη τη διεύθυνση. Τα σήματα από κάτω λένε αν το μέρος είναι Ανοιχτό ή Κλειστό αυτή τη στιγμή, με το δικό του ρολόι, με έναν πράσινο ή κόκκινο δακτύλιο γύρω από την εικόνα αντίστοιχα, και κουβαλούν τον αριθμό τηλεφώνου, που ένα κλικ τον παραδίδει στην εφαρμογή τηλεφώνου σας, και τις ακριβείς συντεταγμένες. Το X δεξιά κλείνει ξανά την κάρτα.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Από κάτω τα αστέρια που έδωσε στο μέρος κάθε ταξιδιώτης, με τον μέσο όρο και το πόσοι ψήφισαν. Χωρίς βαθμολογία ακόμη όσο δεν έχει ψηφίσει κανείς. Ακριβώς από κάτω, ο αριθμός τηλεφώνου όπου το μέρος έχει έναν: ένα κλικ πάνω του παραδίδει τον αριθμό στην εφαρμογή τηλεφώνου σας.',
|
||||
'Η Βαθμολογία έρχεται πρώτη κάτω από την κεφαλή: τα αστέρια που έδωσε στο μέρος κάθε ταξιδιώτης, με τον μέσο όρο και το πόσοι ψήφισαν. Χωρίς βαθμολογία ακόμη όσο δεν έχει ψηφίσει κανείς.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Έπειτα η περιγραφή και, από κάτω της, οι σημειώσεις. Και τα δύο είναι το κείμενο από τη φόρμα του μέρους, αποδοσμένο: λίστες, σύνδεσμοι και έντονα γράμματα δουλεύουν όλα.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2378,18 +2380,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.goal':
|
||||
'Διαβάστε την κράτηση που ανήκει σε μια στάση, ανοίξτε την, και καρφιτσώστε μια νέα πάνω της.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Ανοίξτε τη στάση στην οποία ανήκει η κράτηση. Η κάρτα δείχνει μια λωρίδα με Επιβεβαιωμένο ή Εκκρεμές και το όνομα της κράτησης.',
|
||||
'Ανοίξτε τη στάση στην οποία ανήκει η κράτηση. Η κάρτα την απαριθμεί κάτω από τις Κρατήσεις ως δική της μικρή κάρτα, με το όνομα της κράτησης και Επιβεβαιωμένο ή Εκκρεμές.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Η λωρίδα κουβαλά την Ημερομηνία, την Ώρα και τον Κωδικό Κράτησης, και όποιες σημειώσεις έχει η κράτηση.',
|
||||
'help.guide.place-booking.step.3': 'Κάντε κλικ στη λωρίδα. Η κράτηση ανοίγει πάνω από τον χάρτη.',
|
||||
'Η κάρτα κράτησης κουβαλά την Ημερομηνία, την Ώρα και τον Κωδικό Κράτησης, και όποιες σημειώσεις έχει η κράτηση.',
|
||||
'help.guide.place-booking.step.3': 'Κάντε κλικ στην κάρτα κράτησης. Η κράτηση ανοίγει πάνω από τον χάρτη.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Η Επεξεργασία στο κάτω μέρος της κράτησης ανοίγει τη δική της φόρμα. Εκεί, το Σύνδεση με ανάθεση ημέρας είναι αυτό που καρφιτσώνει μια κράτηση σε μια στάση, και εδώ ονομάζει ήδη αυτήν. Κλείστε ξανά τη φόρμα.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Μια νέα κράτηση για μια στάση ξεκινά στη στήλη ημερών: περάστε πάνω από τη στάση και κάντε κλικ στο + στο τέλος της. Η φόρμα ανοίγει ως Νέα Κράτηση, ήδη συνδεδεμένη με αυτήν.',
|
||||
'Μια νέα κράτηση για μια στάση ξεκινά στη στήλη ημερών: περάστε πάνω από τη στάση και κάντε κλικ στο Προσθήκη κράτησης, το εισιτήριο στο τέλος της. Η φόρμα ανοίγει ως Νέα Κράτηση, ήδη συνδεδεμένη με αυτήν.',
|
||||
'help.guide.place-booking.result':
|
||||
'Η κράτηση κρέμεται στη στάση: είναι στην κάρτα, είναι μέσα στην ημέρα, και τα αρχεία της απαριθμούνται και εδώ κάτω από τα Αρχεία.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Η λωρίδα εμφανίζεται μόνο για τη στάση στην οποία είναι καρφιτσωμένη η κράτηση. Μια κράτηση χωρίς στάση ζει στην καρτέλα Κρατήσεις.',
|
||||
'Η κάρτα κράτησης εμφανίζεται μόνο για τη στάση στην οποία είναι καρφιτσωμένη η κράτηση. Μια κράτηση χωρίς στάση ζει στην καρτέλα Κρατήσεις.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Πολλές κρατήσεις μπορούν να μοιράζονται μία στάση: το γεύμα και η ξενάγηση που ξεκινά από την ίδια πόρτα.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2637,7 +2639,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Στην κορυφή, ο καιρός της ημέρας. Το Πρόγνωση για ονομάζει το μέρος στο οποίο αναφέρεται: την πρώτη στάση της ημέρας ή το ξενοδοχείο στο οποίο ξυπνάτε.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Οι Κρατήσεις απαριθμούν τις κρατήσεις εκείνης της ημέρας, καθεμία με το είδος της, τη στάση στην οποία ανήκει και τις ώρες της. Το πράσινο σημαίνει επιβεβαιωμένο, το κεχριμπαρένιο ακόμη εκκρεμές· είναι μια ανάγνωση, οι κρατήσεις αλλάζουν στην καρτέλα Κρατήσεις.',
|
||||
'Οι Κρατήσεις απαριθμούν τις κρατήσεις εκείνης της ημέρας, καθεμία με το είδος της, τη στάση στην οποία ανήκει και τις ώρες της. Το πράσινο σημαίνει επιβεβαιωμένο, το κεχριμπαρένιο ακόμη εκκρεμές, και ένα κλικ σε μια σειρά ανοίγει την κράτηση.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Η Διαμονή δείχνει κάθε νύχτα που έχει κλειστεί πάνω σε αυτή την ημέρα, με Check-in και Check-out στις ημέρες που συμβαίνουν, το παράθυρο άφιξης, την ώρα αναχώρησης και τον αριθμό επιβεβαίωσης.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2672,7 +2674,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Ο μεγάλος αριθμός είναι η θερμοκρασία της ημέρας, δίπλα του η ελάχιστη και η μέγιστη, και ο καιρός με λέξεις.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Οι ετικέτες από κάτω: η πιθανότητα βροχής, πόση θα πέσει, ο δυνατότερος άνεμος, και η ανατολή και η δύση.',
|
||||
'Τα σήματα δεξιά του: η πιθανότητα βροχής, πόση θα πέσει, ο δυνατότερος άνεμος, και η ανατολή και η δύση.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Στο κάτω μέρος, η ημέρα ώρα με ώρα, κάθε δεύτερη ώρα: η ώρα, το εικονίδιο, η θερμοκρασία και η πιθανότητα βροχής. Μια ώρα πάνω από 50 τοις εκατό είναι σκιασμένη με μπλε.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2706,18 +2708,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.add-accommodation.step.2':
|
||||
'Ανοίξτε την ημέρα της άφιξης και κάντε κλικ στο Προσθήκη διαμονής κάτω από τη Διαμονή.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Το Εφαρμογή σε ημέρες λέει ποιες νύχτες καλύπτει η διαμονή: η ημέρα του check-in αριστερά, η ημέρα του check-out δεξιά. Το Όλες καλύπτει όλο το ταξίδι.',
|
||||
'Το Εφαρμογή σε ημέρες λέει ποιες νύχτες καλύπτει η διαμονή: η Έναρξη είναι η ημέρα του check-in, η Λήξη η ημέρα του check-out, και το Όλες καλύπτει όλο το ταξίδι. Η κεφαλίδα του παραθύρου δείχνει το διάστημα και τον αριθμό των νυχτών.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Συμπληρώστε Check-in, Έως και Check-out, και βάλτε τον αριθμό της κράτησης στο Επιβεβαίωση. Και τα τέσσερα μπορούν να μείνουν κενά.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Διαλέξτε το κατάλυμα από τα μέρη του ταξιδιού. Οι ετικέτες πάνω από τη λίστα τη στενεύουν σε μία κατηγορία.',
|
||||
'Διαλέξτε το κατάλυμα από τα μέρη του ταξιδιού. Η Κατηγορία πάνω από τη λίστα τη στενεύει σε μία κατηγορία.',
|
||||
'help.guide.add-accommodation.step.6': 'Κάντε κλικ στο Αποθήκευση.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Η διαμονή εμφανίζεται σε κάθε ημέρα που καλύπτει, Check-in στην πρώτη και Check-out στην τελευταία. Το κατάλυμα γίνεται στάση την ημέρα του check-in, οπότε ο χάρτης σχεδιάζει τον δρόμο ως εκεί, και μια κράτηση τύπου Κατάλυμα εμφανίζεται στην καρτέλα Κρατήσεις.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Ο επιλογέας ανοίγει στην ημέρα από την οποία ήρθατε, με check-out την επόμενη· και τα δύο μετακινούνται πριν αποθηκεύσετε.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Δώστε στο ξενοδοχείο την κατηγορία Hotel του ταξιδιού όταν το δημιουργείτε και οι ετικέτες πάνω από τη λίστα τη στενεύουν στα ξενοδοχεία σας με ένα κλικ.',
|
||||
'Δώστε στο ξενοδοχείο την κατηγορία Hotel όταν το δημιουργείτε, και η Κατηγορία πάνω από τη λίστα τη στενεύει στα ξενοδοχεία σας με ένα κλικ.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Οι ώρες είναι όλες προαιρετικές: μια διαμονή χωρίς check-in και χωρίς κωδικό καλύπτει και πάλι τις νύχτες της και σχεδιάζει και πάλι τη διαδρομή της.',
|
||||
// edit-accommodation
|
||||
@@ -2729,7 +2731,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Το μολύβι στα δεξιά της ανοίγει ξανά τη διαμονή. Το παράθυρο τώρα γράφει Επεξεργασία διαμονής.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Διορθώστε τη σειρά των πεδίων: Check-in, Έως, Check-out και Επιβεβαίωση. Οι ημέρες από πάνω της και το κατάλυμα από κάτω της αλλάζουν κι αυτά εδώ.',
|
||||
'Διορθώστε τα Check-in, Έως, Check-out και Επιβεβαίωση. Οι ημέρες από πάνω τους και το κατάλυμα από κάτω αλλάζουν κι αυτά εδώ.',
|
||||
'help.guide.edit-accommodation.step.4': 'Κάντε κλικ στο Αποθήκευση.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'Το X δίπλα στο μολύβι τερματίζει τη διαμονή. Δεν ρωτάει τίποτα, και η κράτηση τύπου Κατάλυμα που της ανήκει φεύγει μαζί της.',
|
||||
@@ -2746,7 +2748,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Οι Κρατήσεις απαριθμούν τις κρατήσεις της ημέρας: αυτές που έχουν ημερομηνία πάνω της και αυτές που κρέμονται από μία από τις στάσεις της.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Μια γραμμή δείχνει τι είδους κράτηση είναι, το όνομά της και, όταν ανήκει σε στάση, εκείνη τη στάση μετά από μια τελεία. Οι ώρες της κάθονται στο δεξί άκρο.',
|
||||
'Μια γραμμή δείχνει τι είδους κράτηση είναι, το όνομά της και, όταν ανήκει σε στάση, εκείνη τη στάση σε γκρι μετά από αυτό. Οι ώρες της κάθονται στο δεξί άκρο, πριν από την κουκκίδα κατάστασης.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Το χρώμα λέει πού βρίσκεται μια κράτηση: η πράσινη γραμμή είναι επιβεβαιωμένη, η κεχριμπαρένια ακόμη εκκρεμής. Τα ξενοδοχεία δεν είναι σε αυτή τη λίστα, έχουν το δικό τους μπλοκ πιο κάτω.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Én fizettem',
|
||||
'costs.filter.owed': 'Nekem tartoznak',
|
||||
'costs.addExpense': 'Költség hozzáadása',
|
||||
'costs.view.label': 'Nézet',
|
||||
'costs.view.list': 'Lista',
|
||||
'costs.view.table': 'Táblázat',
|
||||
'costs.table.lockedPayer': 'Valaki kifizette: az összeget a kiadásban módosítsd, hogy az egyenlegek stimmeljenek.',
|
||||
'costs.table.lockedCurrency': '{currency} pénznemben rögzítve: az összeget a kiadásban módosítsd.',
|
||||
'costs.table.summary': 'Összegzés',
|
||||
'costs.table.byCategory': 'Kategória',
|
||||
'costs.table.byDate': 'Nap',
|
||||
'costs.table.byPayer': 'Fizető',
|
||||
'costs.table.byStatus': 'Állapot',
|
||||
'costs.table.noPayer': 'Még nincs fizető',
|
||||
'costs.table.paid': 'Fizetve',
|
||||
'costs.table.open': 'Nyitott',
|
||||
'costs.editExpense': 'Költség szerkesztése',
|
||||
'costs.noMatch': 'Nincs a keresésnek megfelelő költség.',
|
||||
'costs.emptyText': 'Még nincs költség. Add hozzá az elsőt.',
|
||||
|
||||
+57
-56
@@ -1765,7 +1765,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'A címet, a dátumokat, a borítót és a pénznemet az Utazásaim alatt szerkeszted, az utazáskártya ceruzájával.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Az oszlop belső szélén lévő nyilak összecsukják, és a helyet a térkép veszi át; az oszlop melletti vékony elválasztó a szélességét változtatja.',
|
||||
'Az oszlop belső szélén lévő fül összecsukja az oszlopot, és a helyet a térkép veszi át; az oszlop melletti vékony elválasztó a szélességét változtatja.',
|
||||
'help.ctx.trip.bullet.6': 'A napok eszköztárában a visszavonás nyíl visszaveszi a terv utolsó módosítását.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Tag hozzáadása',
|
||||
@@ -1835,8 +1835,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Hely a térképnek',
|
||||
'help.guide.collapse-columns.goal': 'Csukj össze egy oszlopot, vagy adj neki nagyobb szélességet.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Kattints a napok oszlopának belső szélén lévő nyílra az összecsukásához; a helyet a térkép veszi át. A helyek oszlopán ugyanez a nyíl van.',
|
||||
'help.guide.collapse-columns.step.2': 'Kattints újra a nyílra, hogy visszahozd az oszlopot.',
|
||||
'Kattints a napok oszlopának belső szélén lévő fülre, arra, amelyiken a panel ikon van, hogy összecsukd az oszlopot; a helyet a térkép veszi át. A helyek oszlopán ugyanez a fül van.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Az összecsukott oszlop egy csempét hagy a térkép sarkában, a napoknál Tervezés, a helyeknél Helyek felirattal. Kattints rá, hogy visszahozd az oszlopot.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Húzd az oszlop és a térkép közötti vékony elválasztót az oszlop szélességének módosításához.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1862,15 +1863,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'A felül lévő Hely/Tevékenység hozzáadása megnyitja az űrlapot egy helyhez, amit beírsz vagy megkeresel. Amíg egy nap meg van nyitva, a gombon Új hely áll, a mellette lévő A naphoz pedig egyenesen arra a napra hozza létre a helyet.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'A Fájl importálása .gpx, .kml és .kmz fájlokat fogad; a Lista importálás megosztott Google Maps vagy Naver Maps listát fogad. Egy fájlt egyszerűen az oszlopra is ejthetsz.',
|
||||
'A mellette lévő import gomb a Fájl importálása lehetőséget kínálja .gpx, .kml és .kmz fájlokhoz, és a Google Lista lehetőséget (Lista importálás, ha a Naver-listák is be vannak kapcsolva) a Google Mapsből vagy a Naver Mapsből megosztott listához. Egy fájlt egyszerűen az oszlopra is ejthetsz.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'A legördülő az Összes, a Nem tervezett, a Tervezett és, ha már importáltál nyomvonalat, a Nyomvonalak között vált; alatta ül a keresés, a kategóriaszűrő és a csillag a legkisebb értékeléshez.',
|
||||
'Alattuk a keresés, mellette a pipa, amely kijelölést indít, és egy sor szűrő: a Megjelenítés az Összes, a Nem tervezett, a Tervezett és, ha már importáltál nyomvonalat, a Nyomvonalak között vált, mindegyik a saját darabszámával; a címkés gomb kategória szerint szűr, a csillag pedig legkisebb értékelés szerint.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Egy sor képet, nevet és leírást vagy címet mutat. Kattints rá a hely részleteiért, húzd rá egy napra, vagy kattints rá jobb gombbal, és megkapod a Szerkesztés, + Nap, Weboldal megnyitása, Google Maps, Mentés gyűjteménybe és Törlés pontokat.',
|
||||
'Egy sor képet, nevet és leírást vagy címet mutat. Kattints rá a hely részleteiért, húzd rá egy napra, vagy kattints rá jobb gombbal (vagy a három pontjára), és megkapod a Szerkesztés, + Nap, Weboldal megnyitása, Google Maps, Mentés gyűjteménybe és Törlés pontokat.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Megnyitott nappal egy nem tervezett sor végén lévő + arra a napra teszi a helyet, a Tervezett pedig csak azt a napot sorolja fel, a Teljes utazás megjelenítése pedig újra kitágítja.',
|
||||
'Megnyitott nappal egy nem tervezett sor végén lévő + Nap arra a napra teszi a helyet, a Tervezett pedig csak azt a napot sorolja fel, a Teljes utazás megjelenítése pedig újra kitágítja.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'A szűrősor jobb szélén lévő pipa kijelölést indít: több sor egyszerre kap új kategóriát, kerül gyűjteménybe vagy törlődik.',
|
||||
'A keresés melletti pipa kijelölést indít: az oszlop alján lévő sávból több sor egyszerre kap új kategóriát, kerül gyűjteménybe, lesz látogatottként megjelölve vagy törlődik.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Hely létrehozása',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1878,11 +1879,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Kattints a helyek oszlopának tetején a Hely/Tevékenység hozzáadása gombra (Új hely, amíg egy nap meg van nyitva). Megnyílik az űrlap.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Írd be a helyet felül a Helyek keresése... mezőbe, és válassz egy találatot. A Név, a Cím, a Szélességi fok, a Hosszúsági fok és a Weboldal kitöltődik, a bal oldali Hely részletei pedig képeket, nyitvatartást és leírást mutat hozzá. Google kulccsal rendelkező TREK-en a lista alatt ott van a Nem a megfelelő hely? Keresés inkább a Google-ben, és ugyanazt a keresést futtatja le a Google-ön át.',
|
||||
'Írd be a helyet a Helyek keresése... mezőbe, és válassz egy találatot. A név a párbeszédablak fejlécében, a Cím, a Szélességi fok, a Hosszúsági fok és a Weboldal kitöltődik, a bal oldali Hely részletei pedig képeket, nyitvatartást és leírást mutat hozzá. Google kulccsal rendelkező TREK-en a lista alatt ott van a Nem a megfelelő hely? Keresés inkább a Google-ben, és ugyanazt a keresést futtatja le a Google-ön át. A jobb oldali Mentett helyek ugyanígy kínálja fel a gyűjteményeid helyeit.',
|
||||
'help.guide.create-place.step.3':
|
||||
'A Hely részletei alatt egy képre kattintás a Válassz képet résznél a hely képévé teszi azt; a Szöveg átvétele a leírást átveszi az űrlapra.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Nézd át a mezőket: a Név kötelező; a Leírás és a Jegyzetek a tiéd; a Cím, a Szélességi fok és a Hosszúsági fok a keresésből jön vagy beírod; a Kategória az utazás kategóriái közül választ, a mellette lévő + pedig azonnal újat hoz létre; a Weboldal a linket fogadja.',
|
||||
'Nézd át, mi van az űrlapon: a név a párbeszédablak fejlécében ül, és ez az egyetlen kötelező mező; az alatta lévő Kategória címke az utazás kategóriái közül választ, a mellette lévő + pedig azonnal újat hoz létre. A Cím, a Szélességi fok és a Hosszúsági fok a keresésből jön vagy beírod; a Leírás és a Jegyzetek a tiéd; a Weboldal a linket fogadja.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Kattints a Hozzáadás gombra. Ha már van azonos nevű hely az utazásban, az űrlap szól, és a gombból Hozzáadás mindenképp lesz.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1902,7 +1903,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'A naphoz ugyanazt az űrlapot nyitja meg, mint az Új hely, csak a hely abban a pillanatban a megnyitott napra kerül, ahogy a Hozzáadás gombra kattintasz.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Egy már létező hely a sora végén lévő + gombbal vagy jobb gombbal, a + Nap ponttal kerül a megnyitott napra.',
|
||||
'Egy már létező hely a sora végén lévő + Nap gombbal vagy jobb gombbal, a + Nap ponttal kerül a megnyitott napra.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Fordítva is megy, és anélkül, hogy előbb megnyitnál egy napot: húzd ki a hely sorát az oszlopból, és ejtsd rá egy nap kártyájára. Két megálló közé ejtve pontosan oda kerül.',
|
||||
'help.guide.place-to-open-day.result': 'A hely a nap alatt szerepel, a végén; húzd fel vagy le oda, ahová tartozik.',
|
||||
@@ -1913,10 +1914,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Hely megtalálása a listában',
|
||||
'help.guide.filter-places.goal': 'Szűkítsd az oszlopot azokra a helyekre, amelyeket keresel.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'A felül lévő legördülő az Összes, a Nem tervezett (még egy napon sincs), a Tervezett (egy napon van) és a Nyomvonalak (importált GPX nyomvonalak) között vált, mindegyik a saját darabszámával.',
|
||||
'help.guide.filter-places.step.2': 'Írj a Helyek keresése... mezőbe; a lista szűkül, ahogy gépelsz.',
|
||||
'A Megjelenítés, a keresés alatti legördülő, az Összes, a Nem tervezett (még egy napon sincs), a Tervezett (egy napon van) és a Nyomvonalak (importált GPX nyomvonalak) között vált, mindegyik a saját darabszámával.',
|
||||
'help.guide.filter-places.step.2': 'Írj a felül lévő Keresés mezőbe; a lista szűkül, ahogy gépelsz.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Az Összes kategória listát nyit, ahol egy vagy több kategóriát pipálsz ki, köztük a Nincs kategória lehetőséget; az alján a Szűrő törlése visszaállítja.',
|
||||
'A Megjelenítés melletti címkés gomb felsorolja a kategóriákat: pipálj ki egyet vagy többet, köztük a Nincs kategória lehetőséget. A gomb számolja, mi van kipipálva, a lista alján lévő Szűrő törlése pedig mindet feloldja.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'A mellette lévő csillag legkisebb értékelést állít be: az 5+, a 4+ és így tovább csak azokat a helyeket mutatja, amelyeket legalább annyira értékeltél.',
|
||||
'help.guide.filter-places.result': 'A sorok fölötti szám megmondja, hány hely illik; a szűrők összeadódnak.',
|
||||
@@ -1930,7 +1931,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Kattints jobb gombbal a sorra, és válaszd a Szerkesztés pontot, vagy nyisd meg a helyet, és kattints a Szerkesztés gombra a részleteiben.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Módosítsd, amire szükséged van: Név, Leírás, Jegyzetek, Cím, Szélességi fok és Hosszúsági fok, Kategória, Weboldal. Napból megnyitva az űrlapon ott van a Jegyzetek erre a napra, valamint a Kezdés és a Befejezés arra a napra.',
|
||||
'Módosítsd, amire szükséged van: a nevet és a Kategória címkét a párbeszédablak fejlécében, a Címet, a Szélességi és a Hosszúsági fokot, a Leírást, a Jegyzeteket és a Weboldalt. Napból megnyitva az űrlapon ott van a Kezdés és a Befejezés, valamint a Jegyzetek erre a napra is.',
|
||||
'help.guide.edit-place.step.3': 'Kattints a Frissítés gombra.',
|
||||
'help.guide.edit-place.result':
|
||||
'A módosítás mindenhol érvényes, ahol a hely megjelenik: a listában, a térképen és minden napon, amelyen rajta van.',
|
||||
@@ -1944,22 +1945,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Kattints jobb gombbal a sorra, és válaszd a Törlés pontot, vagy kattints a Törlés gombra a hely részleteiben.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Erősítsd meg. Ha a helyen éjszakát foglaltak, vagy foglalás kapcsolódik hozzá, a kérdés megmondja, mi megy vele.',
|
||||
'Kattints a kérdésben a Törlés gombra. Ha a helyen éjszakát foglaltak, vagy foglalás kapcsolódik hozzá, a kérdés megmondja, mi megy vele.',
|
||||
'help.guide.delete-place.result':
|
||||
'A hely eltűnik a listából, a térképről és minden napról; a napok fölötti eszköztárban a Visszavonás visszahozza.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Ha csak egy napról akarod levenni a helyet, használd inkább azon a megállón az Eltávolítás a napról pontot.',
|
||||
'help.guide.delete-place.tip.2': 'Több hely egyszerre: a szűrők melletti pipa kijelölést indít.',
|
||||
'help.guide.delete-place.tip.2': 'Több hely egyszerre: a keresés melletti pipa kijelölést indít.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Több hely módosítása vagy törlése egyszerre',
|
||||
'help.guide.select-places.goal': 'Rendezd a listát egy menetben, nem helyenként.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Kattints a szűrősor jobb szélén lévő pipára. A sorok jelölőnégyzeteket kapnak, és megjelenik egy sáv a műveletekkel.',
|
||||
'Kattints a keresőmező melletti pipára. A sorok kerek jelölőket kapnak, és az oszlop alján felemelkedik egy sáv a műveletekkel.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Pipáld ki a sorokat, vagy használd a sávban a Mindet kiválaszt gombot; a sáv számolja, mi van kijelölve.',
|
||||
'Kattints a sorokra, hogy kipipáld őket. A Mindet kiválaszt, a sávban lévő dupla pipa, minden sort kijelöl, amit a szűrők meghagynak.',
|
||||
'help.guide.select-places.step.3':
|
||||
'A Change category mindegyiknek egy kategóriát ad; a Mentés gyűjteménybe átmásolja őket az egyik gyűjteményedbe; a Kijelöltek törlése egy megerősítés után eltávolítja őket.',
|
||||
'help.guide.select-places.step.4': 'Kattints újra a pipára, hogy kilépj a kijelölésből.',
|
||||
'A sáv számolja a kipipált helyeket. A Kategória módosítása mindegyiknek egy kategóriát ad; a Mentés gyűjteménybe átmásolja őket az egyik gyűjteményedbe; a Kijelöltek törlése egy megerősítés után eltávolítja őket.',
|
||||
'help.guide.select-places.step.4': 'A Kész, a sáv végén lévő X, kilép a kijelölésből.',
|
||||
'help.guide.select-places.result':
|
||||
'A módosítás minden kijelölt helyre érvényes; a törlés a napok fölötti eszköztárból visszavonható.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1971,7 +1972,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.goal':
|
||||
'Hozd be, amit a Google My Maps, a Google Earth vagy egy GPS tracker exportált.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Kattints a Fájl importálása gombra, vagy ejtsd a fájlt bárhová a helyek oszlopára.',
|
||||
'Kattints a hozzáadás gomb melletti import gombra, és válaszd a Fájl importálása lehetőséget, vagy ejtsd a fájlt bárhová a helyek oszlopára.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Válaszd ki a fájlt, vagy húzd a keretbe. GPX esetén pipáld ki, mit importáljon: Útpontok, Útvonalak, Nyomvonalak (útvonalgeometriával); KML és KMZ esetén Pontok (Placemarks) és Útvonalak (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1987,7 +1988,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-list.title': 'Megosztott Google Maps vagy Naver Maps lista importálása',
|
||||
'help.guide.import-places-list.goal': 'Alakíts egy megosztott listalinket helyekké.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Kattints a Lista importálás gombra, és válaszd a Google Lista vagy a Naver Lista lehetőséget.',
|
||||
'Kattints a hozzáadás gomb melletti import gombra, és válaszd a Google Lista lehetőséget. Ahol a Naver-listák is be vannak kapcsolva, a pont neve Lista importálás, és a párbeszédablak megkérdezi, melyik legyen a kettő közül.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Illeszd be a lista megosztott linkjét. Egy Google Maps útvonaltervező link is működik: a megállói helyek lesznek, vezetési sorrendben.',
|
||||
'help.guide.import-places-list.step.3': 'Kattints az Importálás gombra.',
|
||||
@@ -2005,24 +2006,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'A felső eszköztár: Exportálás (PDF, naptár, GPX), Expand all days / Collapse all days, a visszavonás nyíl, a Napok átrendezése és az Összes foglalási útvonal megjelenítése.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Egy napkártya: szám, időjárás, cím, dátum és a nap költsége a fejlécben; kattints a fejlécre a nap megnyitásához, a jobb oldali nyíl összecsukja a kártyát. A Tömegközlekedés, a Közlekedés hozzáadása és a Jegyzet hozzáadása szintén a fejlécben ül.',
|
||||
'Egy napkártya: egy csempe a nap számával és az előrejelzéssel, a cím és a dátum, valamint címkék a lefoglalt éjszakához, egy bérautóhoz és a nap költségéhez. Kattints a fejlécre a nap megnyitásához, a nyíl összecsukja, a + pedig menüt nyit: Hely hozzáadása ehhez a naphoz, Szállás hozzáadása, Közlekedés hozzáadása, Tömegközlekedés és Jegyzet hozzáadása.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'A napon belül: a megállók sorrendben, mindegyik képpel, névvel, időponttal és egy lakattal a képen; jegyzetek; a naphoz tartozó foglalások; a megállók között pedig az egyes szakaszok utazási ideje.',
|
||||
'A napon belül: a megállók sorrendben, mindegyik képpel, névvel, időponttal, egy lakattal a képen és a hozzá tűzött foglalásokkal; jegyzetek; a nap foglalásai és közlekedései, a fajtájuk szerint színezve; a megállók között pedig az egyes szakaszok utazási ideje. Minden sornak van egy hárompontos menüje, ugyanaz, amit a jobb gombos kattintás nyit meg.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'A megállók alatt az útvonalsáv: az Útvonal felrajzolja a napot a térképre, az Optimalizálás sorba rendezi a megállókat, az Autózás / Gyaloglás beállítja a nap közlekedési módját, a Megnyitás a Google Térképben és a Megnyitás a CoMaps-ben pedig továbbadja a napot.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'A helyek úgy kerülnek egy napra, hogy áthúzol egy sort a helyek oszlopából, az adott sor + jelével, üres napon a Hely hozzáadása ehhez a naphoz ponttal, vagy a hely részleteiből.',
|
||||
'A helyek úgy kerülnek egy napra, hogy áthúzol egy sort a helyek oszlopából, az adott sor + Nap gombjával, a Hely hozzáadása ehhez a naphoz ponttal a nap + menüjéből vagy üres napon, vagy a hely részleteiből.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Az alul lévő Összköltség minden árral rendelkező megállót és foglalást összead, az utazás pénznemében.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Egy nap elolvasása',
|
||||
'help.guide.read-day-plan.goal': 'Tudd, mit mond neked a napkártya minden része, mielőtt bármit megváltoztatnál.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'A fejléc: a nap száma, a napra szóló előrejelzés, az 1. nap vagy a cím, amit adtál neki, a dátum és a nap költsége. Kattints a fejlécre a nap megnyitásához (a részletei a térkép fölött nyílnak meg); a jobb oldali nyíl összecsukja és kinyitja a kártyát.',
|
||||
'A fejléc: egy csempe a nap számával és az előrejelzéssel, aztán az 1. nap vagy a cím, amit adtál neki, a dátum, és címkék a lefoglalt éjszakához (bejelentkezés vagy kijelentkezés), egy bérautóhoz és a nap költségéhez. Kattints a fejlécre a nap megnyitásához (a részletei a térkép fölött nyílnak meg); a jobb oldali + helyet, szállást, közlekedést, tömegközlekedési kapcsolatot vagy jegyzetet ad hozzá, a nyíl pedig összecsukja a kártyát.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Egy megálló: a bal oldali fogantyú húzza, a kép lakatot visel az útvonal-optimalizáláshoz, majd jön a név, a leírás és, ha be van állítva, a Jegyzetek erre a napra. Egy időjelvény a Kezdés és a Befejezés értéket mutatja, ha a megállónak van ilyen; a jobb szélén megjelenő nyilak felfelé vagy lefelé mozgatják.',
|
||||
'Egy megálló: a bal oldali fogantyú húzza, a kép lakatot visel az útvonal-optimalizáláshoz, majd jön a név, egy időjelvény, ha a megállónak van Kezdés és Befejezés értéke, a leírás és, ha be van állítva, a Jegyzetek erre a napra. A jobb szélén lévő nyilak felfelé vagy lefelé mozgatják, a három pont pedig megnyitja a menüjét.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Egy foglalás a napon: egy megállóhoz kötött foglalás Foglalás megerősítve vagy Foglalás függőben jelzéssel látja el a megállót, egy közlekedés pedig Indulás vagy Érkezés formában jelenik meg az időpontjával és az útvonalával, és a rajta lévő kis kapcsoló felrajzolja azt az útvonalat a térképen.',
|
||||
'Egy megállóhoz tartozó foglalás Foglalás jelvényként ül rajta, zölden, ha meg van erősítve, és borostyánsárgán, amíg függőben van, az időpontjával és a szolgáltatójával; kattints a jelvényre a foglalás megnyitásához, a mellette lévő útvonal gomb pedig felrajzolja az útvonalát. Egy közlekedés saját sor, a fajtája szerint színezve, Indulás vagy Érkezés felirattal és az időpontjával. Kattints egy foglalásra, és megnyílnak a részletei; ott a Szerkesztés módosítja.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Két megálló között az összekötő megmondja, mennyi ideig tart a szakasz és milyen hosszú, a nap közlekedési módjában; kattints rá, ha csak annál az egy szakasznál akarod a módot megváltoztatni.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2030,7 +2031,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'A kártyán minden jelnek van jelentése; az alábbi útmutatók mindegyiket megváltoztatják.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Kattints jobb gombbal egy megállóra a menüjéért: Szerkesztés, Eltávolítás a napról, Weboldal megnyitása, a navigációs alkalmazások (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Mentés gyűjteménybe, Törlés.',
|
||||
'Kattints jobb gombbal egy megállóra, vagy kattints a három pontjára, a menüjéért: Szerkesztés, Eltávolítás a napról, Weboldal megnyitása, a navigációs alkalmazások (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Mentés gyűjteménybe, Törlés.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Vidd az egeret egy megálló fölé, és a végén megjelenik a Foglalás hozzáadása: az ott létrehozott foglalás ehhez a megállóhoz tartozik ezen a napon.',
|
||||
// place-onto-day
|
||||
@@ -2040,9 +2041,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Húzz egy sort a helyek oszlopából a napkártyára. Ejtsd két megálló közé, hogy pontosan oda kerüljön, vagy bárhová a kártyán, hogy a végére fűződjön.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Húzás nélkül: nyisd meg a napot a fejlécére kattintva, aztán kattints a hely sorának végén lévő + jelre, vagy kattints a sorra jobb gombbal, és válaszd a + Nap pontot.',
|
||||
'Húzás nélkül: nyisd meg a napot a fejlécére kattintva, aztán kattints a hely sorának végén lévő + Nap gombra, vagy kattints a sorra jobb gombbal, és válaszd a + Nap pontot.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Üres napon a Hely hozzáadása ehhez a naphoz megnyitja a hely űrlapját, és az új hely azonnal a napra kerül.',
|
||||
'A Hely hozzáadása ehhez a naphoz, a nap + menüjében vagy üres napon, megnyitja a hely űrlapját, és az új hely azonnal a napra kerül.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Egy hely részleteiből a Hozzáadás a naphoz megkérdezi, melyik napra; ha a nap a fejlécéről meg van nyitva, a helyek oszlopában A naphoz egyenesen a megnyitott napon hoz létre új helyet.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2071,7 +2072,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Rögzítsd, mikor kezdődik és mikor ér véget egy megálló, hogy a nap menetrendként olvasódjon.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Kattints jobb gombbal a megállóra, és válaszd a Szerkesztés pontot. A napról megnyitva az űrlap alján ott a Kezdés és a Befejezés.',
|
||||
'Kattints jobb gombbal a megállóra, vagy kattints a három pontjára, és válaszd a Szerkesztés pontot. A napról megnyitva az űrlapon ott a Kezdés és a Befejezés arra a napra, közvetlenül a helyszín alatt.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Írd be a Kezdés értéket és, ha akarod, a Befejezés értéket. Az Időbeli átfedés: figyelmeztet, hogy a nap egy másik időzített megállójával átfedés van; a Kezdés előtti Befejezés letiltja a Frissítés gombot.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2111,13 +2112,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Jegyzet hozzáadása egy naphoz',
|
||||
'help.guide.day-note.goal': 'Tarts egy emlékeztetőt, egy jegyszámot vagy egy B tervet egyenesen a napban.',
|
||||
'help.guide.day-note.step.1': 'Kattints a nap fejlécében a Jegyzet hozzáadása gombra.',
|
||||
'help.guide.day-note.step.1': 'Kattints a nap fejlécében a + jelre, és válaszd a Jegyzet hozzáadása pontot.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Adj neki nevet a Jegyzet mezőben, ezt mutatja a nap kártyája, a többit pedig írd a Napi jegyzet alá. A szöveg fölötti sáv formázza (Félkövér, listák, hivatkozások, idézetek), a bal oldali Előnézet pedig megmutatja, milyen kártya lesz belőle.',
|
||||
'Írd be a jegyzet nevét a párbeszédablak fejlécébe, oda, ahol Jegyzet áll; ezt mutatja a nap kártyája. A többit a Napi jegyzet alá írd: a fölötte lévő eszköztár formázza a szöveget (Félkövér, listák, hivatkozások, idézetek), a bal oldali Előnézet pedig megmutatja, milyen sor lesz belőle.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Válassz Ikont és Színt, hogy a jegyzet kiváljon a megállók közül, aztán kattints a Hozzáadás gombra.',
|
||||
'help.guide.day-note.step.4':
|
||||
'A jegyzet megállóként ül a napban: húzd a helyére, kattints rá jobb gombbal a Szerkesztés és a Törlés pontért.',
|
||||
'A jegyzet megállóként ül a napban: húzd a helyére, és kattints rá jobb gombbal, vagy használd a három pontját a Szerkesztés és a Törlés pontért.',
|
||||
'help.guide.day-note.result':
|
||||
'A jegyzet a nap része, a PDF-ben is; az időzített jegyzet az időzített megállókkal együtt rendeződik.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2168,15 +2169,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Tudd, hol jelenik meg egy foglalás, ha már létezik, és melyik képernyő hozza létre.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Egy közlekedés (Repülő, Vonat, Komp, Busz, Autó) az indulás napján Indulás, az érkezés napján Érkezés formában jelenik meg, időponttal és útvonallal; a több napos átnyúlik a köztes napokra.',
|
||||
'Egy közlekedés (Repülő, Vonat, Komp, Busz, Autó) a fajtája szerint színezett sor: Indulás azon a napon, amikor elindul, Érkezés azon, amikor megérkezik, időponttal és útvonallal; a több napos átnyúlik a köztes napokra. Kattints a sorra, és megnyílik a foglalás.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'A megállóhoz kötött foglalás (egy Étterem, egy Túra) Foglalás megerősítve vagy Foglalás függőben jelzést tesz arra a megállóra; az a foglalás, amelynek van napja, de nincs megállója, saját sor a napban.',
|
||||
'A megállóhoz kötött foglalás (egy Étterem, egy Túra) Foglalás jelvény azon a megállón, zöld, ha meg van erősítve, és borostyánsárga, amíg függőben van, az időpontjával; az a foglalás, amelynek van napja, de nincs megállója, saját sor a napban.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Egy szállodai éjszaka szállás: a nap részletei panelen ül a Szállás alatt, a Bejelentkezéstől a Kijelentkezésig, és azoknak a napoknak az útvonala onnan indul.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'A térképen a közlekedés sorában lévő kapcsoló felrajzolja az útvonalát; az eszköztárban az Összes foglalási útvonal megjelenítése mindet felrajzolja.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Létrehozás: Foglalás hozzáadása az egérrel megcélzott megállón, Közlekedés hozzáadása és Tömegközlekedés a nap fejlécében, a teljes listához importtal és fájlokkal pedig a Foglalások és a Közlekedés fül.',
|
||||
'Létrehozás: Foglalás hozzáadása az egérrel megcélzott megállón, Közlekedés hozzáadása és Tömegközlekedés a nap + menüjében, a teljes listához importtal és fájlokkal pedig a Foglalások és a Közlekedés fül.',
|
||||
'help.guide.bookings-in-plan.result': 'Egy foglalás, egy hely a tervben; a fülek ugyanazok a foglalások listaként.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
'A Megerősítve és a Függőben egy állapot, amit te állítasz be a foglaláson; a terv a megállón mutatja, a Foglalások fül pedig mindkettőt számolja.',
|
||||
@@ -2206,24 +2207,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Kattints egy sorra a helyek oszlopában, egy megállóra a napon belül, vagy egy jelölőre a térképen, és a kártya megnyílik a térkép fölött. Ha a napon belül választod ki, a kártya megtudja, melyik megállóra gondolsz, és épp ez hozza magával a megálló résztvevőit és a foglalását.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'A fejléc viszi a kerek képet, a nevet, a kategóriát, a címet és a koordinátákat. Kattints a képre, hogy sajátot használj, kattints duplán a névre, hogy helyben átnevezd a helyet, a jobb oldali X pedig bezárja a kártyát.',
|
||||
'A fejléc viszi a kerek képet, a nevet, a címet egy sorban és címkéket arról, ami ismert: nyitva vagy zárva, a kategória, az ár, a telefonszám és a koordináták. Kattints a képre, hogy sajátot használj, kattints duplán a névre, hogy helyben átnevezd a helyet, a jobb oldali X pedig bezárja a kártyát.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Alatta: az ár, ha van, a csillagok, amiket minden utazó adott a helynek, a leírás és a jegyzetek, és a Jegyzetek erre a napra, ha a megálló hoz ilyet.',
|
||||
'Alatta: a csillagok, amiket minden utazó adott a helynek, a leírás és a jegyzetek, és a Jegyzetek erre a napra, ha a megálló hoz ilyet.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Utána a Nyitvatartás, az Útvonal színe, az Útvonal adatok és a Fájlok jönnek, amennyiben érvényesek. A Fájlok bármit elfogadnak a mappáidból, és azt is felsorolják, ami ennek a megállónak a foglalásán lóg.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'A legalsó sor: Hozzáadás a naphoz vagy Eltávolítás a napról, amíg egy nap meg van nyitva, aztán Mentés gyűjteménybe, Navigáció, Weboldal megnyitása, Szerkesztés és Törlés.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'A keresésből kiválasztott hely magával hozza, amit a TREK-index vagy az OpenStreetMap tud róla: egy zöld Nyitva vagy piros Zárva gyűrűt a kép körül, a hely saját órája szerint megítélve, a telefonszámot a csillagok alatt, lejjebb a Nyitvatartást a nap sorával a soron és az egész héttel egy kattintás mögött, és a weboldalát a Weboldal megnyitása mögött. A Google értékelése csak a Google-lel talált helyen látszik, egy Google-kulcsos TREK-en.',
|
||||
'A keresésből kiválasztott hely magával hozza, amit a TREK-index vagy az OpenStreetMap tud róla: Nyitva vagy Zárva a fejléc címkéi között, egy zöld vagy piros gyűrűvel a kép körül, a hely saját órája szerint megítélve, a telefonszámát szintén címkeként, lejjebb a Nyitvatartást a nap sorával a soron és az egész héttel egy kattintás mögött, és a weboldalát a Weboldal megnyitása mögött. A Google értékelése csak a Google-lel talált helyen látszik, egy Google-kulcsos TREK-en.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Mit mond el a kártya egy helyről',
|
||||
'help.guide.read-place.goal': 'Olvasd el egyetlen kártyán mindazt, amit az utazás egy helyről tud.',
|
||||
'help.guide.read-place.step.1':
|
||||
'A napok oszlopában kattints a megállóra, amit el akarsz olvasni. A kártya megnyílik a térkép fölött, a megálló pedig jelölve marad a napjában.',
|
||||
'help.guide.read-place.step.2':
|
||||
'A fejléc: a kerek kép, a név, a cím és a pontos koordináták. Egy zöld gyűrű Nyitva, vagy egy piros Zárva felirattal a kép körül megmondja, nyitva van-e a hely épp most, a saját órája szerint, amint a TREK ismeri a nyitvatartását. A jobb oldali X újra bezárja a kártyát.',
|
||||
'A fejléc: a kerek kép, a név és a cím egy sorban; a buboréksúgója a teljes címet mutatja. Az alattuk lévő címkék megmondják, hogy a hely épp most Nyitva vagy Zárva van-e, a saját órája szerint, hozzá illően zöld vagy piros gyűrűvel a kép körül, és viszik a telefonszámot, amelyet egy kattintás átad a telefonalkalmazásodnak, meg a pontos koordinátákat. A jobb oldali X újra bezárja a kártyát.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Alatta a csillagok, amiket minden utazó adott a helynek, az átlaggal és a szavazatok számával. Még nincs értékelve, amíg senki sem szavazott. Rögtön alatta a telefonszám, ahol a helynek van: egy kattintás rá átadja a számot a telefonalkalmazásodnak.',
|
||||
'Az Értékelés jön elsőként a fejléc alatt: a csillagok, amiket minden utazó adott a helynek, az átlaggal és a szavazatok számával. Még nincs értékelve, amíg senki sem szavazott.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Aztán a leírás, alatta a jegyzetek. Mindkettő a hely űrlapjáról való szöveg, megjelenítve: a listák, a linkek és a félkövér mind működnek.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2317,18 +2318,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'A foglalás egy megállón',
|
||||
'help.guide.place-booking.goal': 'Olvasd el a megállóhoz tartozó foglalást, nyisd meg, és tűzz rá egy újat.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Nyisd meg a megállót, amelyikhez a foglalás tartozik. A kártya egy sávot mutat a Megerősítve vagy Függőben szóval és a foglalás nevével.',
|
||||
'Nyisd meg a megállót, amelyikhez a foglalás tartozik. A kártya a Foglalások alatt saját kis kártyaként sorolja fel, a foglalás nevével és a Megerősítve vagy Függőben szóval.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'A sáv viszi a Dátumot, az Időpontot és a Foglalási kódot, meg bármilyen jegyzetet, ami a foglaláson van.',
|
||||
'help.guide.place-booking.step.3': 'Kattints a sávra. A foglalás a térkép fölött nyílik meg.',
|
||||
'A foglaláskártya viszi a Dátumot, az Időpontot és a Foglalási kódot, meg bármilyen jegyzetet, ami a foglaláson van.',
|
||||
'help.guide.place-booking.step.3': 'Kattints a foglaláskártyára. A foglalás a térkép fölött nyílik meg.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'A foglalás alján lévő Szerkesztés megnyitja a saját űrlapját. Ott az Összekapcsolás napi tervvel az, ami egy foglalást egy megállóhoz tűz, és itt már ezt nevezi meg. Zárd be újra az űrlapot.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Egy megállóhoz tartozó új foglalás a napok oszlopában kezdődik: vidd a mutatót a megálló fölé, és kattints a végén lévő + jelre. Az űrlap Új foglalás néven nyílik meg, már hozzákapcsolva.',
|
||||
'Egy megállóhoz tartozó új foglalás a napok oszlopában kezdődik: vidd a mutatót a megálló fölé, és kattints a Foglalás hozzáadása gombra, a végén lévő jegyre. Az űrlap Új foglalás néven nyílik meg, már hozzákapcsolva.',
|
||||
'help.guide.place-booking.result':
|
||||
'A foglalás a megállón lóg: rajta van a kártyán, benne van a napban, és a fájljai itt is fel vannak sorolva a Fájlok alatt.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'A sáv csak annál a megállónál jelenik meg, amelyikhez a foglalás hozzá van tűzve. A megálló nélküli foglalás a Foglalások fülön él.',
|
||||
'A foglaláskártya csak annál a megállónál jelenik meg, amelyikhez a foglalás hozzá van tűzve. A megálló nélküli foglalás a Foglalások fülön él.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Több foglalás is osztozhat egy megállón: az ebéd és a túra, ami ugyanabból a kapuból indul.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2571,7 +2572,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Legfelül a nap időjárása. Az Előrejelzés megnevezi a helyet, amelyre vonatkozik: a nap első megállóját, vagy a szállodát, ahol felébredsz.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'A Foglalások felsorolja az aznapi foglalásokat, mindegyiket a fajtájával, a megállóval, amelyhez tartozik, és az időpontjaival. A zöld azt jelenti, megerősítve, a borostyánsárga még függőben; ez csak kiolvasás, a foglalásokat a Foglalások fülön módosítod.',
|
||||
'A Foglalások felsorolja az aznapi foglalásokat, mindegyiket a fajtájával, a megállóval, amelyhez tartozik, és az időpontjaival. A zöld azt jelenti, megerősítve, a borostyánsárga még függőben, és egy sorra kattintva megnyílik a foglalás.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'A Szállás megmutatja az erre a napra lefoglalt minden éjszakát, a Bejelentkezés és a Kijelentkezés címkével azokon a napokon, amikor megtörténnek, a bejelentkezési ablakkal, a kijelentkezés idejével és a visszaigazolási számmal.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2604,7 +2605,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'A nagy szám a nap hőmérséklete, mellette a minimum és a maximum, és az időjárás szavakkal.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Alatta a címkék: a csapadék valószínűsége, mennyi lesz belőle, a legerősebb szél, meg a napkelte és a napnyugta.',
|
||||
'A tőle jobbra lévő címkék: a csapadék valószínűsége, mennyi lesz belőle, a legerősebb szél, meg a napkelte és a napnyugta.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Legalul a nap óráról órára, minden második órában: az idő, az ikon, a hőmérséklet és a csapadék valószínűsége. Az 50 százalék fölötti óra kékkel van árnyékolva.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2638,18 +2639,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.add-accommodation.step.2':
|
||||
'Nyisd meg az érkezés napját, és kattints a Szállás alatt a Szállás hozzáadása gombra.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Az Alkalmazás napokra megmondja, mely éjszakákat fedi le a tartózkodás: balra a bejelentkezés napja, jobbra a kijelentkezés napja. Az Összes az egész utazást lefedi.',
|
||||
'Az Alkalmazás napokra megmondja, mely éjszakákat fedi le a tartózkodás: a Kezdés a bejelentkezés napja, a Vége a kijelentkezés napja, az Összes pedig az egész utazást lefedi. A párbeszédablak fejléce mutatja az időszakot és az éjszakák számát.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Töltsd ki a Bejelentkezés, az Eddig és a Kijelentkezés mezőt, a foglalás számát pedig írd a Visszaigazolás alá. Mind a négy maradhat üresen.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Válaszd ki a szálláshelyet az utazás helyei közül. A lista fölötti címkék egyetlen kategóriára szűkítik.',
|
||||
'Válaszd ki a szálláshelyet az utazás helyei közül. A lista fölötti Kategória egyetlen kategóriára szűkíti.',
|
||||
'help.guide.add-accommodation.step.6': 'Kattints a Mentés gombra.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'A tartózkodás minden napon látszik, amit lefed, az elsőn Bejelentkezés, az utolsón Kijelentkezés. A szálláshely megállóvá válik a bejelentkezés napján, így a térkép megrajzolja az odavezető utat, és a Foglalások fülön megjelenik egy Szálloda típusú foglalás.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'A választó azon a napon nyílik, ahonnan jöttél, a kijelentkezés a rá következő napon; mentés előtt mindkettő mozgatható.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Add a szállodának létrehozáskor az utazás Hotel kategóriáját, és a lista fölötti címkék egy kattintással a szállodáidra szűkítenek.',
|
||||
'Add a szállodának létrehozáskor a Hotel kategóriát, és a lista fölötti Kategória egy kattintással a szállodáidra szűkít.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Az időpontok mind opcionálisak: a bejelentkezés és kód nélküli tartózkodás is lefedi az éjszakáit, és megrajzolja az útvonalát.',
|
||||
// edit-accommodation
|
||||
@@ -2661,7 +2662,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'A jobb szélén lévő ceruza újra megnyitja a tartózkodást. Az ablak most Szállás szerkesztése feliratot visel.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Javítsd ki a mezők sorát: Bejelentkezés, Eddig, Kijelentkezés és Visszaigazolás. A fölötte lévő napok és az alatta lévő szálláshely is módosítható itt.',
|
||||
'Javítsd ki a Bejelentkezés, Eddig, Kijelentkezés és Visszaigazolás mezőt. A fölöttük lévő napok és az alattuk lévő szálláshely is módosítható itt.',
|
||||
'help.guide.edit-accommodation.step.4': 'Kattints a Mentés gombra.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'A ceruza melletti X lezárja a tartózkodást. Semmit sem kérdez, és a hozzá tartozó Szálloda típusú foglalás is vele megy.',
|
||||
@@ -2677,7 +2678,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'A Foglalások felsorolja a nap foglalásait: azokat, amiknek a dátuma rá esik, és azokat, amik a megállói valamelyikén lógnak.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Egy sor megmutatja, milyen fajta foglalás, a nevét, és ha megállóhoz tartozik, azt a megállót egy pont után. Az időpontjai a jobb szélen ülnek.',
|
||||
'Egy sor megmutatja, milyen fajta foglalás, a nevét, és ha megállóhoz tartozik, azt a megállót szürkével utána. Az időpontjai a jobb szélen ülnek, az állapotpont előtt.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'A szín megmondja, hol tart egy foglalás: a zöld sor meg van erősítve, a borostyánsárga még függőben van. A szállodák nincsenek ebben a listában, nekik lent saját blokkjuk van.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Dibayar olehku',
|
||||
'costs.filter.owed': 'Dipinjami padaku',
|
||||
'costs.addExpense': 'Tambah pengeluaran',
|
||||
'costs.view.label': 'Tampilan',
|
||||
'costs.view.list': 'Daftar',
|
||||
'costs.view.table': 'Tabel',
|
||||
'costs.table.lockedPayer': 'Sudah dibayar seseorang: ubah jumlahnya di pengeluaran agar saldo tetap benar.',
|
||||
'costs.table.lockedCurrency': 'Dimasukkan dalam {currency}: ubah jumlahnya di pengeluaran.',
|
||||
'costs.table.summary': 'Ringkasan',
|
||||
'costs.table.byCategory': 'Kategori',
|
||||
'costs.table.byDate': 'Hari',
|
||||
'costs.table.byPayer': 'Pembayar',
|
||||
'costs.table.byStatus': 'Status',
|
||||
'costs.table.noPayer': 'Belum ada pembayar',
|
||||
'costs.table.paid': 'Dibayar',
|
||||
'costs.table.open': 'Terbuka',
|
||||
'costs.editExpense': 'Edit pengeluaran',
|
||||
'costs.noMatch': 'Tidak ada pengeluaran yang cocok dengan pencarianmu.',
|
||||
'costs.emptyText': 'Belum ada pengeluaran. Tambahkan yang pertama.',
|
||||
|
||||
+59
-56
@@ -1761,7 +1761,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Judul, tanggal, sampul, dan mata uang disunting dari “Perjalananku”, dengan ikon pensil di kartu perjalanan.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Chevron di tepi dalam sebuah kolom melipatnya dan peta mengambil ruangnya; pembatas tipis di sebelah kolom mengubah lebarnya.',
|
||||
'Tab di tepi dalam sebuah kolom melipatnya dan peta mengambil ruangnya; pembatas tipis di sebelah kolom mengubah lebarnya.',
|
||||
'help.ctx.trip.bullet.6': 'Panah batalkan di bilah alat hari mengembalikan perubahan terakhir pada rencana.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Menambahkan anggota',
|
||||
@@ -1830,8 +1830,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Memberi ruang untuk peta',
|
||||
'help.guide.collapse-columns.goal': 'Lipat sebuah kolom atau beri lebar lebih.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Klik chevron di tepi dalam kolom hari untuk melipatnya; peta mengambil ruangnya. Kolom tempat punya chevron yang sama.',
|
||||
'help.guide.collapse-columns.step.2': 'Klik chevron lagi untuk mengembalikan kolom.',
|
||||
'Klik tab di tepi dalam kolom hari, yang berikon panel, untuk melipat kolom itu; peta mengambil ruangnya. Kolom tempat punya tab yang sama.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Kolom yang terlipat meninggalkan sebuah ubin di sudut peta, “Rencana” untuk hari dan “Tempat” untuk tempat. Klik ubin itu untuk mengembalikan kolom.',
|
||||
'help.guide.collapse-columns.step.3': 'Seret pembatas tipis antara kolom dan peta untuk mengubah lebar kolom.',
|
||||
'help.guide.collapse-columns.result': 'Lebarnya diingat; kolom kembali terbuka pada kunjungan berikutnya.',
|
||||
'help.guide.collapse-columns.tip.1': 'Kedua kolom bisa dilipat sekaligus untuk tampilan peta saja.',
|
||||
@@ -1856,15 +1857,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'“Tambah Tempat/Aktivitas” di atas membuka formulir untuk tempat yang Anda ketik atau cari. Selama sebuah hari terbuka, tombol itu berbunyi “Tempat baru”, dan “Ke hari” di sebelahnya membuat tempat langsung pada hari tersebut.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'“Impor file” menerima file .gpx, .kml dan .kmz; “Impor Daftar” menerima daftar Google Maps atau Naver Maps yang dibagikan. Sebuah file juga bisa cukup dijatuhkan ke kolom ini.',
|
||||
'Tombol impor di sebelahnya menawarkan “Impor file”, untuk file .gpx, .kml dan .kmz, dan “Daftar Google” (“Impor Daftar” bila daftar Naver juga aktif) untuk daftar yang dibagikan dari Google Maps atau Naver Maps. Sebuah file juga bisa cukup dijatuhkan ke kolom ini.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Menu tarik-turun beralih antara “Semua”, “Belum direncanakan”, “Direncanakan” dan, setelah sebuah trek diimpor, “Trek”; di bawahnya ada pencarian, filter kategori dan bintang untuk penilaian minimum.',
|
||||
'Di bawahnya ada pencarian, dengan tanda centang di sebelahnya yang memulai pemilihan, dan sebaris filter: “Tampilkan” beralih antara “Semua”, “Belum direncanakan”, “Direncanakan” dan, setelah sebuah trek diimpor, “Trek”, masing-masing dengan jumlahnya; tombol tag menyaring menurut kategori dan bintang menurut penilaian minimum.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Sebuah baris menampilkan gambar, nama dan deskripsi atau alamat. Klik untuk melihat detail tempat, seret ke sebuah hari, atau klik kanan untuk “Sunting”, “+ Hari”, “Buka Situs Web”, “Google Maps”, “Simpan ke Koleksi” dan “Hapus”.',
|
||||
'Sebuah baris menampilkan gambar, nama dan deskripsi atau alamat. Klik untuk melihat detail tempat, seret ke sebuah hari, atau klik kanan (atau klik tiga titiknya) untuk “Sunting”, “+ Hari”, “Buka Situs Web”, “Google Maps”, “Simpan ke Koleksi” dan “Hapus”.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Dengan sebuah hari terbuka, tanda + di ujung baris yang belum direncanakan menaruh tempat itu pada hari tersebut, dan “Direncanakan” hanya mendaftar hari itu, dengan “Tampilkan seluruh perjalanan” untuk melebarkan lagi.',
|
||||
'Dengan sebuah hari terbuka, “+ Hari” di ujung baris yang belum direncanakan menaruh tempat itu pada hari tersebut, dan “Direncanakan” hanya mendaftar hari itu, dengan “Tampilkan seluruh perjalanan” untuk melebarkan lagi.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Tanda centang di ujung kanan baris filter memulai pemilihan: beberapa baris sekaligus mendapat kategori baru, masuk ke sebuah koleksi atau dihapus.',
|
||||
'Tanda centang di sebelah pencarian memulai pemilihan: dari bilah di kaki kolom, beberapa baris sekaligus mendapat kategori baru, masuk ke sebuah koleksi, ditandai sudah dikunjungi atau dihapus.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Membuat tempat',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1872,11 +1873,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Klik “Tambah Tempat/Aktivitas” di atas kolom tempat (“Tempat baru” selama sebuah hari terbuka). Formulir terbuka.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Ketik tempatnya di “Cari tempat...” di atas dan pilih satu hasil. “Nama”, “Alamat”, “Lintang”, “Bujur” dan “Situs web” terisi, dan “Detail tempat” di sebelah kiri menampilkan gambar, jam buka dan sebuah deskripsi tentangnya. Di TREK yang punya kunci Google, “Bukan tempat yang tepat? Cari di Google saja” berada di bawah daftar dan menjalankan pencarian yang sama lewat Google.',
|
||||
'Ketik tempatnya di “Cari tempat...” dan pilih satu hasil. Nama di kepala dialog, “Alamat”, “Lintang”, “Bujur” dan “Situs web” terisi, dan “Detail tempat” di sebelah kiri menampilkan gambar, jam buka dan sebuah deskripsi tentangnya. Di TREK yang punya kunci Google, “Bukan tempat yang tepat? Cari di Google saja” berada di bawah daftar dan menjalankan pencarian yang sama lewat Google. “Tempat tersimpan” di sebelah kanan menawarkan tempat-tempat dari koleksi Anda dengan cara yang sama.',
|
||||
'help.guide.create-place.step.3':
|
||||
'Di “Detail tempat”, klik pada sebuah gambar di bawah “Pilih gambar” menjadikannya gambar tempat itu; “Gunakan teks ini” memindahkan deskripsinya ke formulir.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Periksa kolom-kolomnya: “Nama” wajib; “Deskripsi” dan “Catatan” milik Anda; “Alamat”, “Lintang” dan “Bujur” datang dari pencarian atau diketik; “Kategori” memilih salah satu kategori perjalanan, dan tanda + di sebelahnya membuat kategori baru saat itu juga; “Situs web” menerima tautannya.',
|
||||
'Periksa isi formulirnya: nama ada di kepala dialog dan merupakan satu-satunya kolom wajib; pil “Kategori” di bawahnya memilih salah satu kategori perjalanan, dan tanda + di sebelahnya membuat kategori baru saat itu juga. “Alamat”, “Lintang” dan “Bujur” datang dari pencarian atau diketik; “Deskripsi” dan “Catatan” milik Anda; “Situs web” menerima tautannya.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Klik “Tambah”. Jika tempat dengan nama yang sama sudah ada di perjalanan, formulir mengatakannya dan tombolnya berubah menjadi “Tetap tambahkan”.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1896,7 +1897,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'“Ke hari” membuka formulir yang sama seperti “Tempat baru”, hanya saja tempat itu mendarat pada hari yang dibuka begitu Anda klik “Tambah”.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Tempat yang sudah ada masuk ke hari yang dibuka lewat tanda + di ujung barisnya, atau dengan klik kanan, “+ Hari”.',
|
||||
'Tempat yang sudah ada masuk ke hari yang dibuka lewat “+ Hari” di ujung barisnya, atau dengan klik kanan, “+ Hari”.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Sebaliknya juga bisa, dan tanpa membuka hari lebih dulu: seret baris tempat itu keluar dari kolom lalu jatuhkan ke kartu sebuah hari. Dijatuhkan di antara dua perhentian, ia mendarat tepat di situ.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1908,10 +1909,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Menemukan tempat dalam daftar',
|
||||
'help.guide.filter-places.goal': 'Persempit kolom ke tempat-tempat yang Anda cari.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Menu tarik-turun di atas beralih antara “Semua”, “Belum direncanakan” (belum ada di hari mana pun), “Direncanakan” (ada di sebuah hari) dan “Trek” (trek GPX yang diimpor), masing-masing dengan jumlahnya.',
|
||||
'help.guide.filter-places.step.2': 'Ketik di “Cari tempat...”; daftarnya menyempit sambil Anda mengetik.',
|
||||
'“Tampilkan”, menu tarik-turun di bawah pencarian, beralih antara “Semua”, “Belum direncanakan” (belum ada di hari mana pun), “Direncanakan” (ada di sebuah hari) dan “Trek” (trek GPX yang diimpor), masing-masing dengan jumlahnya.',
|
||||
'help.guide.filter-places.step.2': 'Ketik di “Cari” di bagian atas; daftarnya menyempit sambil Anda mengetik.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'“Semua Kategori” membuka daftar untuk mencentang satu kategori atau lebih, termasuk “Tanpa Kategori”; “Hapus filter” di bagian bawahnya mengembalikannya.',
|
||||
'Tombol tag di sebelah “Tampilkan” mendaftar kategori: centang satu atau lebih, termasuk “Tanpa Kategori”. Tombol itu menghitung apa yang dicentang, dan “Hapus filter” di kaki daftar mencabut semuanya.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Bintang di sebelahnya mengatur penilaian minimum: 5+, 4+ dan seterusnya hanya menampilkan tempat yang Anda beri nilai setidaknya setinggi itu.',
|
||||
'help.guide.filter-places.result':
|
||||
@@ -1926,7 +1927,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Klik kanan barisnya dan pilih “Sunting”, atau buka tempatnya dan klik “Sunting” di detailnya.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Ubah yang Anda perlukan: “Nama”, “Deskripsi”, “Catatan”, “Alamat”, “Lintang” dan “Bujur”, “Kategori”, “Situs web”. Bila dibuka dari sebuah hari, formulir juga punya “Catatan untuk hari ini” serta “Mulai” dan “Selesai” untuk hari itu.',
|
||||
'Ubah yang Anda perlukan: nama dan pil “Kategori” di kepala dialog, “Alamat”, “Lintang” dan “Bujur”, “Deskripsi”, “Catatan” dan “Situs web”. Bila dibuka dari sebuah hari, formulir juga punya “Mulai” dan “Selesai” serta “Catatan untuk hari ini”.',
|
||||
'help.guide.edit-place.step.3': 'Klik “Perbarui”.',
|
||||
'help.guide.edit-place.result':
|
||||
'Perubahan berlaku di mana pun tempat itu muncul: daftar, peta dan setiap hari yang memuatnya.',
|
||||
@@ -1939,22 +1940,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.goal': 'Keluarkan sebuah tempat dari perjalanan untuk selamanya.',
|
||||
'help.guide.delete-place.step.1': 'Klik kanan barisnya dan pilih “Hapus”, atau klik “Hapus” di detail tempat itu.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Konfirmasikan. Jika sebuah malam dipesan di tempat itu, atau sebuah pemesanan terkait dengannya, pertanyaannya mengatakan apa saja yang ikut terbawa.',
|
||||
'Klik “Hapus” di pertanyaan itu. Jika sebuah malam dipesan di tempat itu, atau sebuah pemesanan terkait dengannya, pertanyaannya mengatakan apa saja yang ikut terbawa.',
|
||||
'help.guide.delete-place.result':
|
||||
'Tempat itu hilang dari daftar, peta dan setiap hari; “Batalkan” di bilah alat di atas hari-hari mengembalikannya.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Untuk mengeluarkan tempat dari satu hari saja, gunakan “Hapus dari Hari” pada perhentian itu sebagai gantinya.',
|
||||
'help.guide.delete-place.tip.2': 'Beberapa tempat sekaligus: tanda centang di sebelah filter memulai pemilihan.',
|
||||
'help.guide.delete-place.tip.2': 'Beberapa tempat sekaligus: tanda centang di sebelah pencarian memulai pemilihan.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Mengubah atau menghapus beberapa tempat sekaligus',
|
||||
'help.guide.select-places.goal': 'Rapikan daftar dalam satu kali jalan alih-alih satu per satu.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Klik tanda centang di ujung kanan baris filter. Baris-baris mendapat kotak centang dan muncul sebuah bilah berisi tindakannya.',
|
||||
'Klik tanda centang di sebelah kolom pencarian. Baris-baris mendapat kotak centang bulat, dan sebuah bilah berisi tindakannya naik di kaki kolom.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Centang baris-barisnya, atau “Pilih semua” di bilah itu; bilah itu menghitung apa yang terpilih.',
|
||||
'Klik baris-barisnya untuk mencentangnya. “Pilih semua”, tanda centang ganda di bilah itu, mengambil setiap baris yang tersisa setelah filter.',
|
||||
'help.guide.select-places.step.3':
|
||||
'“Change category” memberi semuanya satu kategori; “Simpan ke Koleksi” menyalinnya ke salah satu koleksi Anda; “Hapus yang dipilih” menghapusnya setelah sebuah konfirmasi.',
|
||||
'help.guide.select-places.step.4': 'Klik tanda centang itu lagi untuk keluar dari pemilihan.',
|
||||
'Bilah itu menghitung tempat yang dicentang. “Ubah kategori” memberi semuanya satu kategori; “Simpan ke Koleksi” menyalinnya ke salah satu koleksi Anda; “Hapus yang dipilih” menghapusnya setelah sebuah konfirmasi.',
|
||||
'help.guide.select-places.step.4': '“Selesai”, tanda X di ujung bilah, mengakhiri pemilihan.',
|
||||
'help.guide.select-places.result':
|
||||
'Perubahan berlaku untuk setiap tempat yang terpilih; penghapusan bisa dibatalkan dari bilah alat di atas hari-hari.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1964,7 +1965,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'Mengimpor tempat dari file GPX, KML atau KMZ',
|
||||
'help.guide.import-places-file.goal': 'Masukkan apa yang diekspor Google My Maps, Google Earth atau pelacak GPS.',
|
||||
'help.guide.import-places-file.step.1': 'Klik “Impor file”, atau jatuhkan filenya di mana saja pada kolom tempat.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Klik tombol impor di sebelah tombol tambah dan pilih “Impor file”, atau jatuhkan filenya di mana saja pada kolom tempat.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Pilih filenya atau seret ke dalam kotak. Untuk GPX, centang apa yang akan diimpor: “Titik jalan”, “Rute”, “Trek (dengan geometri jalur)”; untuk KML dan KMZ, “Titik (Placemarks)” dan “Jalur (LineStrings)”.',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1979,7 +1981,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Mengimpor daftar Google Maps atau Naver Maps yang dibagikan',
|
||||
'help.guide.import-places-list.goal': 'Ubah tautan daftar yang dibagikan menjadi tempat.',
|
||||
'help.guide.import-places-list.step.1': 'Klik “Impor Daftar” dan pilih “Daftar Google” atau “Daftar Naver”.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Klik tombol impor di sebelah tombol tambah dan pilih “Daftar Google”. Bila daftar Naver juga aktif, entri itu bernama “Impor Daftar” dan dialognya menanyakan yang mana dari keduanya.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Tempelkan tautan berbagi daftar itu. Tautan rute Google Maps juga bisa: perhentiannya menjadi tempat, dalam urutan berkendara.',
|
||||
'help.guide.import-places-list.step.3': 'Klik “Impor”.',
|
||||
@@ -1997,13 +2000,13 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Bilah alat di atas: “Ekspor” (PDF, kalender, GPX), “Expand all days” / “Collapse all days”, panah pembatalan, “Atur ulang hari” dan “Tampilkan semua rute pemesanan”.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Sebuah kartu hari: nomor, cuaca, judul, tanggal dan biaya hari itu di kepalanya; klik kepala kartu untuk membuka hari itu, tanda panahnya melipatnya. “Transportasi umum”, “Tambah transportasi” dan “Tambah Catatan” juga ada di kepala kartu.',
|
||||
'Sebuah kartu hari: sebuah ubin dengan nomor hari dan prakiraan cuaca, judul dan tanggal, serta pil untuk malam yang dipesan, mobil sewaan dan biaya hari itu. Klik kepala kartu untuk membuka hari itu, tanda panahnya melipatnya, dan tanda + membuka menu: “Tambah tempat ke hari ini”, “Tambah akomodasi”, “Tambah transportasi”, “Transportasi umum” dan “Tambah Catatan”.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Di dalam sebuah hari: perhentian secara berurutan, masing-masing dengan gambar, nama, waktu dan sebuah kunci pada gambarnya; catatan; pemesanan yang termasuk hari itu; dan di antara perhentian, waktu tempuh setiap ruas.',
|
||||
'Di dalam sebuah hari: perhentian secara berurutan, masing-masing dengan gambar, nama, waktu, sebuah kunci pada gambarnya dan pemesanan yang disematkan padanya; catatan; pemesanan dan transportasi hari itu, diberi warna menurut jenisnya; dan di antara perhentian, waktu tempuh setiap ruas. Setiap baris punya menu tiga titik, sama dengan yang dibuka klik kanan.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Di bawah perhentian ada bilah rute: “Rute” menggambar hari itu di peta, “Optimalkan” mengurutkan perhentian, “Berkendara” / “Jalan kaki” menetapkan moda perjalanan hari itu, “Buka di Google Maps” dan “Buka di CoMaps” menyerahkan hari itu.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Tempat masuk ke sebuah hari dengan menyeret baris dari kolom tempat, dengan tanda + pada baris itu, dengan “Tambah tempat ke hari ini” pada hari yang kosong, atau dari detail tempat.',
|
||||
'Tempat masuk ke sebuah hari dengan menyeret baris dari kolom tempat, dengan “+ Hari” pada baris itu, dengan “Tambah tempat ke hari ini” dari tanda + hari itu atau pada hari yang kosong, atau dari detail tempat.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'“Total Biaya” di bawah menjumlahkan setiap perhentian dan pemesanan yang berharga, dalam mata uang perjalanan.',
|
||||
// read-day-plan
|
||||
@@ -2011,11 +2014,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.goal':
|
||||
'Ketahui apa yang diberitahukan setiap bagian kartu hari sebelum Anda mengubah apa pun.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Kepala kartu: nomor hari, prakiraan cuaca untuk hari itu, “Hari 1” atau judul yang Anda berikan, tanggal dan biaya hari itu. Klik kepala kartu untuk membuka hari itu (panel “Detail hari” terbuka di atas peta); tanda panah di kanan melipat dan membuka kartu.',
|
||||
'Kepala kartu: sebuah ubin dengan nomor hari dan prakiraan cuaca, lalu “Hari 1” atau judul yang Anda berikan, tanggal, dan pil untuk malam yang dipesan (check-in atau check-out), mobil sewaan dan biaya hari itu. Klik kepala kartu untuk membuka hari itu (panel “Detail hari” terbuka di atas peta); tanda + di kanan menambahkan tempat, penginapan, transportasi, koneksi transportasi umum atau catatan, dan tanda panah melipat kartu.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Sebuah perhentian: pegangan di kiri menyeretnya, gambarnya membawa kunci untuk optimasi rute, lalu nama, deskripsi dan, jika diisi, “Catatan untuk hari ini”. Sebuah lencana waktu menampilkan “Mulai” dan “Selesai” bila perhentian itu punya keduanya; panah yang muncul di ujung kanannya memindahkannya ke atas atau ke bawah.',
|
||||
'Sebuah perhentian: pegangan di kiri menyeretnya, gambarnya membawa kunci untuk optimasi rute, lalu nama, sebuah lencana waktu bila perhentian itu punya “Mulai” dan “Selesai”, deskripsi dan, jika diisi, “Catatan untuk hari ini”. Panah di ujung kanannya memindahkannya ke atas atau ke bawah, dan tiga titik membuka menunya.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Sebuah pemesanan pada hari itu: sebuah reservasi pada perhentian menandai perhentian itu “Reservasi dikonfirmasi” atau “Reservasi tertunda”, dan transportasi tampil sebagai “Keberangkatan” atau “Kedatangan” dengan waktu dan rutenya, dengan sakelar kecil yang menggambar rute itu di peta.',
|
||||
'Pemesanan pada sebuah perhentian duduk di atasnya sebagai lencana “Reservasi”, hijau bila sudah dikonfirmasi dan amber selama masih tertunda, dengan waktu dan penyedianya; klik lencana itu untuk membuka pemesanannya, dan tombol rute di sebelahnya menggambar rutenya. Transportasi menjadi barisnya sendiri, diberi warna menurut jenisnya, dengan “Keberangkatan” atau “Kedatangan” dan waktunya. Klik sebuah pemesanan dan detailnya terbuka; “Sunting” di sana mengubahnya.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Di antara dua perhentian, penghubungnya menyebutkan berapa lama ruas itu dan berapa jauh, dalam moda perjalanan hari itu; klik untuk mengubah moda ruas yang satu itu.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2023,7 +2026,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Setiap simbol pada kartu punya arti; panduan di bawah mengubah masing-masing dari simbol itu.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Klik kanan sebuah perhentian untuk menunya: “Sunting”, “Hapus dari hari”, “Buka Situs Web”, aplikasi navigasi (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), “Simpan ke Koleksi”, “Hapus”.',
|
||||
'Klik kanan sebuah perhentian, atau klik tiga titiknya, untuk menunya: “Sunting”, “Hapus dari hari”, “Buka Situs Web”, aplikasi navigasi (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), “Simpan ke Koleksi”, “Hapus”.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Arahkan kursor ke sebuah perhentian dan “Tambah pemesanan” muncul di ujungnya: reservasi yang dibuat di situ terikat pada perhentian ini di hari ini.',
|
||||
// place-onto-day
|
||||
@@ -2033,9 +2036,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Seret sebuah baris dari kolom tempat ke kartu hari. Jatuhkan di antara dua perhentian untuk menaruhnya tepat di sana, atau di mana saja pada kartu untuk menambahkannya di akhir.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Tanpa menyeret: buka hari itu dengan mengklik kepalanya, lalu klik tanda + di ujung baris tempat, atau klik kanan baris itu dan pilih “+ Hari”.',
|
||||
'Tanpa menyeret: buka hari itu dengan mengklik kepalanya, lalu klik “+ Hari” di ujung baris tempat, atau klik kanan baris itu dan pilih “+ Hari”.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Pada hari yang kosong, “Tambah tempat ke hari ini” membuka formulir tempat, dan tempat baru itu langsung mendarat di hari tersebut.',
|
||||
'“Tambah tempat ke hari ini”, di menu + hari itu atau pada hari yang kosong, membuka formulir tempat, dan tempat baru itu langsung mendarat di hari tersebut.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Dari detail sebuah tempat, “Tambah ke Hari” menanyakan hari mana; selama sebuah hari terbuka, “Ke hari” di kolom tempat membuat tempat baru pada hari yang terbuka itu.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2065,7 +2068,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Tetapkan kapan sebuah perhentian mulai dan selesai, supaya hari itu terbaca seperti jadwal.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Klik kanan perhentian dan pilih “Sunting”. Dibuka dari hari itu, formulirnya punya “Mulai” dan “Selesai” di bagian bawah.',
|
||||
'Klik kanan perhentian, atau klik tiga titiknya, dan pilih “Sunting”. Dibuka dari hari itu, formulirnya punya “Mulai” dan “Selesai” untuk hari itu, tepat di bawah lokasi.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Isi “Mulai” dan, kalau mau, “Selesai”. “Waktu tumpang tindih dengan:” memperingatkan bahwa perhentian berwaktu lain pada hari itu bertumpang tindih; “Selesai” yang lebih awal dari “Mulai” menghalangi “Perbarui”.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2105,13 +2108,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Menambahkan catatan pada sebuah hari',
|
||||
'help.guide.day-note.goal': 'Simpan sebuah pengingat, nomor tiket atau rencana cadangan langsung di dalam hari itu.',
|
||||
'help.guide.day-note.step.1': 'Klik “Tambah Catatan” di kepala kartu hari.',
|
||||
'help.guide.day-note.step.1': 'Klik tanda + di kepala kartu hari dan pilih “Tambah Catatan”.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Beri nama di bawah “Catatan”, itulah yang ditampilkan kartu hari, dan tulis selebihnya di bawah “Catatan Harian”. Bilah “Pemformatan” di atasnya mengatur bentuk teks (“Tebal”, “Daftar berpoin”, “Daftar bernomor”, “Tautan”, “Kutipan”) dan “Pratinjau” di sebelah kiri memperlihatkan kartu yang akan terbentuk darinya.',
|
||||
'Ketik nama catatan di kepala dialog, di tempat bertuliskan “Catatan”; itulah yang ditampilkan kartu hari. Tulis selebihnya di bawah “Catatan Harian”: bilah alat di atasnya mengatur bentuk teks (tebal, daftar, tautan, kutipan), dan “Pratinjau” di sebelah kiri memperlihatkan baris yang akan terbentuk darinya.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Pilih sebuah “Ikon” dan sebuah “Warna”, supaya catatan menonjol di antara perhentian, lalu “Tambah”.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Catatan duduk di dalam hari itu seperti sebuah perhentian: seret ke tempatnya, klik kanan untuk “Sunting” dan “Hapus”.',
|
||||
'Catatan duduk di dalam hari itu seperti sebuah perhentian: seret ke tempatnya, dan klik kanan atau pakai tiga titiknya untuk “Sunting” dan “Hapus”.',
|
||||
'help.guide.day-note.result':
|
||||
'Catatan adalah bagian dari hari itu, termasuk di PDF; catatan berwaktu tersusun bersama perhentian berwaktu.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2161,15 +2164,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Ketahui di mana sebuah pemesanan muncul begitu ia ada, dan layar mana yang membuatnya.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Sebuah transportasi (penerbangan, kereta, feri, bus, mobil) tampil pada hari keberangkatannya sebagai “Keberangkatan” dan pada hari kedatangannya sebagai “Kedatangan”, dengan waktu dan rute; yang berlangsung beberapa hari membentang melewati hari-hari di antaranya.',
|
||||
'Sebuah transportasi (penerbangan, kereta, feri, bus, mobil) adalah baris yang diberi warna menurut jenisnya: “Keberangkatan” pada hari ia berangkat, “Kedatangan” pada hari ia tiba, dengan waktu dan rute; yang berlangsung beberapa hari membentang melewati hari-hari di antaranya. Klik barisnya dan pemesanannya terbuka.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Reservasi yang terikat pada sebuah perhentian (sebuah restoran, sebuah tur) menandai perhentian itu “Reservasi dikonfirmasi” atau “Reservasi tertunda”; pemesanan yang punya hari tetapi tanpa perhentian menjadi barisnya sendiri di hari itu.',
|
||||
'Reservasi yang terikat pada sebuah perhentian (sebuah restoran, sebuah tur) menjadi lencana “Reservasi” pada perhentian itu, hijau bila dikonfirmasi dan amber selama tertunda, dengan waktunya; pemesanan yang punya hari tetapi tanpa perhentian menjadi barisnya sendiri di hari itu.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Bermalam di hotel adalah akomodasi: ia duduk di panel detail hari di bawah “Akomodasi”, dari “Check-in” sampai “Check-out”, dan rute setiap hari tersebut dimulai dari sana.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Di peta, sakelar pada baris transportasi menggambar rutenya; “Tampilkan semua rute pemesanan” di bilah alat menggambar semuanya.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Membuatnya: “Tambah pemesanan” pada perhentian yang disorot kursor, “Tambah transportasi” dan “Transportasi umum” di kepala kartu hari, dan tab “Pemesanan” serta “Transportasi” untuk daftar lengkap dengan impor dan file.',
|
||||
'Membuatnya: “Tambah pemesanan” pada perhentian yang disorot kursor, “Tambah transportasi” dan “Transportasi umum” di menu + hari itu, dan tab “Pemesanan” serta “Transportasi” untuk daftar lengkap dengan impor dan file.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Satu pemesanan, satu tempat di dalam rencana; tab itu berisi pemesanan yang sama dalam bentuk daftar.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2200,24 +2203,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Klik sebuah baris di kolom tempat, sebuah perhentian di dalam sebuah hari, atau sebuah penanda di peta, dan kartu terbuka di atas peta. Memilihnya di dalam sebuah hari memberi tahu kartu itu perhentian mana yang Anda maksud, dan itulah yang membawa serta peserta perhentian tersebut beserta pemesanannya.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Bagian kepala membawa gambar bulat, nama, kategori, alamat dan koordinat. Klik gambarnya untuk memakai gambar Anda sendiri, klik ganda namanya untuk mengganti nama tempat di tempat itu juga, dan tanda X di sebelah kanan menutup kartu.',
|
||||
'Bagian kepala membawa gambar bulat, nama, alamat dalam satu baris dan pil untuk apa yang diketahui: buka atau tutup, kategori, harga, nomor telepon dan koordinat. Klik gambarnya untuk memakai gambar Anda sendiri, klik ganda namanya untuk mengganti nama tempat di tempat itu juga, dan tanda X di sebelah kanan menutup kartu.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Di bawahnya: harganya jika ada, bintang yang diberikan setiap pelancong kepada tempat itu, deskripsi dan catatan, serta “Catatan untuk hari ini” bila perhentian itu membawanya.',
|
||||
'Di bawahnya: bintang yang diberikan setiap pelancong kepada tempat itu, deskripsi dan catatan, serta “Catatan untuk hari ini” bila perhentian itu membawanya.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'“Jam Buka”, “Warna jalur”, “Statistik Jalur” dan “File” menyusul, sejauh berlaku. “File” menerima apa pun dari folder Anda dan juga mendaftar apa yang menggantung pada pemesanan perhentian ini.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Baris di bagian bawah: “Tambah ke Hari” atau “Hapus dari Hari” selama sebuah hari terbuka, lalu “Simpan ke Koleksi”, “Navigasi”, “Buka Situs Web”, “Sunting” dan “Hapus”.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Tempat yang dipilih dari pencarian membawa apa yang diketahui indeks TREK atau OpenStreetMap tentangnya: cincin hijau “Buka” atau merah “Tutup” di sekeliling gambar, dinilai menurut jam tempat itu sendiri, nomor telepon di bawah bintang, “Jam Buka” lebih ke bawah dengan jam hari itu pada barisnya dan sepekan penuh di balik satu klik, serta situs webnya di balik “Buka Situs Web”. Penilaian Google hanya tampil pada tempat yang ditemukan lewat Google, di TREK dengan kunci Google.',
|
||||
'Tempat yang dipilih dari pencarian membawa apa yang diketahui indeks TREK atau OpenStreetMap tentangnya: “Buka” atau “Tutup” di antara pil di bagian kepala, dengan cincin hijau atau merah di sekeliling gambar, dinilai menurut jam tempat itu sendiri, nomor teleponnya juga sebagai pil, “Jam Buka” lebih ke bawah dengan jam hari itu pada barisnya dan sepekan penuh di balik satu klik, serta situs webnya di balik “Buka Situs Web”. Penilaian Google hanya tampil pada tempat yang ditemukan lewat Google, di TREK dengan kunci Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Apa yang kartu ceritakan tentang sebuah tempat',
|
||||
'help.guide.read-place.goal': 'Baca semua yang perjalanan ketahui tentang satu tempat, dalam satu kartu.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Di kolom hari, klik perhentian yang ingin Anda baca. Kartu terbuka di atas peta dan perhentian itu tetap ditandai pada harinya.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Bagian kepala: gambar bulat, nama, alamat dan koordinat persisnya. Cincin hijau dengan “Buka”, atau merah dengan “Tutup”, di sekeliling gambar mengatakan apakah tempat itu sedang buka saat ini, menurut jamnya sendiri, begitu TREK mengetahui jam bukanya. Tanda X di sebelah kanan menutup kartu lagi.',
|
||||
'Bagian kepala: gambar bulat, nama dan alamat dalam satu baris; tooltip-nya memuat alamat lengkap. Pil di bawahnya mengatakan apakah tempat itu “Buka” atau “Tutup” saat ini, menurut jamnya sendiri, dengan cincin hijau atau merah yang serasi di sekeliling gambar, dan membawa nomor telepon, yang dengan satu klik diserahkan ke aplikasi telepon Anda, serta koordinat persisnya. Tanda X di sebelah kanan menutup kartu lagi.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Di bawahnya bintang yang diberikan setiap pelancong kepada tempat itu, dengan rata-ratanya dan berapa banyak yang memilih. “Belum dinilai” selama belum ada yang memberi. Tepat di bawahnya, nomor telepon bila tempat itu memilikinya: klik padanya menyerahkan nomor itu ke aplikasi telepon Anda.',
|
||||
'“Peringkat” muncul pertama di bawah bagian kepala: bintang yang diberikan setiap pelancong kepada tempat itu, dengan rata-ratanya dan berapa banyak yang memilih. “Belum dinilai” selama belum ada yang memberi.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Lalu deskripsinya dan, di bawahnya, catatannya. Keduanya adalah teks dari formulir tempat, ditampilkan apa adanya: daftar, tautan dan huruf tebal semuanya bekerja.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2313,18 +2316,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.goal':
|
||||
'Baca pemesanan yang menjadi milik sebuah perhentian, buka, dan sematkan yang baru padanya.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Buka perhentian yang memiliki pemesanan itu. Kartu menampilkan sebuah bilah dengan “Dikonfirmasi” atau “Tertunda” dan nama pemesanannya.',
|
||||
'Buka perhentian yang memiliki pemesanan itu. Kartu mendaftarnya di bawah “Pemesanan” sebagai kartu kecil tersendiri, dengan nama pemesanan dan “Dikonfirmasi” atau “Tertunda”.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Bilah itu membawa “Tanggal”, “Waktu” dan “Kode Pemesanan”, serta catatan apa pun yang dimiliki pemesanan itu.',
|
||||
'help.guide.place-booking.step.3': 'Klik bilahnya. Pemesanan itu terbuka di atas peta.',
|
||||
'Kartu pemesanan itu membawa “Tanggal”, “Waktu” dan “Kode Pemesanan”, serta catatan apa pun yang dimiliki pemesanan itu.',
|
||||
'help.guide.place-booking.step.3': 'Klik kartu pemesanan itu. Pemesanan itu terbuka di atas peta.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'“Sunting” di kaki pemesanan membuka formulirnya sendiri. “Hubungkan ke jadwal harian” di sana adalah yang menyematkan sebuah pemesanan ke sebuah perhentian, dan di sini sudah menyebut perhentian ini. Tutup formulirnya lagi.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Pemesanan baru untuk sebuah perhentian dimulai di kolom hari: arahkan kursor ke perhentian itu dan klik tanda + di ujungnya. Formulir terbuka sebagai “Reservasi Baru”, sudah terhubung dengannya.',
|
||||
'Pemesanan baru untuk sebuah perhentian dimulai di kolom hari: arahkan kursor ke perhentian itu dan klik “Tambah pemesanan”, tiket di ujungnya. Formulir terbuka sebagai “Reservasi Baru”, sudah terhubung dengannya.',
|
||||
'help.guide.place-booking.result':
|
||||
'Pemesanan itu menggantung pada perhentian tersebut: ada di kartu, ada di hari itu, dan file-filenya juga terdaftar di bawah “File” di sini.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Bilah itu hanya tampil untuk perhentian tempat pemesanannya disematkan. Pemesanan tanpa perhentian tinggal di tab “Pesan”.',
|
||||
'Kartu pemesanan itu hanya tampil untuk perhentian tempat pemesanannya disematkan. Pemesanan tanpa perhentian tinggal di tab “Pesan”.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Beberapa pemesanan bisa berbagi satu perhentian: makan siangnya dan turnya yang berangkat dari pintu yang sama.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2572,7 +2575,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Di atas, cuaca hari itu. “Prakiraan untuk” menyebut tempat yang dimaksud: perhentian pertama hari itu, atau hotel tempat Anda bangun.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'“Reservasi” mendaftar pemesanan hari itu, masing-masing dengan jenisnya, perhentian yang memilikinya dan waktunya. Hijau berarti dikonfirmasi, amber masih tertunda; ini hanya bacaan, pemesanan diubah di tab “Pemesanan”.',
|
||||
'“Reservasi” mendaftar pemesanan hari itu, masing-masing dengan jenisnya, perhentian yang memilikinya dan waktunya. Hijau berarti dikonfirmasi, amber masih tertunda, dan satu klik pada sebuah baris membuka pemesanannya.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'“Akomodasi” menampilkan setiap malam yang dipesan pada hari ini, dengan “Check-in” dan “Check-out” pada hari terjadinya, jendela check-in, waktu check-out dan nomor konfirmasi.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2607,7 +2610,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Angka besar adalah suhu hari itu, di sebelahnya suhu terendah dan tertinggi, serta kondisinya dalam kata-kata.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Chip di bawahnya: peluang hujan, seberapa banyak hujannya, angin terkuat, serta matahari terbit dan terbenam.',
|
||||
'Pil di sebelah kanannya: peluang hujan, seberapa banyak hujannya, angin terkuat, serta matahari terbit dan terbenam.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Di bagian bawah, hari itu jam demi jam, setiap dua jam: waktunya, ikonnya, suhunya dan peluang hujannya. Jam dengan lebih dari 50% diberi warna biru.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2641,18 +2644,18 @@ const help: TranslationStrings = {
|
||||
'Properti itu harus lebih dulu menjadi tempat dalam perjalanan. Buat di kolom tempat seperti Anda membuat tempat lain: pemilihnya hanya menawarkan apa yang sudah ada.',
|
||||
'help.guide.add-accommodation.step.2': 'Buka hari kedatangan Anda dan klik “Tambah akomodasi” di bawah “Akomodasi”.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'“Terapkan ke hari” menentukan malam mana yang dicakup masa menginap itu: hari check-in di sebelah kiri, hari check-out di sebelah kanan. “Semua” mencakup seluruh perjalanan.',
|
||||
'“Terapkan ke hari” menentukan malam mana yang dicakup masa menginap itu: “Mulai” adalah hari check-in, “Selesai” hari check-out, dan “Semua” mencakup seluruh perjalanan. Kepala dialog menampilkan rentangnya dan jumlah malamnya.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Isi “Check-in”, “Sampai” dan “Check-out”, dan tulis nomor pemesanan di bawah “Konfirmasi”. Keempatnya boleh tetap kosong.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Pilih propertinya dari tempat-tempat perjalanan. Chip di atas daftar mempersempitnya ke satu kategori.',
|
||||
'Pilih propertinya dari tempat-tempat perjalanan. “Kategori” di atas daftar mempersempitnya ke satu kategori.',
|
||||
'help.guide.add-accommodation.step.6': 'Klik “Simpan”.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Masa menginap itu tampil pada setiap hari yang dicakupnya, “Check-in” pada hari pertama dan “Check-out” pada hari terakhir. Propertinya menjadi perhentian pada hari check-in, sehingga peta menggambar jalan ke sana, dan sebuah pemesanan “Akomodasi” muncul di tab “Pemesanan”.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Pemilih terbuka pada hari asal Anda, dengan check-out sehari sesudahnya; keduanya bisa digeser sebelum Anda menyimpan.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Beri hotel itu kategori Hotel dari perjalanan saat Anda membuatnya, dan chip di atas daftar mempersempitnya ke hotel-hotel Anda dengan satu klik.',
|
||||
'Beri hotel itu kategori Hotel saat Anda membuatnya, dan “Kategori” di atas daftar mempersempitnya ke hotel-hotel Anda dengan satu klik.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Waktunya semua opsional: masa menginap tanpa check-in dan tanpa kode tetap mencakup malam-malamnya dan tetap menggambar rutenya.',
|
||||
// edit-accommodation
|
||||
@@ -2664,7 +2667,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Ikon pensil di kanannya membuka masa menginap itu lagi. Pop-up sekarang berbunyi “Edit akomodasi”.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Perbaiki deretan isian itu: “Check-in”, “Sampai”, “Check-out” dan “Konfirmasi”. Hari-hari di atasnya dan properti di bawahnya juga bisa diubah di sini.',
|
||||
'Perbaiki “Check-in”, “Sampai”, “Check-out” dan “Konfirmasi”. Hari-hari di atasnya dan properti di bawahnya juga bisa diubah di sini.',
|
||||
'help.guide.edit-accommodation.step.4': 'Klik “Simpan”.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'Tanda X di sebelah pensil mengakhiri masa menginap itu. Ia tidak bertanya apa pun, dan pemesanan “Akomodasi” yang menyertainya ikut hilang.',
|
||||
@@ -2681,7 +2684,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'“Reservasi” mendaftar pemesanan hari itu: yang bertanggal pada hari itu, dan yang menggantung pada salah satu perhentiannya.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Sebuah baris menampilkan jenis pemesanannya, namanya dan, bila ia milik sebuah perhentian, perhentian itu setelah sebuah titik. Waktunya berada di ujung kanan.',
|
||||
'Sebuah baris menampilkan jenis pemesanannya, namanya dan, bila ia milik sebuah perhentian, perhentian itu berwarna abu-abu setelahnya. Waktunya berada di ujung kanan, sebelum titik status.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Warnanya mengatakan posisi sebuah pemesanan: baris hijau sudah dikonfirmasi, baris amber masih tertunda. Hotel tidak ada dalam daftar ini, mereka punya blok sendiri di bawah.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Pagate da me',
|
||||
'costs.filter.owed': 'Mi devono',
|
||||
'costs.addExpense': 'Aggiungi spesa',
|
||||
'costs.view.label': 'Vista',
|
||||
'costs.view.list': 'Elenco',
|
||||
'costs.view.table': 'Tabella',
|
||||
'costs.table.lockedPayer': 'Pagato da qualcuno: cambia l’importo nella spesa, così i saldi restano giusti.',
|
||||
'costs.table.lockedCurrency': 'Inserito in {currency}: cambia l’importo nella spesa.',
|
||||
'costs.table.summary': 'Riepilogo',
|
||||
'costs.table.byCategory': 'Categoria',
|
||||
'costs.table.byDate': 'Giorno',
|
||||
'costs.table.byPayer': 'Pagante',
|
||||
'costs.table.byStatus': 'Stato',
|
||||
'costs.table.noPayer': 'Ancora nessun pagante',
|
||||
'costs.table.paid': 'Pagato',
|
||||
'costs.table.open': 'Aperto',
|
||||
'costs.editExpense': 'Modifica spesa',
|
||||
'costs.noMatch': 'Nessuna spesa corrisponde alla ricerca.',
|
||||
'costs.emptyText': 'Ancora nessuna spesa. Aggiungi la prima.',
|
||||
|
||||
+58
-56
@@ -1745,7 +1745,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Titolo, date, copertina e valuta si modificano da I miei viaggi, con la matita sulla scheda del viaggio.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'I chevron sul bordo interno di una colonna la ripiegano e la mappa prende lo spazio; il divisore sottile accanto a una colonna ne cambia la larghezza.',
|
||||
'La linguetta sul bordo interno di una colonna la ripiega e la mappa prende lo spazio; il divisore sottile accanto a una colonna ne cambia la larghezza.',
|
||||
'help.ctx.trip.bullet.6':
|
||||
'La freccia di annullamento nella barra degli strumenti dei giorni ritira l’ultima modifica al programma.',
|
||||
// add-member
|
||||
@@ -1813,8 +1813,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Fare spazio alla mappa',
|
||||
'help.guide.collapse-columns.goal': 'Ripiega una colonna o dalle più larghezza.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Clicca il chevron sul bordo interno della colonna dei giorni per ripiegarla; la mappa prende lo spazio. La colonna dei luoghi ha lo stesso chevron.',
|
||||
'help.guide.collapse-columns.step.2': 'Clicca di nuovo il chevron per riportare la colonna.',
|
||||
'Clicca la linguetta sul bordo interno della colonna dei giorni, quella con l’icona del pannello, per ripiegare la colonna; la mappa prende lo spazio. La colonna dei luoghi ha la stessa linguetta.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Una colonna ripiegata lascia una tessera nell’angolo della mappa, Programma per i giorni e Luoghi per i luoghi. Cliccala per riportare la colonna.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Trascina il divisore sottile tra una colonna e la mappa per cambiare la larghezza della colonna.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1841,15 +1842,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Aggiungi Luogo/Attività in alto apre il modulo per un luogo che digiti o cerchi. Finché un giorno è aperto il pulsante dice Nuovo luogo, e Al giorno accanto crea il luogo direttamente su quel giorno.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importa file accetta file .gpx, .kml e .kmz; Importa lista accetta una lista condivisa di Google Maps o Naver Maps. Un file si può anche semplicemente lasciar cadere sulla colonna.',
|
||||
'Il pulsante di importazione accanto offre Importa file, per file .gpx, .kml e .kmz, e Lista Google (Importa lista dove sono attive anche le liste Naver) per una lista condivisa da Google Maps o Naver Maps. Un file si può anche semplicemente lasciar cadere sulla colonna.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Il menu a tendina passa tra Tutti, Non pianificati, Pianificati e, una volta importata una traccia, Tracce; sotto stanno la ricerca, il filtro di categoria e la stella per una valutazione minima.',
|
||||
'Sotto di loro la ricerca, con accanto la spunta che avvia una selezione, e una riga di filtri: Mostra passa tra Tutti, Non pianificati, Pianificati e, una volta importata una traccia, Tracce, ognuno con il suo conteggio; il pulsante etichetta filtra per categoria e la stella per una valutazione minima.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Una riga mostra immagine, nome e descrizione o indirizzo. Cliccala per i dettagli del luogo, trascinala su un giorno, oppure fai clic destro per Modifica, + Giorno, Apri sito web, Google Maps, Salva nella raccolta ed Elimina.',
|
||||
'Una riga mostra immagine, nome e descrizione o indirizzo. Cliccala per i dettagli del luogo, trascinala su un giorno, oppure fai clic destro (o clicca i suoi tre puntini) per Modifica, + Giorno, Apri sito web, Google Maps, Salva nella raccolta ed Elimina.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Con un giorno aperto, un + in fondo a una riga non pianificata mette il luogo su quel giorno, e Pianificati elenca solo quel giorno, con Mostra tutto il viaggio per allargare di nuovo.',
|
||||
'Con un giorno aperto, + Giorno in fondo a una riga non pianificata mette il luogo su quel giorno, e Pianificati elenca solo quel giorno, con Mostra tutto il viaggio per allargare di nuovo.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'La spunta all’estremità destra della riga dei filtri avvia una selezione: più righe insieme ricevono una nuova categoria, finiscono in una raccolta o vengono eliminate.',
|
||||
'La spunta accanto alla ricerca avvia una selezione: dalla barra in fondo alla colonna, più righe insieme ricevono una nuova categoria, finiscono in una raccolta, vengono segnate come visitate o vengono eliminate.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Creare un luogo',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1857,11 +1858,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Clicca Aggiungi Luogo/Attività in cima alla colonna dei luoghi (Nuovo luogo finché un giorno è aperto). Il modulo si apre.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Digita il luogo in Cerca luoghi... in alto e scegli un risultato. Nome, Indirizzo, Latitudine, Longitudine e Sito web si riempiono, e Dettagli del luogo a sinistra mostra immagini, gli orari di apertura e una descrizione. Su un TREK con chiave Google, Non è il posto giusto? Cerca su Google sta sotto la lista e rilancia la stessa ricerca tramite Google.',
|
||||
'Digita il luogo in Cerca luoghi... e scegli un risultato. Il nome nell’intestazione della finestra, Indirizzo, Latitudine, Longitudine e Sito web si riempiono, e Dettagli del luogo a sinistra mostra immagini, gli orari di apertura e una descrizione. Su un TREK con chiave Google, Non è il posto giusto? Cerca su Google sta sotto la lista e rilancia la stessa ricerca tramite Google. Luoghi salvati a destra offre allo stesso modo i luoghi delle tue raccolte.',
|
||||
'help.guide.create-place.step.3':
|
||||
'In Dettagli del luogo, un clic su un’immagine sotto Scegli un’immagine la rende l’immagine del luogo; Usa questo testo porta la descrizione nel modulo.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Controlla i campi: Nome è obbligatorio; Descrizione e Note sono tue; Indirizzo, Latitudine e Longitudine arrivano dalla ricerca o si digitano; Categoria sceglie una delle categorie del viaggio, e il + accanto ne crea una nuova sul momento; Sito web prende il link.',
|
||||
'Controlla cosa contiene il modulo: il nome sta nell’intestazione della finestra ed è l’unico campo obbligatorio; la pillola Categoria sotto di esso sceglie una delle categorie del viaggio, e il + accanto ne crea una nuova sul momento. Indirizzo, Latitudine e Longitudine arrivano dalla ricerca o si digitano; Descrizione e Note sono tue; Sito web prende il link.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Clicca Aggiungi. Se un luogo con lo stesso nome è già nel viaggio, il modulo lo dice e il pulsante diventa Aggiungi comunque.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1880,7 +1881,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Al giorno apre lo stesso modulo di Nuovo luogo, solo che il luogo finisce sul giorno aperto nel momento in cui clicchi Aggiungi.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Un luogo che esiste già va sul giorno aperto con il + in fondo alla sua riga, oppure con clic destro, + Giorno.',
|
||||
'Un luogo che esiste già va sul giorno aperto con + Giorno in fondo alla sua riga, oppure con clic destro, + Giorno.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Funziona anche al contrario, e senza aprire prima un giorno: trascina la riga del luogo fuori dalla colonna e lasciala su una scheda di giorno. Lasciata tra due tappe, finisce esattamente lì.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1892,10 +1893,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Trovare un luogo nella lista',
|
||||
'help.guide.filter-places.goal': 'Restringi la colonna ai luoghi che cerchi.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Il menu a tendina in alto passa tra Tutti, Non pianificati (non ancora su un giorno), Pianificati (su un giorno) e Tracce (tracce GPX importate), ognuno con il suo conteggio.',
|
||||
'help.guide.filter-places.step.2': 'Digita in Cerca luoghi...; la lista si restringe mentre scrivi.',
|
||||
'Mostra, il menu a tendina sotto la ricerca, passa tra Tutti, Non pianificati (non ancora su un giorno), Pianificati (su un giorno) e Tracce (tracce GPX importate), ognuno con il suo conteggio.',
|
||||
'help.guide.filter-places.step.2': 'Digita in Cerca, in alto; la lista si restringe mentre scrivi.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Tutte le categorie apre una lista in cui spuntare una o più categorie, Nessuna categoria compresa; Cancella filtro, in fondo, la azzera.',
|
||||
'Il pulsante etichetta accanto a Mostra elenca le categorie: spuntane una o più, Nessuna categoria compresa. Il pulsante conta ciò che è spuntato, e Cancella filtro in fondo alla lista le toglie tutte.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'La stella accanto imposta una valutazione minima: 5+, 4+ e così via mostrano solo i luoghi che hai valutato almeno così in alto.',
|
||||
'help.guide.filter-places.result':
|
||||
@@ -1910,7 +1911,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Fai clic destro sulla riga e scegli Modifica, oppure apri il luogo e clicca Modifica nei suoi dettagli.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Cambia ciò che ti serve: Nome, Descrizione, Note, Indirizzo, Latitudine e Longitudine, Categoria, Sito web. Aperto da un giorno, il modulo ha anche Note per questo giorno e Inizio e Fine per quel giorno.',
|
||||
'Cambia ciò che ti serve: il nome e la pillola Categoria nell’intestazione della finestra, Indirizzo, Latitudine e Longitudine, Descrizione, Note e Sito web. Aperto da un giorno, il modulo ha anche Inizio e Fine e Note per questo giorno.',
|
||||
'help.guide.edit-place.step.3': 'Clicca Aggiorna.',
|
||||
'help.guide.edit-place.result':
|
||||
'La modifica vale ovunque il luogo compaia: nella lista, sulla mappa e in ogni giorno su cui sta.',
|
||||
@@ -1924,22 +1925,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Fai clic destro sulla riga e scegli Elimina, oppure clicca Elimina nei dettagli del luogo.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Conferma. Se al luogo era prenotata una notte, o se una prenotazione è collegata ad esso, la domanda dice cosa se ne va insieme.',
|
||||
'Clicca Elimina nella domanda. Se al luogo era prenotata una notte, o se una prenotazione è collegata ad esso, la domanda dice cosa se ne va insieme.',
|
||||
'help.guide.delete-place.result':
|
||||
'Il luogo è sparito dalla lista, dalla mappa e da ogni giorno; Annulla nella barra degli strumenti sopra i giorni lo riporta.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Per togliere un luogo da un solo giorno, usa invece Rimuovi dal giorno su quella tappa.',
|
||||
'help.guide.delete-place.tip.2': 'Più luoghi insieme: la spunta accanto ai filtri avvia una selezione.',
|
||||
'help.guide.delete-place.tip.2': 'Più luoghi insieme: la spunta accanto alla ricerca avvia una selezione.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Modificare o eliminare più luoghi insieme',
|
||||
'help.guide.select-places.goal': 'Metti in ordine la lista in un colpo solo invece che luogo per luogo.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Clicca la spunta all’estremità destra della riga dei filtri. Le righe ricevono caselle e compare una barra con le azioni.',
|
||||
'Clicca la spunta accanto al campo di ricerca. Le righe ricevono caselle rotonde, e una barra con le azioni sale in fondo alla colonna.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Spunta le righe, oppure Seleziona tutto nella barra; la barra conta ciò che è selezionato.',
|
||||
'Clicca le righe per spuntarle. Seleziona tutto, la doppia spunta nella barra, prende ogni riga che i filtri lasciano.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category dà a tutti un’unica categoria; Salva nella raccolta li copia in una delle tue raccolte; Elimina selezionati li rimuove dopo una conferma.',
|
||||
'help.guide.select-places.step.4': 'Clicca di nuovo la spunta per uscire dalla selezione.',
|
||||
'La barra conta i luoghi spuntati. Cambia categoria dà a tutti un’unica categoria; Salva nella raccolta li copia in una delle tue raccolte; Elimina selezionati li rimuove dopo una conferma.',
|
||||
'help.guide.select-places.step.4': 'Fatto, la X in fondo alla barra, chiude la selezione.',
|
||||
'help.guide.select-places.result':
|
||||
'La modifica vale per ogni luogo selezionato; un’eliminazione si può annullare dalla barra degli strumenti sopra i giorni.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1951,7 +1952,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.goal':
|
||||
'Porta dentro ciò che Google My Maps, Google Earth o un tracker GPS ha esportato.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Clicca Importa file, oppure lascia cadere il file in un punto qualsiasi della colonna dei luoghi.',
|
||||
'Clicca il pulsante di importazione accanto al pulsante di aggiunta e scegli Importa file, oppure lascia cadere il file in un punto qualsiasi della colonna dei luoghi.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Scegli il file o trascinalo nel riquadro. Per un GPX, spunta cosa importare: Waypoint, Percorsi, Tracce (con geometria percorso); per KML e KMZ, Punti (Placemarks) e Percorsi (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1967,7 +1968,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Importare una lista condivisa di Google Maps o Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Trasforma il link di una lista condivisa in luoghi.',
|
||||
'help.guide.import-places-list.step.1': 'Clicca Importa lista e scegli Lista Google o Lista Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Clicca il pulsante di importazione accanto al pulsante di aggiunta e scegli Lista Google. Dove sono attive anche le liste Naver, la voce si chiama Importa lista e la finestra chiede quale delle due.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Incolla il link condiviso della lista. Va bene anche un link di indicazioni di Google Maps: le sue tappe diventano luoghi, nell’ordine di percorrenza.',
|
||||
'help.guide.import-places-list.step.3': 'Clicca Importa.',
|
||||
@@ -1985,13 +1987,13 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'La barra in alto: Esporta (PDF, calendario, GPX), Expand all days / Collapse all days, la freccia Annulla, Riordina i giorni e Mostra tutti i percorsi prenotati.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Una scheda del giorno: numero, meteo, titolo, data e il costo del giorno nell’intestazione; clicca l’intestazione per aprire il giorno, la freccia la richiude. Trasporto pubblico, Aggiungi trasporto e Aggiungi nota stanno anch’essi nell’intestazione.',
|
||||
'Una scheda del giorno: una tessera con il numero del giorno e le previsioni, il titolo e la data, e pillole per la notte prenotata, un’auto a noleggio e il costo del giorno. Clicca l’intestazione per aprire il giorno, la freccia la richiude, e il + apre un menu: Aggiungi luogo a questo giorno, Aggiungi alloggio, Aggiungi trasporto, Trasporto pubblico e Aggiungi nota.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Dentro un giorno: le tappe in ordine, ognuna con immagine, nome, orario e un lucchetto sull’immagine; le note; le prenotazioni che appartengono al giorno; e tra le tappe il tempo di viaggio di ogni tratta.',
|
||||
'Dentro un giorno: le tappe in ordine, ognuna con immagine, nome, orario, un lucchetto sull’immagine e le prenotazioni appese a lei; le note; le prenotazioni e i trasporti del giorno, colorati secondo il loro tipo; e tra le tappe il tempo di viaggio di ogni tratta. Ogni riga ha un menu a tre puntini, lo stesso che apre il clic destro.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Sotto le tappe la barra del percorso: Percorso disegna il giorno sulla mappa, Ottimizza ordina le tappe, In auto / A piedi imposta il mezzo di trasporto del giorno, Apri in Google Maps e Apri in CoMaps passano il giorno ad altre app.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'I luoghi arrivano su un giorno trascinando una riga dalla colonna dei luoghi, con il + di quella riga, con Aggiungi luogo a questo giorno su un giorno vuoto, oppure dai dettagli del luogo.',
|
||||
'I luoghi arrivano su un giorno trascinando una riga dalla colonna dei luoghi, con + Giorno su quella riga, con Aggiungi luogo a questo giorno dal + del giorno o su un giorno vuoto, oppure dai dettagli del luogo.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Costo totale, in fondo, somma ogni tappa e ogni prenotazione con un prezzo, nella valuta del viaggio.',
|
||||
// read-day-plan
|
||||
@@ -1999,11 +2001,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.goal':
|
||||
'Sapere che cosa dice ogni parte di una scheda del giorno prima di cambiare qualcosa.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'L’intestazione: il numero del giorno, le previsioni per il giorno, Giorno 1 o il titolo che gli hai dato, la data e il costo del giorno. Clicca l’intestazione per aprire il giorno (i suoi Dettagli del giorno si aprono sopra la mappa); la freccia a destra chiude e riapre la scheda.',
|
||||
'L’intestazione: una tessera con il numero del giorno e le previsioni, poi Giorno 1 o il titolo che gli hai dato, la data, e pillole per la notte prenotata (check-in o check-out), un’auto a noleggio e il costo del giorno. Clicca l’intestazione per aprire il giorno (i suoi Dettagli del giorno si aprono sopra la mappa); il + a destra aggiunge un luogo, un alloggio, un trasporto, un collegamento coi mezzi pubblici o una nota, e la freccia chiude la scheda.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Una tappa: la maniglia a sinistra la trascina, l’immagine porta un lucchetto per l’ottimizzazione del percorso, poi il nome, la descrizione e, se ci sono, le Note per questo giorno. Un contrassegno di orario mostra Inizio e Fine quando la tappa li ha; le frecce che compaiono alla sua estremità destra la spostano su o giù.',
|
||||
'Una tappa: la maniglia a sinistra la trascina, l’immagine porta un lucchetto per l’ottimizzazione del percorso, poi il nome, un contrassegno di orario quando la tappa ha Inizio e Fine, la descrizione e, se ci sono, le Note per questo giorno. Le frecce alla sua estremità destra la spostano su o giù, e i tre puntini aprono il suo menu.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Una prenotazione nel giorno: una prenotazione su una tappa la segna Prenotazione confermata o Prenotazione in attesa, e un trasporto compare come Partenza o Arrivo con il suo orario e il suo tragitto, con un piccolo interruttore che disegna quel percorso sulla mappa.',
|
||||
'Una prenotazione su una tappa ci sta sopra come contrassegno Prenotazione, verde quando è confermata e ambra finché è in attesa, con il suo orario e il suo fornitore; clicca il contrassegno per aprire la prenotazione, e il pulsante del percorso accanto disegna il suo tragitto. Un trasporto è una riga a sé, colorata secondo il suo tipo, con Partenza o Arrivo e il suo orario. Clicca una prenotazione e si aprono i suoi dettagli; lì Modifica la cambia.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Tra due tappe il connettore dice quanto dura la tratta e quanto è lunga, nel mezzo di trasporto del giorno; cliccalo per cambiare il mezzo di quella sola tratta.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2011,7 +2013,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Ogni simbolo sulla scheda ha un significato; le guide qui sotto cambiano ognuno di essi.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Fai clic destro su una tappa per il suo menu: Modifica, Rimuovi dal giorno, Apri sito web, le app di navigazione (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Salva nella raccolta, Elimina.',
|
||||
'Fai clic destro su una tappa, o clicca i suoi tre puntini, per il suo menu: Modifica, Rimuovi dal giorno, Apri sito web, le app di navigazione (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Salva nella raccolta, Elimina.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Passa il mouse su una tappa e alla sua estremità compare Aggiungi prenotazione: una prenotazione creata lì è legata a questa tappa in questo giorno.',
|
||||
// place-onto-day
|
||||
@@ -2021,9 +2023,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Trascina una riga dalla colonna dei luoghi sulla scheda del giorno. Lasciala tra due tappe per metterla esattamente lì, oppure in un punto qualsiasi della scheda per aggiungerla in fondo.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Senza trascinare: apri il giorno cliccando la sua intestazione, poi clicca il + alla fine della riga del luogo, oppure fai clic destro sulla riga e scegli + Giorno.',
|
||||
'Senza trascinare: apri il giorno cliccando la sua intestazione, poi clicca + Giorno alla fine della riga del luogo, oppure fai clic destro sulla riga e scegli + Giorno.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Su un giorno vuoto, Aggiungi luogo a questo giorno apre il modulo del luogo, e il nuovo luogo finisce subito sul giorno.',
|
||||
'Aggiungi luogo a questo giorno, nel menu + del giorno o su un giorno vuoto, apre il modulo del luogo, e il nuovo luogo finisce subito sul giorno.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Dai dettagli di un luogo, Aggiungi al giorno chiede quale giorno; dall’intestazione del giorno, Al giorno nella colonna dei luoghi crea un nuovo luogo sul giorno aperto.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2053,7 +2055,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Fissare quando una tappa inizia e finisce, così il giorno si legge come un orario.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Fai clic destro sulla tappa e scegli Modifica. Aperto dal giorno, il modulo ha Inizio e Fine in fondo.',
|
||||
'Fai clic destro sulla tappa, o clicca i suoi tre puntini, e scegli Modifica. Aperto dal giorno, il modulo ha Inizio e Fine per quel giorno, subito sotto la posizione.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Inserisci Inizio e, se vuoi, Fine. Sovrapposizione di orario con: avvisa che un’altra tappa del giorno con orario si sovrappone; una Fine prima dell’Inizio blocca Aggiorna.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2094,12 +2096,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Aggiungere una nota a un giorno',
|
||||
'help.guide.day-note.goal': 'Tenere un promemoria, un numero di biglietto o un piano B dentro il giorno.',
|
||||
'help.guide.day-note.step.1': 'Clicca Aggiungi nota nell’intestazione del giorno.',
|
||||
'help.guide.day-note.step.1': 'Clicca il + nell’intestazione del giorno e scegli Aggiungi nota.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Dalle un nome sotto Nota, è quello che si vede nel giorno, e scrivi il resto sotto Nota giornaliera. La barra degli strumenti sopra formatta il testo (Grassetto, Elenco puntato, Link, Citazione), e Anteprima, a sinistra, mostra come verrà la nota nel giorno.',
|
||||
'Scrivi il nome della nota nell’intestazione della finestra, dove c’è scritto Nota; è quello che si vede nel giorno. Scrivi il resto sotto Nota giornaliera: la barra degli strumenti sopra formatta il testo (grassetto, elenchi, link, citazioni), e Anteprima, a sinistra, mostra la riga che ne verrà fuori.',
|
||||
'help.guide.day-note.step.3': 'Scegli un’Icona e un Colore, così la nota si distingue dalle tappe, poi Aggiungi.',
|
||||
'help.guide.day-note.step.4':
|
||||
'La nota sta nel giorno come una tappa: trascinala al suo posto, fai clic destro per Modifica ed Elimina.',
|
||||
'La nota sta nel giorno come una tappa: trascinala al suo posto, e fai clic destro o usa i suoi tre puntini per Modifica ed Elimina.',
|
||||
'help.guide.day-note.result':
|
||||
'La nota fa parte del giorno, anche nel PDF; una nota con un orario si ordina con le tappe con orario.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2149,15 +2151,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Sapere dove compare una prenotazione una volta che esiste, e quale schermata la crea.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Un trasporto (Volo, Treno, Traghetto, Autobus, Auto) compare nel giorno in cui parte come Partenza e nel giorno in cui arriva come Arrivo, con orario e tragitto; uno che dura più giorni copre i giorni in mezzo.',
|
||||
'Un trasporto (Volo, Treno, Traghetto, Autobus, Auto) è una riga colorata secondo il suo tipo: Partenza nel giorno in cui parte, Arrivo nel giorno in cui arriva, con orario e tragitto; uno che dura più giorni copre i giorni in mezzo. Clicca la riga e si apre la prenotazione.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Una prenotazione legata a una tappa (un Ristorante, un Tour) segna quella tappa Prenotazione confermata o Prenotazione in attesa; una prenotazione con un giorno ma senza tappa è una riga a sé nel giorno.',
|
||||
'Una prenotazione legata a una tappa (un Ristorante, un Tour) è un contrassegno Prenotazione su quella tappa, verde quando è confermata e ambra finché è in attesa, con il suo orario; una prenotazione con un giorno ma senza tappa è una riga a sé nel giorno.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Una notte in hotel è un alloggio: sta nei Dettagli del giorno sotto Alloggio, dal Check-in al Check-out, e il percorso di ciascuno di quei giorni parte da lì.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Sulla mappa, l’interruttore su una riga di trasporto disegna il suo percorso; Mostra tutti i percorsi prenotati nella barra li disegna tutti.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Per crearle: Aggiungi prenotazione su una tappa con il mouse sopra, Aggiungi trasporto e Trasporto pubblico nell’intestazione del giorno, e le schede Prenotazioni e Trasporti per la lista completa con importazione e file.',
|
||||
'Per crearle: Aggiungi prenotazione su una tappa con il mouse sopra, Aggiungi trasporto e Trasporto pubblico nel menu + del giorno, e le schede Prenotazioni e Trasporti per la lista completa con importazione e file.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Una prenotazione, un posto nel programma; le schede sono le stesse prenotazioni sotto forma di lista.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2188,24 +2190,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Clicca una riga nella colonna dei luoghi, una tappa dentro un giorno o un marcatore sulla mappa, e il riquadro si apre sopra la mappa. Sceglierlo dentro un giorno dice al riquadro quale tappa intendi, ed è questo che porta con sé i partecipanti della tappa e la sua prenotazione.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'La testata porta l’immagine rotonda, il nome, la categoria, l’indirizzo e le coordinate. Clicca l’immagine per usarne una tua, fai doppio clic sul nome per rinominare il luogo sul posto, e la X a destra chiude il riquadro.',
|
||||
'La testata porta l’immagine rotonda, il nome, l’indirizzo su una riga e pillole per ciò che si sa: aperto o chiuso, la categoria, il prezzo, il numero di telefono e le coordinate. Clicca l’immagine per usarne una tua, fai doppio clic sul nome per rinominare il luogo sul posto, e la X a destra chiude il riquadro.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Sotto: il prezzo se ne ha uno, le stelle che ogni viaggiatore ha dato al luogo, la descrizione e le note, e Note per questo giorno quando la tappa ne porta.',
|
||||
'Sotto: le stelle che ogni viaggiatore ha dato al luogo, la descrizione e le note, e Note per questo giorno quando la tappa ne porta.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Seguono Orari di apertura, Colore del percorso, Dati del percorso e File, per quanto si applicano. File prende qualunque cosa dalle tue cartelle ed elenca anche ciò che è appeso alla prenotazione di questa tappa.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'La riga in fondo: Aggiungi al giorno o Rimuovi dal giorno finché un giorno è aperto, poi Salva nella raccolta, Navigazione, Apri sito web, Modifica ed Elimina.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Un luogo scelto dalla ricerca porta ciò che l’indice TREK o OpenStreetMap sanno di lui: un anello verde Aperto o rosso Chiuso intorno all’immagine, giudicato con l’orologio del luogo stesso, il numero di telefono sotto le stelle, Orari di apertura più in basso con la riga del giorno sulla riga e tutta la settimana dietro un clic, e il suo sito dietro Apri sito web. La valutazione di Google si vede solo su un luogo trovato tramite Google, su un TREK con una chiave Google.',
|
||||
'Un luogo scelto dalla ricerca porta ciò che l’indice TREK o OpenStreetMap sanno di lui: Aperto o Chiuso tra le pillole della testata, con un anello verde o rosso intorno all’immagine, giudicato con l’orologio del luogo stesso, anche il suo numero di telefono come pillola, Orari di apertura più in basso con la riga del giorno sulla riga e tutta la settimana dietro un clic, e il suo sito dietro Apri sito web. La valutazione di Google si vede solo su un luogo trovato tramite Google, su un TREK con una chiave Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Che cosa il riquadro ti dice di un luogo',
|
||||
'help.guide.read-place.goal': 'Leggi tutto ciò che il viaggio sa di un luogo, in un unico riquadro.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Nella colonna dei giorni, clicca la tappa che vuoi leggere. Il riquadro si apre sopra la mappa e la tappa resta segnata nel suo giorno.',
|
||||
'help.guide.read-place.step.2':
|
||||
'La testata: l’immagine rotonda, il nome, l’indirizzo e le coordinate esatte. Un anello verde con Aperto, o rosso con Chiuso, intorno all’immagine dice se il luogo è aperto in questo momento, secondo il suo orologio, appena TREK conosce i suoi orari. La X a destra richiude il riquadro.',
|
||||
'La testata: l’immagine rotonda, il nome e l’indirizzo su una riga; il suo tooltip contiene l’indirizzo completo. Le pillole sotto dicono se il luogo in questo momento è Aperto o Chiuso, secondo il suo orologio, con un anello verde o rosso intonato intorno all’immagine, e portano il numero di telefono, che un clic passa alla tua app del telefono, e le coordinate esatte. La X a destra richiude il riquadro.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Sotto, le stelle che ogni viaggiatore ha dato al luogo, con la media e quanti hanno votato. Non ancora valutato finché nessuno lo ha fatto. Subito sotto, il numero di telefono dove il luogo ne ha uno: un clic sopra passa il numero alla tua app del telefono.',
|
||||
'Valutazione viene per prima sotto la testata: le stelle che ogni viaggiatore ha dato al luogo, con la media e quanti hanno votato. Non ancora valutato finché nessuno lo ha fatto.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Poi la descrizione e, sotto, le note. Entrambe sono il testo del modulo del luogo, reso: elenchi, link e grassetto funzionano.',
|
||||
'help.guide.read-place.step.5': 'Partecipanti dice chi va a questa tappa. Ci sono tutti finché non togli qualcuno.',
|
||||
@@ -2300,18 +2302,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.goal':
|
||||
'Leggi la prenotazione che appartiene a una tappa, aprila, e appendine una nuova a quella tappa.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Apri la tappa a cui appartiene la prenotazione. Il riquadro mostra una striscia con Confermata o In attesa e il nome della prenotazione.',
|
||||
'Apri la tappa a cui appartiene la prenotazione. Il riquadro la elenca sotto Prenotazioni come una piccola scheda a sé, con il nome della prenotazione e Confermata o In attesa.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'La striscia porta la Data, l’Ora e il Codice prenotazione, e tutte le note che la prenotazione ha.',
|
||||
'help.guide.place-booking.step.3': 'Clicca la striscia. La prenotazione si apre sopra la mappa.',
|
||||
'La scheda della prenotazione porta la Data, l’Ora e il Codice prenotazione, e tutte le note che la prenotazione ha.',
|
||||
'help.guide.place-booking.step.3': 'Clicca la scheda della prenotazione. La prenotazione si apre sopra la mappa.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Modifica ai piedi della prenotazione apre il suo modulo. Lì Collega all’assegnazione del giorno è ciò che appende una prenotazione a una tappa, e qui nomina già questa. Richiudi il modulo.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Una nuova prenotazione per una tappa parte dalla colonna dei giorni: passa sulla tappa e clicca il + alla sua estremità. Il modulo si apre come Nuova prenotazione, già collegata a quella tappa.',
|
||||
'Una nuova prenotazione per una tappa parte dalla colonna dei giorni: passa sulla tappa e clicca Aggiungi prenotazione, il biglietto alla sua estremità. Il modulo si apre come Nuova prenotazione, già collegata a quella tappa.',
|
||||
'help.guide.place-booking.result':
|
||||
'La prenotazione è appesa alla tappa: sta sul riquadro, sta nel giorno, e i suoi file sono elencati anche qui sotto File.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'La striscia si mostra solo per la tappa a cui la prenotazione è appesa. Una prenotazione senza tappa vive nella scheda Pren.',
|
||||
'La scheda della prenotazione si mostra solo per la tappa a cui la prenotazione è appesa. Una prenotazione senza tappa vive nella scheda Pren.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Più prenotazioni possono condividere una tappa: il pranzo e il tour che parte dalla stessa porta.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2554,7 +2556,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'In cima, il meteo del giorno. Previsioni per nomina il luogo a cui si riferisce: la prima tappa del giorno, o l’alloggio in cui ti svegli.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Prenotazioni elenca le prenotazioni di quel giorno, ognuna con il suo tipo, la tappa a cui appartiene e i suoi orari. Verde vuol dire confermata, ambra ancora in attesa; è solo una lettura, le prenotazioni si cambiano nella scheda Prenotazioni.',
|
||||
'Prenotazioni elenca le prenotazioni di quel giorno, ognuna con il suo tipo, la tappa a cui appartiene e i suoi orari. Verde vuol dire confermata, ambra ancora in attesa, e un clic su una riga apre la prenotazione.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Alloggio mostra ogni notte prenotata su questo giorno, con Check-in e Check-out nei giorni in cui avvengono, la finestra di check-in, l’ora di check-out e il numero di conferma.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2589,7 +2591,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Il numero grande è la temperatura del giorno, accanto la minima e la massima, e la condizione a parole.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'I chip sotto: la probabilità di pioggia, quanta ne cade, il vento più forte, e alba e tramonto.',
|
||||
'Le pillole alla sua destra: la probabilità di pioggia, quanta ne cade, il vento più forte, e alba e tramonto.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'In fondo, il giorno ora per ora, ogni due ore: l’ora, l’icona, la temperatura e la probabilità di pioggia. Un’ora oltre il 50 per cento è ombreggiata di blu.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2623,18 +2625,18 @@ const help: TranslationStrings = {
|
||||
'La struttura deve prima essere un luogo del viaggio. Creala nella colonna dei luoghi come faresti con qualsiasi altro luogo: il selettore offre solo ciò che c’è già.',
|
||||
'help.guide.add-accommodation.step.2': 'Apri il giorno del tuo arrivo e clicca Aggiungi alloggio sotto Alloggio.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Applica ai giorni dice quali notti copre il soggiorno: il giorno di check-in a sinistra, il giorno di check-out a destra. Tutti prende l’intero viaggio.',
|
||||
'Applica ai giorni dice quali notti copre il soggiorno: Inizio è il giorno di check-in, Fine il giorno di check-out, e Tutti prende l’intero viaggio. L’intestazione della finestra mostra l’intervallo e il numero di notti.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Compila Check-in, Fino a e Check-out, e metti il numero della prenotazione sotto Conferma. Tutti e quattro possono restare vuoti.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Scegli la struttura tra i luoghi del viaggio. I chip sopra la lista la restringono a una sola categoria.',
|
||||
'Scegli la struttura tra i luoghi del viaggio. Categoria sopra la lista la restringe a una sola categoria.',
|
||||
'help.guide.add-accommodation.step.6': 'Clicca Salva.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Il soggiorno compare su ogni giorno che copre, Check-in sul primo e Check-out sull’ultimo. La struttura diventa una tappa del giorno di check-in, così la mappa disegna la via fin lì, e nella scheda Prenotazioni compare una prenotazione di tipo Alloggio.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Il selettore si apre sul giorno da cui sei venuto, con il check-out il giorno dopo; entrambi si possono spostare prima di salvare.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Dai all’hotel la categoria Hotel del viaggio quando lo crei e i chip sopra la lista la restringono ai tuoi hotel con un clic.',
|
||||
'Dai all’hotel la categoria Hotel quando lo crei, e Categoria sopra la lista la restringe ai tuoi hotel con un clic.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Gli orari sono tutti facoltativi: un soggiorno senza check-in e senza codice copre comunque le sue notti e disegna comunque il suo percorso.',
|
||||
// edit-accommodation
|
||||
@@ -2646,7 +2648,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'La matita alla sua destra riapre il soggiorno. La finestra ora si intitola Modifica alloggio.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Correggi la riga di campi: Check-in, Fino a, Check-out e Conferma. I giorni sopra e la struttura sotto si cambiano anche qui.',
|
||||
'Correggi Check-in, Fino a, Check-out e Conferma. I giorni sopra di essi e la struttura sotto si cambiano anche qui.',
|
||||
'help.guide.edit-accommodation.step.4': 'Clicca Salva.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'La croce accanto alla matita pone fine al soggiorno. Non chiede nulla, e la prenotazione di tipo Alloggio che gli appartiene se ne va con lui.',
|
||||
@@ -2663,7 +2665,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Prenotazioni elenca le prenotazioni del giorno: quelle datate su di esso, e quelle legate a una delle sue tappe.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Una riga mostra di che tipo di prenotazione si tratta, il suo nome e, quando appartiene a una tappa, quella tappa dopo un punto. I suoi orari stanno all’estremità destra.',
|
||||
'Una riga mostra di che tipo di prenotazione si tratta, il suo nome e, quando appartiene a una tappa, quella tappa in grigio dopo di esso. I suoi orari stanno all’estremità destra, prima del punto di stato.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Il colore dice a che punto è una prenotazione: una riga verde è confermata, una ambra è ancora in attesa. Gli alloggi non sono in questa lista, hanno il loro blocco più sotto.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': '自分が支払った分',
|
||||
'costs.filter.owed': '受け取る分',
|
||||
'costs.addExpense': '支出を追加',
|
||||
'costs.view.label': '表示',
|
||||
'costs.view.list': 'リスト',
|
||||
'costs.view.table': '表',
|
||||
'costs.table.lockedPayer': '支払者がいます: 精算が合うよう、金額は支出の中で変更してください。',
|
||||
'costs.table.lockedCurrency': '{currency} で入力されています: 金額は支出の中で変更してください。',
|
||||
'costs.table.summary': '概要',
|
||||
'costs.table.byCategory': 'カテゴリ',
|
||||
'costs.table.byDate': '日',
|
||||
'costs.table.byPayer': '支払者',
|
||||
'costs.table.byStatus': '状態',
|
||||
'costs.table.noPayer': '支払者未設定',
|
||||
'costs.table.paid': '支払済み',
|
||||
'costs.table.open': '未払い',
|
||||
'costs.editExpense': '支出を編集',
|
||||
'costs.noMatch': '検索条件に一致する支出はありません。',
|
||||
'costs.emptyText': '支出はまだありません。最初の支出を追加しましょう。',
|
||||
|
||||
+58
-56
@@ -1678,7 +1678,7 @@ const help: TranslationStrings = {
|
||||
'右上の「共有」は旅行の人たちを開きます。メンバー、ゲスト、招待リンク、そして読み取り専用の公開リンクです。',
|
||||
'help.ctx.trip.bullet.4': 'タイトル、日付、カバー、通貨は「マイ旅行」から、旅行カードの鉛筆で編集します。',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'列の内側の端にあるシェブロンは列を折りたたみ、地図がその場所を使います。列の隣の細い仕切りは列の幅を変えます。',
|
||||
'列の内側の端にあるタブは列を折りたたみ、地図がその場所を使います。列の隣の細い仕切りは列の幅を変えます。',
|
||||
'help.ctx.trip.bullet.6': '日程のツールバーにある元に戻す矢印は、計画への最後の変更を取り消します。',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'メンバーを追加する',
|
||||
@@ -1743,8 +1743,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': '地図のためにスペースを空ける',
|
||||
'help.guide.collapse-columns.goal': '列を折りたたむか、列の幅を広げます。',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'日程の列の内側の端にあるシェブロンをクリックして折りたたみます。地図がそのスペースを使います。場所の列にも同じシェブロンがあります。',
|
||||
'help.guide.collapse-columns.step.2': 'シェブロンをもう一度クリックすると列が戻ります。',
|
||||
'日程の列の内側の端にある、パネルのアイコンが付いたタブをクリックすると、列が折りたたまれます。地図がそのスペースを使います。場所の列にも同じタブがあります。',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'折りたたんだ列は地図の隅にタイルを残します。日程は「計画」、場所は「場所」です。タイルをクリックすると列が戻ります。',
|
||||
'help.guide.collapse-columns.step.3': '列と地図の間にある細い仕切りをドラッグして、列の幅を変えます。',
|
||||
'help.guide.collapse-columns.result': '幅は記憶されます。次に開いたとき、列は開いた状態で戻ります。',
|
||||
'help.guide.collapse-columns.tip.1': '両方の列を同時に折りたたむと、地図だけの表示になります。',
|
||||
@@ -1768,26 +1769,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'上の「場所/アクティビティを追加」は、入力または検索した場所のフォームを開きます。日が開いている間はボタンが「新しい場所」になり、その隣の「この日へ」は場所をそのままその日に作ります。',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'「ファイルをインポート」は .gpx、.kml、.kmz ファイルを受け取ります。「リストをインポート」は共有された Google Maps または Naver Maps のリストを受け取ります。ファイルはこの列にドロップするだけでも構いません。',
|
||||
'その隣のインポートボタンには、.gpx、.kml、.kmz ファイル用の「ファイルをインポート」と、Google Maps または Naver Maps から共有されたリスト用の「Google リスト」(Naver のリストも有効な場合は「リストをインポート」)があります。ファイルはこの列にドロップするだけでも構いません。',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'ドロップダウンは「すべて」「未計画」「計画済み」を切り替え、トラックをインポートすると「トラック」も加わります。その下に検索、カテゴリのフィルター、最低評価の星があります。',
|
||||
'その下に検索があり、隣には選択を始めるチェックがあります。さらにフィルターが一列に並びます。「表示」は「すべて」「未計画」「計画済み」を切り替え、トラックをインポートすると「トラック」も加わり、それぞれに件数が付きます。タグのボタンはカテゴリで、星は最低評価で絞り込みます。',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'行には写真、名前、説明または住所が出ます。クリックすると場所の詳細が開き、日にドラッグすれば割り当てられ、右クリックすると「編集」「+ 日」「Webサイトを開く」「Google Maps」「コレクションに保存」「削除」が出ます。',
|
||||
'行には写真、名前、説明または住所が出ます。クリックすると場所の詳細が開き、日にドラッグすれば割り当てられ、右クリック(または行の三つの点をクリック)すると「編集」「+ 日」「Webサイトを開く」「Google Maps」「コレクションに保存」「削除」が出ます。',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'日が開いていると、未計画の行の末尾の + がその場所をその日に置き、「計画済み」はその日だけを並べます。「旅行全体を表示」でまた広げられます。',
|
||||
'日が開いていると、未計画の行の末尾の「+ 日」がその場所をその日に置き、「計画済み」はその日だけを並べます。「旅行全体を表示」でまた広げられます。',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'フィルター行の右端のチェックは選択を始めます。複数の行が一度に新しいカテゴリを受け取り、コレクションに入り、または削除されます。',
|
||||
'検索の隣のチェックは選択を始めます。列の下端に出るバーから、複数の行に一度に新しいカテゴリを付けたり、コレクションに入れたり、訪問済みにしたり、削除したりできます。',
|
||||
// create-place
|
||||
'help.guide.create-place.title': '場所を作る',
|
||||
'help.guide.create-place.goal': '計画が知っておくべきことをすべて添えて、場所やアクティビティを手で追加します。',
|
||||
'help.guide.create-place.step.1':
|
||||
'場所の列の上にある「場所/アクティビティを追加」をクリックします(日が開いている間は「新しい場所」)。フォームが開きます。',
|
||||
'help.guide.create-place.step.2':
|
||||
'上の「場所を検索…」に場所を入力し、結果を選びます。「名前」「住所」「緯度」「経度」「ウェブサイト」が埋まり、左の「場所の詳細」に写真、営業時間、説明が出ます。Google キーのある TREK では、「目的の場所ではない? Google で検索」が一覧の下に出て、同じ検索を Google 経由で実行します。',
|
||||
'「場所を検索…」に場所を入力し、結果を選びます。ダイアログの見出しの名前、「住所」「緯度」「経度」「ウェブサイト」が埋まり、左の「場所の詳細」に写真、営業時間、説明が出ます。Google キーのある TREK では、「目的の場所ではない? Google で検索」が一覧の下に出て、同じ検索を Google 経由で実行します。右の「保存済みの場所」は、あなたのコレクションの場所を同じように差し出します。',
|
||||
'help.guide.create-place.step.3':
|
||||
'「場所の詳細」で「写真を選ぶ」の下の写真をクリックすると、それが場所の画像になります。「このテキストを使う」は説明をフォームに引き継ぎます。',
|
||||
'help.guide.create-place.step.4':
|
||||
'項目を確認します。「名前」は必須です。「説明」と「メモ」はあなたのものです。「住所」「緯度」「経度」は検索から入るか、自分で入力します。「カテゴリ」は旅行のカテゴリから1つを選び、その隣の + はその場で新しいカテゴリを作ります。「ウェブサイト」にはリンクを入れます。',
|
||||
'フォームの中身を確認します。名前はダイアログの見出しにあり、唯一の必須項目です。その下の「カテゴリ」のピルは旅行のカテゴリから1つを選び、その隣の + はその場で新しいカテゴリを作ります。「住所」「緯度」「経度」は検索から入るか、自分で入力します。「説明」と「メモ」はあなたのものです。「ウェブサイト」にはリンクを入れます。',
|
||||
'help.guide.create-place.step.5':
|
||||
'「追加」をクリックします。同じ名前の場所がすでに旅行にある場合、フォームがそれを伝え、ボタンは「それでも追加」に変わります。',
|
||||
'help.guide.create-place.result': '場所はリストと地図にあります。日に置かれるまでは「未計画」の下です。',
|
||||
@@ -1805,7 +1806,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'「この日へ」は「新しい場所」と同じフォームを開きますが、「追加」をクリックした瞬間に場所が開いている日に入ります。',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'すでにある場所は、行の末尾の + で、または右クリックの「+ 日」で開いている日に入ります。',
|
||||
'すでにある場所は、行の末尾の「+ 日」で、または右クリックの「+ 日」で開いている日に入ります。',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'逆の手順も使えますし、先に日を開いておく必要もありません。地点の行を列から外へドラッグし、日のカードの上で離してください。2つの立ち寄り先の間で離せば、ちょうどそこに入ります。',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1817,10 +1818,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'リストで場所を見つける',
|
||||
'help.guide.filter-places.goal': '探している場所まで列を絞り込みます。',
|
||||
'help.guide.filter-places.step.1':
|
||||
'上のドロップダウンは「すべて」「未計画」(まだどの日にもない)「計画済み」(日にある)「トラック」(インポートした GPX トラック)を切り替え、それぞれに件数が付きます。',
|
||||
'help.guide.filter-places.step.2': '「場所を検索…」に入力します。入力するにつれてリストが絞られます。',
|
||||
'検索の下のドロップダウンである「表示」は、「すべて」「未計画」(まだどの日にもない)「計画済み」(日にある)「トラック」(インポートした GPX トラック)を切り替え、それぞれに件数が付きます。',
|
||||
'help.guide.filter-places.step.2': '上の「検索」に入力します。入力するにつれてリストが絞られます。',
|
||||
'help.guide.filter-places.step.3':
|
||||
'「すべてのカテゴリ」は、カテゴリを1つ以上チェックする一覧を開きます。「カテゴリなし」もそこにあります。一番下の「フィルター解除」で元に戻ります。',
|
||||
'「表示」の隣のタグのボタンはカテゴリを一覧にします。1つ以上にチェックを付けます。「カテゴリなし」もそこにあります。ボタンはチェックした数を示し、一覧の一番下の「フィルター解除」ですべて外れます。',
|
||||
'help.guide.filter-places.step.4':
|
||||
'その隣の星は最低評価を決めます。5+、4+ などは、あなたがそれ以上に評価した場所だけを表示します。',
|
||||
'help.guide.filter-places.result': '行の上の数が、いくつの場所が一致するかを示します。フィルターは組み合わさります。',
|
||||
@@ -1834,7 +1835,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'行を右クリックして「編集」を選ぶか、場所を開いてその詳細で「編集」をクリックします。',
|
||||
'help.guide.edit-place.step.2':
|
||||
'必要なところを変えます。「名前」「説明」「メモ」「住所」「緯度」「経度」「カテゴリ」「ウェブサイト」。日から開いた場合は、その日のための「この日のメモ」と「開始」「終了」もフォームにあります。',
|
||||
'必要なところを変えます。ダイアログの見出しにある名前と「カテゴリ」のピル、「住所」「緯度」「経度」「説明」「メモ」「ウェブサイト」です。日から開いた場合は、「開始」「終了」と「この日のメモ」もフォームにあります。',
|
||||
'help.guide.edit-place.step.3': '「更新」をクリックします。',
|
||||
'help.guide.edit-place.result':
|
||||
'変更は、その場所が現れるすべてのところに及びます。リスト、地図、そしてその場所があるすべての日です。',
|
||||
@@ -1846,22 +1847,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.goal': '場所を旅行から完全に取り除きます。',
|
||||
'help.guide.delete-place.step.1': '行を右クリックして「削除」を選ぶか、場所の詳細で「削除」をクリックします。',
|
||||
'help.guide.delete-place.step.2':
|
||||
'確認します。その場所に宿泊が予約されている場合や、予約が結び付いている場合は、何が一緒に消えるかを質問が伝えます。',
|
||||
'質問の「削除」をクリックします。その場所に宿泊が予約されている場合や、予約が結び付いている場合は、何が一緒に消えるかを質問が伝えます。',
|
||||
'help.guide.delete-place.result':
|
||||
'場所はリスト、地図、すべての日から消えます。日程の上のツールバーにある「元に戻す」が戻します。',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'1日だけから場所を外すには、代わりにその立ち寄り先で「この日から削除」を使ってください。',
|
||||
'help.guide.delete-place.tip.2': '複数の場所を一度に扱うなら、フィルターの隣のチェックが選択を始めます。',
|
||||
'help.guide.delete-place.tip.2': '複数の場所を一度に扱うなら、検索の隣のチェックが選択を始めます。',
|
||||
// select-places
|
||||
'help.guide.select-places.title': '複数の場所を一度に変更または削除する',
|
||||
'help.guide.select-places.goal': '1つずつではなく、一度でリストを整えます。',
|
||||
'help.guide.select-places.step.1':
|
||||
'フィルター行の右端のチェックをクリックします。行にチェックボックスが付き、操作の並んだバーが現れます。',
|
||||
'検索欄の隣のチェックをクリックします。行に丸いチェックボックスが付き、列の下端に操作の並んだバーがせり上がります。',
|
||||
'help.guide.select-places.step.2':
|
||||
'行にチェックを付けるか、バーの「すべて選択」を使います。バーは選ばれた数を数えます。',
|
||||
'行をクリックしてチェックを付けます。バーの二重チェックである「すべて選択」は、フィルターで残っているすべての行を選びます。',
|
||||
'help.guide.select-places.step.3':
|
||||
'「Change category」はすべてに1つのカテゴリを与えます。「コレクションに保存」はそれらをあなたのコレクションの1つにコピーします。「選択を削除」は確認のあとそれらを取り除きます。',
|
||||
'help.guide.select-places.step.4': 'もう一度チェックをクリックすると選択を抜けます。',
|
||||
'バーはチェックした場所の数を数えます。「カテゴリを変更」はすべてに1つのカテゴリを与えます。「コレクションに保存」はそれらをあなたのコレクションの1つにコピーします。「選択を削除」は確認のあとそれらを取り除きます。',
|
||||
'help.guide.select-places.step.4': 'バーの端の X である「完了」で選択を抜けます。',
|
||||
'help.guide.select-places.result': '変更は選んだすべての場所に及びます。削除は日程の上のツールバーから元に戻せます。',
|
||||
'help.guide.select-places.tip.1':
|
||||
'選択中もフィルターは効いています。先に「未計画」で絞れば、「すべて選択」はちょうどそれらだけを捕まえます。',
|
||||
@@ -1871,7 +1872,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.title': 'GPX、KML、KMZ ファイルから場所をインポートする',
|
||||
'help.guide.import-places-file.goal': 'Google My Maps、Google Earth、GPS トラッカーが書き出したものを取り込みます。',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'「ファイルをインポート」をクリックするか、場所の列のどこかにファイルをドロップします。',
|
||||
'追加ボタンの隣のインポートボタンをクリックして「ファイルをインポート」を選ぶか、場所の列のどこかにファイルをドロップします。',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'ファイルを選ぶか、枠にドラッグします。GPX では何をインポートするかにチェックを付けます。「ウェイポイント」「ルート」「トラック(経路付き)」です。KML と KMZ では「ポイント(プレースマーク)」と「パス(ライン)」です。',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1887,7 +1888,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-list.title': '共有された Google Maps または Naver Maps のリストをインポートする',
|
||||
'help.guide.import-places-list.goal': '共有リストのリンクを場所に変えます。',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'「リストをインポート」をクリックし、「Google リスト」か「Naver リスト」を選びます。',
|
||||
'追加ボタンの隣のインポートボタンをクリックして「Google リスト」を選びます。Naver のリストも有効な場合、項目名は「リストをインポート」になり、ダイアログがどちらのリストかを尋ねます。',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'リストの共有リンクを貼り付けます。Google Maps の経路リンクでも構いません。その立ち寄り先が、走る順に場所になります。',
|
||||
'help.guide.import-places-list.step.3': '「インポート」をクリックします。',
|
||||
@@ -1905,30 +1906,30 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'上部のツールバー。「エクスポート」(PDF、カレンダー、GPX)、「すべての日を展開」「すべての日を折りたたむ」、元に戻す矢印、「日付を並べ替え」、「すべての予約ルートを表示」があります。',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'日のカード。ヘッダーには日数、天気、タイトル、日付、その日の費用が出ます。ヘッダーをクリックするとその日が開き、山形のアイコンで折りたためます。「公共交通機関」「移動手段を追加」「メモを追加」もヘッダーにあります。',
|
||||
'日のカード。日数と予報の入ったタイル、タイトルと日付、そして予約した宿泊、レンタカー、その日の費用のピルが並びます。ヘッダーをクリックするとその日が開き、山形のアイコンで折りたため、+ はメニューを開きます。「この日に場所を追加」「宿泊先を追加」「移動手段を追加」「公共交通機関」「メモを追加」です。',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'日の中には、順番に並んだ立ち寄り先(それぞれ写真、名前、時刻、写真の上の鍵つき)、メモ、その日に属する予約、そして立ち寄り先の間には各区間の所要時間があります。',
|
||||
'日の中には、順番に並んだ立ち寄り先(それぞれ写真、名前、時刻、写真の上の鍵、そこに留められた予約つき)、メモ、種類ごとに色づけされたその日の予約と移動、そして立ち寄り先の間には各区間の所要時間があります。どの行にも三つの点のメニューがあり、右クリックで開くものと同じです。',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'立ち寄り先の下はルートバーです。「ルート」はその日を地図に描き、「最適化」は立ち寄り先を並べ替え、「車」「徒歩」はその日の移動手段を決め、「Googleマップで開く」「CoMapsで開く」はその日を渡します。',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'場所は、場所の列から行をドラッグして、その行の +、空の日の「この日に場所を追加」、または場所の詳細から日に入ります。',
|
||||
'場所は、場所の列から行をドラッグして、その行の「+ 日」で、日の + または空の日の「この日に場所を追加」で、あるいは場所の詳細から日に入ります。',
|
||||
'help.ctx.trip-days.bullet.6': '一番下の「合計費用」は、価格のあるすべての立ち寄り先と予約を旅行の通貨で合計します。',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': '日を読む',
|
||||
'help.guide.read-day-plan.goal': '何かを変える前に、日のカードの各部分が何を伝えているかを知ります。',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'ヘッダー。日数、その日の予報、「1日目」またはあなたが付けたタイトル、日付、その日の費用です。ヘッダーをクリックするとその日が開き(「日詳細」のパネルが地図の上に出ます)、右の山形のアイコンでカードを折りたたんだり開いたりできます。',
|
||||
'ヘッダー。日数と予報の入ったタイル、続いて「1日目」またはあなたが付けたタイトル、日付、そして予約した宿泊(チェックインまたはチェックアウト)、レンタカー、その日の費用のピルです。ヘッダーをクリックするとその日が開きます(「日詳細」のパネルが地図の上に出ます)。右の + は場所、宿泊、移動手段、公共交通機関の経路、メモを追加し、山形のアイコンでカードを折りたためます。',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'立ち寄り先。左のつまみでドラッグでき、写真にはルート最適化用の鍵があり、続いて名前、説明、設定してあれば「この日のメモ」が出ます。時刻がある立ち寄り先には「開始」と「終了」を示す時刻バッジが付き、右端に出る矢印で上下に動かせます。',
|
||||
'立ち寄り先。左のつまみでドラッグでき、写真にはルート最適化用の鍵があり、続いて名前、「開始」と「終了」がある立ち寄り先には時刻バッジ、説明、設定してあれば「この日のメモ」が出ます。右端の矢印で上下に動かせ、三つの点でメニューが開きます。',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'その日の予約。立ち寄り先に紐づいた予約はその立ち寄り先を「予約確定」または「予約保留」と示し、移動手段は「出発」または「到着」として時刻と経路つきで出て、小さなトグルがその経路を地図に描きます。',
|
||||
'立ち寄り先の予約は「予約」バッジとしてその上に載ります。確定なら緑、保留中は琥珀色で、時刻と事業者が付きます。バッジをクリックすると予約が開き、その隣の経路ボタンが経路を描きます。移動は種類ごとに色づけされた独立した行で、「出発」または「到着」と時刻が出ます。予約をクリックすると詳細が開き、そこの「編集」で変更できます。',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'2つの立ち寄り先の間のコネクターは、その日の移動手段でその区間の所要時間と距離を示します。クリックすると、その1区間だけ手段を変えられます。',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'最後のルートバー。「ルート」はその日の道を地図に描き、「最適化」は立ち寄り先を並べ替え、手段のボタンは「車」か「徒歩」を選び、「Googleマップで開く」「CoMapsで開く」はその日をそのアプリで開きます。',
|
||||
'help.guide.read-day-plan.result': 'カードの記号にはどれも意味があります。下のガイドがそれぞれを変えていきます。',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'立ち寄り先を右クリックするとメニューが出ます。「編集」「この日から削除」「Webサイトを開く」、ナビのアプリ(Google Maps、Waze、Apple Maps、OpenStreetMap、CoMaps)、「コレクションに保存」「削除」です。',
|
||||
'立ち寄り先を右クリックするか、その三つの点をクリックするとメニューが出ます。「編集」「この日から削除」「Webサイトを開く」、ナビのアプリ(Google Maps、Waze、Apple Maps、OpenStreetMap、CoMaps)、「コレクションに保存」「削除」です。',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'立ち寄り先にカーソルを合わせると末尾に「予約を追加」が出ます。そこで作った予約は、この日のこの立ち寄り先に紐づきます。',
|
||||
// place-onto-day
|
||||
@@ -1937,9 +1938,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'場所の列から行を日のカードにドラッグします。2つの立ち寄り先の間に落とせばちょうどそこに入り、カードのどこかに落とせば末尾に追加されます。',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'ドラッグせずに行うには、ヘッダーをクリックして日を開き、場所の行の末尾の + をクリックするか、行を右クリックして「+ 日」を選びます。',
|
||||
'ドラッグせずに行うには、ヘッダーをクリックして日を開き、場所の行の末尾の「+ 日」をクリックするか、行を右クリックして「+ 日」を選びます。',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'空の日では「この日に場所を追加」が場所のフォームを開き、新しい場所はそのままその日に入ります。',
|
||||
'日の + メニューまたは空の日にある「この日に場所を追加」は場所のフォームを開き、新しい場所はそのままその日に入ります。',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'場所の詳細からは「日に追加」がどの日かを尋ねます。日が開いているときは、場所の列の「この日へ」が開いている日に新しい場所を作ります。',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -1965,7 +1966,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': '立ち寄り先に時刻を付ける',
|
||||
'help.guide.set-stop-times.goal': '立ち寄り先の開始と終了を決め、その日が予定表のように読めるようにします。',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'立ち寄り先を右クリックして「編集」を選びます。日から開いたフォームには、下に「開始」と「終了」があります。',
|
||||
'立ち寄り先を右クリックするか、その三つの点をクリックして「編集」を選びます。日から開いたフォームには、その日の「開始」と「終了」が位置のすぐ下にあります。',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'「開始」を、必要なら「終了」も入力します。「時間が重複しています:」はその日の別の時刻付き立ち寄り先と重なっていることを知らせます。「開始」より前の「終了」は「更新」を止めます。',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2002,12 +2003,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': '日にメモを追加する',
|
||||
'help.guide.day-note.goal': '覚え書き、チケット番号、代替案をその日の中に置いておきます。',
|
||||
'help.guide.day-note.step.1': '日のヘッダーで「メモを追加」をクリックします。',
|
||||
'help.guide.day-note.step.1': '日のヘッダーの + をクリックし、「メモを追加」を選びます。',
|
||||
'help.guide.day-note.step.2':
|
||||
'「メモ」に名前を付けます。日のカードに出るのはこれです。残りは「日別メモ」に書きます。その上の「書式」ツールバーが文字の体裁を整え(「太字」「箇条書き」「番号付きリスト」「リンク」「引用」)、左の「プレビュー」ができあがるカードを見せます。',
|
||||
'ダイアログの見出しの「メモ」とある所にメモの名前を入力します。日のカードに出るのはこれです。残りは「日別メモ」に書きます。その上のツールバーが文字の体裁を整え(太字、リスト、リンク、引用)、左の「プレビュー」ができあがる行を見せます。',
|
||||
'help.guide.day-note.step.3': '「アイコン」と「色」を選んでメモを立ち寄り先から目立たせ、「追加」します。',
|
||||
'help.guide.day-note.step.4':
|
||||
'メモは立ち寄り先と同じように日の中に並びます。ドラッグして位置を決め、右クリックで「編集」と「削除」が出ます。',
|
||||
'メモは立ち寄り先と同じように日の中に並びます。ドラッグして位置を決め、右クリックするか三つの点を使うと「編集」と「削除」が出ます。',
|
||||
'help.guide.day-note.result':
|
||||
'メモはその日の一部で、PDF にも入ります。時刻のあるメモは時刻のある立ち寄り先と一緒に並びます。',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2054,15 +2055,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': '計画の中の予約と移動を読む',
|
||||
'help.guide.bookings-in-plan.goal': '予約ができたらどこに出るのか、どの画面で作るのかを知ります。',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'移動(航空便、列車、フェリー、バス、レンタカー)は、出発する日には「出発」として、到着する日には「到着」として、時刻と経路つきで出ます。複数日にまたがるものは、その間の日々をまたぎます。',
|
||||
'移動(航空便、列車、フェリー、バス、レンタカー)は種類ごとに色づけされた行です。出発する日には「出発」、到着する日には「到着」として、時刻と経路つきで出ます。複数日にまたがるものは、その間の日々をまたぎます。行をクリックすると予約が開きます。',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'立ち寄り先に紐づいた予約(レストラン、ツアー)は、その立ち寄り先を「予約確定」または「予約保留」と示します。日はあるが立ち寄り先のない予約は、その日の独立した行になります。',
|
||||
'立ち寄り先に紐づいた予約(レストラン、ツアー)は、その立ち寄り先の「予約」バッジになります。確定なら緑、保留中は琥珀色で、時刻が付きます。日はあるが立ち寄り先のない予約は、その日の独立した行になります。',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'ホテルの宿泊は宿泊の予約です。その日の「日詳細」パネルの「宿泊先」に、「チェックイン」から「チェックアウト」まで並び、その各日のルートはそこから始まります。',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'地図では、移動の行のトグルがその経路を描きます。ツールバーの「すべての予約ルートを表示」はすべてを描きます。',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'作る場所は、カーソルを合わせた立ち寄り先の「予約を追加」、日のヘッダーの「移動手段を追加」と「公共交通機関」、そしてインポートとファイルを備えた一覧である「予約」タブと「移動」タブです。',
|
||||
'作る場所は、カーソルを合わせた立ち寄り先の「予約を追加」、日の + メニューの「移動手段を追加」と「公共交通機関」、そしてインポートとファイルを備えた一覧である「予約」タブと「移動」タブです。',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'1つの予約は計画の中の1か所にあります。タブはその同じ予約を一覧にしたものです。',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2093,24 +2094,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'場所の列の行、日の中の立ち寄り先、または地図のマーカーをクリックすると、カードが地図の上に開きます。日の中で選ぶと、どの立ち寄り先のことかがカードに伝わり、それによって立ち寄り先の参加者と予約も一緒に出てきます。',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'ヘッダーには丸い写真、名前、カテゴリ、住所、座標があります。写真をクリックすると自分の写真を使え、名前をダブルクリックするとその場で場所の名前を変えられ、右の X はカードを閉じます。',
|
||||
'ヘッダーには丸い写真、名前、1行に収まった住所、そしてわかっている情報のピルがあります。営業中か営業時間外か、カテゴリ、価格、電話番号、座標です。写真をクリックすると自分の写真を使え、名前をダブルクリックするとその場で場所の名前を変えられ、右の X はカードを閉じます。',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'その下には、値段があればその値段、旅行者それぞれがつけた星、説明とメモ、そして立ち寄り先が持っていれば「この日のメモ」が並びます。',
|
||||
'その下には、旅行者それぞれがつけた星、説明とメモ、そして立ち寄り先が持っていれば「この日のメモ」が並びます。',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'続いて「営業時間」「トラックの色」「統計を記録」「ファイル」が、当てはまる範囲で並びます。「ファイル」はあなたのフォルダーから何でも受け取り、この立ち寄り先の予約にぶら下がっているものも一覧します。',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'一番下の行には、日が開いている間は「日に追加」または「この日から削除」、そして「コレクションに保存」「ナビゲーション」「Webサイトを開く」「編集」「削除」があります。',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'検索から選んだ場所は、TREK のインデックスや OpenStreetMap がその場所について知っていることを持っています。写真のまわりの緑の「営業中」または赤の「営業時間外」のリングはその場所自身の時計で判断され、星の下に電話番号があり、さらに下の「営業時間」は行にその日の時間を持ち、クリックすると一週間分が出て、ウェブサイトは「Webサイトを開く」の奥にあります。Google の評価は、Google キーのある TREK で Google を通じて見つけた場所にだけ出ます。',
|
||||
'検索から選んだ場所は、TREK のインデックスや OpenStreetMap がその場所について知っていることを持っています。ヘッダーのピルの中の「営業中」または「営業時間外」は写真のまわりの緑か赤のリングと対になり、その場所自身の時計で判断されます。電話番号もピルとして出て、さらに下の「営業時間」は行にその日の時間を持ち、クリックすると一週間分が出て、ウェブサイトは「Webサイトを開く」の奥にあります。Google の評価は、Google キーのある TREK で Google を通じて見つけた場所にだけ出ます。',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'カードが場所について教えてくれること',
|
||||
'help.guide.read-place.goal': '旅行が1つの場所について知っていることのすべてを、1枚のカードで読みます。',
|
||||
'help.guide.read-place.step.1':
|
||||
'日程の列で、読みたい立ち寄り先をクリックします。カードが地図の上に開き、その立ち寄り先はその日の中で強調されたままになります。',
|
||||
'help.guide.read-place.step.2':
|
||||
'ヘッダーは丸い写真、名前、住所、正確な座標です。写真のまわりの「営業中」の緑のリング、または「営業時間外」の赤のリングは、TREK がその場所の営業時間を知っていれば、その場所自身の時計でいま開いているかどうかを伝えます。右の X でカードをまた閉じます。',
|
||||
'ヘッダーは丸い写真と、1行に収まった名前と住所です。ツールチップには住所全体が出ます。その下のピルは、その場所自身の時計でいま「営業中」か「営業時間外」かを示し、写真のまわりにもそれに合った緑か赤のリングが付きます。ピルには電話番号(クリックすると電話アプリに渡されます)と正確な座標もあります。右の X でカードをまた閉じます。',
|
||||
'help.guide.read-place.step.3':
|
||||
'その下は旅行者それぞれがつけた星で、平均と投票数が付きます。まだ誰もつけていない間は「未評価」です。そのすぐ下に、場所が持っていれば電話番号があります。クリックすると番号が電話アプリに渡されます。',
|
||||
'ヘッダーのすぐ下に最初に来るのが「評価」で、旅行者それぞれがつけた星に、平均と投票数が付きます。まだ誰もつけていない間は「未評価」です。',
|
||||
'help.guide.read-place.step.4':
|
||||
'次に説明、その下にメモがあります。どちらも場所のフォームに書いたテキストが描画されたもので、リストもリンクも太字もそのまま効きます。',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2202,17 +2203,17 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': '立ち寄り先に付いた予約',
|
||||
'help.guide.place-booking.goal': '立ち寄り先に属する予約を読み、開き、新しい予約を留めます。',
|
||||
'help.guide.place-booking.step.1':
|
||||
'予約が属する立ち寄り先を開きます。カードには「確定」または「保留」と予約の名前が入った帯が出ます。',
|
||||
'help.guide.place-booking.step.2': '帯には「日付」「時間」「予約コード」と、予約が持つメモが載ります。',
|
||||
'help.guide.place-booking.step.3': '帯をクリックします。予約が地図の上に開きます。',
|
||||
'予約が属する立ち寄り先を開きます。カードの「予約」の下に、予約の名前と「確定」または「保留」の入った小さなカードとして並びます。',
|
||||
'help.guide.place-booking.step.2': '予約カードには「日付」「時間」「予約コード」と、予約が持つメモが載ります。',
|
||||
'help.guide.place-booking.step.3': '予約カードをクリックします。予約が地図の上に開きます。',
|
||||
'help.guide.place-booking.step.4':
|
||||
'予約の下部にある「編集」で、その予約自身のフォームが開きます。そこの「日への割り当てにリンク」が予約を立ち寄り先に留めるもので、ここではすでにこの立ち寄り先の名前が入っています。フォームをまた閉じます。',
|
||||
'help.guide.place-booking.step.5':
|
||||
'立ち寄り先の新しい予約は日程の列から始めます。立ち寄り先にマウスを乗せ、その末尾の + をクリックします。フォームは「新しい予約」として開き、すでにその立ち寄り先にリンクされています。',
|
||||
'立ち寄り先の新しい予約は日程の列から始めます。立ち寄り先にマウスを乗せ、その末尾のチケットである「予約を追加」をクリックします。フォームは「新しい予約」として開き、すでにその立ち寄り先にリンクされています。',
|
||||
'help.guide.place-booking.result':
|
||||
'予約は立ち寄り先にぶら下がります。カードにも、日の中にもあり、そのファイルはここの「ファイル」にも一覧されます。',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'帯は予約が留められている立ち寄り先にしか出ません。立ち寄り先のない予約は「予約」タブにあります。',
|
||||
'予約カードは予約が留められている立ち寄り先にしか出ません。立ち寄り先のない予約は「予約」タブにあります。',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'1つの立ち寄り先を複数の予約が共有できます。昼食と、同じ扉から始まるツアーのように。',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2445,7 +2446,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'いちばん上はその日の天気です。「…の予報」がどの場所のものかを示します。その日の最初の立ち寄り先か、朝を迎えるホテルです。',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'「予約」はその日の予約を、種類、属する立ち寄り先、時刻とともに並べます。緑は確定、琥珀色はまだ保留です。ここは読むだけで、予約を変えるのは「予約」タブです。',
|
||||
'「予約」はその日の予約を、種類、属する立ち寄り先、時刻とともに並べます。緑は確定、琥珀色はまだ保留で、行をクリックすると予約が開きます。',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'「宿泊先」はこの日にかかるすべての宿泊を出します。「チェックイン」と「チェックアウト」はそれぞれの日に付き、チェックインの受付時間帯、チェックアウトの時刻、確認番号も出ます。',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2476,7 +2477,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.1':
|
||||
'「…の予報」が、数値がどの場所のものかを示します。その日の最初の立ち寄り先、立ち寄り先のない日は朝を迎えるホテルです。',
|
||||
'help.guide.day-weather.step.2': '大きい数字がその日の気温で、その隣に最低と最高、そして天気の状態が言葉で出ます。',
|
||||
'help.guide.day-weather.step.3': 'その下のチップは、降水確率、降水量、いちばん強い風、日の出と日の入りです。',
|
||||
'help.guide.day-weather.step.3': 'その右のピルは、降水確率、降水量、いちばん強い風、日の出と日の入りです。',
|
||||
'help.guide.day-weather.step.4':
|
||||
'いちばん下はその日の1時間ごと、2時間おきです。時刻、アイコン、気温、降水確率が出ます。50% を超える時間は青く塗られます。',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2508,17 +2509,18 @@ const help: TranslationStrings = {
|
||||
'宿はまず旅行の場所である必要があります。ほかの場所と同じように場所の列で作ってください。選択画面には、すでにあるものしか出ません。',
|
||||
'help.guide.add-accommodation.step.2': '到着する日を開き、「宿泊先」の下の「宿泊先を追加」をクリックします。',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'「適用日」がその宿泊のかかる夜を決めます。左がチェックインの日、右がチェックアウトの日です。「すべて」は旅行全体にかかります。',
|
||||
'「適用日」がその宿泊のかかる夜を決めます。「開始」がチェックインの日、「終了」がチェックアウトの日で、「すべて」は旅行全体にかかります。ダイアログの見出しには期間と泊数が出ます。',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'「チェックイン」「チェックイン期限」「チェックアウト」を入れ、予約番号を「確認」に入れます。4つとも空のままでも構いません。',
|
||||
'help.guide.add-accommodation.step.5': '旅行の場所から宿を選びます。リストの上のチップで1つのカテゴリーに絞れます。',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'旅行の場所から宿を選びます。リストの上の「カテゴリ」で1つのカテゴリーに絞れます。',
|
||||
'help.guide.add-accommodation.step.6': '「保存」をクリックします。',
|
||||
'help.guide.add-accommodation.result':
|
||||
'宿泊はかかるすべての日に出ます。最初の日に「チェックイン」、最後の日に「チェックアウト」です。宿はチェックインの日の立ち寄り先になるので地図がそこまでの道を描き、「予約」タブに「宿泊」の予約が現れます。',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'選択画面は開いた日で始まり、チェックアウトはその翌日になります。保存する前にどちらも動かせます。',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'ホテルを作るときに旅行のカテゴリー Hotel を付けておくと、リストの上のチップで1クリックでホテルだけに絞れます。',
|
||||
'ホテルを作るときにカテゴリー Hotel を付けておくと、リストの上の「カテゴリ」で1クリックでホテルだけに絞れます。',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'時刻はすべて任意です。チェックインもコードもない宿泊でも、夜はちゃんとかかり、ルートも描かれます。',
|
||||
// edit-accommodation
|
||||
@@ -2529,7 +2531,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'その右の鉛筆で宿泊がもう一度開きます。ポップアップの表示は「宿泊先を編集」に変わります。',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'並んだ項目を直します。「チェックイン」「チェックイン期限」「チェックアウト」「確認」です。その上のかかる日と、その下の宿そのものも、ここで変えられます。',
|
||||
'「チェックイン」「チェックイン期限」「チェックアウト」「確認」を直します。その上の日と、その下の宿そのものも、ここで変えられます。',
|
||||
'help.guide.edit-accommodation.step.4': '「保存」をクリックします。',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'鉛筆の隣の X は宿泊を終わらせます。確認は出ず、それに属する「宿泊」の予約も一緒になくなります。',
|
||||
@@ -2545,7 +2547,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'「予約」はその日の予約を並べます。その日の日付が付いたものと、その日の立ち寄り先にぶら下がったものです。',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'行には予約の種類と名前が出て、立ち寄り先に属するものはその立ち寄り先が中黒のあとに続きます。時刻は右端です。',
|
||||
'行には予約の種類と名前が出て、立ち寄り先に属するものはその立ち寄り先が後ろに灰色で続きます。時刻は右端の、状態を示す点の手前です。',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'色が予約の状態を示します。緑の行は確定、琥珀色はまだ保留です。ホテルはこのリストには出ず、下に自分のブロックを持ちます。',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': '내가 지불',
|
||||
'costs.filter.owed': '받을 돈',
|
||||
'costs.addExpense': '지출 추가',
|
||||
'costs.view.label': '보기',
|
||||
'costs.view.list': '목록',
|
||||
'costs.view.table': '표',
|
||||
'costs.table.lockedPayer': '누군가 결제했습니다: 정산이 맞도록 금액은 지출에서 바꾸세요.',
|
||||
'costs.table.lockedCurrency': '{currency}(으)로 입력됨: 금액은 지출에서 바꾸세요.',
|
||||
'costs.table.summary': '요약',
|
||||
'costs.table.byCategory': '카테고리',
|
||||
'costs.table.byDate': '날짜',
|
||||
'costs.table.byPayer': '결제자',
|
||||
'costs.table.byStatus': '상태',
|
||||
'costs.table.noPayer': '아직 결제자 없음',
|
||||
'costs.table.paid': '결제됨',
|
||||
'costs.table.open': '미결제',
|
||||
'costs.editExpense': '지출 편집',
|
||||
'costs.noMatch': '검색과 일치하는 지출이 없습니다.',
|
||||
'costs.emptyText': '아직 지출이 없습니다. 첫 항목을 추가하세요.',
|
||||
|
||||
+61
-56
@@ -1605,7 +1605,7 @@ const help: TranslationStrings = {
|
||||
'오른쪽 위의 “공유”는 여행의 사람들을 엽니다. 멤버, 게스트, 초대 링크, 그리고 읽기 전용 공개 링크입니다.',
|
||||
'help.ctx.trip.bullet.4': '제목, 날짜, 커버, 통화는 “내 여행”에서 여행 카드의 연필로 편집합니다.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'열의 안쪽 가장자리에 있는 셰브론은 열을 접고, 지도가 그 자리를 차지합니다. 열 옆의 얇은 구분선은 열의 너비를 바꿉니다.',
|
||||
'열의 안쪽 가장자리에 있는 탭은 열을 접고, 지도가 그 자리를 차지합니다. 열 옆의 얇은 구분선은 열의 너비를 바꿉니다.',
|
||||
'help.ctx.trip.bullet.6': '일자 도구 모음의 실행 취소 화살표는 계획에 대한 마지막 변경을 되돌립니다.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': '멤버 추가하기',
|
||||
@@ -1669,8 +1669,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': '지도에 공간 내주기',
|
||||
'help.guide.collapse-columns.goal': '열을 접거나 더 넓게 만듭니다.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'일자 열의 안쪽 가장자리에 있는 셰브론을 클릭해 접습니다. 지도가 그 공간을 차지합니다. 장소 열에도 같은 셰브론이 있습니다.',
|
||||
'help.guide.collapse-columns.step.2': '셰브론을 다시 클릭하면 열이 돌아옵니다.',
|
||||
'일자 열의 안쪽 가장자리에 있는, 패널 아이콘이 있는 탭을 클릭해 열을 접습니다. 지도가 그 공간을 차지합니다. 장소 열에도 같은 탭이 있습니다.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'접힌 열은 지도 모서리에 타일을 남깁니다. 일자 열은 “계획”, 장소 열은 “장소”입니다. 타일을 클릭하면 열이 돌아옵니다.',
|
||||
'help.guide.collapse-columns.step.3': '열과 지도 사이의 얇은 구분선을 끌어 열의 너비를 바꿉니다.',
|
||||
'help.guide.collapse-columns.result': '너비는 기억됩니다. 다음에 열면 열은 펼쳐진 상태로 돌아옵니다.',
|
||||
'help.guide.collapse-columns.tip.1': '두 열을 한꺼번에 접으면 지도만 보이는 화면이 됩니다.',
|
||||
@@ -1693,26 +1694,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'맨 위의 “장소/활동 추가”는 직접 입력하거나 검색한 장소의 양식을 엽니다. 날짜가 열려 있는 동안에는 버튼이 “새 장소”가 되고, 그 옆의 “해당 날짜로”는 장소를 바로 그 날짜에 만듭니다.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'“파일 가져오기”는 .gpx, .kml, .kmz 파일을 받습니다. “목록 가져오기”는 공유된 Google Maps 또는 Naver Maps 목록을 받습니다. 파일은 그냥 이 열에 끌어다 놓아도 됩니다.',
|
||||
'그 옆의 가져오기 버튼에는 .gpx, .kml, .kmz 파일용 “파일 가져오기”와, Google Maps나 Naver Maps에서 공유한 목록용 “Google 목록”(네이버 목록도 켜져 있으면 “목록 가져오기”)이 있습니다. 파일은 그냥 이 열에 끌어다 놓아도 됩니다.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'드롭다운은 “전체”, “미계획”, “계획됨” 사이를 전환하고, 트랙을 가져오고 나면 “트랙”도 생깁니다. 그 아래에 검색, 카테고리 필터, 최소 평점을 위한 별이 있습니다.',
|
||||
'그 아래에는 검색이 있고, 옆에는 선택을 시작하는 체크 표시가 있으며, 필터가 한 줄로 이어집니다. “표시”는 “전체”, “미계획”, “계획됨”, 그리고 트랙을 가져온 뒤에는 “트랙” 사이를 전환하고, 각각 개수가 붙습니다. 태그 버튼은 카테고리로, 별은 최소 평점으로 거릅니다.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'행에는 사진, 이름, 그리고 설명이나 주소가 나옵니다. 클릭하면 장소 세부정보가 열리고, 날짜로 끌어다 놓을 수 있으며, 오른쪽 클릭하면 “편집”, “+ 날에 추가”, “웹사이트 열기”, “Google Maps”, “컬렉션에 저장”, “삭제”가 나옵니다.',
|
||||
'행에는 사진, 이름, 그리고 설명이나 주소가 나옵니다. 클릭하면 장소 세부정보가 열리고, 날짜로 끌어다 놓을 수 있으며, 오른쪽 클릭하면(또는 행의 점 세 개를 클릭하면) “편집”, “+ 날에 추가”, “웹사이트 열기”, “Google Maps”, “컬렉션에 저장”, “삭제”가 나옵니다.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'날짜가 열려 있으면 미계획 행 끝의 +가 그 장소를 그 날짜에 넣고, “계획됨”은 그 날짜만 보여 줍니다. “전체 여행 보기”로 다시 넓힐 수 있습니다.',
|
||||
'날짜가 열려 있으면 미계획 행 끝의 “+ 날에 추가”가 그 장소를 그 날짜에 넣고, “계획됨”은 그 날짜만 보여 줍니다. “전체 여행 보기”로 다시 넓힐 수 있습니다.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'필터 행 오른쪽 끝의 체크 표시는 선택을 시작합니다. 여러 행이 한 번에 새 카테고리를 받거나, 컬렉션에 들어가거나, 삭제됩니다.',
|
||||
'검색 옆의 체크 표시는 선택을 시작합니다. 열 아래쪽에 뜨는 바에서 여러 행에 한 번에 새 카테고리를 주거나, 컬렉션에 넣거나, 방문함으로 표시하거나, 삭제할 수 있습니다.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': '장소 만들기',
|
||||
'help.guide.create-place.goal': '계획이 알아야 할 것을 모두 담아 장소나 활동을 손으로 추가합니다.',
|
||||
'help.guide.create-place.step.1':
|
||||
'장소 열 맨 위의 “장소/활동 추가”를 클릭합니다(날짜가 열려 있으면 “새 장소”). 양식이 열립니다.',
|
||||
'help.guide.create-place.step.2':
|
||||
'맨 위의 “장소 검색...”에 장소를 입력하고 결과를 고릅니다. “이름”, “주소”, “위도”, “경도”, “웹사이트”가 채워지고, 왼쪽의 “장소 세부정보”에 사진과 영업시간, 설명이 나옵니다. Google 키가 있는 TREK에서는 “찾는 장소가 아닌가요? Google에서 검색”이 목록 아래에 있어, 같은 검색을 Google로 실행합니다.',
|
||||
'“장소 검색...”에 장소를 입력하고 결과를 고릅니다. 대화 상자 머리의 이름, “주소”, “위도”, “경도”, “웹사이트”가 채워지고, 왼쪽의 “장소 세부정보”에 사진과 영업시간, 설명이 나옵니다. Google 키가 있는 TREK에서는 “찾는 장소가 아닌가요? Google에서 검색”이 목록 아래에 있어, 같은 검색을 Google로 실행합니다. 오른쪽의 “저장된 장소”는 내 컬렉션의 장소를 같은 방식으로 보여 줍니다.',
|
||||
'help.guide.create-place.step.3':
|
||||
'“장소 세부정보”에서 “사진 선택” 아래의 사진을 클릭하면 그것이 장소의 이미지가 됩니다. “이 텍스트 사용”은 설명을 양식으로 옮깁니다.',
|
||||
'help.guide.create-place.step.4':
|
||||
'항목을 확인합니다. “이름”은 필수입니다. “설명”과 “메모”는 직접 적는 칸입니다. “주소”, “위도”, “경도”는 검색에서 오거나 직접 입력합니다. “카테고리”는 여행의 카테고리 중 하나를 고르고, 그 옆의 +는 그 자리에서 새 카테고리를 만듭니다. “웹사이트”에는 링크를 넣습니다.',
|
||||
'양식에 무엇이 있는지 확인합니다. 이름은 대화 상자 머리에 있고 유일한 필수 항목입니다. 그 아래의 “카테고리” 알약은 여행의 카테고리 중 하나를 고르고, 그 옆의 +는 그 자리에서 새 카테고리를 만듭니다. “주소”, “위도”, “경도”는 검색에서 오거나 직접 입력합니다. “설명”과 “메모”는 직접 적는 칸입니다. “웹사이트”에는 링크를 넣습니다.',
|
||||
'help.guide.create-place.step.5':
|
||||
'“추가”를 클릭합니다. 같은 이름의 장소가 이미 여행에 있으면 양식이 그렇게 알려 주고 버튼이 “그래도 추가”로 바뀝니다.',
|
||||
'help.guide.create-place.result': '장소가 목록과 지도에 있습니다. 날짜에 놓이기 전까지는 “미계획” 아래에 있습니다.',
|
||||
@@ -1730,7 +1731,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'“해당 날짜로”는 “새 장소”와 같은 양식을 열지만, “추가”를 클릭하는 순간 장소가 열린 날짜에 놓입니다.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'이미 있는 장소는 행 끝의 +로, 또는 오른쪽 클릭 후 “+ 날에 추가”로 열린 날짜에 들어갑니다.',
|
||||
'이미 있는 장소는 행 끝의 “+ 날에 추가”로, 또는 오른쪽 클릭 후 “+ 날에 추가”로 열린 날짜에 들어갑니다.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'반대 방향도 됩니다. 게다가 날짜를 먼저 열어 둘 필요도 없습니다. 장소의 행을 열에서 끌어내 날짜 카드 위에 놓으세요. 두 경유지 사이에 놓으면 정확히 그 자리에 들어갑니다.',
|
||||
'help.guide.place-to-open-day.result': '장소가 그 날짜 아래 맨 끝에 나열됩니다. 위아래로 끌어 제자리로 옮기세요.',
|
||||
@@ -1741,10 +1742,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': '목록에서 장소 찾기',
|
||||
'help.guide.filter-places.goal': '찾는 장소만 남도록 열을 좁힙니다.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'맨 위의 드롭다운은 “전체”, “미계획”(아직 어느 날짜에도 없음), “계획됨”(어느 날짜에 있음), “트랙”(가져온 GPX 트랙) 사이를 전환하고, 각각 개수가 붙습니다.',
|
||||
'help.guide.filter-places.step.2': '“장소 검색...”에 입력합니다. 입력할수록 목록이 좁아집니다.',
|
||||
'검색 아래의 드롭다운인 “표시”는 “전체”, “미계획”(아직 어느 날짜에도 없음), “계획됨”(어느 날짜에 있음), “트랙”(가져온 GPX 트랙) 사이를 전환하고, 각각 개수가 붙습니다.',
|
||||
'help.guide.filter-places.step.2': '맨 위의 “검색”에 입력합니다. 입력할수록 목록이 좁아집니다.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'“모든 카테고리”는 카테고리를 하나 이상 체크하는 목록을 엽니다. 그중에 “카테고리 없음”도 있습니다. 맨 아래의 “필터 지우기”가 되돌립니다.',
|
||||
'“표시” 옆의 태그 버튼은 카테고리를 나열합니다. 하나 이상 체크하세요. 그중에 “카테고리 없음”도 있습니다. 버튼은 체크한 수를 세고, 목록 맨 아래의 “필터 지우기”가 모두 풉니다.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'그 옆의 별은 최소 평점을 정합니다. 5+, 4+ 같은 식으로, 그만큼 이상으로 평가한 장소만 보여 줍니다.',
|
||||
'help.guide.filter-places.result': '행 위의 숫자가 몇 개의 장소가 맞는지 알려 줍니다. 필터는 서로 겹쳐서 적용됩니다.',
|
||||
@@ -1758,7 +1759,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'행을 오른쪽 클릭하고 “편집”을 고르거나, 장소를 열어 세부정보에서 “편집”을 클릭합니다.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'필요한 것을 바꿉니다. “이름”, “설명”, “메모”, “주소”, “위도”와 “경도”, “카테고리”, “웹사이트”. 날짜에서 열면 양식에 그 날짜를 위한 “이 날의 메모”와 “시작”, “종료”도 있습니다.',
|
||||
'필요한 것을 바꿉니다. 대화 상자 머리의 이름과 “카테고리” 알약, “주소”, “위도”와 “경도”, “설명”, “메모”, “웹사이트”입니다. 날짜에서 열면 양식에 “시작”과 “종료”, 그리고 “이 날의 메모”도 있습니다.',
|
||||
'help.guide.edit-place.step.3': '“업데이트”를 클릭합니다.',
|
||||
'help.guide.edit-place.result':
|
||||
'변경은 그 장소가 나오는 모든 곳에 적용됩니다. 목록, 지도, 그리고 그 장소가 있는 모든 날짜입니다.',
|
||||
@@ -1770,20 +1771,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.goal': '장소를 여행에서 완전히 빼냅니다.',
|
||||
'help.guide.delete-place.step.1': '행을 오른쪽 클릭하고 “삭제”를 고르거나, 장소 세부정보에서 “삭제”를 클릭합니다.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'확인합니다. 그 장소에 숙박이 예약되어 있거나 예약이 연결되어 있으면, 무엇이 함께 사라지는지 질문이 알려 줍니다.',
|
||||
'질문에서 “삭제”를 클릭합니다. 그 장소에 숙박이 예약되어 있거나 예약이 연결되어 있으면, 무엇이 함께 사라지는지 질문이 알려 줍니다.',
|
||||
'help.guide.delete-place.result':
|
||||
'장소가 목록, 지도, 모든 날짜에서 사라집니다. 일자 위의 도구 모음에 있는 “실행 취소”가 되돌립니다.',
|
||||
'help.guide.delete-place.tip.1': '하루에서만 장소를 빼려면 삭제 대신 그 경유지에서 “날에서 제거”를 쓰세요.',
|
||||
'help.guide.delete-place.tip.2': '여러 장소를 한 번에: 필터 옆의 체크 표시가 선택을 시작합니다.',
|
||||
'help.guide.delete-place.tip.2': '여러 장소를 한 번에: 검색 옆의 체크 표시가 선택을 시작합니다.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': '여러 장소를 한 번에 바꾸거나 삭제하기',
|
||||
'help.guide.select-places.goal': '하나씩이 아니라 한 번에 목록을 정리합니다.',
|
||||
'help.guide.select-places.step.1':
|
||||
'필터 행 오른쪽 끝의 체크 표시를 클릭합니다. 행에 체크박스가 생기고 동작이 담긴 바가 나타납니다.',
|
||||
'help.guide.select-places.step.2': '행을 체크하거나 바의 “전체 선택”을 씁니다. 바가 선택된 수를 셉니다.',
|
||||
'검색 필드 옆의 체크 표시를 클릭합니다. 행에 둥근 체크박스가 생기고, 열 아래쪽에 동작이 담긴 바가 올라옵니다.',
|
||||
'help.guide.select-places.step.2':
|
||||
'행을 클릭해 체크합니다. 바의 이중 체크 표시인 “전체 선택”은 필터가 남긴 모든 행을 고릅니다.',
|
||||
'help.guide.select-places.step.3':
|
||||
'“Change category”는 모두에게 하나의 카테고리를 줍니다. “컬렉션에 저장”은 그것들을 내 컬렉션 중 하나로 복사합니다. “선택 항목 삭제”는 확인 후 그것들을 지웁니다.',
|
||||
'help.guide.select-places.step.4': '체크 표시를 다시 클릭하면 선택에서 빠져나옵니다.',
|
||||
'바가 체크한 장소의 수를 셉니다. “카테고리 변경”은 모두에게 하나의 카테고리를 줍니다. “컬렉션에 저장”은 그것들을 내 컬렉션 중 하나로 복사합니다. “선택 항목 삭제”는 확인 후 그것들을 지웁니다.',
|
||||
'help.guide.select-places.step.4': '바 끝의 X인 “완료”가 선택을 끝냅니다.',
|
||||
'help.guide.select-places.result':
|
||||
'변경은 선택된 모든 장소에 적용됩니다. 삭제는 일자 위의 도구 모음에서 되돌릴 수 있습니다.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1793,7 +1795,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'GPX, KML, KMZ 파일에서 장소 가져오기',
|
||||
'help.guide.import-places-file.goal': 'Google My Maps, Google Earth 또는 GPS 추적기가 내보낸 것을 들여옵니다.',
|
||||
'help.guide.import-places-file.step.1': '“파일 가져오기”를 클릭하거나, 장소 열 아무 데나 파일을 끌어다 놓습니다.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'추가 버튼 옆의 가져오기 버튼을 클릭해 “파일 가져오기”를 고르거나, 장소 열 아무 데나 파일을 끌어다 놓습니다.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'파일을 고르거나 상자로 끌어다 놓습니다. GPX는 무엇을 가져올지 체크합니다. “웨이포인트”, “경로”, “트랙 (경로 형상 포함)”입니다. KML과 KMZ는 “포인트 (Placemarks)”와 “경로 (LineStrings)”입니다.',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1808,7 +1811,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': '공유된 Google Maps 또는 Naver Maps 목록 가져오기',
|
||||
'help.guide.import-places-list.goal': '공유된 목록 링크를 장소로 바꿉니다.',
|
||||
'help.guide.import-places-list.step.1': '“목록 가져오기”를 클릭하고 “Google 목록”이나 “네이버 목록”을 고릅니다.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'추가 버튼 옆의 가져오기 버튼을 클릭해 “Google 목록”을 고릅니다. 네이버 목록도 켜져 있으면 항목 이름이 “목록 가져오기”가 되고, 대화 상자가 둘 중 어느 것인지 묻습니다.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'목록의 공유 링크를 붙여 넣습니다. Google Maps 길찾기 링크도 됩니다. 그 경유지들이 주행 순서대로 장소가 됩니다.',
|
||||
'help.guide.import-places-list.step.3': '“가져오기”를 클릭합니다.',
|
||||
@@ -1826,30 +1830,30 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'맨 위의 도구 모음: “내보내기”(PDF, 캘린더, GPX), “모든 날 펼치기” / “모든 날 접기”, 실행 취소 화살표, “날짜 순서 변경”, “모든 예약 경로 표시”.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'날짜 카드: 머리글에 날짜 번호, 날씨, 제목, 날짜, 그날의 비용이 있습니다. 머리글을 클릭하면 그날이 열리고, 꺾쇠가 카드를 접습니다. “대중교통”, “교통 추가”, “메모 추가”도 머리글에 있습니다.',
|
||||
'날짜 카드: 날짜 번호와 예보가 담긴 타일, 제목과 날짜, 그리고 예약한 숙박, 렌터카, 그날의 비용을 보여 주는 알약이 있습니다. 머리글을 클릭하면 그날이 열리고, 꺾쇠가 카드를 접으며, +는 메뉴를 엽니다. “이 날짜에 장소 추가”, “숙박 추가”, “교통 추가”, “대중교통”, “메모 추가”입니다.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'날짜 안에는 순서대로 놓인 방문지가 있고, 각각 사진, 이름, 시간, 사진 위의 잠금이 있습니다. 그 밖에 메모, 그날에 속한 예약, 그리고 방문지 사이에는 각 구간의 이동 시간이 있습니다.',
|
||||
'날짜 안에는 순서대로 놓인 방문지가 있고, 각각 사진, 이름, 시간, 사진 위의 잠금, 그리고 거기에 고정된 예약이 있습니다. 그 밖에 메모, 종류별로 색이 입혀진 그날의 예약과 교통편, 그리고 방문지 사이에는 각 구간의 이동 시간이 있습니다. 모든 행에는 점 세 개 메뉴가 있으며, 오른쪽 클릭으로 여는 메뉴와 같습니다.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'방문지 아래는 경로 막대입니다. “경로”는 그날을 지도에 그리고, “최적화”는 방문지를 정렬하며, “자동차” / “도보”는 그날의 이동 수단을 정하고, “Google Maps에서 열기”와 “CoMaps에서 열기”는 그날을 넘겨줍니다.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'장소는 장소 열에서 행을 끌어다 놓거나, 그 행의 +로, 빈 날짜의 “이 날짜에 장소 추가”로, 또는 장소 세부정보에서 날짜에 올라옵니다.',
|
||||
'장소는 장소 열에서 행을 끌어다 놓거나, 그 행의 “+ 날에 추가”로, 날짜의 +나 빈 날짜의 “이 날짜에 장소 추가”로, 또는 장소 세부정보에서 날짜에 올라옵니다.',
|
||||
'help.ctx.trip-days.bullet.6': '맨 아래의 “총 비용”은 가격이 있는 모든 방문지와 예약을 여행의 통화로 더합니다.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': '하루 읽기',
|
||||
'help.guide.read-day-plan.goal': '무엇을 바꾸기 전에 날짜 카드의 각 부분이 무엇을 말하는지 압니다.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'머리글: 날짜 번호, 그날의 예보, “1일차” 또는 직접 붙인 제목, 날짜, 그날의 비용입니다. 머리글을 클릭하면 그날이 열리고(“일별 상세” 패널이 지도 위에 열립니다), 오른쪽의 꺾쇠가 카드를 접고 폅니다.',
|
||||
'머리글: 날짜 번호와 예보가 담긴 타일, 이어서 “1일차” 또는 직접 붙인 제목, 날짜, 그리고 예약한 숙박(체크인 또는 체크아웃), 렌터카, 그날의 비용을 보여 주는 알약입니다. 머리글을 클릭하면 그날이 열립니다(“일별 상세” 패널이 지도 위에 열립니다). 오른쪽의 +는 장소, 숙박, 교통, 대중교통 연결편, 메모를 추가하고, 꺾쇠는 카드를 접습니다.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'방문지: 왼쪽의 손잡이로 끌고, 사진에는 경로 최적화를 위한 잠금이 있으며, 이어서 이름, 설명, 그리고 적어 두었다면 “이 날의 메모”가 나옵니다. 시간이 있는 방문지에는 “시작”과 “종료”를 보여 주는 시간 배지가 붙고, 오른쪽 끝에 나타나는 화살표가 그것을 위나 아래로 옮깁니다.',
|
||||
'방문지: 왼쪽의 손잡이로 끌고, 사진에는 경로 최적화를 위한 잠금이 있으며, 이어서 이름, 방문지에 “시작”과 “종료”가 있으면 시간 배지, 설명, 그리고 적어 두었다면 “이 날의 메모”가 나옵니다. 오른쪽 끝의 화살표가 그것을 위나 아래로 옮기고, 점 세 개가 메뉴를 엽니다.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'그날의 예약: 방문지에 묶인 예약은 그 방문지를 “예약 확정” 또는 “예약 대기 중”으로 표시하고, 교통편은 “출발” 또는 “도착”으로 시간과 경로와 함께 나오며, 작은 토글이 그 경로를 지도에 그려 줍니다.',
|
||||
'방문지의 예약은 그 위에 “예약” 배지로 붙습니다. 확정되면 초록, 대기 중이면 호박색이며, 시간과 업체가 함께 나옵니다. 배지를 클릭하면 예약이 열리고, 그 옆의 경로 버튼이 경로를 그립니다. 교통편은 종류별로 색이 입혀진 독립된 행으로, “출발” 또는 “도착”과 시간이 나옵니다. 예약을 클릭하면 세부 정보가 열리고, 거기서 “편집”으로 바꿀 수 있습니다.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'두 방문지 사이의 연결선은 그날의 이동 수단으로 그 구간이 얼마나 걸리고 얼마나 먼지 알려 줍니다. 클릭하면 그 한 구간의 수단을 바꿀 수 있습니다.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'끝의 경로 막대: “경로”는 그날의 길을 지도에 그리고, “최적화”는 방문지의 순서를 바꾸며, 수단 버튼은 “자동차”나 “도보”를 고르고, “Google Maps에서 열기”와 “CoMaps에서 열기”는 그날을 그 앱에서 엽니다.',
|
||||
'help.guide.read-day-plan.result': '카드의 모든 기호에는 뜻이 있습니다. 아래의 안내가 그 하나하나를 바꿉니다.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'방문지를 오른쪽 클릭하면 메뉴가 나옵니다. “편집”, “날에서 제거”, “웹사이트 열기”, 내비게이션 앱(Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), “컬렉션에 저장”, “삭제”입니다.',
|
||||
'방문지를 오른쪽 클릭하거나 점 세 개를 클릭하면 메뉴가 나옵니다. “편집”, “날에서 제거”, “웹사이트 열기”, 내비게이션 앱(Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), “컬렉션에 저장”, “삭제”입니다.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'방문지에 마우스를 올리면 끝에 “예약 추가”가 나타납니다. 거기서 만든 예약은 이날의 이 방문지에 묶입니다.',
|
||||
// place-onto-day
|
||||
@@ -1858,9 +1862,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'장소 열에서 행을 날짜 카드로 끌어다 놓습니다. 두 방문지 사이에 놓으면 정확히 그 자리에 들어가고, 카드의 아무 곳에나 놓으면 뒤에 붙습니다.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'끌지 않으려면 머리글을 클릭해 날짜를 연 다음, 장소 행 끝의 +를 클릭하거나 행을 오른쪽 클릭해 “+ 날에 추가”를 고릅니다.',
|
||||
'끌지 않으려면 머리글을 클릭해 날짜를 연 다음, 장소 행 끝의 “+ 날에 추가”를 클릭하거나 행을 오른쪽 클릭해 “+ 날에 추가”를 고릅니다.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'빈 날짜에서는 “이 날짜에 장소 추가”가 장소 양식을 열고, 새 장소는 곧바로 그날에 놓입니다.',
|
||||
'날짜의 + 메뉴나 빈 날짜에 있는 “이 날짜에 장소 추가”가 장소 양식을 열고, 새 장소는 곧바로 그날에 놓입니다.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'장소 세부정보에서는 “날에 추가”가 어느 날인지 묻습니다. 날짜가 열려 있으면 장소 열의 “해당 날짜로”가 열린 날짜에 새 장소를 만듭니다.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -1888,7 +1892,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': '방문지에 시간 주기',
|
||||
'help.guide.set-stop-times.goal': '방문지가 언제 시작하고 끝나는지 정해, 하루가 일정표처럼 읽히게 합니다.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'방문지를 오른쪽 클릭해 “편집”을 고릅니다. 날짜에서 연 양식에는 아래에 “시작”과 “종료”가 있습니다.',
|
||||
'방문지를 오른쪽 클릭하거나 점 세 개를 클릭해 “편집”을 고릅니다. 날짜에서 연 양식에는 위치 바로 아래에 그날의 “시작”과 “종료”가 있습니다.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'“시작”을, 원하면 “종료”도 입력합니다. “시간 겹침:”은 그날의 다른 시간 있는 방문지와 겹친다고 알려 줍니다. “시작”보다 앞선 “종료”는 “업데이트”를 막습니다.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -1923,12 +1927,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': '날짜에 메모 추가하기',
|
||||
'help.guide.day-note.goal': '알림, 표 번호, 대안을 그날 안에 둡니다.',
|
||||
'help.guide.day-note.step.1': '날짜 머리글에서 “메모 추가”를 클릭합니다.',
|
||||
'help.guide.day-note.step.1': '날짜 머리글의 +를 클릭하고 “메모 추가”를 고릅니다.',
|
||||
'help.guide.day-note.step.2':
|
||||
'“메모”에 이름을 적으세요. 날짜 카드에 보이는 것이 그것입니다. 나머지는 “일별 메모”에 씁니다. 그 위의 “서식” 도구 모음이 글의 모양을 잡고(“굵게”, “글머리 기호 목록”, “번호 매기기 목록”, “링크”, “인용”), 왼쪽의 “미리 보기”가 어떤 카드가 되는지 보여 줍니다.',
|
||||
'대화 상자 머리에 “메모”라고 적힌 곳에 메모의 이름을 입력하세요. 날짜 카드에 보이는 것이 그것입니다. 나머지는 “일별 메모”에 씁니다. 그 위의 도구 모음이 글의 모양을 잡고(굵게, 목록, 링크, 인용), 왼쪽의 “미리 보기”가 어떤 행이 되는지 보여 줍니다.',
|
||||
'help.guide.day-note.step.3': '“아이콘”과 “색상”을 골라 메모가 방문지 사이에서 눈에 띄게 한 다음 “추가”합니다.',
|
||||
'help.guide.day-note.step.4':
|
||||
'메모는 방문지처럼 그날 안에 놓입니다. 끌어서 자리를 잡고, 오른쪽 클릭하면 “편집”과 “삭제”가 나옵니다.',
|
||||
'메모는 방문지처럼 그날 안에 놓입니다. 끌어서 자리를 잡고, 오른쪽 클릭하거나 점 세 개를 쓰면 “편집”과 “삭제”가 나옵니다.',
|
||||
'help.guide.day-note.result':
|
||||
'메모는 그날의 일부이고 PDF에도 들어갑니다. 시간이 있는 메모는 시간이 있는 방문지와 함께 정렬됩니다.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -1974,15 +1978,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': '계획 속의 예약과 교통편 읽기',
|
||||
'help.guide.bookings-in-plan.goal': '예약이 생기면 어디에 나타나는지, 어느 화면이 그것을 만드는지 압니다.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'교통편(항공, 기차, 페리, 버스, 차량)은 출발하는 날에 “출발”로, 도착하는 날에 “도착”으로 시간과 경로와 함께 나옵니다. 여러 날에 걸친 것은 그 사이의 날들을 가로지릅니다.',
|
||||
'교통편(항공, 기차, 페리, 버스, 차량)은 종류별로 색이 입혀진 행입니다. 떠나는 날에는 “출발”, 도착하는 날에는 “도착”으로 시간과 경로와 함께 나옵니다. 여러 날에 걸친 것은 그 사이의 날들을 가로지릅니다. 행을 클릭하면 예약이 열립니다.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'방문지에 묶인 예약(레스토랑, 투어)은 그 방문지를 “예약 확정” 또는 “예약 대기 중”으로 표시합니다. 날짜는 있지만 방문지가 없는 예약은 그날의 독립된 행이 됩니다.',
|
||||
'방문지에 묶인 예약(레스토랑, 투어)은 그 방문지의 “예약” 배지가 됩니다. 확정되면 초록, 대기 중이면 호박색이며, 시간이 함께 나옵니다. 날짜는 있지만 방문지가 없는 예약은 그날의 독립된 행이 됩니다.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'호텔에서 보내는 밤은 숙박입니다. 그날의 “일별 상세” 패널에서 “숙박” 아래, “체크인”부터 “체크아웃”까지 놓이고, 그 날들 각각의 경로가 거기서 시작합니다.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'지도에서는 교통편 행의 토글이 그 경로를 그립니다. 도구 모음의 “모든 예약 경로 표시”는 모두를 그립니다.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'만드는 곳: 마우스를 올린 방문지의 “예약 추가”, 날짜 머리글의 “교통 추가”와 “대중교통”, 그리고 가져오기와 파일을 갖춘 전체 목록인 “예약”과 “교통” 탭입니다.',
|
||||
'만드는 곳: 마우스를 올린 방문지의 “예약 추가”, 날짜의 + 메뉴에 있는 “교통 추가”와 “대중교통”, 그리고 가져오기와 파일을 갖춘 전체 목록인 “예약”과 “교통” 탭입니다.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'예약 하나는 계획 안의 한 자리에 있습니다. 탭은 같은 예약을 목록으로 보여 줍니다.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2012,24 +2016,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'장소 열의 행, 날짜 안의 정차지, 또는 지도의 마커를 클릭하면 카드가 지도 위에 열립니다. 날짜 안에서 고르면 어느 정차지를 뜻하는지 카드에 알려 주고, 그래야 그 정차지의 참가자와 예약이 함께 따라옵니다.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'머리 부분에는 둥근 사진, 이름, 카테고리, 주소, 좌표가 있습니다. 사진을 클릭하면 직접 고른 사진을 쓸 수 있고, 이름을 더블클릭하면 그 자리에서 장소 이름을 바꿀 수 있으며, 오른쪽의 X는 카드를 닫습니다.',
|
||||
'머리 부분에는 둥근 사진, 이름, 한 줄로 된 주소, 그리고 알려진 정보를 담은 알약이 있습니다. 영업 중인지 영업 종료인지, 카테고리, 가격, 전화번호, 좌표입니다. 사진을 클릭하면 직접 고른 사진을 쓸 수 있고, 이름을 더블클릭하면 그 자리에서 장소 이름을 바꿀 수 있으며, 오른쪽의 X는 카드를 닫습니다.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'그 아래에는 값이 있으면 그 값, 여행자마다 장소에 준 별, 설명과 메모, 그리고 정차지가 가지고 있으면 “이 날의 메모”가 있습니다.',
|
||||
'그 아래에는 여행자마다 장소에 준 별, 설명과 메모, 그리고 정차지가 가지고 있으면 “이 날의 메모”가 있습니다.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'이어서 “영업 시간”, “트랙 색상”, “트랙 통계”, “파일”이 해당되는 만큼 나옵니다. “파일”은 폴더에서 무엇이든 받고, 이 정차지의 예약에 달린 것도 함께 보여 줍니다.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'맨 아래 행에는 날짜가 열려 있는 동안 “날에 추가” 또는 “날에서 제거”가 있고, 그다음에 “컬렉션에 저장”, “내비게이션”, “웹사이트 열기”, “편집”, “삭제”가 있습니다.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'검색에서 고른 장소는 TREK 색인이나 OpenStreetMap이 아는 것을 함께 가져옵니다. 사진을 두른 초록 “영업 중” 또는 빨간 “영업 종료” 고리는 그 장소의 시계로 판단되고, 별 아래에 전화번호, 더 아래에 “영업 시간”이 있어 행에는 그날의 시간이, 클릭하면 한 주 전체가 나오며, 웹사이트는 “웹사이트 열기” 뒤에 있습니다. Google 평점은 Google 키가 있는 TREK에서 Google로 찾은 장소에만 보입니다.',
|
||||
'검색에서 고른 장소는 TREK 색인이나 OpenStreetMap이 아는 것을 함께 가져옵니다. 머리 부분의 알약 가운데 “영업 중” 또는 “영업 종료”가 있고, 사진을 두른 초록 또는 빨간 고리가 함께하며, 그 장소의 시계로 판단됩니다. 전화번호도 알약으로 나오고, 더 아래에 “영업 시간”이 있어 행에는 그날의 시간이, 클릭하면 한 주 전체가 나오며, 웹사이트는 “웹사이트 열기” 뒤에 있습니다. Google 평점은 Google 키가 있는 TREK에서 Google로 찾은 장소에만 보입니다.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': '카드가 장소에 대해 알려 주는 것',
|
||||
'help.guide.read-place.goal': '여행이 한 장소에 대해 아는 모든 것을 카드 하나에서 읽습니다.',
|
||||
'help.guide.read-place.step.1':
|
||||
'일자 열에서 읽고 싶은 정차지를 클릭합니다. 카드가 지도 위에 열리고, 그 정차지는 자기 날짜 안에서 계속 표시된 채로 있습니다.',
|
||||
'help.guide.read-place.step.2':
|
||||
'머리 부분은 둥근 사진, 이름, 주소, 정확한 좌표입니다. 사진을 두른 “영업 중”의 초록 고리나 “영업 종료”의 빨간 고리는 TREK이 그 장소의 영업 시간을 알게 되면 그 장소의 시계로 지금 열려 있는지 알려 줍니다. 오른쪽의 X가 카드를 다시 닫습니다.',
|
||||
'머리 부분은 둥근 사진과, 한 줄로 된 이름과 주소입니다. 툴팁에는 주소 전체가 나옵니다. 그 아래의 알약은 그 장소의 시계로 지금 “영업 중”인지 “영업 종료”인지 알려 주고, 사진에도 그에 맞는 초록 또는 빨간 고리가 둘러집니다. 알약에는 클릭하면 전화 앱으로 넘어가는 전화번호와 정확한 좌표도 있습니다. 오른쪽의 X가 카드를 다시 닫습니다.',
|
||||
'help.guide.read-place.step.3':
|
||||
'그 아래에는 여행자마다 장소에 준 별이 평균과 투표한 사람 수와 함께 있습니다. 아무도 주지 않았으면 “아직 평점 없음”입니다. 바로 그 아래에는 장소에 전화번호가 있으면 전화번호가 있습니다. 클릭하면 번호가 전화 앱으로 넘어갑니다.',
|
||||
'머리 부분 바로 아래에 “평점”이 먼저 나옵니다. 여행자마다 장소에 준 별이 평균과 투표한 사람 수와 함께 있습니다. 아무도 주지 않았으면 “아직 평점 없음”입니다.',
|
||||
'help.guide.read-place.step.4':
|
||||
'그다음이 설명이고, 그 아래가 메모입니다. 둘 다 장소 양식에 쓴 글을 그려 낸 것이라 목록도 링크도 굵은 글씨도 모두 작동합니다.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2120,17 +2124,17 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': '정차지에 붙은 예약',
|
||||
'help.guide.place-booking.goal': '정차지에 속한 예약을 읽고, 열고, 새 예약을 붙입니다.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'예약이 속한 정차지를 엽니다. 카드에 “확정됨” 또는 “대기 중”과 예약 이름이 담긴 띠가 보입니다.',
|
||||
'help.guide.place-booking.step.2': '그 띠에는 “날짜”, “시간”, “예약 코드”와 예약이 가진 메모가 담깁니다.',
|
||||
'help.guide.place-booking.step.3': '띠를 클릭합니다. 예약이 지도 위에 열립니다.',
|
||||
'예약이 속한 정차지를 엽니다. 카드의 “예약” 아래에 예약 이름과 “확정됨” 또는 “대기 중”이 담긴 작은 카드로 나옵니다.',
|
||||
'help.guide.place-booking.step.2': '예약 카드에는 “날짜”, “시간”, “예약 코드”와 예약이 가진 메모가 담깁니다.',
|
||||
'help.guide.place-booking.step.3': '예약 카드를 클릭합니다. 예약이 지도 위에 열립니다.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'예약 맨 아래의 “편집”이 그 예약 자체의 양식을 엽니다. 거기서 “날 배정에 연결”이 예약을 정차지에 붙이는 항목이고, 여기서는 이미 이 정차지를 가리키고 있습니다. 양식을 다시 닫습니다.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'정차지의 새 예약은 일자 열에서 시작합니다. 정차지에 마우스를 올리고 그 끝의 +를 클릭하세요. 양식이 “새 예약”으로 열리고, 이미 그 정차지에 연결되어 있습니다.',
|
||||
'정차지의 새 예약은 일자 열에서 시작합니다. 정차지에 마우스를 올리고 그 끝의 티켓인 “예약 추가”를 클릭하세요. 양식이 “새 예약”으로 열리고, 이미 그 정차지에 연결되어 있습니다.',
|
||||
'help.guide.place-booking.result':
|
||||
'예약은 정차지에 달립니다. 카드에도 있고, 날짜에도 있고, 그 파일은 여기 “파일” 아래에도 나옵니다.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'띠는 예약이 붙어 있는 정차지에서만 보입니다. 정차지가 없는 예약은 “예약” 탭에 있습니다.',
|
||||
'예약 카드는 예약이 붙어 있는 정차지에서만 보입니다. 정차지가 없는 예약은 “예약” 탭에 있습니다.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'한 정차지를 여러 예약이 나눠 가질 수 있습니다. 점심과, 같은 문에서 출발하는 투어처럼.',
|
||||
'help.guide.place-booking.tip.3': '기차, 항공편, 페리는 대신 교통 양식을 엽니다. “교통” 탭이 쓰는 그 양식입니다.',
|
||||
@@ -2354,7 +2358,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'맨 위는 그 날의 날씨입니다. “… 예보”가 어느 장소를 가리키는지 말해 줍니다. 그 날의 첫 경유지이거나, 아침을 맞는 호텔입니다.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'“예약”은 그 날의 예약을 종류, 속한 경유지, 시간과 함께 보여 줍니다. 초록은 확정됨, 호박색은 아직 대기 중입니다. 여기서는 읽기만 하고, 예약을 바꾸는 곳은 “예약” 탭입니다.',
|
||||
'“예약”은 그 날의 예약을 종류, 속한 경유지, 시간과 함께 보여 줍니다. 초록은 확정됨, 호박색은 아직 대기 중이며, 행을 클릭하면 예약이 열립니다.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'“숙박”은 이 날에 걸린 모든 숙박을 보여 줍니다. “체크인”과 “체크아웃”은 각각 해당하는 날에 붙고, 체크인 가능 시간대와 체크아웃 시간, 확인 번호도 함께 나옵니다.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2384,7 +2388,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.1':
|
||||
'“… 예보”는 숫자가 어느 장소의 것인지 알려 줍니다. 그 날의 첫 경유지, 경유지가 없는 날에는 아침을 맞는 호텔입니다.',
|
||||
'help.guide.day-weather.step.2': '큰 숫자가 그 날의 기온이고, 그 옆에 최저와 최고, 그리고 날씨 상태가 말로 나옵니다.',
|
||||
'help.guide.day-weather.step.3': '그 아래 칩들은 강수 확률, 강수량, 가장 센 바람, 그리고 일출과 일몰입니다.',
|
||||
'help.guide.day-weather.step.3': '그 오른쪽의 알약들은 강수 확률, 강수량, 가장 센 바람, 그리고 일출과 일몰입니다.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'맨 아래는 그 날의 시간별, 두 시간마다입니다. 시각, 아이콘, 기온, 강수 확률이 나옵니다. 50%를 넘는 시간은 파랗게 칠해집니다.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2415,17 +2419,18 @@ const help: TranslationStrings = {
|
||||
'숙소는 먼저 여행의 장소여야 합니다. 다른 장소와 똑같이 장소 열에서 만드세요. 선택기는 이미 있는 것만 보여 줍니다.',
|
||||
'help.guide.add-accommodation.step.2': '도착하는 날을 열고 “숙박” 아래의 “숙박 추가”를 클릭합니다.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'“적용할 날”이 이 숙박이 걸치는 밤을 정합니다. 왼쪽이 체크인 날, 오른쪽이 체크아웃 날입니다. “전체”는 여행 전체를 덮습니다.',
|
||||
'“적용할 날”이 이 숙박이 걸치는 밤을 정합니다. “시작”은 체크인 날, “종료”는 체크아웃 날이며, “전체”는 여행 전체를 덮습니다. 대화 상자 머리에는 기간과 박 수가 나옵니다.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'“체크인”, “까지”, “체크아웃”을 채우고 예약 번호를 “확인”에 넣습니다. 넷 다 비워 두어도 됩니다.',
|
||||
'help.guide.add-accommodation.step.5': '여행의 장소에서 숙소를 고릅니다. 목록 위의 칩이 한 카테고리로 좁혀 줍니다.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'여행의 장소에서 숙소를 고릅니다. 목록 위의 “카테고리”가 한 카테고리로 좁혀 줍니다.',
|
||||
'help.guide.add-accommodation.step.6': '“저장”을 클릭합니다.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'숙박은 걸치는 모든 날에 나옵니다. 첫날에 “체크인”, 마지막 날에 “체크아웃”입니다. 숙소는 체크인 날의 경유지가 되어 지도가 거기까지 가는 길을 그리고, “예약” 탭에 “숙박” 예약이 생깁니다.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'선택기는 열어 둔 날로 시작하고 체크아웃은 그 다음 날입니다. 저장하기 전에 둘 다 옮길 수 있습니다.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'호텔을 만들 때 여행의 Hotel 카테고리를 주면, 목록 위의 칩으로 한 번에 호텔만 남길 수 있습니다.',
|
||||
'호텔을 만들 때 Hotel 카테고리를 주면, 목록 위의 “카테고리”로 한 번에 호텔만 남길 수 있습니다.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'시간은 모두 선택 사항입니다. 체크인도 번호도 없는 숙박이라도 밤은 그대로 덮고 경로도 그대로 그립니다.',
|
||||
// edit-accommodation
|
||||
@@ -2436,7 +2441,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'그 오른쪽의 연필이 숙박을 다시 엽니다. 팝업은 이제 “숙박 편집”이라고 나옵니다.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'늘어선 항목을 고칩니다. “체크인”, “까지”, “체크아웃”, “확인”입니다. 그 위의 걸치는 날과 그 아래의 숙소도 여기에서 바꿀 수 있습니다.',
|
||||
'“체크인”, “까지”, “체크아웃”, “확인”을 고칩니다. 그 위의 날과 그 아래의 숙소도 여기에서 바꿀 수 있습니다.',
|
||||
'help.guide.edit-accommodation.step.4': '“저장”을 클릭합니다.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'연필 옆의 X는 숙박을 끝냅니다. 아무것도 묻지 않고, 거기 딸린 “숙박” 예약도 함께 사라집니다.',
|
||||
@@ -2452,7 +2457,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'“예약”은 그 날의 예약을 보여 줍니다. 그 날로 날짜가 잡힌 것과, 그 날의 경유지에 달린 것입니다.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'한 행에는 예약의 종류와 이름이 나오고, 경유지에 속하면 가운뎃점 뒤에 그 경유지가 붙습니다. 시간은 오른쪽 끝에 있습니다.',
|
||||
'한 행에는 예약의 종류와 이름이 나오고, 경유지에 속하면 그 뒤에 회색으로 그 경유지가 붙습니다. 시간은 오른쪽 끝, 상태 점 앞에 있습니다.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'색이 예약의 상태를 말해 줍니다. 초록 행은 확정됨, 호박색 행은 아직 대기 중입니다. 호텔은 이 목록에 없고 아래에 자기 블록을 가집니다.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Door mij betaald',
|
||||
'costs.filter.owed': 'Mij verschuldigd',
|
||||
'costs.addExpense': 'Uitgave toevoegen',
|
||||
'costs.view.label': 'Weergave',
|
||||
'costs.view.list': 'Lijst',
|
||||
'costs.view.table': 'Tabel',
|
||||
'costs.table.lockedPayer': 'Iemand heeft betaald: pas het bedrag aan in de uitgave, zodat de saldi blijven kloppen.',
|
||||
'costs.table.lockedCurrency': 'Ingevoerd in {currency}: pas het bedrag aan in de uitgave.',
|
||||
'costs.table.summary': 'Overzicht',
|
||||
'costs.table.byCategory': 'Categorie',
|
||||
'costs.table.byDate': 'Dag',
|
||||
'costs.table.byPayer': 'Betaler',
|
||||
'costs.table.byStatus': 'Status',
|
||||
'costs.table.noPayer': 'Nog geen betaler',
|
||||
'costs.table.paid': 'Betaald',
|
||||
'costs.table.open': 'Open',
|
||||
'costs.editExpense': 'Uitgave bewerken',
|
||||
'costs.noMatch': 'Geen uitgaven komen overeen met je zoekopdracht.',
|
||||
'costs.emptyText': 'Nog geen uitgaven. Voeg je eerste toe.',
|
||||
|
||||
+58
-56
@@ -1763,7 +1763,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Titel, data, cover en valuta bewerk je vanuit Mijn reizen, met het potlood op de reiskaart.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'De chevrons aan de binnenrand van een kolom klappen haar weg en de kaart neemt de ruimte; de dunne scheidingslijn naast een kolom verandert haar breedte.',
|
||||
'Het lipje aan de binnenrand van een kolom klapt haar weg en de kaart neemt de ruimte; de dunne scheidingslijn naast een kolom verandert haar breedte.',
|
||||
'help.ctx.trip.bullet.6':
|
||||
'De ongedaan-maken-pijl in de werkbalk van de dagen neemt de laatste wijziging aan het plan terug.',
|
||||
// add-member
|
||||
@@ -1832,8 +1832,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Ruimte maken voor de kaart',
|
||||
'help.guide.collapse-columns.goal': 'Klap een kolom weg of geef haar meer breedte.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Klik op de chevron aan de binnenrand van de dagenkolom om haar in te klappen; de kaart neemt de ruimte. De plekkenkolom heeft dezelfde chevron.',
|
||||
'help.guide.collapse-columns.step.2': 'Klik nog eens op de chevron om de kolom terug te halen.',
|
||||
'Klik op het lipje aan de binnenrand van de dagenkolom, dat met het paneelpictogram, om de kolom weg te klappen; de kaart neemt de ruimte. De plekkenkolom heeft hetzelfde lipje.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Een weggeklapte kolom laat een tegel achter in de hoek van de kaart, Plan voor de dagen en Plaatsen voor de plekken. Klik erop om de kolom terug te halen.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Sleep de dunne scheidingslijn tussen een kolom en de kaart om de breedte van de kolom te veranderen.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1860,15 +1861,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Plaats/activiteit toevoegen bovenaan opent het formulier voor een plek die je typt of zoekt. Zolang een dag open is heet de knop Nieuwe plek, en Naar dag ernaast maakt de plek meteen op die dag aan.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Bestand importeren neemt .gpx-, .kml- en .kmz-bestanden; Lijst importeren neemt een gedeelde lijst van Google Maps of Naver Maps. Een bestand kun je ook gewoon op de kolom laten vallen.',
|
||||
'De importknop ernaast biedt Bestand importeren, voor .gpx-, .kml- en .kmz-bestanden, en Google Lijst (Lijst importeren als ook Naver-lijsten aanstaan) voor een lijst die vanuit Google Maps of Naver Maps is gedeeld. Een bestand kun je ook gewoon op de kolom laten vallen.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Het uitklapmenu wisselt tussen Alle, Ongepland, Gepland en, zodra een track is geïmporteerd, Tracks; daaronder zitten het zoekveld, het categoriefilter en de ster voor een minimale beoordeling.',
|
||||
'Daaronder het zoekveld, met ernaast het vinkje dat een selectie start, en een rij filters: Tonen wisselt tussen Alle, Ongepland, Gepland en, zodra een track is geïmporteerd, Tracks, elk met zijn aantal; de labelknop filtert op categorie en de ster op een minimale beoordeling.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Een rij toont afbeelding, naam en beschrijving of adres. Klik erop voor de plaatsdetails, sleep hem op een dag, of klik met rechts voor Bewerken, + Dag, Website openen, Google Maps, In collectie opslaan en Verwijderen.',
|
||||
'Een rij toont afbeelding, naam en beschrijving of adres. Klik erop voor de plaatsdetails, sleep hem op een dag, of klik met rechts (of op zijn drie puntjes) voor Bewerken, + Dag, Website openen, Google Maps, In collectie opslaan en Verwijderen.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Met een dag open zet een + aan het eind van een ongeplande rij de plek op die dag, en Gepland toont alleen die dag, met Hele reis tonen om weer te verbreden.',
|
||||
'Met een dag open zet + Dag aan het eind van een ongeplande rij de plek op die dag, en Gepland toont alleen die dag, met Hele reis tonen om weer te verbreden.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Het vinkje uiterst rechts in de filterrij start een selectie: meerdere rijen tegelijk krijgen een nieuwe categorie, gaan in een collectie of worden verwijderd.',
|
||||
'Het vinkje naast het zoekveld start een selectie: via de balk onderaan de kolom krijgen meerdere rijen tegelijk een nieuwe categorie, gaan ze in een collectie, worden ze als bezocht gemarkeerd of worden ze verwijderd.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Een plek aanmaken',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1876,11 +1877,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Klik bovenaan de plekkenkolom op Plaats/activiteit toevoegen (Nieuwe plek zolang een dag open is). Het formulier gaat open.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Typ de plek bovenin in Plaatsen zoeken... en kies een resultaat. Naam, Adres, Breedtegraad, Lengtegraad en Website vullen zich, en Plaatsdetails links toont afbeeldingen, de openingstijden en een beschrijving erbij. Op een TREK met Google-sleutel staat onder de lijst Niet de juiste plek? Zoek in plaats daarvan op Google, dat dezelfde zoekopdracht nog eens via Google draait.',
|
||||
'Typ de plek in Plaatsen zoeken... en kies een resultaat. De naam in de kop van het venster, Adres, Breedtegraad, Lengtegraad en Website vullen zich, en Plaatsdetails links toont afbeeldingen, de openingstijden en een beschrijving erbij. Op een TREK met Google-sleutel staat onder de lijst Niet de juiste plek? Zoek in plaats daarvan op Google, dat dezelfde zoekopdracht nog eens via Google draait. Opgeslagen plekken rechts biedt op dezelfde manier de plekken uit je collecties aan.',
|
||||
'help.guide.create-place.step.3':
|
||||
'In Plaatsdetails maakt een klik op een afbeelding onder Kies een afbeelding deze tot de afbeelding van de plek; Deze tekst gebruiken neemt de beschrijving over in het formulier.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Loop de velden na: Naam is verplicht; Beschrijving en Notities zijn van jou; Adres, Breedtegraad en Lengtegraad komen uit de zoekopdracht of typ je zelf; Categorie kiest een van de categorieën van de reis, en de + ernaast maakt er ter plekke een nieuwe aan; Website neemt de link.',
|
||||
'Loop na wat het formulier bevat: de naam staat in de kop van het venster en is het enige verplichte veld; de pil Categorie eronder kiest een van de categorieën van de reis, en de + ernaast maakt er ter plekke een nieuwe aan. Adres, Breedtegraad en Lengtegraad komen uit de zoekopdracht of typ je zelf; Beschrijving en Notities zijn van jou; Website neemt de link.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Klik op Toevoegen. Ligt er al een plek met dezelfde naam in de reis, dan zegt het formulier dat en wordt de knop Toch toevoegen.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1900,7 +1901,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Naar dag opent hetzelfde formulier als Nieuwe plek, alleen komt de plek op de open dag terecht op het moment dat je op Toevoegen klikt.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Een plek die al bestaat gaat naar de open dag met de + aan het eind van zijn rij, of met rechts klikken, + Dag.',
|
||||
'Een plek die al bestaat gaat naar de open dag met + Dag aan het eind van zijn rij, of met rechts klikken, + Dag.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Andersom kan ook, en zonder eerst een dag te openen: sleep de rij van de plek uit de kolom en laat hem los op een dagkaart. Laat je hem tussen twee stops los, dan belandt hij precies daar.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1912,10 +1913,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Een plek in de lijst vinden',
|
||||
'help.guide.filter-places.goal': 'Versmal de kolom tot de plekken die je zoekt.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Het uitklapmenu bovenaan wisselt tussen Alle, Ongepland (nog op geen enkele dag), Gepland (op een dag) en Tracks (geïmporteerde GPX-tracks), elk met zijn aantal.',
|
||||
'help.guide.filter-places.step.2': 'Typ in Plaatsen zoeken...; de lijst wordt smaller terwijl je typt.',
|
||||
'Tonen, het uitklapmenu onder het zoekveld, wisselt tussen Alle, Ongepland (nog op geen enkele dag), Gepland (op een dag) en Tracks (geïmporteerde GPX-tracks), elk met zijn aantal.',
|
||||
'help.guide.filter-places.step.2': 'Typ bovenaan in Zoeken; de lijst wordt smaller terwijl je typt.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Alle categorieën opent een lijst om een of meer categorieën aan te vinken, Geen categorie daarbij; Filter wissen onderaan zet hem terug.',
|
||||
'De labelknop naast Tonen toont de categorieën: vink er een of meer aan, Geen categorie daarbij. De knop telt wat aangevinkt is, en Filter wissen onderaan de lijst heft ze allemaal op.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'De ster ernaast zet een minimale beoordeling: 5+, 4+ enzovoort tonen alleen plekken die je minstens zo hoog hebt beoordeeld.',
|
||||
'help.guide.filter-places.result': 'Het aantal boven de rijen zegt hoeveel plekken passen; de filters werken samen.',
|
||||
@@ -1929,7 +1930,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Klik met rechts op de rij en kies Bewerken, of open de plek en klik op Bewerken in de details.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Wijzig wat je nodig hebt: Naam, Beschrijving, Notities, Adres, Breedtegraad en Lengtegraad, Categorie, Website. Vanuit een dag geopend heeft het formulier ook Notities voor deze dag en Starttijd en Einde voor die dag.',
|
||||
'Wijzig wat je nodig hebt: de naam en de pil Categorie in de kop van het venster, Adres, Breedtegraad en Lengtegraad, Beschrijving, Notities en Website. Vanuit een dag geopend heeft het formulier ook Starttijd en Einde en Notities voor deze dag.',
|
||||
'help.guide.edit-place.step.3': 'Klik op Bijwerken.',
|
||||
'help.guide.edit-place.result':
|
||||
'De wijziging geldt overal waar de plek opduikt: in de lijst, op de kaart en op elke dag waarop hij staat.',
|
||||
@@ -1943,22 +1944,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Klik met rechts op de rij en kies Verwijderen, of klik op Verwijderen in de plaatsdetails.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Bevestig. Is er op de plek een nacht geboekt, of hangt er een boeking aan, dan zegt de vraag wat er meegaat.',
|
||||
'Klik in de vraag op Verwijderen. Is er op de plek een nacht geboekt, of hangt er een boeking aan, dan zegt de vraag wat er meegaat.',
|
||||
'help.guide.delete-place.result':
|
||||
'De plek is weg uit de lijst, van de kaart en van elke dag; Ongedaan maken in de werkbalk boven de dagen haalt hem terug.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Om een plek alleen van één dag te halen, gebruik je in plaats daarvan Verwijderen van dag op die stop.',
|
||||
'help.guide.delete-place.tip.2': 'Meerdere plekken tegelijk: het vinkje naast de filters start een selectie.',
|
||||
'help.guide.delete-place.tip.2': 'Meerdere plekken tegelijk: het vinkje naast het zoekveld start een selectie.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Meerdere plekken tegelijk wijzigen of verwijderen',
|
||||
'help.guide.select-places.goal': 'Ruim de lijst in één keer op in plaats van plek voor plek.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Klik op het vinkje uiterst rechts in de filterrij. De rijen krijgen vakjes en er verschijnt een balk met de acties.',
|
||||
'Klik op het vinkje naast het zoekveld. De rijen krijgen ronde vakjes, en onderaan de kolom schuift een balk met de acties omhoog.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Vink de rijen aan, of gebruik Alles selecteren in de balk; de balk telt wat er geselecteerd is.',
|
||||
'Klik op de rijen om ze aan te vinken. Alles selecteren, het dubbele vinkje in de balk, neemt elke rij die de filters overlaten.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category geeft ze allemaal één categorie; In collectie opslaan kopieert ze naar een van je collecties; Selectie verwijderen haalt ze na een bevestiging weg.',
|
||||
'help.guide.select-places.step.4': 'Klik nog eens op het vinkje om de selectie te verlaten.',
|
||||
'De balk telt de aangevinkte plekken. Categorie wijzigen geeft ze allemaal één categorie; In collectie opslaan kopieert ze naar een van je collecties; Selectie verwijderen haalt ze na een bevestiging weg.',
|
||||
'help.guide.select-places.step.4': 'Klaar, de X aan het eind van de balk, beëindigt de selectie.',
|
||||
'help.guide.select-places.result':
|
||||
'De wijziging geldt voor elke geselecteerde plek; een verwijdering kun je ongedaan maken vanuit de werkbalk boven de dagen.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1970,7 +1971,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.goal':
|
||||
'Haal binnen wat Google My Maps, Google Earth of een GPS-tracker heeft geëxporteerd.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Klik op Bestand importeren, of laat het bestand ergens op de plekkenkolom vallen.',
|
||||
'Klik op de importknop naast de toevoegknop en kies Bestand importeren, of laat het bestand ergens op de plekkenkolom vallen.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Kies het bestand of sleep het in het vak. Bij een GPX vink je aan wat je importeert: Waypoints, Routes, Tracks (met routegeometrie); bij KML en KMZ Punten (Placemarks) en Paden (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1986,7 +1987,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Een gedeelde lijst van Google Maps of Naver Maps importeren',
|
||||
'help.guide.import-places-list.goal': 'Maak van de link van een gedeelde lijst plekken.',
|
||||
'help.guide.import-places-list.step.1': 'Klik op Lijst importeren en kies Google Lijst of Naver Lijst.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Klik op de importknop naast de toevoegknop en kies Google Lijst. Als ook Naver-lijsten aanstaan, heet het item Lijst importeren en vraagt het venster welke van de twee.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Plak de gedeelde link van de lijst. Een routebeschrijvingslink van Google Maps werkt ook: zijn stops worden plekken, in rijvolgorde.',
|
||||
'help.guide.import-places-list.step.3': 'Klik op Importeren.',
|
||||
@@ -2004,24 +2006,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'De werkbalk bovenaan: Exporteren (PDF, agenda, GPX), Expand all days / Collapse all days, de pijl Ongedaan maken, Dagen herordenen en Alle boekingsroutes tonen.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Een dagkaart: nummer, weer, titel, datum en de kosten van de dag in de kop; klik op de kop om de dag te openen, het pijltje vouwt hem dicht. Openbaar vervoer, Vervoer toevoegen en Notitie toevoegen staan ook in de kop.',
|
||||
'Een dagkaart: een tegel met het dagnummer en de voorspelling, de titel en de datum, en pillen voor de geboekte nacht, een huurauto en de kosten van de dag. Klik op de kop om de dag te openen, het pijltje vouwt hem dicht, en de + opent een menu: Plaats toevoegen aan deze dag, Accommodatie toevoegen, Vervoer toevoegen, Openbaar vervoer en Notitie toevoegen.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Binnen een dag: de stops op volgorde, elk met afbeelding, naam, tijd en een slotje op de afbeelding; notities; boekingen die bij de dag horen; en tussen de stops de reistijd van elk traject.',
|
||||
'Binnen een dag: de stops op volgorde, elk met afbeelding, naam, tijd, een slotje op de afbeelding en de boekingen die eraan vastzitten; notities; de boekingen en het vervoer van de dag, getint naar hun soort; en tussen de stops de reistijd van elk traject. Elke rij heeft een menu met drie puntjes, hetzelfde dat een klik met rechts opent.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Onder de stops de routebalk: Route tekent de dag op de kaart, Optimaliseren sorteert de stops, Auto / Lopen zet de vervoerswijze van de dag, Openen in Google Maps en Openen in CoMaps geven de dag door.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Plekken komen op een dag door een rij uit de plekkenkolom te slepen, met de + op die rij, met Plaats toevoegen aan deze dag op een lege dag, of vanuit de plaatsdetails.',
|
||||
'Plekken komen op een dag door een rij uit de plekkenkolom te slepen, met + Dag op die rij, met Plaats toevoegen aan deze dag via de + van de dag of op een lege dag, of vanuit de plaatsdetails.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Totale kosten onderaan telt elke stop en elke boeking met een prijs bij elkaar op, in de valuta van de reis.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Een dag lezen',
|
||||
'help.guide.read-day-plan.goal': 'Weten wat elk onderdeel van een dagkaart je vertelt voordat je iets verandert.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'De kop: het dagnummer, de voorspelling voor de dag, Dag 1 of de titel die je hebt gegeven, de datum en de kosten van de dag. Klik op de kop om de dag te openen (de Dagdetails gaan open boven de kaart); het pijltje rechts vouwt de kaart dicht en weer open.',
|
||||
'De kop: een tegel met het dagnummer en de voorspelling, dan Dag 1 of de titel die je hebt gegeven, de datum, en pillen voor de geboekte nacht (inchecken of uitchecken), een huurauto en de kosten van de dag. Klik op de kop om de dag te openen (de Dagdetails gaan open boven de kaart); de + rechts voegt een plek, een verblijf, vervoer, een ov-verbinding of een notitie toe, en het pijltje vouwt de kaart dicht.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Een stop: het greepje links sleept hem, de afbeelding draagt een slotje voor de route-optimalisatie, dan de naam, de beschrijving en, als ze er zijn, de Notities voor deze dag. Een tijdlabel toont Starttijd en Einde als de stop die heeft; de pijlen die aan het rechteruiteinde verschijnen zetten hem omhoog of omlaag.',
|
||||
'Een stop: het greepje links sleept hem, de afbeelding draagt een slotje voor de route-optimalisatie, dan de naam, een tijdlabel als de stop Starttijd en Einde heeft, de beschrijving en, als ze er zijn, de Notities voor deze dag. De pijlen aan het rechteruiteinde zetten hem omhoog of omlaag, en de drie puntjes openen zijn menu.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Een boeking op de dag: een reservering bij een stop markeert die stop als Reservering bevestigd of Reservering in behandeling, en vervoer verschijnt als Vertrek of Aankomst met tijd en traject, met een klein schakelaartje dat die route op de kaart tekent.',
|
||||
'Een boeking bij een stop zit erop als label Reservering, groen als hij bevestigd is en amberkleurig zolang hij in behandeling is, met zijn tijd en zijn aanbieder; klik op het label om de boeking te openen, en de routeknop ernaast tekent zijn route. Vervoer is een eigen rij, getint naar zijn soort, met Vertrek of Aankomst en zijn tijd. Klik op een boeking en de details gaan open; Bewerken daar wijzigt hem.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Tussen twee stops zegt de verbinding hoe lang het traject duurt en hoe ver het is, in de vervoerswijze van de dag; klik erop om de wijze voor dat ene traject te veranderen.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -2029,7 +2031,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Elk symbool op de kaart heeft een betekenis; de gidsen hieronder veranderen ze stuk voor stuk.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Klik met rechts op een stop voor zijn menu: Bewerken, Verwijderen van dag, Website openen, de navigatie-apps (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), In collectie opslaan, Verwijderen.',
|
||||
'Klik met rechts op een stop, of op zijn drie puntjes, voor zijn menu: Bewerken, Verwijderen van dag, Website openen, de navigatie-apps (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), In collectie opslaan, Verwijderen.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Ga met de muis over een stop en aan het eind verschijnt Boeking toevoegen: een reservering die je daar maakt hangt aan deze stop op deze dag.',
|
||||
// place-onto-day
|
||||
@@ -2039,9 +2041,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Sleep een rij uit de plekkenkolom op de dagkaart. Laat hem tussen twee stops vallen om hem precies daar te zetten, of ergens op de kaart om hem achteraan toe te voegen.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Zonder slepen: open de dag met een klik op de kop, klik dan op de + aan het eind van de rij van de plek, of klik met rechts op de rij en kies + Dag.',
|
||||
'Zonder slepen: open de dag met een klik op de kop, klik dan op + Dag aan het eind van de rij van de plek, of klik met rechts op de rij en kies + Dag.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Op een lege dag opent Plaats toevoegen aan deze dag het plaatsformulier, en de nieuwe plek belandt meteen op de dag.',
|
||||
'Plaats toevoegen aan deze dag, in het +-menu van de dag of op een lege dag, opent het plaatsformulier, en de nieuwe plek belandt meteen op de dag.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Vanuit de plaatsdetails vraagt Toevoegen aan dag welke dag; vanuit de kop van de dag maakt Naar dag in de plekkenkolom een nieuwe plek op de geopende dag aan.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2071,7 +2073,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Vastleggen wanneer een stop begint en eindigt, zodat de dag als een dienstregeling leest.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Klik met rechts op de stop en kies Bewerken. Geopend vanuit de dag heeft het formulier onderaan Starttijd en Einde.',
|
||||
'Klik met rechts op de stop, of op zijn drie puntjes, en kies Bewerken. Geopend vanuit de dag heeft het formulier Starttijd en Einde voor die dag, direct onder de locatie.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Vul Starttijd in en, als je wilt, Einde. Tijdoverlap met: waarschuwt dat een andere stop van de dag met een tijd overlapt; een Einde vóór de Starttijd blokkeert Bijwerken.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2112,13 +2114,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Een notitie aan een dag toevoegen',
|
||||
'help.guide.day-note.goal': 'Een geheugensteun, een ticketnummer of een plan B in de dag zelf bewaren.',
|
||||
'help.guide.day-note.step.1': 'Klik op Notitie toevoegen in de kop van de dag.',
|
||||
'help.guide.day-note.step.1': 'Klik op de + in de kop van de dag en kies Notitie toevoegen.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Geef hem een naam onder Notitie, dat is wat er in de dag te zien is, en schrijf de rest onder Dagnotitie. De werkbalk erboven maakt de tekst op (Vet, Opsomming, Link, Citaat), en Voorbeeld, links, toont hoe de notitie er in de dag uit komt te zien.',
|
||||
'Typ de naam van de notitie in de kop van het venster, waar Notitie staat; dat is wat er in de dag te zien is. Schrijf de rest onder Dagnotitie: de werkbalk erboven maakt de tekst op (vet, lijsten, links, citaten), en Voorbeeld, links, toont de rij die eruit ontstaat.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Kies een Pictogram en een Kleur, zodat de notitie opvalt tussen de stops, en dan Toevoegen.',
|
||||
'help.guide.day-note.step.4':
|
||||
'De notitie staat in de dag als een stop: sleep hem op zijn plek, klik met rechts voor Bewerken en Verwijderen.',
|
||||
'De notitie staat in de dag als een stop: sleep hem op zijn plek, en klik met rechts of gebruik zijn drie puntjes voor Bewerken en Verwijderen.',
|
||||
'help.guide.day-note.result':
|
||||
'De notitie hoort bij de dag, ook in de PDF; een notitie met een tijd sorteert mee met de stops met een tijd.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2167,15 +2169,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Boekingen en vervoer in het plan lezen',
|
||||
'help.guide.bookings-in-plan.goal': 'Weten waar een boeking opduikt zodra ze bestaat, en welk scherm haar aanmaakt.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Vervoer (Vlucht, Trein, Veerboot, Bus, Auto) verschijnt op de dag van vertrek als Vertrek en op de dag van aankomst als Aankomst, met tijd en traject; een rit over meerdere dagen overspant de dagen ertussen.',
|
||||
'Vervoer (Vlucht, Trein, Veerboot, Bus, Auto) is een rij, getint naar zijn soort: Vertrek op de dag van vertrek, Aankomst op de dag van aankomst, met tijd en traject; een rit over meerdere dagen overspant de dagen ertussen. Klik op de rij en de boeking gaat open.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Een reservering die aan een stop hangt (een Restaurant, een Rondleiding) markeert die stop als Reservering bevestigd of Reservering in behandeling; een boeking met een dag maar zonder stop is een eigen rij in de dag.',
|
||||
'Een reservering die aan een stop hangt (een Restaurant, een Rondleiding) is een label Reservering op die stop, groen als hij bevestigd is en amberkleurig zolang hij in behandeling is, met zijn tijd; een boeking met een dag maar zonder stop is een eigen rij in de dag.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Een nacht in een hotel is een accommodatie: die staat in de Dagdetails onder Accommodatie, van Inchecken tot Uitchecken, en de route van elk van die dagen begint daar.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Op de kaart tekent het schakelaartje op een vervoersrij zijn route; Alle boekingsroutes tonen in de werkbalk tekent ze allemaal.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Aanmaken: Boeking toevoegen op een stop waar je met de muis overheen gaat, Vervoer toevoegen en Openbaar vervoer in de kop van de dag, en de tabbladen Boekingen en Transport voor de volledige lijst met import en bestanden.',
|
||||
'Aanmaken: Boeking toevoegen op een stop waar je met de muis overheen gaat, Vervoer toevoegen en Openbaar vervoer in het +-menu van de dag, en de tabbladen Boekingen en Transport voor de volledige lijst met import en bestanden.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Eén boeking, één plek in het plan; de tabbladen zijn dezelfde boekingen als lijst.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2206,24 +2208,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Klik op een rij in de plekkenkolom, op een stop in een dag of op een marker op de kaart, en de plaatsdetails gaan boven de kaart open. Kies je hem in een dag, dan weten de details welke stop je bedoelt, en dat is wat de deelnemers van de stop en zijn boeking meebrengt.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'De kop draagt de ronde afbeelding, de naam, de categorie, het adres en de coördinaten. Klik op de afbeelding om er een van jezelf te nemen, dubbelklik op de naam om de plek ter plekke te hernoemen, en de X rechts sluit de details.',
|
||||
'De kop draagt de ronde afbeelding, de naam, het adres op één regel en pillen voor wat bekend is: open of gesloten, de categorie, de prijs, het telefoonnummer en de coördinaten. Klik op de afbeelding om er een van jezelf te nemen, dubbelklik op de naam om de plek ter plekke te hernoemen, en de X rechts sluit de details.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Daaronder: de prijs als hij er een heeft, de sterren die elke reiziger de plek gaf, de beschrijving en de notities, en Notities voor deze dag als de stop die draagt.',
|
||||
'Daaronder: de sterren die elke reiziger de plek gaf, de beschrijving en de notities, en Notities voor deze dag als de stop die draagt.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Openingstijden, Routekleur, Routegegevens en Bestanden volgen, voor zover ze van toepassing zijn. Bestanden neemt alles uit je mappen en toont ook wat aan de boeking van deze stop hangt.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'De rij onderaan: Toevoegen aan dag of Verwijderen van dag zolang een dag open is, dan In collectie opslaan, Navigatie, Website openen, Bewerken en Verwijderen.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Een plek die uit het zoeken is gekozen draagt wat de TREK-index of OpenStreetMap over hem weten: een groene ring met Openingstijden of een rode met Gesloten om de afbeelding, beoordeeld naar de eigen klok van de plek, het telefoonnummer onder de sterren, Openingstijden verderop met de regel van de dag op de rij en de hele week achter een klik, en zijn website achter Website openen. De beoordeling van Google verschijnt alleen bij een plek die via Google is gevonden, op een TREK met een Google-sleutel.',
|
||||
'Een plek die uit het zoeken is gekozen draagt wat de TREK-index of OpenStreetMap over hem weten: Openingstijden of Gesloten tussen de pillen van de kop, met een groene of rode ring om de afbeelding, beoordeeld naar de eigen klok van de plek, ook zijn telefoonnummer als pil, Openingstijden verderop met de regel van de dag op de rij en de hele week achter een klik, en zijn website achter Website openen. De beoordeling van Google verschijnt alleen bij een plek die via Google is gevonden, op een TREK met een Google-sleutel.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Wat de plaatsdetails je over een plek vertellen',
|
||||
'help.guide.read-place.goal': 'Lees alles wat de reis over een plek weet, in één venster.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Klik in de dagenkolom op de stop die je wilt lezen. De plaatsdetails gaan boven de kaart open en de stop blijft gemarkeerd in zijn dag.',
|
||||
'help.guide.read-place.step.2':
|
||||
'De kop: de ronde afbeelding, de naam, het adres en de exacte coördinaten. Een groene ring met Openingstijden, of een rode met Gesloten, om de afbeelding zegt of de plek op dit moment open is, naar zijn eigen klok, zodra TREK zijn tijden kent. De X rechts sluit de details weer.',
|
||||
'De kop: de ronde afbeelding, de naam en het adres op één regel; de tooltip ervan bevat het hele adres. De pillen daaronder zeggen met Openingstijden of Gesloten of de plek op dit moment open is, naar zijn eigen klok, met een bijpassende groene of rode ring om de afbeelding, en dragen het telefoonnummer, dat een klik doorgeeft aan je telefoon-app, en de exacte coördinaten. De X rechts sluit de details weer.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Daaronder de sterren die elke reiziger de plek gaf, met het gemiddelde en hoeveel er stemden. Nog niet beoordeeld zolang niemand dat deed. Direct daaronder het telefoonnummer waar de plek er een heeft: een klik erop geeft het nummer door aan je telefoon-app.',
|
||||
'Beoordeling komt als eerste onder de kop: de sterren die elke reiziger de plek gaf, met het gemiddelde en hoeveel er stemden. Nog niet beoordeeld zolang niemand dat deed.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Dan de beschrijving en daaronder de notities. Allebei zijn het de tekst uit het formulier van de plek, gerenderd: lijsten, links en vet werken allemaal.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2318,18 +2320,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'De boeking op een stop',
|
||||
'help.guide.place-booking.goal': 'Lees de boeking die bij een stop hoort, open hem, en hang er een nieuwe aan.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Open de stop waar de boeking bij hoort. De details tonen een strook met Bevestigd of In behandeling en de naam van de boeking.',
|
||||
'Open de stop waar de boeking bij hoort. De details tonen hem onder Boekingen als een eigen kaartje, met de naam van de boeking en Bevestigd of In behandeling.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'De strook draagt de Datum, de Tijd en de Boekingscode, en de notities die de boeking heeft.',
|
||||
'help.guide.place-booking.step.3': 'Klik op de strook. De boeking gaat boven de kaart open.',
|
||||
'Het boekingskaartje draagt de Datum, de Tijd en de Boekingscode, en de notities die de boeking heeft.',
|
||||
'help.guide.place-booking.step.3': 'Klik op het boekingskaartje. De boeking gaat boven de kaart open.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Bewerken onderaan de boeking opent zijn eigen formulier. Koppelen aan dagtoewijzing is daar wat een boeking aan een stop hangt, en hier noemt het deze al. Sluit het formulier weer.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Een nieuwe boeking voor een stop begint in de dagenkolom: zweef over de stop en klik op de + aan het eind. Het formulier gaat open als Nieuwe reservering, al eraan gekoppeld.',
|
||||
'Een nieuwe boeking voor een stop begint in de dagenkolom: zweef over de stop en klik op Boeking toevoegen, het ticket aan het eind. Het formulier gaat open als Nieuwe reservering, al eraan gekoppeld.',
|
||||
'help.guide.place-booking.result':
|
||||
'De boeking hangt aan de stop: hij staat in de details, hij staat in de dag, en zijn bestanden staan hier ook onder Bestanden.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'De strook verschijnt alleen bij de stop waaraan de boeking hangt. Een boeking zonder stop woont op het tabblad Boekingen.',
|
||||
'Het boekingskaartje verschijnt alleen bij de stop waaraan de boeking hangt. Een boeking zonder stop woont op het tabblad Boekingen.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Meerdere boekingen kunnen één stop delen: de lunch en de tour die bij dezelfde deur vertrekt.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2576,7 +2578,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Bovenaan het weer van de dag. Voorspelling voor noemt de plek waar het voor geldt: de eerste stop van de dag, of het hotel waar je wakker wordt.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Reserveringen zet de boekingen van die dag op een rij, elk met zijn soort, de stop waar hij bij hoort en zijn tijden. Groen betekent bevestigd, amberkleurig nog in behandeling; het is alleen een uitlezing, boekingen wijzig je onder Boekingen.',
|
||||
'Reserveringen zet de boekingen van die dag op een rij, elk met zijn soort, de stop waar hij bij hoort en zijn tijden. Groen betekent bevestigd, amberkleurig nog in behandeling, en een klik op een rij opent de boeking.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Accommodatie toont elke nacht die over deze dag geboekt is, met Inchecken en Uitchecken op de dagen waarop ze gebeuren, het incheckvenster, de uitchecktijd en het bevestigingsnummer.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2610,7 +2612,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Het grote getal is de temperatuur van de dag, ernaast de laagste en de hoogste, en de toestand in woorden.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'De chips eronder: de regenkans, hoeveel er valt, de sterkste wind, en zonsopgang en zonsondergang.',
|
||||
'De pillen rechts ervan: de regenkans, hoeveel er valt, de sterkste wind, en zonsopgang en zonsondergang.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Onderaan de dag uur voor uur, om het andere uur: de tijd, het icoon, de temperatuur en de regenkans. Een uur boven de 50 procent krijgt een blauwe achtergrond.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2644,18 +2646,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.add-accommodation.step.2':
|
||||
'Open de dag van je aankomst en klik onder Accommodatie op Accommodatie toevoegen.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Toepassen op dagen zegt welke nachten het verblijf beslaat: de incheckdag links, de uitcheckdag rechts. Alle neemt de hele reis.',
|
||||
'Toepassen op dagen zegt welke nachten het verblijf beslaat: Begin is de incheckdag, Einde de uitcheckdag, en Alle neemt de hele reis. De kop van het venster toont de periode en het aantal nachten.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Vul Inchecken, Tot en Uitchecken in, en zet het nummer van de boeking onder Bevestiging. Alle vier mogen leeg blijven.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Kies het pand uit de plekken van de reis. De chips boven de lijst beperken haar tot één categorie.',
|
||||
'Kies het pand uit de plekken van de reis. Categorie boven de lijst beperkt haar tot één categorie.',
|
||||
'help.guide.add-accommodation.step.6': 'Klik op Opslaan.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Het verblijf staat op elke dag die het beslaat, Inchecken op de eerste en Uitchecken op de laatste. Het pand wordt een stop op de incheckdag, zodat de kaart de weg ernaartoe tekent, en onder Boekingen verschijnt een boeking van het type Accommodatie.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'De kiezer opent op de dag waar je vandaan kwam, met uitchecken de dag erna; beide kun je nog verzetten voor je opslaat.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Geef het hotel bij het aanmaken de categorie Hotel van de reis en de chips boven de lijst beperken haar met één klik tot je hotels.',
|
||||
'Geef het hotel bij het aanmaken de categorie Hotel, en Categorie boven de lijst beperkt haar met één klik tot je hotels.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'De tijden zijn allemaal optioneel: een verblijf zonder inchecktijd en zonder code beslaat zijn nachten toch en tekent toch zijn route.',
|
||||
// edit-accommodation
|
||||
@@ -2667,7 +2669,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Het potlood aan de rechterkant ervan opent het verblijf opnieuw. Het venster heet nu Accommodatie bewerken.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Verbeter de rij velden: Inchecken, Tot, Uitchecken en Bevestiging. De dagen erboven en het pand eronder zijn hier ook te wijzigen.',
|
||||
'Verbeter Inchecken, Tot, Uitchecken en Bevestiging. De dagen erboven en het pand eronder zijn hier ook te wijzigen.',
|
||||
'help.guide.edit-accommodation.step.4': 'Klik op Opslaan.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'Het kruisje naast het potlood beëindigt het verblijf. Het vraagt niets, en de boeking van het type Accommodatie die erbij hoort gaat mee.',
|
||||
@@ -2683,7 +2685,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Reserveringen zet de boekingen van de dag op een rij: die op hem gedateerd zijn, en die aan een van zijn stops hangen.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Een rij toont wat voor soort boeking het is, zijn naam en, als hij bij een stop hoort, die stop na een punt. Zijn tijden staan helemaal rechts.',
|
||||
'Een rij toont wat voor soort boeking het is, zijn naam en, als hij bij een stop hoort, die stop in grijs erachter. Zijn tijden staan helemaal rechts, vóór de statusstip.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'De kleur zegt hoe een boeking ervoor staat: een groene rij is bevestigd, een amberkleurige is nog in behandeling. Accommodaties staan niet in deze lijst, die hebben hun eigen blok eronder.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Opłacone przeze mnie',
|
||||
'costs.filter.owed': 'Należy mi się',
|
||||
'costs.addExpense': 'Dodaj wydatek',
|
||||
'costs.view.label': 'Widok',
|
||||
'costs.view.list': 'Lista',
|
||||
'costs.view.table': 'Tabela',
|
||||
'costs.table.lockedPayer': 'Ktoś zapłacił: zmień kwotę w wydatku, aby salda się zgadzały.',
|
||||
'costs.table.lockedCurrency': 'Wpisano w {currency}: zmień kwotę w wydatku.',
|
||||
'costs.table.summary': 'Podsumowanie',
|
||||
'costs.table.byCategory': 'Kategoria',
|
||||
'costs.table.byDate': 'Dzień',
|
||||
'costs.table.byPayer': 'Płacący',
|
||||
'costs.table.byStatus': 'Status',
|
||||
'costs.table.noPayer': 'Jeszcze bez płacącego',
|
||||
'costs.table.paid': 'Zapłacone',
|
||||
'costs.table.open': 'Otwarte',
|
||||
'costs.editExpense': 'Edytuj wydatek',
|
||||
'costs.noMatch': 'Brak wydatków pasujących do wyszukiwania.',
|
||||
'costs.emptyText': 'Brak wydatków. Dodaj pierwszy.',
|
||||
|
||||
+60
-56
@@ -1722,7 +1722,7 @@ const help: TranslationStrings = {
|
||||
'Udostępnij u góry po prawej otwiera ludzi podróży: członków, gości, link zaproszenia i publiczny link tylko do odczytu.',
|
||||
'help.ctx.trip.bullet.4': 'Tytuł, daty, okładkę i walutę edytujesz z Moje podróże, ołówkiem na karcie podróży.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Strzałki przy wewnętrznej krawędzi kolumny zwijają ją, a mapa zajmuje miejsce; cienki separator obok kolumny zmienia jej szerokość.',
|
||||
'Języczek przy wewnętrznej krawędzi kolumny zwija ją, a mapa zajmuje miejsce; cienki separator obok kolumny zmienia jej szerokość.',
|
||||
'help.ctx.trip.bullet.6': 'Strzałka cofania na pasku narzędzi dni cofa ostatnią zmianę w planie.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Dodać członka',
|
||||
@@ -1787,8 +1787,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Zrobić miejsce dla mapy',
|
||||
'help.guide.collapse-columns.goal': 'Zwiń kolumnę albo daj jej więcej szerokości.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Kliknij strzałkę przy wewnętrznej krawędzi kolumny dni, żeby ją zwinąć; mapa zajmuje miejsce. Kolumna miejsc ma taką samą strzałkę.',
|
||||
'help.guide.collapse-columns.step.2': 'Kliknij strzałkę ponownie, żeby przywrócić kolumnę.',
|
||||
'Kliknij języczek przy wewnętrznej krawędzi kolumny dni, ten z ikoną panelu, żeby zwinąć kolumnę; mapa zajmuje miejsce. Kolumna miejsc ma taki sam języczek.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Zwinięta kolumna zostawia kafelek w rogu mapy, Plan dla dni i Miejsca dla miejsc. Kliknij go, żeby przywrócić kolumnę.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Przeciągnij cienki separator między kolumną a mapą, żeby zmienić szerokość kolumny.',
|
||||
'help.guide.collapse-columns.result': 'Szerokości są zapamiętywane; kolumny wracają otwarte przy następnej wizycie.',
|
||||
@@ -1812,26 +1813,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Dodaj miejsce/atrakcję u góry otwiera formularz miejsca, które wpiszesz lub wyszukasz. Gdy dzień jest otwarty, przycisk brzmi Nowe miejsce, a Do dnia obok niego tworzy miejsce od razu w tym dniu.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importuj plik przyjmuje pliki .gpx, .kml i .kmz; Import listy przyjmuje udostępnioną listę z Google Maps lub Naver Maps. Plik można też po prostu upuścić na kolumnę.',
|
||||
'Przycisk importu obok niego oferuje Importuj plik, dla plików .gpx, .kml i .kmz, oraz Lista Google (Import listy, gdy włączone są też listy Naver) dla listy udostępnionej z Google Maps lub Naver Maps. Plik można też po prostu upuścić na kolumnę.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Lista rozwijana przełącza między Wszystkie, Niezaplanowane, Zaplanowane i, gdy trasa została zaimportowana, Trasy; poniżej siedzą wyszukiwanie, filtr kategorii i gwiazdka dla minimalnej oceny.',
|
||||
'Pod nimi wyszukiwanie, obok niego ptaszek, który uruchamia zaznaczanie, i rząd filtrów: Pokaż przełącza między Wszystkie, Niezaplanowane, Zaplanowane i, gdy trasa została zaimportowana, Trasy, każde ze swoją liczbą; przycisk z etykietą filtruje według kategorii, a gwiazdka według minimalnej oceny.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Wiersz pokazuje zdjęcie, nazwę i opis albo adres. Kliknij go, by zobaczyć szczegóły miejsca, przeciągnij go na dzień albo kliknij prawym przyciskiem po Edytuj, + Dzień, Otwórz stronę internetową, Google Maps, Zapisz w kolekcji i Usuń.',
|
||||
'Wiersz pokazuje zdjęcie, nazwę i opis albo adres. Kliknij go, by zobaczyć szczegóły miejsca, przeciągnij go na dzień albo kliknij prawym przyciskiem (lub kliknij jego trzy kropki) po Edytuj, + Dzień, Otwórz stronę internetową, Google Maps, Zapisz w kolekcji i Usuń.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Gdy dzień jest otwarty, + na końcu niezaplanowanego wiersza umieszcza miejsce w tym dniu, a Zaplanowane wypisują tylko ten dzień, z Pokaż całą podróż, by znów poszerzyć.',
|
||||
'Gdy dzień jest otwarty, + Dzień na końcu niezaplanowanego wiersza umieszcza miejsce w tym dniu, a Zaplanowane wypisują tylko ten dzień, z Pokaż całą podróż, by znów poszerzyć.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Ptaszek na prawym końcu wiersza filtrów uruchamia zaznaczanie: kilka wierszy naraz dostaje nową kategorię, trafia do kolekcji albo zostaje usuniętych.',
|
||||
'Ptaszek obok wyszukiwania uruchamia zaznaczanie: z paska u dołu kolumny kilka wierszy naraz dostaje nową kategorię, trafia do kolekcji, zostaje oznaczonych jako odwiedzone albo usuniętych.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Utworzyć miejsce',
|
||||
'help.guide.create-place.goal': 'Dodaj miejsce lub atrakcję ręcznie, ze wszystkim, co plan musi o nim wiedzieć.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Kliknij Dodaj miejsce/atrakcję u góry kolumny miejsc (Nowe miejsce, gdy dzień jest otwarty). Otwiera się formularz.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Wpisz miejsce u góry w Szukaj miejsc... i wybierz wynik. Nazwa, Adres, Szerokość, Długość i Strona internetowa wypełniają się, a Szczegóły miejsca po lewej pokazują zdjęcia, godziny otwarcia i opis. W TREK-u z kluczem Google pod listą siedzi To nie to miejsce? Poszukaj w Google i uruchamia to samo wyszukiwanie przez Google.',
|
||||
'Wpisz miejsce w Szukaj miejsc... i wybierz wynik. Nazwa w nagłówku okna, Adres, Szerokość, Długość i Strona internetowa wypełniają się, a Szczegóły miejsca po lewej pokazują zdjęcia, godziny otwarcia i opis. W TREK-u z kluczem Google pod listą siedzi To nie to miejsce? Poszukaj w Google i uruchamia to samo wyszukiwanie przez Google. Zapisane miejsca po prawej w ten sam sposób podsuwają miejsca z Twoich kolekcji.',
|
||||
'help.guide.create-place.step.3':
|
||||
'W Szczegółach miejsca kliknięcie zdjęcia pod Wybierz zdjęcie ustawia obrazek miejsca; Użyj tego tekstu przenosi opis do formularza.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Sprawdź pola: Nazwa jest wymagana; Opis i Notatki są Twoje; Adres, Szerokość i Długość pochodzą z wyszukiwania albo są wpisane; Kategoria wybiera jedną z kategorii podróży, a + obok niej tworzy nową na miejscu; Strona internetowa przyjmuje link.',
|
||||
'Sprawdź, co zawiera formularz: nazwa siedzi w nagłówku okna i jest jedynym wymaganym polem; plakietka Kategoria pod nią wybiera jedną z kategorii podróży, a + obok niej tworzy nową na miejscu. Adres, Szerokość i Długość pochodzą z wyszukiwania albo są wpisane; Opis i Notatki są Twoje; Strona internetowa przyjmuje link.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Kliknij Dodaj. Jeśli miejsce o tej samej nazwie już jest w podróży, formularz to mówi, a przycisk zmienia się w Dodaj mimo to.',
|
||||
'help.guide.create-place.result': 'Miejsce jest na liście i na mapie, pod Niezaplanowane, dopóki nie trafi do dnia.',
|
||||
@@ -1850,7 +1851,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Do dnia otwiera ten sam formularz co Nowe miejsce, tylko miejsce ląduje w otwartym dniu w chwili, gdy klikniesz Dodaj.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Miejsce, które już istnieje, trafia do otwartego dnia przez + na końcu swojego wiersza albo prawym przyciskiem, + Dzień.',
|
||||
'Miejsce, które już istnieje, trafia do otwartego dnia przez + Dzień na końcu swojego wiersza albo prawym przyciskiem, + Dzień.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Odwrotnie też działa, i to bez otwierania dnia: przeciągnij wiersz miejsca poza kolumnę i upuść go na kartę dnia. Upuszczone między dwa przystanki trafia dokładnie tam.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1862,10 +1863,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Znaleźć miejsce na liście',
|
||||
'help.guide.filter-places.goal': 'Zawęź kolumnę do miejsc, których szukasz.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Lista rozwijana u góry przełącza między Wszystkie, Niezaplanowane (jeszcze w żadnym dniu), Zaplanowane (w dniu) i Trasy (zaimportowane trasy GPX), każde ze swoją liczbą.',
|
||||
'help.guide.filter-places.step.2': 'Pisz w Szukaj miejsc...; lista zawęża się, gdy piszesz.',
|
||||
'Pokaż, lista rozwijana pod wyszukiwaniem, przełącza między Wszystkie, Niezaplanowane (jeszcze w żadnym dniu), Zaplanowane (w dniu) i Trasy (zaimportowane trasy GPX), każde ze swoją liczbą.',
|
||||
'help.guide.filter-places.step.2': 'Pisz w Szukaj u góry; lista zawęża się, gdy piszesz.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Wszystkie kategorie otwierają listę, na której zaznaczasz jedną lub więcej kategorii, wśród nich Brak kategorii; Wyczyść filtr na jej dole resetuje to.',
|
||||
'Przycisk z etykietą obok Pokaż wypisuje kategorie: zaznacz jedną lub więcej, wśród nich Brak kategorii. Przycisk liczy, co jest zaznaczone, a Wyczyść filtr u dołu listy znosi wszystkie.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Gwiazdka obok ustawia minimalną ocenę: 5+, 4+ i tak dalej pokazują tylko miejsca, które oceniłeś co najmniej tak wysoko.',
|
||||
'help.guide.filter-places.result': 'Liczba nad wierszami mówi, ile miejsc pasuje; filtry się łączą.',
|
||||
@@ -1879,7 +1880,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Kliknij wiersz prawym przyciskiem i wybierz Edytuj, albo otwórz miejsce i kliknij Edytuj w jego szczegółach.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Zmień, co trzeba: Nazwa, Opis, Notatki, Adres, Szerokość i Długość, Kategoria, Strona internetowa. Otwarty z dnia formularz ma dodatkowo Notatki na ten dzień oraz Początek i Koniec dla tego dnia.',
|
||||
'Zmień, co trzeba: nazwa i plakietka Kategoria w nagłówku okna, Adres, Szerokość i Długość, Opis, Notatki i Strona internetowa. Otwarty z dnia formularz ma dodatkowo Początek i Koniec oraz Notatki na ten dzień.',
|
||||
'help.guide.edit-place.step.3': 'Kliknij Aktualizuj.',
|
||||
'help.guide.edit-place.result':
|
||||
'Zmiana obowiązuje wszędzie, gdzie miejsce się pojawia: na liście, na mapie i w każdym dniu, w którym jest.',
|
||||
@@ -1893,20 +1894,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Kliknij wiersz prawym przyciskiem i wybierz Usuń, albo kliknij Usuń w szczegółach miejsca.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Potwierdź. Jeśli w tym miejscu zarezerwowano nocleg albo powiązana jest z nim rezerwacja, pytanie mówi, co idzie razem z nim.',
|
||||
'Kliknij Usuń w pytaniu. Jeśli w tym miejscu zarezerwowano nocleg albo powiązana jest z nim rezerwacja, pytanie mówi, co idzie razem z nim.',
|
||||
'help.guide.delete-place.result':
|
||||
'Miejsce znika z listy, z mapy i z każdego dnia; Cofnij na pasku narzędzi nad dniami przywraca je.',
|
||||
'help.guide.delete-place.tip.1': 'Aby zdjąć miejsce tylko z jednego dnia, użyj na tym przystanku Usuń z dnia.',
|
||||
'help.guide.delete-place.tip.2': 'Kilka miejsc naraz: ptaszek obok filtrów uruchamia zaznaczanie.',
|
||||
'help.guide.delete-place.tip.2': 'Kilka miejsc naraz: ptaszek obok wyszukiwania uruchamia zaznaczanie.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Zmienić lub usunąć kilka miejsc naraz',
|
||||
'help.guide.select-places.goal': 'Uporządkuj listę za jednym razem, zamiast miejsce po miejscu.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Kliknij ptaszek na prawym końcu wiersza filtrów. Wiersze dostają pola wyboru i pojawia się pasek z akcjami.',
|
||||
'help.guide.select-places.step.2': 'Zaznacz wiersze albo Zaznacz wszystko na pasku; pasek liczy, co jest zaznaczone.',
|
||||
'Kliknij ptaszek obok pola wyszukiwania. Wiersze dostają okrągłe pola wyboru, a u dołu kolumny wysuwa się pasek z akcjami.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Klikaj wiersze, by je zaznaczyć. Zaznacz wszystko, podwójny ptaszek na pasku, bierze każdy wiersz, który zostawiają filtry.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category nadaje im wszystkim jedną kategorię; Zapisz w kolekcji kopiuje je do jednej z Twoich kolekcji; Usuń wybrane usuwa je po potwierdzeniu.',
|
||||
'help.guide.select-places.step.4': 'Kliknij ptaszek jeszcze raz, by wyjść z zaznaczania.',
|
||||
'Pasek liczy zaznaczone miejsca. Zmień kategorię nadaje im wszystkim jedną kategorię; Zapisz w kolekcji kopiuje je do jednej z Twoich kolekcji; Usuń wybrane usuwa je po potwierdzeniu.',
|
||||
'help.guide.select-places.step.4': 'Gotowe, X na końcu paska, kończy zaznaczanie.',
|
||||
'help.guide.select-places.result':
|
||||
'Zmiana obowiązuje dla każdego zaznaczonego miejsca; usunięcie można cofnąć z paska narzędzi nad dniami.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1916,7 +1918,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'Zaimportować miejsca z pliku GPX, KML lub KMZ',
|
||||
'help.guide.import-places-file.goal': 'Wprowadź to, co wyeksportowały Google My Maps, Google Earth albo tracker GPS.',
|
||||
'help.guide.import-places-file.step.1': 'Kliknij Importuj plik albo upuść plik gdziekolwiek na kolumnie miejsc.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Kliknij przycisk importu obok przycisku dodawania i wybierz Importuj plik albo upuść plik gdziekolwiek na kolumnie miejsc.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Wybierz plik albo przeciągnij go do ramki. Przy GPX zaznacz, co zaimportować: Punkty trasy, Trasy, Trasy GPS (ze śladem); przy KML i KMZ Punkty (Placemarks) i Ścieżki (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1931,7 +1934,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Zaimportować udostępnioną listę Google Maps lub Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Zamień link udostępnionej listy w miejsca.',
|
||||
'help.guide.import-places-list.step.1': 'Kliknij Import listy i wybierz Lista Google albo Lista Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Kliknij przycisk importu obok przycisku dodawania i wybierz Lista Google. Gdy włączone są też listy Naver, pozycja nazywa się Import listy, a okno pyta, którą z dwóch wybrać.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Wklej udostępniony link listy. Działa też link do trasy w Google Maps: jego przystanki stają się miejscami, w kolejności jazdy.',
|
||||
'help.guide.import-places-list.step.3': 'Kliknij Importuj.',
|
||||
@@ -1949,31 +1953,31 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Pasek narzędzi u góry: Eksportuj (PDF, kalendarz, GPX), Expand all days / Collapse all days, strzałka cofania, Zmień kolejność dni i Pokaż wszystkie trasy rezerwacji.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Karta dnia: numer, pogoda, tytuł, data i koszt dnia w nagłówku; kliknij nagłówek, by otworzyć dzień, strzałka po prawej zwija kartę. Transport publiczny, Dodaj transport i Dodaj notatkę też siedzą w nagłówku.',
|
||||
'Karta dnia: kafelek z numerem dnia i prognozą, tytuł i data oraz plakietki dla zarezerwowanego noclegu, wynajętego auta i kosztu dnia. Kliknij nagłówek, by otworzyć dzień, strzałka zwija kartę, a + otwiera menu: Dodaj miejsce do tego dnia, Dodaj zakwaterowanie, Dodaj transport, Transport publiczny i Dodaj notatkę.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Wewnątrz dnia: przystanki w kolejności, każdy ze zdjęciem, nazwą, godziną i kłódką na zdjęciu; notatki; rezerwacje, które należą do dnia; a między przystankami czas przejazdu każdego odcinka.',
|
||||
'Wewnątrz dnia: przystanki w kolejności, każdy ze zdjęciem, nazwą, godziną, kłódką na zdjęciu i przypiętymi do niego rezerwacjami; notatki; rezerwacje i transporty dnia, zabarwione według rodzaju; a między przystankami czas przejazdu każdego odcinka. Każdy wiersz ma menu pod trzema kropkami, to samo, które otwiera prawy przycisk.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Pod przystankami pasek trasy: Trasa rysuje dzień na mapie, Optymalizuj porządkuje przystanki, Samochodem / Pieszo ustawia środek transportu dnia, a Otwórz w Google Maps i Otwórz w CoMaps przekazują dzień dalej.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Miejsca trafiają do dnia przez przeciągnięcie wiersza z kolumny miejsc, przez + na tym wierszu, przez Dodaj miejsce do tego dnia w pustym dniu albo ze szczegółów miejsca.',
|
||||
'Miejsca trafiają do dnia przez przeciągnięcie wiersza z kolumny miejsc, przez + Dzień na tym wierszu, przez Dodaj miejsce do tego dnia z + dnia albo w pustym dniu, albo ze szczegółów miejsca.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Łączny koszt na dole sumuje każdy przystanek i każdą rezerwację z ceną, w walucie podróży.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Przeczytać dzień',
|
||||
'help.guide.read-day-plan.goal': 'Poznaj, co mówi ci każda część karty dnia, zanim cokolwiek zmienisz.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Nagłówek: numer dnia, prognoza na ten dzień, Dzień 1 albo tytuł, który mu nadałeś, data i koszt dnia. Kliknij nagłówek, by otworzyć dzień (nad mapą otwierają się jego szczegóły); strzałka po prawej zwija i rozwija kartę.',
|
||||
'Nagłówek: kafelek z numerem dnia i prognozą, potem Dzień 1 albo tytuł, który mu nadałeś, data oraz plakietki dla zarezerwowanego noclegu (zameldowanie albo wymeldowanie), wynajętego auta i kosztu dnia. Kliknij nagłówek, by otworzyć dzień (nad mapą otwierają się jego szczegóły); + po prawej dodaje miejsce, pobyt, transport, połączenie komunikacją publiczną albo notatkę, a strzałka zwija kartę.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Przystanek: uchwyt po lewej go przeciąga, zdjęcie nosi kłódkę dla optymalizacji trasy, dalej idą nazwa, opis i, jeśli są ustawione, Notatki na ten dzień. Plakietka godziny pokazuje Początek i Koniec, gdy przystanek je ma; strzałki, które pojawiają się na jego prawym końcu, przesuwają go w górę lub w dół.',
|
||||
'Przystanek: uchwyt po lewej go przeciąga, zdjęcie nosi kłódkę dla optymalizacji trasy, dalej idą nazwa, plakietka godziny, gdy przystanek ma Początek i Koniec, opis i, jeśli są ustawione, Notatki na ten dzień. Strzałki na jego prawym końcu przesuwają go w górę lub w dół, a trzy kropki otwierają jego menu.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Rezerwacja w dniu: rezerwacja przy przystanku oznacza przystanek jako Rezerwacja potwierdzona albo Rezerwacja oczekująca, a transport pokazuje się jako Wylot albo Przylot ze swoją godziną i trasą, z małym przełącznikiem, który rysuje tę trasę na mapie.',
|
||||
'Rezerwacja przy przystanku siedzi na nim jako plakietka Rezerwacja, zielona, gdy jest potwierdzona, i bursztynowa, dopóki oczekuje, z godziną i usługodawcą; kliknij plakietkę, by otworzyć rezerwację, a przycisk trasy obok rysuje jej trasę. Transport to osobny wiersz, zabarwiony według rodzaju, z Wylot albo Przylot i godziną. Kliknij rezerwację, a otworzą się jej szczegóły; Edytuj tam ją zmienia.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Między dwoma przystankami łącznik mówi, ile odcinek trwa i jak jest długi, w środku transportu dnia; kliknij go, by zmienić środek dla tego jednego odcinka.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'Pasek trasy na końcu: Trasa rysuje drogę dnia na mapie, Optymalizuj zmienia kolejność przystanków, przyciski środka transportu wybierają Samochodem albo Pieszo, a Otwórz w Google Maps i Otwórz w CoMaps otwierają tam dzień.',
|
||||
'help.guide.read-day-plan.result': 'Każdy symbol na karcie coś znaczy; poradniki poniżej zmieniają każdy z nich.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Kliknij przystanek prawym przyciskiem po jego menu: Edytuj, Usuń z dnia, Otwórz stronę internetową, aplikacje nawigacyjne (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Zapisz w kolekcji, Usuń.',
|
||||
'Kliknij przystanek prawym przyciskiem albo kliknij jego trzy kropki, by otworzyć menu: Edytuj, Usuń z dnia, Otwórz stronę internetową, aplikacje nawigacyjne (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Zapisz w kolekcji, Usuń.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Najedź na przystanek, a na jego końcu pojawi się Dodaj rezerwację: rezerwacja utworzona tam jest przypisana do tego przystanku w tym dniu.',
|
||||
// place-onto-day
|
||||
@@ -1982,9 +1986,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Przeciągnij wiersz z kolumny miejsc na kartę dnia. Upuść go między dwa przystanki, by trafił dokładnie tam, albo gdziekolwiek na karcie, by dopisał się na końcu.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Bez przeciągania: otwórz dzień, klikając jego nagłówek, potem kliknij + na końcu wiersza miejsca albo kliknij wiersz prawym przyciskiem i wybierz + Dzień.',
|
||||
'Bez przeciągania: otwórz dzień, klikając jego nagłówek, potem kliknij + Dzień na końcu wiersza miejsca albo kliknij wiersz prawym przyciskiem i wybierz + Dzień.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'W pustym dniu Dodaj miejsce do tego dnia otwiera formularz miejsca, a nowe miejsce ląduje w dniu od razu.',
|
||||
'Dodaj miejsce do tego dnia, w menu + dnia albo w pustym dniu, otwiera formularz miejsca, a nowe miejsce ląduje w dniu od razu.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Ze szczegółów miejsca Dodaj do dnia pyta, do którego dnia; gdy dzień jest otwarty z nagłówka, Do dnia w kolumnie miejsc tworzy nowe miejsce prosto w otwartym dniu.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2013,7 +2017,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Nadać przystankowi godzinę',
|
||||
'help.guide.set-stop-times.goal': 'Ustal, kiedy przystanek się zaczyna i kończy, żeby dzień czytało się jak rozkład.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Kliknij przystanek prawym przyciskiem i wybierz Edytuj. Otwarty z dnia formularz ma na dole Początek i Koniec.',
|
||||
'Kliknij przystanek prawym przyciskiem albo kliknij jego trzy kropki i wybierz Edytuj. Otwarty z dnia formularz ma Początek i Koniec dla tego dnia, zaraz pod lokalizacją.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Wpisz Początek i, jeśli chcesz, Koniec. Nakładanie się godzin z: ostrzega, że inny przystanek dnia z godziną się nakłada; Koniec przed Początkiem blokuje Aktualizuj.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2052,13 +2056,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Dodać notatkę do dnia',
|
||||
'help.guide.day-note.goal': 'Trzymaj przypomnienie, numer biletu albo plan B prosto w dniu.',
|
||||
'help.guide.day-note.step.1': 'Kliknij Dodaj notatkę w nagłówku dnia.',
|
||||
'help.guide.day-note.step.1': 'Kliknij + w nagłówku dnia i wybierz Dodaj notatkę.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Nadaj jej nazwę w polu Notatka, to właśnie pokazuje karta dnia, a resztę napisz pod Notatka dnia. Pasek nad tekstem go formatuje (Pogrubienie, listy, linki, cytaty), a Podgląd po lewej pokazuje kartę, która z niego powstanie.',
|
||||
'Wpisz nazwę notatki w nagłówku okna, tam gdzie stoi Notatka; to właśnie pokazuje karta dnia. Resztę napisz pod Notatka dnia: pasek narzędzi nad nią formatuje tekst (pogrubienie, listy, linki, cytaty), a Podgląd po lewej pokazuje wiersz, który z niej powstanie.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Wybierz Ikonę i Kolor, żeby notatka odcinała się od przystanków, a potem kliknij Dodaj.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Notatka siedzi w dniu jak przystanek: przeciągnij ją na miejsce, kliknij ją prawym przyciskiem po Edytuj i Usuń.',
|
||||
'Notatka siedzi w dniu jak przystanek: przeciągnij ją na miejsce, a prawym przyciskiem albo jej trzema kropkami otworzysz Edytuj i Usuń.',
|
||||
'help.guide.day-note.result':
|
||||
'Notatka jest częścią dnia, także w PDF; notatka z godziną układa się razem z przystankami z godziną.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2108,15 +2112,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Poznaj, gdzie rezerwacja się pokazuje, gdy już istnieje, i który ekran ją tworzy.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Transport (Lot, Pociąg, Prom, Autobus, Samochód) pokazuje się w dniu odjazdu jako Wylot, a w dniu przyjazdu jako Przylot, z godziną i trasą; wielodniowy rozciąga się na dni pomiędzy.',
|
||||
'Transport (Lot, Pociąg, Prom, Autobus, Samochód) to wiersz zabarwiony według rodzaju: Wylot w dniu odjazdu, Przylot w dniu przyjazdu, z godziną i trasą; wielodniowy rozciąga się na dni pomiędzy. Kliknij wiersz, a rezerwacja się otworzy.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Rezerwacja przypisana do przystanku (Restauracja, Wycieczka) oznacza ten przystanek jako Rezerwacja potwierdzona albo Rezerwacja oczekująca; rezerwacja, która ma dzień, ale nie ma przystanku, jest własnym wierszem w dniu.',
|
||||
'Rezerwacja przypisana do przystanku (Restauracja, Wycieczka) to plakietka Rezerwacja na tym przystanku, zielona, gdy jest potwierdzona, i bursztynowa, dopóki oczekuje, z godziną; rezerwacja, która ma dzień, ale nie ma przystanku, jest własnym wierszem w dniu.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Noc w hotelu to zakwaterowanie: siedzi w panelu szczegółów dnia pod Zakwaterowanie, od Zameldowania do Wymeldowania, a trasa każdego z tych dni zaczyna się tam.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Na mapie przełącznik na wierszu transportu rysuje jego trasę; Pokaż wszystkie trasy rezerwacji na pasku narzędzi rysuje je wszystkie.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Tworzenie: Dodaj rezerwację na przystanku pod kursorem, Dodaj transport i Transport publiczny w nagłówku dnia oraz zakładki Rezerwacje i Transport po pełną listę z importem i plikami.',
|
||||
'Tworzenie: Dodaj rezerwację na przystanku pod kursorem, Dodaj transport i Transport publiczny w menu + dnia oraz zakładki Rezerwacje i Transport po pełną listę z importem i plikami.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Jedna rezerwacja, jedno miejsce w planie; zakładki to te same rezerwacje jako lista.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2147,24 +2151,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Kliknij wiersz w kolumnie miejsc, przystanek w dniu albo znacznik na mapie, a karta otworzy się nad mapą. Wybór wewnątrz dnia mówi karcie, który przystanek masz na myśli, i właśnie to przynosi ze sobą uczestników przystanku i jego rezerwację.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Nagłówek niesie okrągłe zdjęcie, nazwę, kategorię, adres i współrzędne. Kliknij zdjęcie, by użyć własnego, kliknij dwukrotnie nazwę, by zmienić nazwę miejsca od razu, a X po prawej zamyka kartę.',
|
||||
'Nagłówek niesie okrągłe zdjęcie, nazwę, adres w jednej linii i plakietki z tym, co wiadomo: otwarte czy zamknięte, kategoria, cena, numer telefonu i współrzędne. Kliknij zdjęcie, by użyć własnego, kliknij dwukrotnie nazwę, by zmienić nazwę miejsca od razu, a X po prawej zamyka kartę.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Pod tym: cena, jeśli ją ma, gwiazdki, które miejscu dał każdy podróżnik, opis i notatki, oraz Notatki na ten dzień, gdy przystanek je niesie.',
|
||||
'Pod tym: gwiazdki, które miejscu dał każdy podróżnik, opis i notatki, oraz Notatki na ten dzień, gdy przystanek je niesie.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Dalej idą Godziny otwarcia, Kolor trasy, Statystyki trasy i Pliki, o ile mają zastosowanie. Pliki przyjmują cokolwiek z Twoich folderów i wypisują też to, co wisi na rezerwacji tego przystanku.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Wiersz na dole: Dodaj do dnia albo Usuń z dnia, gdy dzień jest otwarty, potem Zapisz w kolekcji, Nawigacja, Otwórz stronę internetową, Edytuj i Usuń.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Miejsce wybrane z wyszukiwania niesie to, co wie o nim indeks TREK-a albo OpenStreetMap: zielony pierścień Otwarte albo czerwony Zamknięte wokół zdjęcia, oceniony według zegara samego miejsca, numer telefonu pod gwiazdkami, Godziny otwarcia niżej z godzinami tego dnia w wierszu i całym tygodniem za kliknięciem, oraz jego stronę za Otwórz stronę internetową. Ocena Google pokazuje się tylko przy miejscu znalezionym przez Google, na TREK-u z kluczem Google.',
|
||||
'Miejsce wybrane z wyszukiwania niesie to, co wie o nim indeks TREK-a albo OpenStreetMap: Otwarte albo Zamknięte wśród plakietek nagłówka, z zielonym albo czerwonym pierścieniem wokół zdjęcia, ocenione według zegara samego miejsca, także numer telefonu jako plakietkę, Godziny otwarcia niżej z godzinami tego dnia w wierszu i całym tygodniem za kliknięciem, oraz jego stronę za Otwórz stronę internetową. Ocena Google pokazuje się tylko przy miejscu znalezionym przez Google, na TREK-u z kluczem Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Co karta mówi Ci o miejscu',
|
||||
'help.guide.read-place.goal': 'Przeczytaj wszystko, co podróż wie o jednym miejscu, w jednej karcie.',
|
||||
'help.guide.read-place.step.1':
|
||||
'W kolumnie dni kliknij przystanek, który chcesz przeczytać. Karta otwiera się nad mapą, a przystanek zostaje zaznaczony w swoim dniu.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Nagłówek: okrągłe zdjęcie, nazwa, adres i dokładne współrzędne. Zielony pierścień z Otwarte albo czerwony z Zamknięte wokół zdjęcia mówi, czy miejsce jest właśnie teraz otwarte, według jego własnego zegara, gdy tylko TREK zna jego godziny. X po prawej znów zamyka kartę.',
|
||||
'Nagłówek: okrągłe zdjęcie, nazwa i adres w jednej linii; dymek adresu pokazuje go w całości. Plakietki pod nimi mówią, czy miejsce jest teraz Otwarte czy Zamknięte, według jego własnego zegara, z pasującym zielonym albo czerwonym pierścieniem wokół zdjęcia, i niosą numer telefonu, który kliknięcie przekazuje Twojej aplikacji telefonu, oraz dokładne współrzędne. X po prawej znów zamyka kartę.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Pod tym gwiazdki, które miejscu dał każdy podróżnik, ze średnią i liczbą głosów. Jeszcze nie oceniono, dopóki nikt nie zagłosował. Zaraz poniżej numer telefonu tam, gdzie miejsce go ma: kliknięcie w niego przekazuje numer Twojej aplikacji telefonu.',
|
||||
'Ocena jest pierwsza pod nagłówkiem: gwiazdki, które miejscu dał każdy podróżnik, ze średnią i liczbą głosów. Jeszcze nie oceniono, dopóki nikt nie zagłosował.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Potem opis, a poniżej notatki. Oba to tekst z formularza miejsca, wyrenderowany: listy, linki i pogrubienie działają.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2259,18 +2263,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.goal':
|
||||
'Przeczytaj rezerwację, która należy do przystanku, otwórz ją i przypnij do niego nową.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Otwórz przystanek, do którego należy rezerwacja. Karta pokazuje pasek z Potwierdzona albo Oczekująca i z nazwą rezerwacji.',
|
||||
'Otwórz przystanek, do którego należy rezerwacja. Karta wypisuje ją pod Rezerwacje jako osobną małą kartę, z nazwą rezerwacji i Potwierdzona albo Oczekująca.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Na pasku są Data, Godzina i Kod rezerwacji oraz wszelkie notatki, które rezerwacja ma.',
|
||||
'help.guide.place-booking.step.3': 'Kliknij pasek. Rezerwacja otwiera się nad mapą.',
|
||||
'Na karcie rezerwacji są Data, Godzina i Kod rezerwacji oraz wszelkie notatki, które rezerwacja ma.',
|
||||
'help.guide.place-booking.step.3': 'Kliknij kartę rezerwacji. Rezerwacja otwiera się nad mapą.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Edytuj u dołu rezerwacji otwiera jej własny formularz. To tam Przypisz do miejsca przypina rezerwację do przystanku, a tutaj już wskazuje ten jeden. Zamknij formularz z powrotem.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Nowa rezerwacja dla przystanku zaczyna się w kolumnie dni: najedź na przystanek i kliknij + na jego końcu. Formularz otwiera się jako Nowa rezerwacja, już z nim powiązany.',
|
||||
'Nowa rezerwacja dla przystanku zaczyna się w kolumnie dni: najedź na przystanek i kliknij Dodaj rezerwację, bilet na jego końcu. Formularz otwiera się jako Nowa rezerwacja, już z nim powiązany.',
|
||||
'help.guide.place-booking.result':
|
||||
'Rezerwacja wisi na przystanku: jest na karcie, jest w dniu, a jej pliki są wypisane także tutaj pod Pliki.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Pasek pokazuje się tylko przy przystanku, do którego rezerwacja jest przypięta. Rezerwacja bez przystanku żyje w zakładce Rezerwacje.',
|
||||
'Karta rezerwacji pokazuje się tylko przy przystanku, do którego rezerwacja jest przypięta. Rezerwacja bez przystanku żyje w zakładce Rezerwacje.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Jeden przystanek może dzielić kilka rezerwacji: obiad i wycieczka, która rusza spod tych samych drzwi.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2509,7 +2513,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Na górze pogoda dnia. Prognoza dla nazywa miejsce, którego dotyczy: pierwszy przystanek dnia albo hotel, w którym się budzisz.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Rezerwacje wypisują rezerwacje tego dnia, każdą z jej rodzajem, przystankiem, do którego należy, i godzinami. Zielony znaczy potwierdzona, bursztynowy jeszcze oczekująca; to tylko odczyt, rezerwacje zmienia się w zakładce Rezerwacje.',
|
||||
'Rezerwacje wypisują rezerwacje tego dnia, każdą z jej rodzajem, przystankiem, do którego należy, i godzinami. Zielony znaczy potwierdzona, bursztynowy jeszcze oczekująca, a kliknięcie wiersza otwiera rezerwację.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Zakwaterowanie pokazuje każdą noc zarezerwowaną na ten dzień, z Zameldowanie i Wymeldowanie w dniach, w których wypadają, z oknem zameldowania, godziną wymeldowania i numerem potwierdzenia.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2543,7 +2547,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Duża liczba to temperatura dnia, obok niej minimum i maksimum, i stan pogody słowami.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Kafelki pod nią: prawdopodobieństwo opadów, ile ich będzie, najsilniejszy wiatr oraz wschód i zachód słońca.',
|
||||
'Plakietki na prawo od niej: prawdopodobieństwo opadów, ile ich będzie, najsilniejszy wiatr oraz wschód i zachód słońca.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Na dole dzień godzina po godzinie, co drugą godzinę: godzina, ikona, temperatura i prawdopodobieństwo opadów. Godzina powyżej 50 procent jest podświetlona na niebiesko.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2577,18 +2581,18 @@ const help: TranslationStrings = {
|
||||
'Obiekt musi najpierw być miejscem podróży. Utwórz go w kolumnie miejsc tak jak każde inne miejsce: wybór oferuje tylko to, co już tam jest.',
|
||||
'help.guide.add-accommodation.step.2': 'Otwórz dzień przyjazdu i kliknij Dodaj zakwaterowanie pod Zakwaterowanie.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Zastosuj do dni mówi, które noce obejmuje pobyt: dzień zameldowania po lewej, dzień wymeldowania po prawej. Wszystkie obejmuje całą podróż.',
|
||||
'Zastosuj do dni mówi, które noce obejmuje pobyt: Początek to dzień zameldowania, Koniec dzień wymeldowania, a Wszystkie obejmuje całą podróż. Nagłówek okna pokazuje zakres i liczbę nocy.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Wypełnij Zameldowanie, Do i Wymeldowanie, a numer rezerwacji wpisz pod Potwierdzenie. Wszystkie cztery mogą zostać puste.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Wybierz obiekt z miejsc podróży. Kafelki nad listą zawężają ją do jednej kategorii.',
|
||||
'Wybierz obiekt z miejsc podróży. Kategoria nad listą zawęża ją do jednej kategorii.',
|
||||
'help.guide.add-accommodation.step.6': 'Kliknij Zapisz.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Pobyt pokazuje się w każdym dniu, który obejmuje, Zameldowanie w pierwszym i Wymeldowanie w ostatnim. Obiekt staje się przystankiem w dniu zameldowania, więc mapa rysuje drogę tam, a w zakładce Rezerwacje pojawia się rezerwacja typu Zakwaterowanie.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Wybór otwiera się na dniu, z którego przyszedłeś, z wymeldowaniem dzień później; oba da się przesunąć przed zapisaniem.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Nadaj hotelowi przy tworzeniu kategorię podróży Hotel, a kafelki nad listą zawężą ją do Twoich hoteli jednym kliknięciem.',
|
||||
'Nadaj hotelowi przy tworzeniu kategorię Hotel, a Kategoria nad listą zawęzi ją do Twoich hoteli jednym kliknięciem.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Godziny są wszystkie opcjonalne: pobyt bez zameldowania i bez kodu dalej obejmuje swoje noce i dalej rysuje swoją trasę.',
|
||||
// edit-accommodation
|
||||
@@ -2599,7 +2603,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Ołówek po jej prawej otwiera pobyt z powrotem. Okno brzmi teraz Edytuj zakwaterowanie.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Popraw wiersz pól: Zameldowanie, Do, Wymeldowanie i Potwierdzenie. Dni nad nim i obiekt pod nim też można tu zmienić.',
|
||||
'Popraw Zameldowanie, Do, Wymeldowanie i Potwierdzenie. Dni nad nimi i obiekt pod nimi też można tu zmienić.',
|
||||
'help.guide.edit-accommodation.step.4': 'Kliknij Zapisz.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'X obok ołówka kończy pobyt. O nic nie pyta, a rezerwacja typu Zakwaterowanie, która do niego należy, idzie z nim.',
|
||||
@@ -2616,7 +2620,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Rezerwacje wypisują rezerwacje dnia: te datowane na niego i te wiszące na którymś z jego przystanków.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Wiersz pokazuje, jaki to rodzaj rezerwacji, jej nazwę i, gdy należy do przystanku, ten przystanek po kropce. Jej godziny siedzą na prawym końcu.',
|
||||
'Wiersz pokazuje, jaki to rodzaj rezerwacji, jej nazwę i, gdy należy do przystanku, ten przystanek na szaro za nią. Jej godziny siedzą na prawym końcu, przed kropką statusu.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Kolor mówi, jak stoi rezerwacja: zielony wiersz jest potwierdzony, bursztynowy wciąż oczekuje. Hoteli nie ma na tej liście, mają własny blok niżej.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Оплачено мной',
|
||||
'costs.filter.owed': 'Мне должны',
|
||||
'costs.addExpense': 'Добавить расход',
|
||||
'costs.view.label': 'Вид',
|
||||
'costs.view.list': 'Список',
|
||||
'costs.view.table': 'Таблица',
|
||||
'costs.table.lockedPayer': 'Кто-то уже оплатил: меняйте сумму в самом расходе, чтобы балансы сходились.',
|
||||
'costs.table.lockedCurrency': 'Введено в {currency}: меняйте сумму в самом расходе.',
|
||||
'costs.table.summary': 'Сводка',
|
||||
'costs.table.byCategory': 'Категория',
|
||||
'costs.table.byDate': 'День',
|
||||
'costs.table.byPayer': 'Плательщик',
|
||||
'costs.table.byStatus': 'Статус',
|
||||
'costs.table.noPayer': 'Плательщика пока нет',
|
||||
'costs.table.paid': 'Оплачено',
|
||||
'costs.table.open': 'Открыто',
|
||||
'costs.editExpense': 'Изменить расход',
|
||||
'costs.noMatch': 'Нет расходов по вашему запросу.',
|
||||
'costs.emptyText': 'Расходов пока нет. Добавьте первый.',
|
||||
|
||||
+61
-57
@@ -1736,7 +1736,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Название, даты, обложка и валюта редактируются из Мои поездки, карандашом на карточке поездки.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Стрелки у внутреннего края колонки сворачивают её, и карта занимает место; тонкий разделитель рядом с колонкой меняет её ширину.',
|
||||
'Язычок у внутреннего края колонки сворачивает её, и карта занимает место; тонкий разделитель рядом с колонкой меняет её ширину.',
|
||||
'help.ctx.trip.bullet.6': 'Стрелка отмены на панели инструментов дней возвращает последнее изменение плана.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Добавить участника',
|
||||
@@ -1801,8 +1801,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Освободить место для карты',
|
||||
'help.guide.collapse-columns.goal': 'Сверните колонку или дайте ей больше ширины.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Нажмите стрелку у внутреннего края колонки дней, чтобы свернуть её; карта занимает место. У колонки мест такая же стрелка.',
|
||||
'help.guide.collapse-columns.step.2': 'Нажмите стрелку ещё раз, чтобы вернуть колонку.',
|
||||
'Нажмите на язычок у внутреннего края колонки дней, тот, что со значком панели, чтобы свернуть колонку; карта занимает место. У колонки мест такой же язычок.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Свёрнутая колонка оставляет плитку в углу карты: План для дней и Места для мест. Нажмите на неё, чтобы вернуть колонку.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Перетащите тонкий разделитель между колонкой и картой, чтобы изменить ширину колонки.',
|
||||
'help.guide.collapse-columns.result': 'Ширины запоминаются; при следующем визите колонки возвращаются открытыми.',
|
||||
@@ -1826,26 +1827,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Добавить место/активность наверху открывает форму для места, которое вы вводите или ищете. Пока день открыт, кнопка читается как Новое место, а В день рядом с ней создаёт место сразу на этом дне.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Импортировать файл принимает файлы .gpx, .kml и .kmz; Импорт списка принимает общий список Google Maps или Naver Maps. Файл можно также просто бросить на колонку.',
|
||||
'Кнопка импорта рядом с ней предлагает Импортировать файл для файлов .gpx, .kml и .kmz и Список Google (Импорт списка, если включены и списки Naver) для списка, которым поделились из Google Maps или Naver Maps. Файл можно также просто бросить на колонку.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Выпадающий список переключает между Все, Незапланированные, Запланированные и, как только импортирован трек, Треки; под ним сидят поиск, фильтр категорий и звезда для минимальной оценки.',
|
||||
'Под ними поиск, рядом с ним галочка, которая начинает выделение, и ряд фильтров: Показать переключает между Все, Незапланированные, Запланированные и, как только импортирован трек, Треки, каждое со своим числом; кнопка с ярлыком фильтрует по категории, а звезда по минимальной оценке.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Строка показывает картинку, название и описание или адрес. Нажмите на неё, чтобы увидеть сведения о месте, перетащите её на день или нажмите правой кнопкой, чтобы получить Редактировать, + День, Открыть сайт, Google Maps, Сохранить в коллекцию и Удалить.',
|
||||
'Строка показывает картинку, название и описание или адрес. Нажмите на неё, чтобы увидеть сведения о месте, перетащите её на день или нажмите правой кнопкой (или на её три точки), чтобы получить Редактировать, + День, Открыть сайт, Google Maps, Сохранить в коллекцию и Удалить.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Когда день открыт, + в конце незапланированной строки кладёт место на этот день, а Запланированные перечисляют только этот день, с Показать всю поездку, чтобы снова расширить.',
|
||||
'Когда день открыт, + День в конце незапланированной строки кладёт место на этот день, а Запланированные перечисляют только этот день, с Показать всю поездку, чтобы снова расширить.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Галочка в правом конце строки фильтров начинает выделение: несколько строк сразу получают новую категорию, уходят в коллекцию или удаляются.',
|
||||
'Галочка рядом с поиском начинает выделение: с панели внизу колонки несколько строк сразу получают новую категорию, уходят в коллекцию, отмечаются посещёнными или удаляются.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Создать место',
|
||||
'help.guide.create-place.goal': 'Добавьте место или активность вручную, со всем, что плану нужно о нём знать.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Нажмите Добавить место/активность наверху колонки мест (Новое место, пока день открыт). Открывается форма.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Введите место наверху в Поиск мест... и выберите результат. Название, Адрес, Широта, Долгота и Сайт заполняются, а Сведения о месте слева показывают картинки, часы работы и описание. На TREK с ключом Google под списком стоит Не то место? Поискать в Google и запускает тот же поиск через Google.',
|
||||
'Введите место в Поиск мест... и выберите результат. Название в шапке диалога, Адрес, Широта, Долгота и Сайт заполняются, а Сведения о месте слева показывают картинки, часы работы и описание. На TREK с ключом Google под списком стоит Не то место? Поискать в Google и запускает тот же поиск через Google. Сохранённые места справа точно так же предлагают места из ваших коллекций.',
|
||||
'help.guide.create-place.step.3':
|
||||
'В Сведениях о месте нажатие на картинку под Выбрать изображение делает её изображением места; Использовать этот текст переносит описание в форму.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Проверьте поля: Название обязательно; Описание и Заметки ваши; Адрес, Широта и Долгота приходят из поиска или вводятся; Категория выбирает одну из категорий поездки, а + рядом создаёт новую на месте; Сайт принимает ссылку.',
|
||||
'Проверьте, что в форме: название стоит в шапке диалога и это единственное обязательное поле; плашка Категория под ним выбирает одну из категорий поездки, а + рядом создаёт новую на месте. Адрес, Широта и Долгота приходят из поиска или вводятся; Описание и Заметки ваши; Сайт принимает ссылку.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Нажмите Добавить. Если место с таким же названием уже есть в поездке, форма это говорит, а кнопка превращается в Всё равно добавить.',
|
||||
'help.guide.create-place.result': 'Место в списке и на карте, под Незапланированные, пока его не положат на день.',
|
||||
@@ -1864,7 +1865,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'В день открывает ту же форму, что и Новое место, только место попадает на открытый день в тот момент, когда вы нажимаете Добавить.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Место, которое уже есть, уходит на открытый день через + в конце своей строки или правой кнопкой, + День.',
|
||||
'Место, которое уже есть, уходит на открытый день через + День в конце своей строки или правой кнопкой, + День.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Работает и наоборот, причём день открывать заранее не нужно: перетащите строку места из колонки и отпустите её на карточке дня. Отпустите между двумя остановками — место встанет ровно туда.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1876,12 +1877,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Найти место в списке',
|
||||
'help.guide.filter-places.goal': 'Сузьте колонку до мест, которые вам нужны.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Выпадающий список наверху переключает между Все, Незапланированные (ещё ни на одном дне), Запланированные (на дне) и Треки (импортированные треки GPX), каждое со своим числом.',
|
||||
'help.guide.filter-places.step.2': 'Печатайте в Поиск мест...; список сужается, пока вы печатаете.',
|
||||
'Показать, выпадающий список под поиском, переключает между Все, Незапланированные (ещё ни на одном дне), Запланированные (на дне) и Треки (импортированные треки GPX), каждое со своим числом.',
|
||||
'help.guide.filter-places.step.2': 'Печатайте в Поиск наверху; список сужается, пока вы печатаете.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Все категории открывают список, где вы отмечаете одну или несколько категорий, среди них Без категории; Сбросить фильтр внизу его сбрасывает.',
|
||||
'Кнопка с ярлыком рядом с Показать перечисляет категории: отметьте одну или несколько, среди них Без категории. Кнопка считает, сколько отмечено, а Сбросить фильтр внизу списка снимает все отметки.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Звезда рядом задаёт минимальную оценку: 5+, 4+ и так далее показывают только места, которым вы поставили хотя бы столько.',
|
||||
'Звезда рядом с ней задаёт минимальную оценку: 5+, 4+ и так далее показывают только места, которым вы поставили хотя бы столько.',
|
||||
'help.guide.filter-places.result': 'Число над строками говорит, сколько мест подходит; фильтры сочетаются.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'Когда день открыт, Запланированные перечисляют только этот день и говорят об этом: Показан только открытый день, с Показать всю поездку рядом.',
|
||||
@@ -1893,7 +1894,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Нажмите на строку правой кнопкой и выберите Редактировать, или откройте место и нажмите Редактировать в его сведениях.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Измените, что нужно: Название, Описание, Заметки, Адрес, Широта и Долгота, Категория, Сайт. Открытая со дня форма имеет ещё Заметки на этот день и Начало и Конец для того дня.',
|
||||
'Измените, что нужно: название и плашку Категория в шапке диалога, Адрес, Широта и Долгота, Описание, Заметки и Сайт. Открытая со дня форма имеет ещё Начало и Конец и Заметки на этот день.',
|
||||
'help.guide.edit-place.step.3': 'Нажмите Обновить.',
|
||||
'help.guide.edit-place.result':
|
||||
'Изменение действует везде, где место появляется: в списке, на карте и на каждом дне, где оно стоит.',
|
||||
@@ -1907,20 +1908,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Нажмите на строку правой кнопкой и выберите Удалить, или нажмите Удалить в сведениях о месте.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Подтвердите. Если в этом месте забронирована ночь или к нему привязано бронирование, вопрос говорит, что уходит вместе с ним.',
|
||||
'Нажмите Удалить в окне с вопросом. Если в этом месте забронирована ночь или к нему привязано бронирование, вопрос говорит, что уходит вместе с ним.',
|
||||
'help.guide.delete-place.result':
|
||||
'Место исчезает из списка, с карты и со всех дней; Отменить на панели инструментов над днями возвращает его.',
|
||||
'help.guide.delete-place.tip.1': 'Чтобы снять место только с одного дня, используйте на той остановке Убрать из дня.',
|
||||
'help.guide.delete-place.tip.2': 'Несколько мест сразу: галочка рядом с фильтрами начинает выделение.',
|
||||
'help.guide.delete-place.tip.2': 'Несколько мест сразу: галочка рядом с поиском начинает выделение.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Изменить или удалить несколько мест сразу',
|
||||
'help.guide.select-places.goal': 'Приберите список за один раз, а не место за местом.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Нажмите галочку в правом конце строки фильтров. Строки получают флажки, и появляется панель с действиями.',
|
||||
'help.guide.select-places.step.2': 'Отметьте строки или Выбрать всё на панели; панель считает, что выбрано.',
|
||||
'Нажмите галочку рядом с полем поиска. Строки получают круглые флажки, а внизу колонки поднимается панель с действиями.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Нажимайте на строки, чтобы отметить их. Выбрать всё, двойная галочка на панели, берёт каждую строку, которую оставляют фильтры.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category даёт им всем одну категорию; Сохранить в коллекцию копирует их в одну из ваших коллекций; Удалить выбранные убирает их после подтверждения.',
|
||||
'help.guide.select-places.step.4': 'Нажмите галочку ещё раз, чтобы выйти из выделения.',
|
||||
'Панель считает отмеченные места. Изменить категорию даёт им всем одну категорию; Сохранить в коллекцию копирует их в одну из ваших коллекций; Удалить выбранные убирает их после подтверждения.',
|
||||
'help.guide.select-places.step.4': 'Готово, крестик X в конце панели, завершает выделение.',
|
||||
'help.guide.select-places.result':
|
||||
'Изменение действует для каждого выбранного места; удаление можно отменить с панели инструментов над днями.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1930,7 +1932,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'Импортировать места из файла GPX, KML или KMZ',
|
||||
'help.guide.import-places-file.goal': 'Внесите то, что выгрузили Google My Maps, Google Earth или GPS-трекер.',
|
||||
'help.guide.import-places-file.step.1': 'Нажмите Импортировать файл или бросьте файл в любое место колонки мест.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Нажмите кнопку импорта рядом с кнопкой добавления и выберите Импортировать файл или бросьте файл в любое место колонки мест.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Выберите файл или перетащите его в рамку. Для GPX отметьте, что импортировать: Путевые точки, Маршруты, Треки (с геометрией пути); для KML и KMZ Точки (Placemarks) и Маршруты (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1945,7 +1948,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Импортировать общий список Google Maps или Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Превратите ссылку на общий список в места.',
|
||||
'help.guide.import-places-list.step.1': 'Нажмите Импорт списка и выберите Список Google или Список Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Нажмите кнопку импорта рядом с кнопкой добавления и выберите Список Google. Если включены и списки Naver, пункт называется Импорт списка, и диалог спрашивает, какой из двух.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Вставьте общую ссылку списка. Ссылка на маршрут в Google Maps тоже работает: её остановки становятся местами, в порядке поездки.',
|
||||
'help.guide.import-places-list.step.3': 'Нажмите Импорт.',
|
||||
@@ -1963,31 +1967,31 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Панель инструментов наверху: Экспорт (PDF, календарь, GPX), Expand all days / Collapse all days, стрелка отмены, Изменить порядок дней и Показать все маршруты бронирований.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Карточка дня: номер, погода, название, дата и стоимость дня в заголовке; нажмите на заголовок, чтобы открыть день, стрелка справа карточку сворачивает. Общественный транспорт, Добавить транспорт и Добавить заметку тоже сидят в заголовке.',
|
||||
'Карточка дня: плитка с номером дня и прогнозом, название и дата, а также плашки для забронированной ночи, арендованной машины и стоимости дня. Нажмите на шапку, чтобы открыть день, стрелка его сворачивает, а + открывает меню: Добавить место в этот день, Добавить жильё, Добавить транспорт, Общественный транспорт и Добавить заметку.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Внутри дня: остановки по порядку, каждая с картинкой, названием, временем и замком на картинке; заметки; бронирования, которые принадлежат дню; и между остановками время в пути каждого участка.',
|
||||
'Внутри дня: остановки по порядку, каждая с картинкой, названием, временем, замком на картинке и прикреплёнными к ней бронированиями; заметки; бронирования и транспорт дня, окрашенные по своему типу; и между остановками время в пути каждого участка. У каждой строки есть меню с тремя точками, то же, что открывается правой кнопкой.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Под остановками панель маршрута: Маршрут рисует день на карте, Оптимизировать сортирует остановки, На машине / Пешком задаёт способ передвижения дня, а Открыть в Google Maps и Открыть в CoMaps передают день дальше.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Места попадают на день перетаскиванием строки из колонки мест, через + на этой строке, через Добавить место в этот день на пустом дне или из сведений о месте.',
|
||||
'Места попадают на день перетаскиванием строки из колонки мест, через + День на этой строке, через Добавить место в этот день из + дня или на пустом дне, или из сведений о месте.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Общая стоимость внизу складывает каждую остановку и каждое бронирование с ценой, в валюте поездки.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Прочитать день',
|
||||
'help.guide.read-day-plan.goal': 'Узнайте, что говорит вам каждая часть карточки дня, прежде чем что-то менять.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Заголовок: номер дня, прогноз на этот день, День 1 или название, которое вы дали дню, дата и стоимость дня. Нажмите на заголовок, чтобы открыть день (над картой откроются его подробности); стрелка справа сворачивает и разворачивает карточку.',
|
||||
'Шапка: плитка с номером дня и прогнозом, затем День 1 или название, которое вы дали дню, дата и плашки для забронированной ночи (заезд или выезд), арендованной машины и стоимости дня. Нажмите на шапку, чтобы открыть день (над картой откроются его подробности); + справа добавляет место, проживание, транспорт, поездку на общественном транспорте или заметку, а стрелка сворачивает карточку.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Остановка: рукоятка слева её тащит, картинка несёт замок для оптимизации маршрута, дальше идут название, описание и, если заданы, Заметки на этот день. Метка времени показывает Начало и Конец, когда они у остановки есть; стрелки, которые появляются у её правого края, двигают её вверх или вниз.',
|
||||
'Остановка: рукоятка слева её тащит, картинка несёт замок для оптимизации маршрута, дальше идут название, метка времени, когда у остановки есть Начало и Конец, описание и, если заданы, Заметки на этот день. Стрелки у её правого края двигают её вверх или вниз, а три точки открывают её меню.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Бронирование на дне: бронирование у остановки помечает остановку как Бронирование подтверждено или Бронирование ожидает, а транспорт показывается как Вылет или Прилёт со своим временем и маршрутом, с маленьким переключателем, который рисует этот маршрут на карте.',
|
||||
'Бронирование у остановки сидит на ней меткой Бронирование, зелёной, когда оно подтверждено, и янтарной, пока оно ожидает, со своим временем и поставщиком; нажмите на метку, чтобы открыть бронирование, а кнопка маршрута рядом рисует его маршрут. Транспорт стоит отдельной строкой, окрашенной по его типу, с Вылет или Прилёт и своим временем. Нажмите на бронирование, и откроются его подробности; Редактировать там его меняет.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Между двумя остановками связка говорит, сколько участок занимает и какой он длины, в способе передвижения дня; нажмите на неё, чтобы сменить способ для этого одного участка.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'Панель маршрута в конце: Маршрут рисует путь дня на карте, Оптимизировать переставляет остановки, кнопки способа выбирают На машине или Пешком, а Открыть в Google Maps и Открыть в CoMaps открывают день там.',
|
||||
'help.guide.read-day-plan.result': 'Каждый значок на карточке что-то значит; руководства ниже меняют каждый из них.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Нажмите на остановку правой кнопкой ради её меню: Редактировать, Убрать из дня, Открыть сайт, приложения навигации (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Сохранить в коллекцию, Удалить.',
|
||||
'Нажмите на остановку правой кнопкой или на её три точки, чтобы открыть её меню: Редактировать, Убрать из дня, Открыть сайт, приложения навигации (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Сохранить в коллекцию, Удалить.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Наведите курсор на остановку, и в её конце появится Добавить бронирование: созданное там бронирование привязано к этой остановке на этом дне.',
|
||||
// place-onto-day
|
||||
@@ -1996,9 +2000,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Перетащите строку из колонки мест на карточку дня. Бросьте её между двумя остановками, чтобы она встала ровно туда, или куда угодно на карточку, чтобы она добавилась в конец.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Без перетаскивания: откройте день нажатием на его заголовок, затем нажмите + в конце строки места или нажмите на строку правой кнопкой и выберите + День.',
|
||||
'Без перетаскивания: откройте день нажатием на его шапку, затем нажмите + День в конце строки места или нажмите на строку правой кнопкой и выберите + День.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'На пустом дне Добавить место в этот день открывает форму места, и новое место попадает на день сразу.',
|
||||
'Добавить место в этот день, в меню + дня или на пустом дне, открывает форму места, и новое место сразу попадает на день.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Из сведений о месте Добавить в день спрашивает, в какой день; когда день открыт из его заголовка, В день в колонке мест создаёт новое место прямо на открытом дне.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2028,7 +2032,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Задайте, когда остановка начинается и заканчивается, чтобы день читался как расписание.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Нажмите на остановку правой кнопкой и выберите Редактировать. Открытая из дня форма держит внизу Начало и Конец.',
|
||||
'Нажмите на остановку правой кнопкой или на её три точки и выберите Редактировать. Открытая из дня форма держит Начало и Конец для этого дня прямо под местоположением.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Введите Начало и, если хотите, Конец. Пересечение по времени с: предупреждает, что другая остановка дня со временем пересекается; Конец раньше Начала блокирует Обновить.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2066,12 +2070,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Добавить заметку ко дню',
|
||||
'help.guide.day-note.goal': 'Держите напоминание, номер билета или план Б прямо в дне.',
|
||||
'help.guide.day-note.step.1': 'Нажмите Добавить заметку в заголовке дня.',
|
||||
'help.guide.day-note.step.1': 'Нажмите + в шапке дня и выберите Добавить заметку.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Дайте ей название в поле Заметка, именно его показывает карточка дня, а остальное напишите под Заметка на день. Панель над текстом его форматирует (Полужирный, списки, ссылки, цитаты), а Предпросмотр слева показывает карточку, которая из него получится.',
|
||||
'Введите название заметки в шапку диалога, там, где написано Заметка; именно его показывает карточка дня. Остальное напишите под Заметка на день: панель над текстом его форматирует (полужирный, списки, ссылки, цитаты), а Предпросмотр слева показывает строку, которая из этого получится.',
|
||||
'help.guide.day-note.step.3': 'Выберите Значок и Цвет, чтобы заметка выделялась среди остановок, и нажмите Добавить.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Заметка сидит в дне как остановка: перетащите её на место, нажмите на неё правой кнопкой ради Редактировать и Удалить.',
|
||||
'Заметка сидит в дне как остановка: перетащите её на место, а правой кнопкой или через её три точки откройте Редактировать и Удалить.',
|
||||
'help.guide.day-note.result':
|
||||
'Заметка часть дня, и в PDF тоже; заметка со временем сортируется вместе с остановками со временем.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2120,15 +2124,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Узнайте, где бронирование показывается, как только оно есть, и какой экран его создаёт.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Транспорт (Авиабилет, Поезд, Паром, Автобус, Автомобиль) показывается в день отправления как Вылет и в день прибытия как Прилёт, со временем и маршрутом; многодневный растягивается на дни между ними.',
|
||||
'Транспорт (Авиабилет, Поезд, Паром, Автобус, Автомобиль) показывается строкой, окрашенной по его типу: Вылет в день отправления, Прилёт в день прибытия, со временем и маршрутом; многодневный растягивается на дни между ними. Нажмите на строку, и откроется бронирование.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Бронирование, привязанное к остановке (Ресторан, Экскурсия), помечает эту остановку как Бронирование подтверждено или Бронирование ожидает; бронирование, у которого есть день, но нет остановки, стоит в дне своей строкой.',
|
||||
'Бронирование, привязанное к остановке (Ресторан, Экскурсия), показывается на этой остановке меткой Бронирование, зелёной, когда оно подтверждено, и янтарной, пока оно ожидает, со своим временем; бронирование, у которого есть день, но нет остановки, стоит в дне своей строкой.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Ночь в отеле это жильё: оно сидит в панели подробностей дня под Жильё, от Заезда до Выезда, и маршрут каждого из этих дней начинается там.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'На карте переключатель на строке транспорта рисует его маршрут; Показать все маршруты бронирований на панели инструментов рисует их все.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Создание: Добавить бронирование на остановке под курсором, Добавить транспорт и Общественный транспорт в заголовке дня и вкладки Бронирования и Транспорт ради полного списка с импортом и файлами.',
|
||||
'Создание: Добавить бронирование на остановке под курсором, Добавить транспорт и Общественный транспорт в меню + дня и вкладки Бронирования и Транспорт ради полного списка с импортом и файлами.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Одно бронирование, одно место в плане; вкладки это те же бронирования в виде списка.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2159,24 +2163,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Нажмите на строку в колонке мест, на остановку внутри дня или на маркер на карте, и карточка откроется поверх карты. Выбор внутри дня говорит карточке, какую остановку вы имеете в виду, и именно это приводит с собой участников остановки и её бронирование.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Шапка несёт круглую картинку, название, категорию, адрес и координаты. Нажмите на картинку, чтобы поставить свою, дважды нажмите на название, чтобы переименовать место на месте, а X справа закрывает карточку.',
|
||||
'Шапка несёт круглую картинку, название, адрес в одну строку и плашки для того, что известно: открыто или закрыто, категория, цена, номер телефона и координаты. Нажмите на картинку, чтобы поставить свою, дважды нажмите на название, чтобы переименовать место на месте, а X справа закрывает карточку.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Под этим: цена, если она есть, звёзды, которые месту поставил каждый путешественник, описание и заметки, и Заметки на этот день, когда остановка их несёт.',
|
||||
'Под ней: звёзды, которые месту поставил каждый путешественник, описание и заметки, и Заметки на этот день, когда остановка их несёт.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Дальше идут Часы работы, Цвет маршрута, Данные маршрута и Файлы, насколько они применимы. Файлы берут что угодно из ваших папок и перечисляют также то, что висит на бронировании этой остановки.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Строка внизу: Добавить в день или Убрать из дня, пока день открыт, затем Сохранить в коллекцию, Навигация, Открыть сайт, Редактировать и Удалить.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Место, выбранное из поиска, несёт то, что о нём знают индекс TREK или OpenStreetMap: зелёное кольцо Открыто или красное Закрыто вокруг картинки, по часам самого места, номер телефона под звёздами, Часы работы ниже с часами этого дня в строке и всей неделей за нажатием, и его сайт за Открыть сайт. Рейтинг Google показывается только у места, найденного через Google, на TREK с ключом Google.',
|
||||
'Место, выбранное из поиска, несёт то, что о нём знают индекс TREK или OpenStreetMap: Открыто или Закрыто среди плашек шапки, с зелёным или красным кольцом вокруг картинки, по часам самого места, номер телефона тоже плашкой, Часы работы ниже с часами этого дня в строке и всей неделей за нажатием, и его сайт за Открыть сайт. Рейтинг Google показывается только у места, найденного через Google, на TREK с ключом Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Что карточка рассказывает о месте',
|
||||
'help.guide.read-place.goal': 'Прочитайте всё, что поездка знает об одном месте, в одной карточке.',
|
||||
'help.guide.read-place.step.1':
|
||||
'В колонке дней нажмите на остановку, которую хотите прочитать. Карточка открывается поверх карты, а остановка остаётся отмеченной в своём дне.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Шапка: круглая картинка, название, адрес и точные координаты. Зелёное кольцо с Открыто или красное с Закрыто вокруг картинки говорит, открыто ли место прямо сейчас, по его собственным часам, как только TREK знает его часы работы. X справа снова закрывает карточку.',
|
||||
'Шапка: круглая картинка, название и адрес в одну строку; его подсказка содержит полный адрес. Плашки под ними говорят, Открыто или Закрыто прямо сейчас, по часам самого места, с зелёным или красным кольцом вокруг картинки в тон, и несут номер телефона, который нажатие передаёт вашему приложению телефона, и точные координаты. X справа снова закрывает карточку.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Под этим звёзды, которые месту поставил каждый путешественник, со средним и числом голосов. Ещё нет оценок, пока не проголосовал никто. Сразу ниже номер телефона там, где он у места есть: нажатие на него передаёт номер вашему приложению телефона.',
|
||||
'Рейтинг идёт первым под шапкой: звёзды, которые месту поставил каждый путешественник, со средним и числом голосов. Ещё нет оценок, пока не проголосовал никто.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Затем описание и под ним заметки. И то и другое это текст из формы места, отрисованный: списки, ссылки и жирный шрифт работают.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2271,18 +2275,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.goal':
|
||||
'Прочитайте бронирование, которое принадлежит остановке, откройте его и прикрепите к ней новое.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Откройте остановку, которой принадлежит бронирование. Карточка показывает полоску с Подтверждено или Ожидание и с названием бронирования.',
|
||||
'Откройте остановку, которой принадлежит бронирование. Карточка показывает его в разделе Бронирования отдельной маленькой карточкой с названием бронирования и Подтверждено или Ожидание.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Полоска несёт Дату, Время и Код бронирования, и любые заметки, которые у бронирования есть.',
|
||||
'help.guide.place-booking.step.3': 'Нажмите на полоску. Бронирование открывается поверх карты.',
|
||||
'Карточка бронирования несёт Дату, Время и Код бронирования, и любые заметки, которые у бронирования есть.',
|
||||
'help.guide.place-booking.step.3': 'Нажмите на карточку бронирования. Бронирование открывается поверх карты.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Редактировать внизу бронирования открывает его собственную форму. Бронирование к остановке прикрепляет там Привязать к назначению дня, и здесь оно уже называет эту остановку. Закройте форму обратно.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Новое бронирование для остановки начинается в колонке дней: наведите на остановку и нажмите на + в её конце. Форма открывается как Новое бронирование, уже связанная с ней.',
|
||||
'Новое бронирование для остановки начинается в колонке дней: наведите на остановку и нажмите Добавить бронирование, билет в её конце. Форма открывается как Новое бронирование, уже связанная с ней.',
|
||||
'help.guide.place-booking.result':
|
||||
'Бронирование висит на остановке: оно в карточке, оно в дне, и его файлы перечислены здесь под Файлы тоже.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Полоска показывается только у остановки, к которой бронирование прикреплено. Бронирование без остановки живёт на вкладке Бронирования.',
|
||||
'Карточка бронирования показывается только у остановки, к которой бронирование прикреплено. Бронирование без остановки живёт на вкладке Бронирования.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Одну остановку могут делить несколько бронирований: обед и экскурсия, которая начинается от той же двери.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2523,7 +2527,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Наверху погода дня. Прогноз для называет место, к которому она относится: первую остановку дня или отель, в котором вы просыпаетесь.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Бронирования перечисляют бронирования того дня, каждое с его видом, остановкой, к которой оно относится, и временем. Зелёный значит подтверждено, янтарный ещё в ожидании; это только выписка, бронирования меняются на вкладке Бронирования.',
|
||||
'Бронирования перечисляют бронирования того дня, каждое с его видом, остановкой, к которой оно относится, и временем. Зелёный значит подтверждено, янтарный ещё в ожидании, а нажатие на строку открывает бронирование.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Жильё показывает каждую ночь, забронированную на этот день, с Заезд и Выезд в те дни, когда они происходят, с окном заезда, временем выезда и номером подтверждения.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2557,7 +2561,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Большое число это температура дня, рядом с ним минимум и максимум, и состояние погоды словами.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Плашки под ним: вероятность осадков, сколько их будет, самый сильный ветер, а также восход и закат.',
|
||||
'Плашки справа от него: вероятность осадков, сколько их будет, самый сильный ветер, а также восход и закат.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Внизу день час за часом, каждый второй час: время, иконка, температура и вероятность осадков. Час выше 50 процентов подсвечен синим.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2590,18 +2594,18 @@ const help: TranslationStrings = {
|
||||
'Объект сначала должен быть местом поездки. Создайте его в колонке мест так же, как любое другое место: выбор предлагает только то, что уже там есть.',
|
||||
'help.guide.add-accommodation.step.2': 'Откройте день приезда и нажмите Добавить жильё под Жильё.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Применить к дням говорит, какие ночи покрывает проживание: день заезда слева, день выезда справа. Все покрывает всю поездку.',
|
||||
'Применить к дням говорит, какие ночи покрывает проживание: Начало задаёт день заезда, Конец задаёт день выезда, а Все покрывает всю поездку. Шапка диалога показывает диапазон и число ночей.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Заполните Заезд, До и Выезд, а номер брони впишите под Подтверждение. Все четыре могут остаться пустыми.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Выберите объект из мест поездки. Плашки над списком сужают его до одной категории.',
|
||||
'Выберите объект из мест поездки. Категория над списком сужает его до одной категории.',
|
||||
'help.guide.add-accommodation.step.6': 'Нажмите Сохранить.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Проживание показывается в каждом дне, который оно покрывает, Заезд в первом и Выезд в последнем. Объект становится остановкой в день заезда, так что карта рисует путь туда, а на вкладке Бронирования появляется бронирование вида Жильё.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Выбор открывается на дне, с которого вы пришли, с выездом на следующий день; и то и другое можно сдвинуть до сохранения.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Дайте отелю при создании категорию поездки Hotel, и плашки над списком сузят его до ваших отелей одним нажатием.',
|
||||
'Дайте отелю при создании категорию поездки Hotel, и Категория над списком сузит его до ваших отелей одним нажатием.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Время всё необязательное: проживание без заезда и без кода всё равно покрывает свои ночи и всё равно рисует свой маршрут.',
|
||||
// edit-accommodation
|
||||
@@ -2612,7 +2616,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Карандаш справа от неё открывает проживание снова. Окно теперь читается Редактировать жильё.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Исправьте строку полей: Заезд, До, Выезд и Подтверждение. Дни над ней и объект под ней тоже можно изменить здесь.',
|
||||
'Исправьте Заезд, До, Выезд и Подтверждение. Дни над ними и объект ниже тоже можно изменить здесь.',
|
||||
'help.guide.edit-accommodation.step.4': 'Нажмите Сохранить.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'X рядом с карандашом завершает проживание. Он ни о чём не спрашивает, и бронирование вида Жильё, которое к нему относится, уходит вместе с ним.',
|
||||
@@ -2628,7 +2632,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Бронирования перечисляют бронирования дня: те, что датированы им, и те, что висят на одной из его остановок.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Строка показывает, какого вида это бронирование, его название и, когда оно относится к остановке, эту остановку после точки. Его время сидит на правом конце.',
|
||||
'Строка показывает, какого вида это бронирование, его название и, когда оно относится к остановке, эту остановку серым после него. Его время сидит на правом конце, перед точкой статуса.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Цвет говорит, как стоит бронирование: зелёная строка подтверждена, янтарная ещё в ожидании. Отелей в этом списке нет, у них свой блок ниже.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -67,6 +67,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.allDays': 'Všetky dni',
|
||||
'costs.expensesCount': '{count} výdavkov',
|
||||
'costs.addExpense': 'Pridať výdavok',
|
||||
'costs.view.label': 'Zobrazenie',
|
||||
'costs.view.list': 'Zoznam',
|
||||
'costs.view.table': 'Tabuľka',
|
||||
'costs.table.lockedPayer': 'Niekto zaplatil: sumu zmeňte vo výdavku, aby zostatky sedeli.',
|
||||
'costs.table.lockedCurrency': 'Zadané v {currency}: sumu zmeňte vo výdavku.',
|
||||
'costs.table.summary': 'Súhrn',
|
||||
'costs.table.byCategory': 'Kategória',
|
||||
'costs.table.byDate': 'Deň',
|
||||
'costs.table.byPayer': 'Platiteľ',
|
||||
'costs.table.byStatus': 'Stav',
|
||||
'costs.table.noPayer': 'Zatiaľ bez platiteľa',
|
||||
'costs.table.paid': 'Zaplatené',
|
||||
'costs.table.open': 'Otvorené',
|
||||
'costs.editExpense': 'Upraviť výdavok',
|
||||
'costs.noMatch': 'Žiadne výdavky nezodpovedajú vášmu hľadaniu.',
|
||||
'costs.emptyText': 'Zatiaľ žiadne výdavky. Pridajte prvý.',
|
||||
|
||||
+60
-56
@@ -1740,7 +1740,7 @@ const help: TranslationStrings = {
|
||||
'Zdieľať vpravo hore otvorí ľudí cesty: členov, hostí, odkaz na pozvanie a verejný odkaz iba na čítanie.',
|
||||
'help.ctx.trip.bullet.4': 'Názov, dátumy, obal a mena sa upravujú v časti Moje cesty ceruzkou na karte cesty.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Šípky na vnútornom okraji stĺpca ho zbalia a mapa zaberie uvoľnené miesto; tenký oddeľovač vedľa stĺpca mení jeho šírku.',
|
||||
'Jazýček na vnútornom okraji stĺpca ho zbalí a mapa zaberie uvoľnené miesto; tenký oddeľovač vedľa stĺpca mení jeho šírku.',
|
||||
'help.ctx.trip.bullet.6': 'Šípka späť na paneli nástrojov dní vráti poslednú zmenu plánu.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Pridajte člena',
|
||||
@@ -1805,8 +1805,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Uvoľnite miesto pre mapu',
|
||||
'help.guide.collapse-columns.goal': 'Zbaľte stĺpec alebo mu dajte viac šírky.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Kliknutím na šípku na vnútornom okraji stĺpca dní ho zbalíte; mapa zaberie uvoľnené miesto. Stĺpec miest má rovnakú šípku.',
|
||||
'help.guide.collapse-columns.step.2': 'Opätovným kliknutím na šípku stĺpec vrátite.',
|
||||
'Kliknite na jazýček na vnútornom okraji stĺpca dní, ten s ikonou panela, a stĺpec sa zbalí; mapa zaberie uvoľnené miesto. Stĺpec miest má rovnaký jazýček.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Zbalený stĺpec nechá v rohu mapy dlaždicu: Plán pre dni a Miesta pre miesta. Kliknutím na ňu stĺpec vrátite.',
|
||||
'help.guide.collapse-columns.step.3': 'Potiahnutím tenkého oddeľovača medzi stĺpcom a mapou zmeníte šírku stĺpca.',
|
||||
'help.guide.collapse-columns.result': 'Šírky sa zapamätajú; pri ďalšej návšteve budú stĺpce opäť otvorené.',
|
||||
'help.guide.collapse-columns.tip.1': 'Oba stĺpce môžete zbaliť naraz a zobraziť iba mapu.',
|
||||
@@ -1828,26 +1829,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Pridať miesto/aktivitu hore otvorí formulár pre miesto, ktoré zadáte alebo vyhľadáte. Keď je otvorený deň, tlačidlo má názov Nové miesto a Ku dňu vedľa neho vytvorí miesto priamo v tomto dni.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importovať súbor prijíma súbory .gpx, .kml a .kmz; Import zoznamu prijíma zdieľaný zoznam z Google Maps alebo Naver Maps. Súbor môžete aj jednoducho pustiť na stĺpec.',
|
||||
'Tlačidlo importu vedľa neho ponúka Importovať súbor pre súbory .gpx, .kml a .kmz a Zoznam Google (Import zoznamu, ak sú zapnuté aj zoznamy Naver) pre zoznam zdieľaný z Google Maps alebo Naver Maps. Súbor môžete aj jednoducho pustiť na stĺpec.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Rozbaľovací zoznam prepína medzi Všetky, Nezaradené, Plánované a po importe stopy aj Trasy; pod ním je vyhľadávanie, filter kategórií a hviezdička pre minimálne hodnotenie.',
|
||||
'Pod nimi je vyhľadávanie so symbolom zaškrtnutia vedľa neho, ktorý spustí výber, a rad filtrov: Zobraziť prepína medzi Všetko, Nezaradené, Naplánované a po importe stopy aj Trasy, každé s počtom; tlačidlo so štítkom filtruje podľa kategórie a hviezdička podľa minimálneho hodnotenia.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Riadok zobrazuje obrázok, názov a popis alebo adresu. Kliknutím naň zobrazíte podrobnosti miesta, môžete ho potiahnuť na deň alebo kliknutím pravým tlačidlom otvoriť Upraviť, Pridať k dňu, Otvoriť webovú stránku, Google Maps, Uložiť do zbierky a Vymazať.',
|
||||
'Riadok zobrazuje obrázok, názov a popis alebo adresu. Kliknutím naň zobrazíte podrobnosti miesta, môžete ho potiahnuť na deň alebo kliknutím pravým tlačidlom (či na jeho tri bodky) otvoriť Upraviť, + Deň, Otvoriť webovú stránku, Google Maps, Uložiť do zbierky a Odstrániť.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Keď je otvorený deň, tlačidlo + na konci nezaradeného riadka pridá miesto k tomuto dňu a Plánované zobrazí iba tento deň; tlačidlom Zobraziť celú cestu zobrazenie znova rozšírite.',
|
||||
'Keď je otvorený deň, tlačidlo + Deň na konci nezaradeného riadka pridá miesto k tomuto dňu a Naplánované zobrazí iba tento deň; tlačidlom Zobraziť celú cestu zobrazenie znova rozšírite.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Symbol zaškrtnutia na pravom konci riadka filtrov spustí výber: viacerým riadkom naraz môžete priradiť novú kategóriu, pridať ich do zbierky alebo ich vymazať.',
|
||||
'Symbol zaškrtnutia vedľa vyhľadávania spustí výber: cez lištu v dolnej časti stĺpca môžete viacerým riadkom naraz priradiť novú kategóriu, pridať ich do zbierky, označiť ich ako navštívené alebo ich odstrániť.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Vytvorte miesto',
|
||||
'help.guide.create-place.goal': 'Pridajte miesto alebo aktivitu ručne so všetkým, čo o nich plán potrebuje vedieť.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Kliknite na Pridať miesto/aktivitu v hornej časti stĺpca miest (Nové miesto, keď je otvorený deň). Otvorí sa formulár.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Zadajte miesto do poľa Hľadať miesta… hore a vyberte výsledok. Vyplní sa Názov, Adresa, Zemepisná šírka, Zemepisná dĺžka a Webová stránka a Podrobnosti miesta vľavo zobrazia jeho obrázky, otváracie hodiny a popis. V TREK s kľúčom Google je pod zoznamom možnosť Nie je to správne miesto? Hľadať radšej cez Google, ktorá spustí rovnaké vyhľadávanie cez Google.',
|
||||
'Zadajte miesto do poľa Hľadať miesta... a vyberte výsledok. Vyplní sa názov v hlavičke dialógu, Adresa, Zemepisná šírka, Zemepisná dĺžka a Webová stránka a Podrobnosti miesta vľavo zobrazia jeho obrázky, otváracie hodiny a popis. V TREK s kľúčom Google je pod zoznamom možnosť Nie je to správne miesto? Hľadať radšej v Google, ktorá spustí rovnaké vyhľadávanie cez Google. Uložené miesta vpravo rovnakým spôsobom ponúkajú miesta z vašich zbierok.',
|
||||
'help.guide.create-place.step.3':
|
||||
'V Podrobnostiach miesta kliknutím na obrázok v časti Vybrať obrázok z neho urobíte obrázok miesta; Použiť tento text prevezme popis do formulára.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Skontrolujte polia: Názov je povinný; Popis a Poznámky sú na vás; Adresa, Zemepisná šírka a Zemepisná dĺžka pochádzajú z vyhľadávania alebo sa zadajú ručne; Kategória vyberá jednu z kategórií cesty a tlačidlo + vedľa nej hneď vytvorí novú; do poľa Webová stránka patrí odkaz.',
|
||||
'Skontrolujte, čo formulár obsahuje: názov je v hlavičke dialógu a je to jediné povinné pole; štítok Kategória pod ním vyberá jednu z kategórií cesty a tlačidlo + vedľa neho hneď vytvorí novú. Adresa, Zemepisná šírka a Zemepisná dĺžka pochádzajú z vyhľadávania alebo sa zadajú ručne; Popis a Poznámky sú na vás; do poľa Webová stránka patrí odkaz.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Kliknite na Pridať. Ak už v ceste je miesto s rovnakým názvom, formulár vás na to upozorní a tlačidlo sa zmení na Aj tak pridať.',
|
||||
'help.guide.create-place.result': 'Miesto je v zozname aj na mape, v časti Nezaradené, kým ho nepridáte k dňu.',
|
||||
@@ -1865,7 +1866,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Ku dňu otvorí rovnaký formulár ako Nové miesto, len miesto sa pridá k otvorenému dňu v okamihu, keď kliknete na Pridať.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Existujúce miesto pridáte k otvorenému dňu tlačidlom + na konci jeho riadka alebo kliknutím pravým tlačidlom a voľbou Pridať k dňu.',
|
||||
'Existujúce miesto pridáte k otvorenému dňu tlačidlom + Deň na konci jeho riadka alebo kliknutím pravým tlačidlom a voľbou + Deň.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Funguje to aj opačne, a to bez predchádzajúceho otvorenia dňa: potiahnite riadok miesta zo stĺpca a pustite ho na kartu dňa. Ak ho pustíte medzi dve zastávky, umiestni sa presne tam.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1877,10 +1878,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Nájdite miesto v zozname',
|
||||
'help.guide.filter-places.goal': 'Zúžte stĺpec na miesta, ktoré hľadáte.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Rozbaľovací zoznam hore prepína medzi Všetky, Nezaradené (zatiaľ v žiadnom dni), Plánované (v niektorom dni) a Trasy (importované stopy GPX), každé s počtom.',
|
||||
'help.guide.filter-places.step.2': 'Píšte do poľa Hľadať miesta…; zoznam sa počas písania zužuje.',
|
||||
'Zobraziť, rozbaľovací zoznam pod vyhľadávaním, prepína medzi Všetko, Nezaradené (zatiaľ v žiadnom dni), Naplánované (v niektorom dni) a Trasy (importované stopy GPX), každé s počtom.',
|
||||
'help.guide.filter-places.step.2': 'Píšte do poľa Hľadať hore; zoznam sa počas písania zužuje.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Všetky kategórie otvorí zoznam, v ktorom zaškrtnete jednu alebo viac kategórií vrátane možnosti Bez kategórie; Vymazať filter v jeho dolnej časti výber zruší.',
|
||||
'Tlačidlo so štítkom vedľa Zobraziť zobrazí kategórie: zaškrtnite jednu alebo viac vrátane možnosti Bez kategórie. Tlačidlo ukazuje počet zaškrtnutých a Vymazať filter v dolnej časti zoznamu ich všetky zruší.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Hviezdička vedľa neho nastaví minimálne hodnotenie: 5+, 4+ atď. zobrazia iba miesta, ktoré ste hodnotili aspoň takto vysoko.',
|
||||
'help.guide.filter-places.result': 'Počet nad riadkami udáva, koľko miest zodpovedá filtrom; filtre sa kombinujú.',
|
||||
@@ -1894,7 +1895,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Kliknite pravým tlačidlom na riadok a zvoľte Upraviť, alebo otvorte miesto a v jeho podrobnostiach kliknite na Upraviť.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Zmeňte, čo potrebujete: Názov, Popis, Poznámky, Adresa, Zemepisná šírka a Zemepisná dĺžka, Kategória, Webová stránka. Ak formulár otvoríte z dňa, obsahuje aj Poznámky pre tento deň a Začiatok a Do pre tento deň.',
|
||||
'Zmeňte, čo potrebujete: názov a štítok Kategória v hlavičke dialógu, Adresa, Zemepisná šírka a Zemepisná dĺžka, Popis, Poznámky a Webová stránka. Ak formulár otvoríte z dňa, obsahuje aj Od a Do a Poznámky pre tento deň.',
|
||||
'help.guide.edit-place.step.3': 'Kliknite na Aktualizovať.',
|
||||
'help.guide.edit-place.result':
|
||||
'Zmena sa prejaví všade, kde sa miesto zobrazuje: v zozname, na mape a v každom dni, v ktorom je.',
|
||||
@@ -1908,22 +1909,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Kliknite pravým tlačidlom na riadok a zvoľte Vymazať, alebo kliknite na Vymazať v podrobnostiach miesta.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Potvrďte. Ak bola v mieste rezervovaná noc alebo je s ním prepojená rezervácia, otázka uvedie, čo sa odstráni spolu s ním.',
|
||||
'V otázke kliknite na Odstrániť. Ak bola v mieste rezervovaná noc alebo je s ním prepojená rezervácia, otázka uvedie, čo sa odstráni spolu s ním.',
|
||||
'help.guide.delete-place.result':
|
||||
'Miesto zmizne zo zoznamu, z mapy aj zo všetkých dní; Vrátiť späť na paneli nástrojov nad dňami ho obnoví.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Ak chcete miesto odobrať iba z jedného dňa, použite radšej Odobrať z dňa pri danej zastávke.',
|
||||
'help.guide.delete-place.tip.2': 'Viac miest naraz: symbol zaškrtnutia vedľa filtrov spustí výber.',
|
||||
'help.guide.delete-place.tip.2': 'Viac miest naraz: symbol zaškrtnutia vedľa vyhľadávania spustí výber.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Zmeňte alebo vymažte viac miest naraz',
|
||||
'help.guide.select-places.goal': 'Upracte zoznam naraz namiesto po jednom mieste.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Kliknite na symbol zaškrtnutia na pravom konci riadka filtrov. Riadky dostanú zaškrtávacie políčka a zobrazí sa lišta s akciami.',
|
||||
'Kliknite na symbol zaškrtnutia vedľa poľa vyhľadávania. Riadky dostanú okrúhle zaškrtávacie políčka a v dolnej časti stĺpca sa vysunie lišta s akciami.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Zaškrtnite riadky alebo použite Vybrať všetko na lište; lišta ukazuje počet vybraných.',
|
||||
'Kliknutím na riadky ich zaškrtnete. Vybrať všetko, dvojité zaškrtnutie na lište, vyberie každý riadok, ktorý filtre ponechajú.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Zmeniť kategóriu im všetkým priradí jednu kategóriu; Uložiť do zbierky ich skopíruje do jednej z vašich zbierok; Vymazať vybrané ich po potvrdení odstráni.',
|
||||
'help.guide.select-places.step.4': 'Opätovným kliknutím na symbol zaškrtnutia výber ukončíte.',
|
||||
'Lišta ukazuje počet zaškrtnutých miest. Zmeniť kategóriu im všetkým priradí jednu kategóriu; Uložiť do zbierky ich skopíruje do jednej z vašich zbierok; Vymazať vybrané ich po potvrdení odstráni.',
|
||||
'help.guide.select-places.step.4': 'Hotovo, X na konci lišty, výber ukončí.',
|
||||
'help.guide.select-places.result':
|
||||
'Zmena sa použije na každé vybrané miesto; vymazanie možno vrátiť späť z panela nástrojov nad dňami.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1933,7 +1934,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'Importujte miesta zo súboru GPX, KML alebo KMZ',
|
||||
'help.guide.import-places-file.goal': 'Načítajte to, čo exportovali Google My Maps, Google Earth alebo GPS tracker.',
|
||||
'help.guide.import-places-file.step.1': 'Kliknite na Importovať súbor alebo pustite súbor kamkoľvek na stĺpec miest.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Kliknite na tlačidlo importu vedľa tlačidla pridania a zvoľte Importovať súbor, alebo pustite súbor kamkoľvek na stĺpec miest.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Vyberte súbor alebo ho potiahnite do poľa. Pri GPX zaškrtnite, čo sa má importovať: Trasové body, Trasy, Trasy GPS (s geometriou cesty); pri KML a KMZ Body (Placemarks) a Cesty (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1948,7 +1950,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Importujte zdieľaný zoznam z Google Maps alebo Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Premeňte odkaz na zdieľaný zoznam na miesta.',
|
||||
'help.guide.import-places-list.step.1': 'Kliknite na Import zoznamu a zvoľte Zoznam Google alebo Zoznam Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Kliknite na tlačidlo importu vedľa tlačidla pridania a zvoľte Zoznam Google. Ak sú zapnuté aj zoznamy Naver, položka sa volá Import zoznamu a dialóg sa opýta, ktorý z nich.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Vložte zdieľaný odkaz na zoznam. Funguje aj odkaz na trasu v Google Maps: jej zastávky sa stanú miestami v poradí jazdy.',
|
||||
'help.guide.import-places-list.step.3': 'Kliknite na Importovať.',
|
||||
@@ -1966,24 +1969,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Panel nástrojov hore: Exportovať (PDF, kalendár, GPX), Rozbaliť všetky dni / Zbaliť všetky dni, šípka späť, Zmeniť poradie dní a Zobraziť všetky trasy rezervácií.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Karta dňa: v hlavičke číslo, počasie, názov, dátum a náklady dňa; kliknutím na hlavičku deň otvoríte, jej šípkou ho zbalíte. V hlavičke sú aj Verejná doprava, Pridať dopravu a Pridať poznámku.',
|
||||
'Karta dňa: dlaždica s číslom dňa a predpoveďou, názov a dátum a štítky pre rezervovanú noc, požičané auto a náklady dňa. Kliknutím na hlavičku deň otvoríte, šípkou ho zbalíte a + otvorí ponuku: Pridať miesto k tomuto dňu, Pridať ubytovanie, Pridať dopravu, Verejná doprava a Pridať poznámku.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'V rámci dňa: zastávky v poradí, každá s obrázkom, názvom, časom a zámkom na obrázku; poznámky; rezervácie patriace k dňu; a medzi zastávkami čas cesty každého úseku.',
|
||||
'V rámci dňa: zastávky v poradí, každá s obrázkom, názvom, časom, zámkom na obrázku a rezerváciami, ktoré sú k nej pripnuté; poznámky; rezervácie a doprava dňa, farebne odlíšené podľa druhu; a medzi zastávkami čas cesty každého úseku. Každý riadok má ponuku s tromi bodkami, rovnakú, akú otvorí pravé tlačidlo.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Pod zastávkami je lišta trasy: Trasa vykreslí deň na mape, Optimalizovať zoradí zastávky, Autom / Pešo nastaví spôsob presunu pre deň, Otvoriť v Mapách Google a Otvoriť v CoMaps odovzdajú deň do týchto aplikácií.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Miesta sa do dňa dostanú potiahnutím riadka zo stĺpca miest, tlačidlom + v tomto riadku, tlačidlom Pridať miesto k tomuto dňu v prázdnom dni alebo z podrobností miesta.',
|
||||
'Miesta sa do dňa dostanú potiahnutím riadka zo stĺpca miest, tlačidlom + Deň v tomto riadku, voľbou Pridať miesto k tomuto dňu v ponuke + dňa alebo v prázdnom dni, alebo z podrobností miesta.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Celkové náklady v dolnej časti sčítajú každú zastávku a rezerváciu s cenou, v mene cesty.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Porozumejte karte dňa',
|
||||
'help.guide.read-day-plan.goal': 'Zistite, čo vám hovorí každá časť karty dňa, skôr než niečo zmeníte.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Hlavička: číslo dňa, predpoveď počasia na deň, Deň 1 alebo názov, ktorý ste mu dali, dátum a náklady dňa. Kliknutím na hlavičku deň otvoríte (nad mapou sa otvorí panel s jeho podrobnosťami); šípka vpravo kartu zbalí a rozbalí.',
|
||||
'Hlavička: dlaždica s číslom dňa a predpoveďou, potom Deň 1 alebo názov, ktorý ste mu dali, dátum a štítky pre rezervovanú noc (check-in alebo check-out), požičané auto a náklady dňa. Kliknutím na hlavičku deň otvoríte (nad mapou sa otvorí panel s jeho podrobnosťami); + vpravo pridá miesto, ubytovanie, dopravu, spoj verejnej dopravy alebo poznámku a šípka kartu zbalí.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Zastávka: úchytom vľavo ju potiahnete, obrázok nesie zámok pre optimalizáciu trasy, potom nasleduje názov, popis a prípadne poznámky pre tento deň. Časový štítok zobrazuje Začiatok a Do, ak ich zastávka má; šípky, ktoré sa zobrazia na jej pravom konci, ju posúvajú nahor alebo nadol.',
|
||||
'Zastávka: úchytom vľavo ju potiahnete, obrázok nesie zámok pre optimalizáciu trasy, potom nasleduje názov, časový štítok, ak má zastávka Od a Do, popis a prípadne poznámky pre tento deň. Šípky na jej pravom konci ju posúvajú nahor alebo nadol a tri bodky otvoria jej ponuku.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Rezervácia v dni: rezervácia pri zastávke ju označí ako Rezervácia potvrdená alebo Rezervácia čaká a doprava sa zobrazí ako Odlet alebo Prílet s časom a trasou, s malým prepínačom, ktorý túto trasu vykreslí na mape.',
|
||||
'Rezervácia pri zastávke je na nej ako štítok Rezervácia, zelený, keď je potvrdená, a jantárový, kým čaká, s časom a poskytovateľom; kliknutím na štítok rezerváciu otvoríte a tlačidlo trasy vedľa neho vykreslí jej trasu. Doprava má vlastný riadok, farebne odlíšený podľa druhu, s Odlet alebo Prílet a časom. Kliknite na rezerváciu a otvoria sa jej podrobnosti; tlačidlom Upraviť ju tam zmeníte.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Spojnica medzi dvoma zastávkami uvádza, ako dlho úsek trvá a aký je dlhý, v spôsobe presunu daného dňa; kliknutím na ňu zmeníte spôsob presunu iba pre tento úsek.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -1991,7 +1994,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Každý symbol na karte má svoj význam; návody nižšie ukazujú, ako každý z nich zmeniť.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Kliknutím pravým tlačidlom na zastávku otvoríte jej ponuku: Upraviť, Odobrať z dňa, Otvoriť webovú stránku, navigačné aplikácie (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Uložiť do zbierky, Vymazať.',
|
||||
'Kliknutím pravým tlačidlom na zastávku alebo na jej tri bodky otvoríte jej ponuku: Upraviť, Odobrať z dňa, Otvoriť webovú stránku, navigačné aplikácie (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Uložiť do zbierky, Odstrániť.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Keď podržíte kurzor nad zastávkou, na jej konci sa zobrazí Pridať rezerváciu: rezervácia vytvorená tam je viazaná na túto zastávku v tento deň.',
|
||||
// place-onto-day
|
||||
@@ -2000,9 +2003,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Potiahnite riadok zo stĺpca miest na kartu dňa. Pustite ho medzi dve zastávky, ak ho chcete umiestniť presne tam, alebo kamkoľvek na kartu, ak ho chcete pridať na koniec.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Bez ťahania: otvorte deň kliknutím na jeho hlavičku a potom kliknite na + na konci riadka miesta, alebo kliknite na riadok pravým tlačidlom a zvoľte Pridať k dňu.',
|
||||
'Bez ťahania: otvorte deň kliknutím na jeho hlavičku a potom kliknite na + Deň na konci riadka miesta, alebo kliknite na riadok pravým tlačidlom a zvoľte + Deň.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'V prázdnom dni otvorí Pridať miesto k tomuto dňu formulár miesta a nové miesto sa hneď pridá k dňu.',
|
||||
'Pridať miesto k tomuto dňu, v ponuke + dňa alebo v prázdnom dni, otvorí formulár miesta a nové miesto sa hneď pridá k dňu.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Z podrobností miesta sa Pridať k dňu opýta, ku ktorému dňu; po otvorení dňa cez jeho hlavičku vytvorí Ku dňu v stĺpci miest nové miesto v otvorenom dni.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2031,7 +2034,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Nastavte zastávke čas',
|
||||
'help.guide.set-stop-times.goal': 'Určte, kedy zastávka začína a končí, aby sa deň čítal ako harmonogram.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Kliknite pravým tlačidlom na zastávku a zvoľte Upraviť. Ak formulár otvoríte z dňa, v dolnej časti má polia Začiatok a Do.',
|
||||
'Kliknite pravým tlačidlom na zastávku alebo na jej tri bodky a zvoľte Upraviť. Ak formulár otvoríte z dňa, má polia Od a Do pre tento deň hneď pod polohou.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Zadajte Začiatok a podľa potreby aj Do. Časový prekryv s: upozorňuje, že sa prekrýva iná zastávka dňa s časom; ak je Do pred Začiatkom, Aktualizovať nebude možné.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2066,13 +2069,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Pridajte k dňu poznámku',
|
||||
'help.guide.day-note.goal': 'Majte pripomienku, číslo lístka alebo plán B priamo v dni.',
|
||||
'help.guide.day-note.step.1': 'Kliknite na Pridať poznámku v hlavičke dňa.',
|
||||
'help.guide.day-note.step.1': 'Kliknite na + v hlavičke dňa a zvoľte Pridať poznámku.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Do poľa Poznámka zadajte názov (ten sa zobrazí na karte dňa) a zvyšok napíšte do poľa Poznámka ku dňu. Panel nástrojov nad ním formátuje text (tučné písmo, zoznamy, odkazy, citáty) a Náhľad vľavo ukazuje, ako bude karta vyzerať.',
|
||||
'Názov poznámky zadajte do hlavičky dialógu, kde je napísané Poznámka; ten sa zobrazí v dni. Zvyšok napíšte do poľa Poznámka ku dňu: panel nástrojov nad ním formátuje text (tučné písmo, zoznamy, odkazy, citáty) a Náhľad vľavo ukazuje riadok, ktorý z toho vznikne.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Vyberte Ikonu a Farbu, aby sa poznámka odlíšila od zastávok, a potom kliknite na Pridať.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Poznámka je v dni ako zastávka: potiahnite ju na správne miesto, kliknutím pravým tlačidlom otvoríte Upraviť a Vymazať.',
|
||||
'Poznámka je v dni ako zastávka: potiahnite ju na správne miesto a kliknutím pravým tlačidlom alebo na jej tri bodky otvoríte Upraviť a Odstrániť.',
|
||||
'help.guide.day-note.result':
|
||||
'Poznámka je súčasťou dňa, aj v PDF; poznámka s časom sa zoradí spolu so zastávkami s časom.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2120,15 +2123,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Zistite, kde sa rezervácia zobrazí, keď už existuje, a na ktorej obrazovke sa vytvára.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Doprava (let, vlak, trajekt, autobus, auto) sa zobrazí v deň odchodu ako Odlet a v deň príchodu ako Prílet, s časom a trasou; viacdenná doprava sa tiahne cez dni medzi nimi.',
|
||||
'Doprava (let, vlak, trajekt, autobus, auto) je riadok farebne odlíšený podľa druhu: Odlet v deň odchodu, Prílet v deň príchodu, s časom a trasou; viacdenná doprava sa tiahne cez dni medzi nimi. Kliknite na riadok a otvorí sa rezervácia.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Rezervácia viazaná na zastávku (reštaurácia, prehliadka) označí túto zastávku ako Rezervácia potvrdená alebo Rezervácia čaká; rezervácia s dňom, ale bez zastávky, má v dni vlastný riadok.',
|
||||
'Rezervácia viazaná na zastávku (reštaurácia, prehliadka) je na tejto zastávke štítok Rezervácia, zelený, keď je potvrdená, a jantárový, kým čaká, s časom; rezervácia s dňom, ale bez zastávky, má v dni vlastný riadok.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Noc v hoteli je ubytovanie: nájdete ho v paneli podrobností dňa v časti Ubytovanie, od príchodu po odchod, a trasa každého z týchto dní začína tam.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Prepínač v riadku dopravy vykreslí jej trasu na mape; Zobraziť všetky trasy rezervácií na paneli nástrojov vykreslí všetky.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Vytváranie: Pridať rezerváciu pri zastávke pod kurzorom, Pridať dopravu a Verejná doprava v hlavičke dňa a karty Rezervácie a Doprava pre úplný zoznam s importom a súbormi.',
|
||||
'Vytváranie: Pridať rezerváciu pri zastávke pod kurzorom, Pridať dopravu a Verejná doprava v ponuke + dňa a karty Rezervácie a Doprava pre úplný zoznam s importom a súbormi.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Jedna rezervácia, jedno miesto v pláne; karty zobrazujú tie isté rezervácie ako zoznam.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2159,24 +2162,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Kliknite na riadok v stĺpci miest, na zastávku v dni alebo na značku na mape a karta sa otvorí nad mapou. Keď miesto vyberiete v dni, karta vie, ktorú zastávku myslíte, a preto zobrazí aj účastníkov zastávky a jej rezerváciu.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Hlavička obsahuje okrúhly obrázok, názov, kategóriu, adresu a súradnice. Kliknutím na obrázok použijete vlastný, dvojitým kliknutím na názov miesto hneď premenujete a X vpravo kartu zatvorí.',
|
||||
'Hlavička obsahuje okrúhly obrázok, názov, adresu v jednom riadku a štítky pre to, čo je známe: otvorené alebo zatvorené, kategóriu, cenu, telefónne číslo a súradnice. Kliknutím na obrázok použijete vlastný, dvojitým kliknutím na názov miesto hneď premenujete a X vpravo kartu zatvorí.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Pod ňou: cena, ak ju miesto má, hviezdičky, ktoré mu dal každý cestovateľ, popis a poznámky a Poznámky pre tento deň, ak ich zastávka má.',
|
||||
'Pod ňou: hviezdičky, ktoré mu dal každý cestovateľ, popis a poznámky a Poznámky pre tento deň, ak ich zastávka má.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Nasledujú Otváracie hodiny, Farba trasy, Dáta trasy a Súbory, ak sa uplatňujú. Súbory prijmú čokoľvek z vašich priečinkov a zobrazia aj to, čo je pripojené k rezervácii tejto zastávky.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Riadok v dolnej časti: Pridať k dňu alebo Odobrať z dňa, keď je otvorený deň, potom Uložiť do zbierky, Navigácia, Otvoriť webovú stránku, Upraviť a Vymazať.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Miesto vybrané z vyhľadávania nesie to, čo o ňom vie index TREK alebo OpenStreetMap: zelený krúžok Otvorené alebo červený Uzavreté okolo obrázka podľa miestneho času miesta, telefónne číslo pod hviezdičkami, nižšie Otváracie hodiny s riadkom pre daný deň a celým týždňom po kliknutí a jeho webovú stránku pod tlačidlom Otvoriť webovú stránku. Hodnotenie Google sa zobrazuje iba pri mieste nájdenom cez Google, v TREK s kľúčom Google.',
|
||||
'Miesto vybrané z vyhľadávania nesie to, čo o ňom vie index TREK alebo OpenStreetMap: Otvorené alebo Zatvorené medzi štítkami hlavičky so zeleným alebo červeným krúžkom okolo obrázka podľa miestneho času miesta, telefónne číslo tiež ako štítok, nižšie Otváracie hodiny s riadkom pre daný deň a celým týždňom po kliknutí a jeho webovú stránku pod tlačidlom Otvoriť webovú stránku. Hodnotenie Google sa zobrazuje iba pri mieste nájdenom cez Google, v TREK s kľúčom Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Čo vám karta povie o mieste',
|
||||
'help.guide.read-place.goal': 'Prečítajte si všetko, čo cesta vie o jednom mieste, na jednej karte.',
|
||||
'help.guide.read-place.step.1':
|
||||
'V stĺpci dní kliknite na zastávku, ktorú si chcete pozrieť. Karta sa otvorí nad mapou a zastávka zostane vo svojom dni označená.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Hlavička: okrúhly obrázok, názov, adresa a presné súradnice. Zelený krúžok s nápisom Otvorené alebo červený s nápisom Uzavreté okolo obrázka ukazuje, či je miesto práve otvorené podľa jeho miestneho času, keď TREK pozná jeho otváracie hodiny. X vpravo kartu znova zatvorí.',
|
||||
'Hlavička: okrúhly obrázok, názov a adresa v jednom riadku; jej popis pri podržaní myši obsahuje celú adresu. Štítky pod nimi ukazujú, či je miesto práve Otvorené alebo Zatvorené podľa jeho miestneho času, k tomu zodpovedajúci zelený alebo červený krúžok okolo obrázka, a nesú telefónne číslo, ktoré kliknutím odovzdáte aplikácii na telefonovanie, a presné súradnice. X vpravo kartu znova zatvorí.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Pod ňou sú hviezdičky, ktoré miestu dal každý cestovateľ, s priemerom a počtom hlasov. Kým nikto nehodnotil, zobrazuje sa Zatiaľ bez hodnotenia. Hneď pod tým je telefónne číslo, ak ho miesto má: kliknutím naň ho odovzdáte aplikácii na telefonovanie.',
|
||||
'Hodnotenie je prvé pod hlavičkou: hviezdičky, ktoré miestu dal každý cestovateľ, s priemerom a počtom hlasov. Kým nikto nehodnotil, zobrazuje sa Zatiaľ bez hodnotenia.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Potom popis a pod ním poznámky. Oboje je vykreslený text z formulára miesta: zoznamy, odkazy aj tučné písmo fungujú.',
|
||||
'help.guide.read-place.step.5': 'Účastníci ukazujú, kto ide na túto zastávku. Idú všetci, kým niekoho neodoberiete.',
|
||||
@@ -2269,17 +2272,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.goal':
|
||||
'Prečítajte si rezerváciu, ktorá patrí k zastávke, otvorte ju a pripnite k nej novú.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Otvorte zastávku, ku ktorej rezervácia patrí. Karta zobrazuje pás so stavom Potvrdené alebo Čaká na potvrdenie a názvom rezervácie.',
|
||||
'help.guide.place-booking.step.2': 'Pás obsahuje Dátum, Čas a Rezervačný kód, ako aj poznámky, ktoré rezervácia má.',
|
||||
'help.guide.place-booking.step.3': 'Kliknite na pás. Rezervácia sa otvorí nad mapou.',
|
||||
'Otvorte zastávku, ku ktorej rezervácia patrí. Karta ju uvádza v časti Rezervácie ako vlastnú malú kartu s názvom rezervácie a stavom Potvrdené alebo Čaká na potvrdenie.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Karta rezervácie obsahuje Dátum, Čas a Rezervačný kód, ako aj poznámky, ktoré rezervácia má.',
|
||||
'help.guide.place-booking.step.3': 'Kliknite na kartu rezervácie. Rezervácia sa otvorí nad mapou.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Upraviť v spodnej časti rezervácie otvorí jej vlastný formulár. Rezerváciu k zastávke tam pripína pole Prepojiť s priradením dňa a tu už uvádza práve túto zastávku. Formulár opäť zatvorte.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Nová rezervácia pre zastávku sa začína v stĺpci dní: prejdite myšou na zastávku a kliknite na + na jej konci. Formulár sa otvorí ako Nová rezervácia, už prepojený so zastávkou.',
|
||||
'Nová rezervácia pre zastávku sa začína v stĺpci dní: prejdite myšou na zastávku a kliknite na Pridať rezerváciu, lístok na jej konci. Formulár sa otvorí ako Nová rezervácia, už prepojený so zastávkou.',
|
||||
'help.guide.place-booking.result':
|
||||
'Rezervácia visí na zastávke: je na karte, je v dni a jej súbory sú uvedené aj tu v časti Súbory.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Pás sa zobrazuje len pri zastávke, ku ktorej je rezervácia pripnutá. Rezervácia bez zastávky je na záložke Rez.',
|
||||
'Karta rezervácie sa zobrazuje len pri zastávke, ku ktorej je rezervácia pripnutá. Rezervácia bez zastávky je na záložke Rez.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Jednu zastávku môže zdieľať viacero rezervácií: obed aj prehliadka, ktorá začína pred tými istými dverami.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2364,7 +2368,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Hore je počasie dňa. Predpoveď pre uvádza miesto, pre ktoré platí: prvú zastávku dňa alebo hotel, v ktorom sa zobudíte.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Rezervácie uvádzajú rezervácie daného dňa, každú s jej druhom, zastávkou, ku ktorej patrí, a časmi. Zelená znamená potvrdené, jantárová ešte čaká na potvrdenie; je to len prehľad, rezervácie sa menia v časti Rezervácie.',
|
||||
'Rezervácie uvádzajú rezervácie daného dňa, každú s jej druhom, zastávkou, ku ktorej patrí, a časmi. Zelená znamená potvrdené, jantárová ešte čaká na potvrdenie a kliknutím na riadok rezerváciu otvoríte.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Ubytovanie ukazuje každú noc rezervovanú v tento deň, s Check-in a Check-out v dňoch, keď nastanú, s časovým oknom check-inu, časom check-outu a číslom potvrdenia.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2396,7 +2400,7 @@ const help: TranslationStrings = {
|
||||
'Predpoveď pre uvádza miesto, pre ktoré čísla platia: prvú zastávku dňa, alebo v deň bez zastávky hotel, v ktorom sa zobudíte.',
|
||||
'help.guide.day-weather.step.2': 'Veľké číslo je teplota dňa, vedľa neho minimum a maximum a slovný popis počasia.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Údaje pod ním: pravdepodobnosť dažďa, jeho množstvo, najsilnejší vietor a východ a západ slnka.',
|
||||
'Štítky vpravo od neho: pravdepodobnosť dažďa, jeho množstvo, najsilnejší vietor a východ a západ slnka.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Dole je deň po hodinách, každé dve hodiny: čas, ikona, teplota a pravdepodobnosť dažďa. Hodina nad 50 percent je podfarbená modrou.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2428,18 +2432,18 @@ const help: TranslationStrings = {
|
||||
'Ubytovacie zariadenie musí byť najprv miestom cesty. Vytvorte ho v stĺpci miest ako každé iné miesto: výber ponúka len to, čo už existuje.',
|
||||
'help.guide.add-accommodation.step.2': 'Otvorte deň príchodu a v časti Ubytovanie kliknite na Pridať ubytovanie.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Použiť na dni určuje, ktoré noci pobyt pokrýva: deň check-inu vľavo, deň check-outu vpravo. Všetky pokrýva celú cestu.',
|
||||
'Použiť na dni určuje, ktoré noci pobyt pokrýva: Začiatok je deň check-inu, Koniec deň check-outu a Všetko pokrýva celú cestu. Hlavička dialógu ukazuje rozsah a počet nocí.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Vyplňte Check-in, Do a Check-out a číslo rezervácie zadajte do poľa Potvrdenie. Všetky štyri môžu zostať prázdne.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Vyberte ubytovacie zariadenie z miest cesty. Štítky nad zoznamom ho zúžia na jednu kategóriu.',
|
||||
'Vyberte ubytovacie zariadenie z miest cesty. Kategória nad zoznamom ho zúži na jednu kategóriu.',
|
||||
'help.guide.add-accommodation.step.6': 'Kliknite na Uložiť.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Pobyt sa zobrazí v každom dni, ktorý pokrýva, Check-in v prvom a Check-out v poslednom. Ubytovacie zariadenie sa stane zastávkou v deň check-inu, takže mapa nakreslí cestu k nemu, a v časti Rezervácie sa objaví rezervácia typu Hotel.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Výber sa otvorí na dni, z ktorého ste prišli, s check-outom v nasledujúci deň; oba sa dajú pred uložením posunúť.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Pri vytváraní dajte hotelu kategóriu Hotel a štítky nad zoznamom ho jedným kliknutím zúžia na vaše hotely.',
|
||||
'Pri vytváraní dajte hotelu kategóriu Hotel a Kategória nad zoznamom ho jedným kliknutím zúži na vaše hotely.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Všetky časy sú voliteľné: pobyt bez check-inu a bez kódu stále pokrýva svoje noci a stále kreslí svoju trasu.',
|
||||
// edit-accommodation
|
||||
@@ -2449,7 +2453,7 @@ const help: TranslationStrings = {
|
||||
'V každom dni pobytu karta ukazuje ubytovacie zariadenie, časové okno check-inu, čas check-outu a číslo potvrdenia.',
|
||||
'help.guide.edit-accommodation.step.2': 'Ceruzka vpravo pobyt znova otvorí. Okno má teraz názov Upraviť ubytovanie.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Opravte rad polí: Check-in, Do, Check-out a Potvrdenie. Dni nad nimi a ubytovacie zariadenie pod nimi sa tu dajú tiež zmeniť.',
|
||||
'Opravte Check-in, Do, Check-out a Potvrdenie. Dni nad nimi a ubytovacie zariadenie pod nimi sa tu dajú tiež zmeniť.',
|
||||
'help.guide.edit-accommodation.step.4': 'Kliknite na Uložiť.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'X vedľa ceruzky pobyt ukončí. Na nič sa nepýta a rezervácia typu Hotel, ktorá k nemu patrí, zmizne spolu s ním.',
|
||||
@@ -2466,7 +2470,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Rezervácie uvádzajú rezervácie dňa: tie, ktoré majú jeho dátum, a tie, ktoré visia na niektorej z jeho zastávok.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Riadok ukazuje druh rezervácie, jej názov a, ak patrí k zastávke, túto zastávku za bodkou. Jej časy sú na pravom konci.',
|
||||
'Riadok ukazuje druh rezervácie, jej názov a, ak patrí k zastávke, túto zastávku sivou farbou za ním. Jej časy sú na pravom konci, pred bodkou stavu.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Farba ukazuje stav rezervácie: zelený riadok je potvrdený, jantárový ešte čaká na potvrdenie. Hotely v tomto zozname nie sú, majú vlastný blok nižšie.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Betalat av mig',
|
||||
'costs.filter.owed': 'Jag är skyldig',
|
||||
'costs.addExpense': 'Lägg till utgift',
|
||||
'costs.view.label': 'Vy',
|
||||
'costs.view.list': 'Lista',
|
||||
'costs.view.table': 'Tabell',
|
||||
'costs.table.lockedPayer': 'Någon har betalat: ändra beloppet i utgiften så att saldona stämmer.',
|
||||
'costs.table.lockedCurrency': 'Angivet i {currency}: ändra beloppet i utgiften.',
|
||||
'costs.table.summary': 'Sammanfattning',
|
||||
'costs.table.byCategory': 'Kategori',
|
||||
'costs.table.byDate': 'Dag',
|
||||
'costs.table.byPayer': 'Betalare',
|
||||
'costs.table.byStatus': 'Status',
|
||||
'costs.table.noPayer': 'Ingen betalare ännu',
|
||||
'costs.table.paid': 'Betald',
|
||||
'costs.table.open': 'Öppen',
|
||||
'costs.editExpense': 'Redigera utgift',
|
||||
'costs.noMatch': 'Inga utgifter stämmer överens med din sökning.',
|
||||
'costs.emptyText': 'Inga utgifter ännu. Lägg till din första.',
|
||||
|
||||
+62
-57
@@ -1697,7 +1697,7 @@ const help: TranslationStrings = {
|
||||
'Dela uppe till höger öppnar resans människor: medlemmar, gäster, inbjudningslänken och den skrivskyddade allmänna länken.',
|
||||
'help.ctx.trip.bullet.4': 'Titel, datum, omslag och valuta redigeras från Mina resor, med pennan på resekortet.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Vinkelpilarna vid en kolumns inre kant fäller ihop den och kartan tar utrymmet; den tunna avdelaren bredvid en kolumn ändrar dess bredd.',
|
||||
'Fliken vid en kolumns inre kant fäller undan den och kartan tar utrymmet; den tunna avdelaren bredvid en kolumn ändrar dess bredd.',
|
||||
'help.ctx.trip.bullet.6': 'Ångra-pilen i dagarnas verktygsrad tar tillbaka den senaste ändringen i planen.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Lägg till en medlem',
|
||||
@@ -1762,8 +1762,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Ge kartan mer plats',
|
||||
'help.guide.collapse-columns.goal': 'Fäll ihop en kolumn eller ge den mer bredd.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Klicka på vinkelpilen vid dagkolumnens inre kant för att fälla ihop den; kartan tar utrymmet. Platskolumnen har samma vinkelpil.',
|
||||
'help.guide.collapse-columns.step.2': 'Klicka på vinkelpilen igen för att ta tillbaka kolumnen.',
|
||||
'Klicka på fliken vid dagkolumnens inre kant, den med panelsymbolen, för att fälla undan kolumnen; kartan tar utrymmet. Platskolumnen har samma flik.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'En undanfälld kolumn lämnar en ruta i kartans hörn, Plan för dagarna och Platser för platserna. Klicka på den för att ta tillbaka kolumnen.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Dra den tunna avdelaren mellan en kolumn och kartan för att ändra kolumnens bredd.',
|
||||
'help.guide.collapse-columns.result': 'Bredderna sparas; kolumnerna kommer tillbaka öppna vid nästa besök.',
|
||||
@@ -1788,26 +1789,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Lägg till plats/aktivitet högst upp öppnar formuläret för en plats du skriver in eller söker fram. Medan en dag är öppen står det Ny plats på knappen, och Till dagen bredvid den skapar platsen direkt på den dagen.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Importera fil tar .gpx-, .kml- och .kmz-filer; Importera lista tar en delad lista från Google Maps eller Naver Maps. En fil kan också bara släppas på kolumnen.',
|
||||
'Importknappen bredvid den erbjuder Importera fil, för .gpx-, .kml- och .kmz-filer, och Google-lista (Importera lista där även Naver-listor är på) för en lista delad från Google Maps eller Naver Maps. En fil kan också bara släppas på kolumnen.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Rullgardinsmenyn växlar mellan Alla, Oplanerat, Planerat och, när ett spår har importerats, Spår; under den sitter sökningen, kategorifiltret och stjärnan för ett minsta betyg.',
|
||||
'Under dem sökningen, med bocken som startar en markering bredvid sig, och en rad filter: Visa växlar mellan Alla, Oplanerat, Planerat och, när ett spår har importerats, Spår, var och en med sitt antal; etikettknappen filtrerar efter kategori och stjärnan efter ett minsta betyg.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'En rad visar bild, namn och beskrivning eller adress. Klicka på den för platsens detaljer, dra den till en dag, eller högerklicka den för Redigera, + Dag, Öppna hemsida, Google Maps, Spara i samling och Ta bort.',
|
||||
'En rad visar bild, namn och beskrivning eller adress. Klicka på den för platsens detaljer, dra den till en dag, eller högerklicka den (eller klicka på dess tre prickar) för Redigera, + Dag, Öppna hemsida, Google Maps, Spara i samling och Ta bort.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Med en dag öppen lägger ett + i slutet av en oplanerad rad platsen på den dagen, och Planerat listar bara den dagen, med Visa hela resan för att vidga igen.',
|
||||
'Med en dag öppen lägger + Dag i slutet av en oplanerad rad platsen på den dagen, och Planerat listar bara den dagen, med Visa hela resan för att vidga igen.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Bocken längst till höger i filterraden startar en markering: flera rader på en gång får en ny kategori, hamnar i en samling eller tas bort.',
|
||||
'Bocken bredvid sökningen startar en markering: från raden längst ner i kolumnen får flera rader på en gång en ny kategori, hamnar i en samling, markeras som besökta eller tas bort.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Skapa en plats',
|
||||
'help.guide.create-place.goal': 'Lägg till en plats eller aktivitet för hand, med allt planen behöver veta om den.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Klicka på Lägg till plats/aktivitet högst upp i platskolumnen (Ny plats medan en dag är öppen). Formuläret öppnas.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Skriv in platsen i Sök efter platser... högst upp och välj ett resultat. Namn, Adress, Latitud, Longitud och Hemsida fylls i, och Platsdetaljer till vänster visar bilder, öppettider och en beskrivning av den. På en TREK med en Google-nyckel sitter Inte rätt plats? Sök på Google i stället under listan och kör samma sökning via Google.',
|
||||
'Skriv in platsen i Sök efter platser... och välj ett resultat. Namnet i dialogens huvud, Adress, Latitud, Longitud och Hemsida fylls i, och Platsdetaljer till vänster visar bilder, öppettider och en beskrivning av den. På en TREK med en Google-nyckel sitter Inte rätt plats? Sök på Google i stället under listan och kör samma sökning via Google. Sparade platser till höger erbjuder platserna i dina samlingar på samma sätt.',
|
||||
'help.guide.create-place.step.3':
|
||||
'I Platsdetaljer blir en bild platsens bild när du klickar på den under Välj en bild; Använd den här texten tar över beskrivningen till formuläret.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Kontrollera fälten: Namn krävs; Beskrivning och Noteringar är dina; Adress, Latitud och Longitud kommer från sökningen eller skrivs in; Kategori väljer en av resans kategorier, och + bredvid skapar en ny på stället; Hemsida tar länken.',
|
||||
'Kontrollera vad formuläret innehåller: namnet sitter i dialogens huvud och är det enda obligatoriska fältet; brickan Kategori under det väljer en av resans kategorier, och + bredvid skapar en ny på stället. Adress, Latitud och Longitud kommer från sökningen eller skrivs in; Beskrivning och Noteringar är dina; Hemsida tar länken.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Klicka på Lägg till. Om en plats med samma namn redan finns i resan säger formuläret det och knappen blir Lägg till ändå.',
|
||||
'help.guide.create-place.result': 'Platsen finns i listan och på kartan, under Oplanerat tills den läggs på en dag.',
|
||||
@@ -1826,7 +1827,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Till dagen öppnar samma formulär som Ny plats, bara att platsen hamnar på den öppna dagen i samma stund som du klickar på Lägg till.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'En plats som redan finns hamnar på den öppna dagen med + i slutet av sin rad, eller via högerklick, + Dag.',
|
||||
'En plats som redan finns hamnar på den öppna dagen med + Dag i slutet av sin rad, eller via högerklick, + Dag.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Det går lika bra åt andra hållet, och utan att först öppna en dag: dra platsens rad ut ur kolumnen och släpp den på ett dagskort. Släpper du den mellan två stopp hamnar den precis där.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1838,12 +1839,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Hitta en plats i listan',
|
||||
'help.guide.filter-places.goal': 'Smalna av kolumnen till de platser du är ute efter.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Rullgardinsmenyn högst upp växlar mellan Alla, Oplanerat (inte på någon dag ännu), Planerat (på en dag) och Spår (importerade GPX-spår), var och en med sitt antal.',
|
||||
'help.guide.filter-places.step.2': 'Skriv i Sök efter platser...; listan smalnar av medan du skriver.',
|
||||
'Visa, rullgardinsmenyn under sökningen, växlar mellan Alla, Oplanerat (inte på någon dag ännu), Planerat (på en dag) och Spår (importerade GPX-spår), var och en med sitt antal.',
|
||||
'help.guide.filter-places.step.2': 'Skriv i Sök högst upp; listan smalnar av medan du skriver.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Alla kategorier öppnar en lista där du bockar för en eller flera kategorier, Ingen kategori bland dem; Rensa filter längst ner nollställer den.',
|
||||
'Etikettknappen bredvid Visa listar kategorierna: bocka för en eller flera, Ingen kategori bland dem. Knappen räknar det som är förbockat, och Rensa filter längst ner i listan tar bort alla.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Stjärnan bredvid sätter ett minsta betyg: 5+, 4+ och så vidare visar bara platser du satt minst så högt betyg på.',
|
||||
'Stjärnan bredvid den sätter ett minsta betyg: 5+, 4+ och så vidare visar bara platser du satt minst så högt betyg på.',
|
||||
'help.guide.filter-places.result': 'Antalet ovanför raderna säger hur många platser som stämmer; filtren kombineras.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'Med en dag öppen listar Planerat bara den dagen och säger det: Visar bara den öppna dagen, med Visa hela resan bredvid.',
|
||||
@@ -1855,7 +1856,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Högerklicka raden och välj Redigera, eller öppna platsen och klicka på Redigera i dess detaljer.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Ändra det du behöver: Namn, Beskrivning, Noteringar, Adress, Latitud och Longitud, Kategori, Hemsida. Öppnat från en dag har formuläret också Anteckningar för denna dag och Börjar och Slutar för den dagen.',
|
||||
'Ändra det du behöver: namnet och brickan Kategori i dialogens huvud, Adress, Latitud och Longitud, Beskrivning, Noteringar och Hemsida. Öppnat från en dag har formuläret också Börjar och Slutar samt Anteckningar för denna dag.',
|
||||
'help.guide.edit-place.step.3': 'Klicka på Uppdatera.',
|
||||
'help.guide.edit-place.result':
|
||||
'Ändringen slår igenom överallt där platsen syns: i listan, på kartan och på varje dag den ligger på.',
|
||||
@@ -1868,21 +1869,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.goal': 'Ta ut en plats ur resan för gott.',
|
||||
'help.guide.delete-place.step.1': 'Högerklicka raden och välj Ta bort, eller klicka på Ta bort i platsens detaljer.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Bekräfta. Om en natt var bokad på platsen, eller en bokning är knuten till den, säger frågan vad som följer med.',
|
||||
'Klicka på Ta bort i frågan. Om en natt var bokad på platsen, eller en bokning är knuten till den, säger frågan vad som följer med.',
|
||||
'help.guide.delete-place.result':
|
||||
'Platsen är borta från listan, kartan och varje dag; Ångra i verktygsraden ovanför dagarna tar tillbaka den.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'För att ta bort en plats från bara en dag, använd Ta bort från dag på det stoppet i stället.',
|
||||
'help.guide.delete-place.tip.2': 'Flera platser på en gång: bocken bredvid filtren startar en markering.',
|
||||
'help.guide.delete-place.tip.2': 'Flera platser på en gång: bocken bredvid sökningen startar en markering.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Ändra eller ta bort flera platser på en gång',
|
||||
'help.guide.select-places.goal': 'Städa listan i ett svep i stället för plats för plats.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Klicka på bocken längst till höger i filterraden. Raderna får kryssrutor och en rad med åtgärderna dyker upp.',
|
||||
'help.guide.select-places.step.2': 'Bocka för raderna, eller Välj alla i raden; raden räknar det som är markerat.',
|
||||
'Klicka på bocken bredvid sökfältet. Raderna får runda kryssrutor, och en rad med åtgärderna glider upp längst ner i kolumnen.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Klicka på raderna för att bocka för dem. Välj alla, den dubbla bocken i raden, tar varje rad som filtren lämnar kvar.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category ger dem alla en kategori; Spara i samling kopierar dem till en av dina samlingar; Ta bort det markerade tar bort dem efter en bekräftelse.',
|
||||
'help.guide.select-places.step.4': 'Klicka på bocken igen för att lämna markeringen.',
|
||||
'Raden räknar de förbockade platserna. Ändra kategori ger dem alla en kategori; Spara i samling kopierar dem till en av dina samlingar; Ta bort det markerade tar bort dem efter en bekräftelse.',
|
||||
'help.guide.select-places.step.4': 'Klar, X:et i slutet av raden, lämnar markeringen.',
|
||||
'help.guide.select-places.result':
|
||||
'Ändringen gäller varje markerad plats; en borttagning kan ångras från verktygsraden ovanför dagarna.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1892,7 +1894,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'Importera platser från en GPX-, KML- eller KMZ-fil',
|
||||
'help.guide.import-places-file.goal': 'Ta in det som Google My Maps, Google Earth eller en GPS-tracker exporterade.',
|
||||
'help.guide.import-places-file.step.1': 'Klicka på Importera fil, eller släpp filen var som helst på platskolumnen.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Klicka på importknappen bredvid lägg till-knappen och välj Importera fil, eller släpp filen var som helst på platskolumnen.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Välj filen eller dra in den i rutan. För en GPX, bocka för vad som ska importeras: Vägpunkter, Rutter, Spår (med spårgeometri); för KML och KMZ, Punkter (platsmarkeringar) och Stigar (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1907,7 +1910,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Importera en delad lista från Google Maps eller Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Gör om en delad listlänk till platser.',
|
||||
'help.guide.import-places-list.step.1': 'Klicka på Importera lista och välj Google-lista eller Naver-lista.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Klicka på importknappen bredvid lägg till-knappen och välj Google-lista. Där även Naver-listor är på heter posten Importera lista och dialogen frågar vilken av de två.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Klistra in listans delade länk. En vägbeskrivningslänk från Google Maps fungerar också: dess stopp blir platser, i körordning.',
|
||||
'help.guide.import-places-list.step.3': 'Klicka på Importera.',
|
||||
@@ -1925,31 +1929,31 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Verktygsfältet högst upp: Exportera (PDF, kalender, GPX), Expandera alla dagar / Dölj alla dagar, ångra-pilen, Sortera om dagar och Visa alla bokningsvägar.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Ett dagkort: nummer, väder, titel, datum och dagens kostnad i rubriken; klicka på rubriken för att öppna dagen, pilen till höger fäller ihop kortet. Kollektivtrafik, Lägg till transport och Lägg till notering sitter också i rubriken.',
|
||||
'Ett dagkort: en ruta med dagnumret och prognosen, titeln och datumet, och brickor för den bokade natten, en hyrbil och dagens kostnad. Klicka på huvudet för att öppna dagen, vinkelpilen fäller ihop den, och + öppnar en meny: Lägg till plats den här dagen, Lägg till boende, Lägg till transport, Kollektivtrafik och Lägg till notering.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Inne i en dag: stoppen i ordning, vart och ett med bild, namn, tid och ett lås på bilden; noteringar; bokningar som hör till dagen; och mellan stoppen restiden för varje etapp.',
|
||||
'Inne i en dag: stoppen i ordning, vart och ett med bild, namn, tid, ett lås på bilden och bokningarna som hör till det; noteringar; dagens bokningar och transporter, färgade efter sin typ; och mellan stoppen restiden för varje etapp. Varje rad har en meny med tre prickar, samma som ett högerklick öppnar.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Under stoppen ruttraden: Rutt ritar dagen på kartan, Optimera sorterar stoppen, Bil / Gång sätter dagens färdsätt, och Öppna i Google Maps och Öppna i CoMaps lämnar över dagen.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Platser hamnar på en dag genom att du drar en rad från platskolumnen, med + på den raden, med Lägg till plats den här dagen på en tom dag, eller från platsens detaljer.',
|
||||
'Platser hamnar på en dag genom att du drar en rad från platskolumnen, med + Dag på den raden, med Lägg till plats den här dagen från dagens + eller på en tom dag, eller från platsens detaljer.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Totala kostnaden längst ner summerar varje stopp och varje bokning med ett pris, i resans valuta.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Läs en dag',
|
||||
'help.guide.read-day-plan.goal': 'Vet vad varje del av ett dagkort säger dig innan du ändrar något.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Rubriken: dagnumret, prognosen för dagen, Dag 1 eller titeln du gav den, datumet och dagens kostnad. Klicka på rubriken för att öppna dagen (dess detaljpanel öppnas över kartan); pilen till höger fäller ihop och ut kortet.',
|
||||
'Huvudet: en ruta med dagnumret och prognosen, sedan Dag 1 eller titeln du gav den, datumet och brickor för den bokade natten (incheckning eller utcheckning), en hyrbil och dagens kostnad. Klicka på huvudet för att öppna dagen (dess detaljpanel öppnas över kartan); + till höger lägger till en plats, ett boende, en transport, en kollektivtrafikresa eller en notering, och vinkelpilen fäller ihop kortet.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Ett stopp: greppet till vänster drar det, bilden bär ett lås för ruttoptimeringen, sedan kommer namnet, beskrivningen och, om de är satta, Anteckningar för denna dag. En tidsbricka visar Börjar och Slutar när stoppet har dem; pilarna som dyker upp i dess högra kant flyttar det upp eller ner.',
|
||||
'Ett stopp: greppet till vänster drar det, bilden bär ett lås för ruttoptimeringen, sedan kommer namnet, en tidsbricka när stoppet har Börjar och Slutar, beskrivningen och, om de är satta, Anteckningar för denna dag. Pilarna i dess högra kant flyttar det upp eller ner, och de tre prickarna öppnar dess meny.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'En bokning på dagen: en bokning vid ett stopp märker stoppet Bokningen bekräftad eller Bokningen väntar på bekräftelse, och en transport visas som Avgång eller Ankomst med sin tid och sin väg, med en liten knapp som ritar den vägen på kartan.',
|
||||
'En bokning vid ett stopp sitter på det som brickan Bokning, grön när den är bekräftad och bärnstensgul så länge den väntar, med sin tid och sin leverantör; klicka på brickan för att öppna bokningen, och ruttknappen bredvid ritar dess väg. En transport är en egen rad, färgad efter sin typ, med Avgång eller Ankomst och sin tid. Klicka på en bokning så öppnas dess detaljer; Redigera där ändrar den.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Mellan två stopp säger länken hur lång tid etappen tar och hur långt det är, i dagens färdsätt; klicka på den för att byta färdsätt för just den etappen.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'Ruttraden i slutet: Rutt ritar dagens väg på kartan, Optimera sorterar om stoppen, färdsättsknapparna väljer Bil eller Gång, och Öppna i Google Maps och Öppna i CoMaps öppnar dagen där.',
|
||||
'help.guide.read-day-plan.result': 'Varje symbol på kortet betyder något; guiderna nedan ändrar var och en av dem.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Högerklicka ett stopp för dess meny: Redigera, Ta bort från dagen, Öppna hemsida, navigationsapparna (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Spara i samling, Ta bort.',
|
||||
'Högerklicka ett stopp, eller klicka på dess tre prickar, för dess meny: Redigera, Ta bort från dagen, Öppna hemsida, navigationsapparna (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Spara i samling, Ta bort.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Håll muspekaren över ett stopp så dyker Lägg till bokning upp i dess slut: en bokning som skapas där hör till det här stoppet på den här dagen.',
|
||||
// place-onto-day
|
||||
@@ -1958,9 +1962,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Dra en rad från platskolumnen till dagkortet. Släpp den mellan två stopp för att lägga den exakt där, eller var som helst på kortet för att lägga den sist.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Utan att dra: öppna dagen genom att klicka på dess rubrik, klicka sedan på + i slutet av platsens rad, eller högerklicka raden och välj + Dag.',
|
||||
'Utan att dra: öppna dagen genom att klicka på dess huvud, klicka sedan på + Dag i slutet av platsens rad, eller högerklicka raden och välj + Dag.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'På en tom dag öppnar Lägg till plats den här dagen platsformuläret, och den nya platsen hamnar på dagen med en gång.',
|
||||
'Lägg till plats den här dagen, i dagens +-meny eller på en tom dag, öppnar platsformuläret, och den nya platsen hamnar på dagen med en gång.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Från en plats detaljer frågar Lägg till i dagen vilken dag; med dagen öppnad från sin rubrik skapar Till dagen i platskolumnen en ny plats direkt på den öppna dagen.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -1987,7 +1991,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Ge ett stopp en tid',
|
||||
'help.guide.set-stop-times.goal': 'Bestäm när ett stopp börjar och slutar, så att dagen läses som ett schema.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Högerklicka stoppet och välj Redigera. Öppnat från dagen har formuläret Börjar och Slutar längst ner.',
|
||||
'Högerklicka stoppet, eller klicka på dess tre prickar, och välj Redigera. Öppnat från dagen har formuläret Börjar och Slutar för den dagen, direkt under platsen.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Fyll i Börjar och, om du vill, Slutar. Tidsöverlappning med: varnar för att ett annat tidsatt stopp på dagen överlappar; ett Slutar före Börjar blockerar Uppdatera.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2025,13 +2029,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Lägg till en notering på en dag',
|
||||
'help.guide.day-note.goal': 'Håll en påminnelse, ett biljettnummer eller en plan B direkt i dagen.',
|
||||
'help.guide.day-note.step.1': 'Klicka på Lägg till notering i dagens rubrik.',
|
||||
'help.guide.day-note.step.1': 'Klicka på + i dagens huvud och välj Lägg till notering.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Ge den ett namn under Notering, det är vad dagkortet visar, och skriv resten under Daglig notering. Raden ovanför texten formaterar den (Fet, listor, länkar, citat) och Förhandsvisning till vänster visar kortet det blir.',
|
||||
'Skriv noteringens namn i dialogens huvud, där det står Notering; det är vad dagkortet visar. Skriv resten under Daglig notering: verktygsraden ovanför formaterar texten (fet, listor, länkar, citat), och Förhandsvisning till vänster visar raden det blir.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Välj en Ikon och en Färg, så att noteringen sticker ut från stoppen, och klicka sedan på Lägg till.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Noteringen sitter i dagen som ett stopp: dra den på plats, högerklicka den för Redigera och Ta bort.',
|
||||
'Noteringen sitter i dagen som ett stopp: dra den på plats, och högerklicka den eller använd dess tre prickar för Redigera och Ta bort.',
|
||||
'help.guide.day-note.result':
|
||||
'Noteringen är en del av dagen, i PDF:en också; en tidsatt notering sorteras med de tidsatta stoppen.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2080,15 +2084,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Vet var en bokning dyker upp när den väl finns, och vilken skärm som skapar den.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'En transport (Flygning, Tåg, Färja, Buss, Bil) visas i dagen den avgår som Avgång och i dagen den kommer fram som Ankomst, med tid och väg; en som går över flera dagar spänner över dagarna däremellan.',
|
||||
'En transport (Flygning, Tåg, Färja, Buss, Bil) är en rad färgad efter sin typ: Avgång den dag den avgår, Ankomst den dag den kommer fram, med tid och väg; en som går över flera dagar spänner över dagarna däremellan. Klicka på raden så öppnas bokningen.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'En bokning knuten till ett stopp (en Restaurang, en Rundtur) märker det stoppet Bokningen bekräftad eller Bokningen väntar på bekräftelse; en bokning med en dag men utan stopp är en egen rad i dagen.',
|
||||
'En bokning knuten till ett stopp (en Restaurang, en Rundtur) visas som brickan Bokning på det stoppet, grön när den är bekräftad och bärnstensgul så länge den väntar, med sin tid; en bokning med en dag men utan stopp är en egen rad i dagen.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'En natt på hotell är ett boende: det sitter i dagens detaljpanel under Boende, från Incheckning till Utcheckning, och rutten för var och en av de dagarna startar där.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'På kartan ritar knappen på en transportrad dess väg; Visa alla bokningsvägar i verktygsfältet ritar dem alla.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Att skapa: Lägg till bokning på ett stopp du håller muspekaren över, Lägg till transport och Kollektivtrafik i dagens rubrik, och flikarna Bokningar och Transporter för hela listan med import och filer.',
|
||||
'Att skapa: Lägg till bokning på ett stopp du håller muspekaren över, Lägg till transport och Kollektivtrafik i dagens +-meny, och flikarna Bokningar och Transporter för hela listan med import och filer.',
|
||||
'help.guide.bookings-in-plan.result': 'En bokning, en plats i planen; flikarna är samma bokningar som en lista.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
'Bekräftat och Väntar på beslut är en status du sätter på bokningen; planen visar den på stoppet, fliken Bokningar räknar båda.',
|
||||
@@ -2118,24 +2122,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Klicka på en rad i platskolumnen, ett stopp inne i en dag eller en markör på kartan, så öppnas kortet över kartan. Att plocka den inne i en dag talar om för kortet vilket stopp du menar, och det är det som tar med sig stoppets deltagare och dess bokning.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Huvudet bär den runda bilden, namnet, kategorin, adressen och koordinaterna. Klicka på bilden för att använda en egen, dubbelklicka på namnet för att byta namn på platsen på stället, och X till höger stänger kortet.',
|
||||
'Huvudet bär den runda bilden, namnet, adressen på en rad och brickor för det som är känt: öppet eller stängt, kategorin, priset, telefonnumret och koordinaterna. Klicka på bilden för att använda en egen, dubbelklicka på namnet för att byta namn på platsen på stället, och X till höger stänger kortet.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Under det: priset om den har ett, stjärnorna varje resenär gav platsen, beskrivningen och noteringarna, och Anteckningar för denna dag när stoppet bär sådana.',
|
||||
'Under det: stjärnorna varje resenär gav platsen, beskrivningen och noteringarna, och Anteckningar för denna dag när stoppet bär sådana.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Öppettider, Spårfärg, Spåra statistik och Filer följer, så långt de gäller. Filer tar vad som helst ur dina mappar och listar också det som hänger på det här stoppets bokning.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Raden längst ner: Lägg till i dagen eller Ta bort från dag medan en dag är öppen, sedan Spara i samling, Navigation, Öppna hemsida, Redigera och Ta bort.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'En plats plockad ur sökningen bär det TREK-indexet eller OpenStreetMap vet om den: en grön ring med Öppen eller en röd med Stängd runt bilden, bedömd efter platsens egen klocka, telefonnumret under stjärnorna, Öppettider längre ner med dagens tider på raden och hela veckan bakom ett klick, och dess webbplats bakom Öppna hemsida. Googles betyg visas bara på en plats hittad via Google, på en TREK med en Google-nyckel.',
|
||||
'En plats plockad ur sökningen bär det TREK-indexet eller OpenStreetMap vet om den: Öppen eller Stängd bland huvudets brickor, med en grön eller röd ring runt bilden, bedömd efter platsens egen klocka, telefonnumret också som bricka, Öppettider längre ner med dagens tider på raden och hela veckan bakom ett klick, och dess webbplats bakom Öppna hemsida. Googles betyg visas bara på en plats hittad via Google, på en TREK med en Google-nyckel.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Vad kortet berättar om en plats',
|
||||
'help.guide.read-place.goal': 'Läs allt resan vet om en plats, i ett enda kort.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Klicka i dagkolumnen på stoppet du vill läsa. Kortet öppnas över kartan och stoppet förblir markerat i sin dag.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Huvudet: den runda bilden, namnet, adressen och de exakta koordinaterna. En grön ring med Öppen, eller en röd med Stängd, runt bilden säger om platsen är öppen just nu, efter sin egen klocka, så snart TREK känner till dess tider. X till höger stänger kortet igen.',
|
||||
'Huvudet: den runda bilden, namnet och adressen på en rad; dess verktygstips visar hela adressen. Brickorna under dem säger Öppen eller Stängd just nu, efter platsens egen klocka, med en grön eller röd ring runt bilden som matchar, och bär telefonnumret, som ett klick lämnar till din telefonapp, och de exakta koordinaterna. X till höger stänger kortet igen.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Under det stjärnorna varje resenär gav platsen, med snittet och hur många som röstat. Inte betygsatt ännu så länge ingen gjort det. Strax under, telefonnumret där platsen har ett: ett klick på det lämnar numret till din telefonapp.',
|
||||
'Betyg kommer först under huvudet: stjärnorna varje resenär gav platsen, med snittet och hur många som röstat. Inte betygsatt ännu så länge ingen gjort det.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Sedan beskrivningen och, under den, noteringarna. Båda är texten från platsens formulär, renderad: listor, länkar och fetstil fungerar alla.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2227,17 +2231,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'Bokningen på ett stopp',
|
||||
'help.guide.place-booking.goal': 'Läs bokningen som hör till ett stopp, öppna den, och fäst en ny på det.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Öppna stoppet som bokningen hör till. Kortet visar en remsa med Bekräftat eller Väntar på beslut och bokningens namn.',
|
||||
'help.guide.place-booking.step.2': 'Remsan bär Datum, Tid och Bokningskod, och vilka noteringar bokningen än har.',
|
||||
'help.guide.place-booking.step.3': 'Klicka på remsan. Bokningen öppnas ovanpå kartan.',
|
||||
'Öppna stoppet som bokningen hör till. Kortet listar den under Bokningar som ett eget litet kort, med bokningens namn och Bekräftat eller Väntar på beslut.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Bokningskortet bär Datum, Tid och Bokningskod, och vilka noteringar bokningen än har.',
|
||||
'help.guide.place-booking.step.3': 'Klicka på bokningskortet. Bokningen öppnas ovanpå kartan.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Redigera längst ner i bokningen öppnar dess eget formulär. Länk till dagsuppgift där är det som fäster en bokning vid ett stopp, och här namnger den redan det här. Stäng formuläret igen.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'En ny bokning för ett stopp börjar i dagkolumnen: håll pekaren på stoppet och klicka på + i dess slut. Formuläret öppnas som Ny bokning, redan länkat till det.',
|
||||
'En ny bokning för ett stopp börjar i dagkolumnen: håll pekaren på stoppet och klicka på Lägg till bokning, biljetten i dess slut. Formuläret öppnas som Ny bokning, redan länkat till det.',
|
||||
'help.guide.place-booking.result':
|
||||
'Bokningen hänger på stoppet: den finns i kortet, den finns i dagen, och dess filer listas under Filer här också.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Remsan visas bara för det stopp bokningen är fäst vid. En bokning utan stopp bor på fliken Bokningar.',
|
||||
'Bokningskortet visas bara för det stopp bokningen är fäst vid. En bokning utan stopp bor på fliken Bokningar.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Flera bokningar kan dela ett stopp: lunchen och turen som startar från samma dörr.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2475,7 +2480,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Överst dagens väder. Prognos för namnger platsen den gäller: dagens första stopp, eller hotellet du vaknar på.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Bokningar listar dagens bokningar, var och en med sin sort, stoppet den hör till och sina tider. Grönt betyder bekräftat, bärnstensgult väntar fortfarande; det är en avläsning, bokningar ändras under Bokningar.',
|
||||
'Bokningar listar dagens bokningar, var och en med sin sort, stoppet den hör till och sina tider. Grönt betyder bekräftat, bärnstensgult väntar fortfarande, och ett klick på en rad öppnar bokningen.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Boende visar varje natt som är bokad över den här dagen, med Incheckning och Utcheckning på de dagar de händer, incheckningsfönstret, utcheckningstiden och bekräftelsenumret.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2508,7 +2513,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Den stora siffran är dagens temperatur, bredvid den lägsta och högsta, och vädret i ord.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Chippen under den: sannolikheten för regn, hur mycket av det, den starkaste vinden, och soluppgång och solnedgång.',
|
||||
'Brickorna till höger om den: sannolikheten för regn, hur mycket av det, den starkaste vinden, och soluppgång och solnedgång.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Längst ner dagen timme för timme, varannan timme: tiden, ikonen, temperaturen och sannolikheten för regn. En timme över 50 procent är skuggad blå.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2541,18 +2546,18 @@ const help: TranslationStrings = {
|
||||
'Anläggningen måste först vara en plats på resan. Skapa den i platskolumnen som vilken annan plats som helst: väljaren erbjuder bara det som redan finns där.',
|
||||
'help.guide.add-accommodation.step.2': 'Öppna dagen du anländer och klicka på Lägg till boende under Boende.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Tillämpa på dagar säger vilka nätter vistelsen täcker: incheckningsdagen till vänster, utcheckningsdagen till höger. Alla täcker hela resan.',
|
||||
'Tillämpa på dagar säger vilka nätter vistelsen täcker: Start är incheckningsdagen, Slut utcheckningsdagen, och Alla täcker hela resan. Dialogens huvud visar perioden och antalet nätter.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Fyll i Incheckning, Tills och Utcheckning, och sätt bokningens nummer under Bekräftelse. Alla fyra får stå tomma.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Välj anläggningen bland resans platser. Chippen ovanför listan smalnar av den till en kategori.',
|
||||
'Välj anläggningen bland resans platser. Kategori ovanför listan smalnar av den till en kategori.',
|
||||
'help.guide.add-accommodation.step.6': 'Klicka på Spara.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Vistelsen syns på varje dag den täcker, Incheckning på den första och Utcheckning på den sista. Anläggningen blir ett stopp på incheckningsdagen, så kartan ritar vägen dit, och en bokning av sorten Boende dyker upp under Bokningar.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Väljaren öppnar på dagen du kom från, med utcheckning dagen efter; båda kan flyttas innan du sparar.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Ge hotellet resans kategori Hotel när du skapar det, så smalnar chippen ovanför listan av den till dina hotell med ett klick.',
|
||||
'Ge hotellet resans kategori Hotel när du skapar det, så smalnar Kategori ovanför listan av den till dina hotell med ett klick.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Tiderna är alla valfria: en vistelse utan incheckning och utan kod täcker ändå sina nätter och ritar ändå sin rutt.',
|
||||
// edit-accommodation
|
||||
@@ -2563,7 +2568,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Pennan till höger om det öppnar vistelsen igen. Rutan läser nu Redigera boende.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Rätta raden av fält: Incheckning, Tills, Utcheckning och Bekräftelse. Dagarna ovanför den och anläggningen under den går att ändra här också.',
|
||||
'Rätta Incheckning, Tills, Utcheckning och Bekräftelse. Dagarna ovanför dem och anläggningen nedanför går att ändra här också.',
|
||||
'help.guide.edit-accommodation.step.4': 'Klicka på Spara.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'X bredvid pennan avslutar vistelsen. Den frågar inget, och bokningen av sorten Boende som hör till den följer med.',
|
||||
@@ -2579,7 +2584,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Bokningar listar dagens bokningar: de som är daterade på den, och de som hänger på ett av dess stopp.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'En rad visar vilken sorts bokning det är, dess namn och, när den hör till ett stopp, det stoppet efter en punkt. Dess tider sitter längst till höger.',
|
||||
'En rad visar vilken sorts bokning det är, dess namn och, när den hör till ett stopp, det stoppet i grått efter det. Dess tider sitter längst till höger, före statuspricken.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Färgen säger var en bokning står: en grön rad är bekräftad, en bärnstensgul väntar fortfarande. Hotell finns inte i den här listan, de har sitt eget block nedanför.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -67,6 +67,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.allDays': 'ทั้งวัน',
|
||||
'costs.expensesCount': '{count} ค่าใช้จ่าย',
|
||||
'costs.addExpense': 'เพิ่มค่าใช้จ่าย',
|
||||
'costs.view.label': 'มุมมอง',
|
||||
'costs.view.list': 'รายการ',
|
||||
'costs.view.table': 'ตาราง',
|
||||
'costs.table.lockedPayer': 'มีผู้จ่ายแล้ว: แก้จำนวนเงินในรายการค่าใช้จ่ายเพื่อให้ยอดคงเหลือถูกต้อง',
|
||||
'costs.table.lockedCurrency': 'บันทึกเป็น {currency}: แก้จำนวนเงินในรายการค่าใช้จ่าย',
|
||||
'costs.table.summary': 'สรุป',
|
||||
'costs.table.byCategory': 'หมวดหมู่',
|
||||
'costs.table.byDate': 'วัน',
|
||||
'costs.table.byPayer': 'ผู้จ่าย',
|
||||
'costs.table.byStatus': 'สถานะ',
|
||||
'costs.table.noPayer': 'ยังไม่มีผู้จ่าย',
|
||||
'costs.table.paid': 'จ่ายแล้ว',
|
||||
'costs.table.open': 'ค้างอยู่',
|
||||
'costs.editExpense': 'แก้ไขค่าใช้จ่าย',
|
||||
'costs.noMatch': 'ไม่มีค่าใช้จ่ายที่ตรงกับการค้นหาของคุณ',
|
||||
'costs.emptyText': 'ไม่มีค่าใช้จ่ายเลย เพิ่มอันแรกของคุณ',
|
||||
|
||||
+61
-56
@@ -1617,7 +1617,7 @@ const help: TranslationStrings = {
|
||||
'แบ่งปัน ที่มุมขวาบนจะเปิดรายชื่อผู้คนในทริป ได้แก่ สมาชิก แขก ลิงก์เชิญ และลิงก์สาธารณะแบบอ่านอย่างเดียว',
|
||||
'help.ctx.trip.bullet.4': 'ชื่อ วันที่ ภาพปก และสกุลเงิน แก้ไขได้จาก การเดินทางของฉัน ด้วยไอคอนดินสอบนการ์ดทริป',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'ลูกศรที่ขอบด้านในของคอลัมน์ใช้ยุบคอลัมน์ แล้วแผนที่จะขยายเต็มพื้นที่ ส่วนเส้นแบ่งบางๆ ข้างคอลัมน์ใช้ปรับความกว้าง',
|
||||
'แท็บเล็กๆ ที่ขอบด้านในของคอลัมน์ใช้พับคอลัมน์เก็บ แล้วแผนที่จะขยายเต็มพื้นที่ ส่วนเส้นแบ่งบางๆ ข้างคอลัมน์ใช้ปรับความกว้าง',
|
||||
'help.ctx.trip.bullet.6': 'ลูกศรเลิกทำในแถบเครื่องมือของวันจะย้อนการเปลี่ยนแปลงล่าสุดในแผน',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'เพิ่มสมาชิก',
|
||||
@@ -1677,8 +1677,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'เพิ่มพื้นที่ให้แผนที่',
|
||||
'help.guide.collapse-columns.goal': 'ยุบคอลัมน์หรือขยายความกว้างของคอลัมน์',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'คลิกลูกศรที่ขอบด้านในของคอลัมน์วันเพื่อยุบ แผนที่จะขยายเต็มพื้นที่ คอลัมน์สถานที่ก็มีลูกศรแบบเดียวกัน',
|
||||
'help.guide.collapse-columns.step.2': 'คลิกลูกศรอีกครั้งเพื่อแสดงคอลัมน์กลับมา',
|
||||
'คลิกแท็บเล็กๆ ที่ขอบด้านในของคอลัมน์วัน อันที่มีไอคอนแผง เพื่อพับคอลัมน์เก็บ แผนที่จะขยายเต็มพื้นที่ คอลัมน์สถานที่ก็มีแท็บแบบเดียวกัน',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'คอลัมน์ที่พับเก็บแล้วจะเหลือกล่องเล็กๆ ไว้ที่มุมแผนที่ คือ แผน สำหรับวัน และ สถานที่ สำหรับสถานที่ คลิกกล่องนั้นเพื่อแสดงคอลัมน์กลับมา',
|
||||
'help.guide.collapse-columns.step.3': 'ลากเส้นแบ่งบางๆ ระหว่างคอลัมน์กับแผนที่เพื่อปรับความกว้างของคอลัมน์',
|
||||
'help.guide.collapse-columns.result': 'ระบบจะจำความกว้างไว้ และคอลัมน์จะกลับมาเปิดอยู่เมื่อเข้าใช้ครั้งถัดไป',
|
||||
'help.guide.collapse-columns.tip.1': 'ยุบทั้งสองคอลัมน์พร้อมกันได้เพื่อดูเฉพาะแผนที่',
|
||||
@@ -1701,26 +1702,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'เพิ่มสถานที่/กิจกรรม ที่ด้านบนจะเปิดฟอร์มสำหรับสถานที่ที่คุณพิมพ์หรือค้นหา ขณะที่เปิดวันอยู่ ปุ่มจะแสดงเป็น สถานที่ใหม่ และ เพิ่มในวัน ที่อยู่ข้างๆ จะสร้างสถานที่ลงในวันนั้นโดยตรง',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'นำเข้าไฟล์ รองรับไฟล์ .gpx, .kml และ .kmz ส่วน รายการนำเข้า รองรับรายการที่แชร์จาก Google Maps หรือ Naver Maps หรือจะลากไฟล์มาวางบนคอลัมน์ก็ได้',
|
||||
'ปุ่มนำเข้าที่อยู่ข้างๆ มี นำเข้าไฟล์ สำหรับไฟล์ .gpx, .kml และ .kmz และ รายการ Google (เป็น รายการนำเข้า เมื่อเปิดใช้รายการ Naver ด้วย) สำหรับรายการที่แชร์จาก Google Maps หรือ Naver Maps หรือจะลากไฟล์มาวางบนคอลัมน์ก็ได้',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'เมนูแบบเลื่อนลงสลับระหว่าง ทั้งหมด ไม่ได้วางแผน วางแผนแล้ว และ แทร็ก เมื่อมีการนำเข้าแทร็ก ด้านล่างมีช่องค้นหา ตัวกรองหมวดหมู่ และดาวสำหรับคะแนนขั้นต่ำ',
|
||||
'ด้านล่างเป็นช่องค้นหา ข้างๆ มีเครื่องหมายถูกสำหรับเริ่มการเลือก ตามด้วยแถวตัวกรอง แสดง สลับระหว่าง ทั้งหมด ไม่ได้วางแผน วางแผนแล้ว และ แทร็ก เมื่อมีการนำเข้าแทร็ก โดยแต่ละตัวเลือกแสดงจำนวนไว้ ปุ่มป้ายกำกับใช้กรองตามหมวดหมู่ และดาวใช้กรองตามคะแนนขั้นต่ำ',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'แต่ละแถวแสดงรูปภาพ ชื่อ และคำอธิบายหรือที่อยู่ คลิกเพื่อดูรายละเอียดสถานที่ ลากไปวางบนวัน หรือคลิกขวาเพื่อใช้ แก้ไข เพิ่มไปยังวัน เปิดเว็บไซต์ Google แผนที่ บันทึกลงคอลเลกชัน และ ลบ',
|
||||
'แต่ละแถวแสดงรูปภาพ ชื่อ และคำอธิบายหรือที่อยู่ คลิกเพื่อดูรายละเอียดสถานที่ ลากไปวางบนวัน หรือคลิกขวา (หรือคลิกจุดสามจุดของแถว) เพื่อใช้ แก้ไข + วัน เปิดเว็บไซต์ Google แผนที่ บันทึกลงคอลเลกชัน และ ลบ',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'เมื่อเปิดวันอยู่ ปุ่ม + ท้ายแถวที่ยังไม่ได้วางแผนจะเพิ่มสถานที่ลงในวันนั้น และ วางแผนแล้ว จะแสดงเฉพาะวันนั้น โดยมี แสดงทั้งทริป สำหรับขยายกลับ',
|
||||
'เมื่อเปิดวันอยู่ ปุ่ม + วัน ท้ายแถวที่ยังไม่ได้วางแผนจะเพิ่มสถานที่ลงในวันนั้น และ วางแผนแล้ว จะแสดงเฉพาะวันนั้น โดยมี แสดงทั้งทริป สำหรับขยายกลับ',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'เครื่องหมายถูกที่ปลายขวาของแถวตัวกรองใช้เริ่มการเลือก เพื่อเปลี่ยนหมวดหมู่ ใส่ลงในคอลเลกชัน หรือลบหลายแถวพร้อมกัน',
|
||||
'เครื่องหมายถูกข้างช่องค้นหาใช้เริ่มการเลือก จากแถบที่ด้านล่างของคอลัมน์ คุณสามารถเปลี่ยนหมวดหมู่ ใส่ลงในคอลเลกชัน ทำเครื่องหมายว่าเคยไปแล้ว หรือลบหลายแถวพร้อมกันได้',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'สร้างสถานที่',
|
||||
'help.guide.create-place.goal': 'เพิ่มสถานที่หรือกิจกรรมด้วยตนเอง พร้อมข้อมูลทั้งหมดที่แผนต้องใช้',
|
||||
'help.guide.create-place.step.1':
|
||||
'คลิก เพิ่มสถานที่/กิจกรรม ที่ด้านบนของคอลัมน์สถานที่ (สถานที่ใหม่ เมื่อเปิดวันอยู่) ฟอร์มจะเปิดขึ้น',
|
||||
'help.guide.create-place.step.2':
|
||||
'พิมพ์สถานที่ใน ค้นหาสถานที่... ที่ด้านบนแล้วเลือกผลลัพธ์ ชื่อ ที่อยู่ ละติจูด ลองจิจูด และ เว็บไซต์ จะถูกกรอกให้ และ รายละเอียดสถานที่ ทางซ้ายจะแสดงรูปภาพ เวลาทำการ และคำอธิบายของสถานที่ บน TREK ที่มีคีย์ Google จะมี ไม่ใช่สถานที่ที่ต้องการใช่ไหม ค้นหาด้วย Google แทน อยู่ใต้รายการ ซึ่งใช้ค้นหาแบบเดียวกันผ่าน Google',
|
||||
'พิมพ์สถานที่ใน ค้นหาสถานที่... แล้วเลือกผลลัพธ์ ชื่อในส่วนหัวของหน้าต่าง ที่อยู่ ละติจูด ลองจิจูด และ เว็บไซต์ จะถูกกรอกให้ และ รายละเอียดสถานที่ ทางซ้ายจะแสดงรูปภาพ เวลาทำการ และคำอธิบายของสถานที่ บน TREK ที่มีคีย์ Google จะมี ไม่ใช่สถานที่ที่ต้องการใช่ไหม ค้นหาด้วย Google แทน อยู่ใต้รายการ ซึ่งใช้ค้นหาแบบเดียวกันผ่าน Google ส่วน สถานที่ที่บันทึกไว้ ทางขวาจะเสนอสถานที่จากคอลเลกชันของคุณในแบบเดียวกัน',
|
||||
'help.guide.create-place.step.3':
|
||||
'ใน รายละเอียดสถานที่ คลิกรูปภาพใต้ เลือกรูปภาพ เพื่อตั้งเป็นรูปของสถานที่ ส่วน ใช้ข้อความนี้ จะนำคำอธิบายไปใส่ในฟอร์ม',
|
||||
'help.guide.create-place.step.4':
|
||||
'ตรวจสอบช่องต่างๆ ชื่อ เป็นช่องที่ต้องกรอก คำอธิบาย และ หมายเหตุ กรอกได้ตามต้องการ ที่อยู่ ละติจูด และ ลองจิจูด มาจากการค้นหาหรือพิมพ์เอง หมวดหมู่ ใช้เลือกหนึ่งในหมวดหมู่ของทริป และปุ่ม + ข้างๆ ใช้สร้างหมวดหมู่ใหม่ทันที ส่วน เว็บไซต์ ใช้ใส่ลิงก์',
|
||||
'ตรวจสอบสิ่งที่อยู่ในฟอร์ม ชื่ออยู่ในส่วนหัวของหน้าต่างและเป็นช่องเดียวที่ต้องกรอก ป้าย หมวดหมู่ ด้านล่างชื่อใช้เลือกหนึ่งในหมวดหมู่ของทริป และปุ่ม + ข้างๆ ใช้สร้างหมวดหมู่ใหม่ทันที ที่อยู่ ละติจูด และ ลองจิจูด มาจากการค้นหาหรือพิมพ์เอง คำอธิบาย และ หมายเหตุ กรอกได้ตามต้องการ ส่วน เว็บไซต์ ใช้ใส่ลิงก์',
|
||||
'help.guide.create-place.step.5':
|
||||
'คลิก เพิ่ม หากมีสถานที่ชื่อเดียวกันในทริปอยู่แล้ว ฟอร์มจะแจ้งให้ทราบ และปุ่มจะเปลี่ยนเป็น เพิ่มต่อไป',
|
||||
'help.guide.create-place.result': 'สถานที่จะอยู่ในรายการและบนแผนที่ ภายใต้ ไม่ได้วางแผน จนกว่าจะถูกเพิ่มลงในวัน',
|
||||
@@ -1738,7 +1739,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'เพิ่มในวัน จะเปิดฟอร์มเดียวกับ สถานที่ใหม่ ต่างกันเพียงสถานที่จะถูกเพิ่มลงในวันที่เปิดอยู่ทันทีที่คุณคลิก เพิ่ม',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'สถานที่ที่มีอยู่แล้วเพิ่มลงในวันที่เปิดอยู่ได้ด้วยปุ่ม + ท้ายแถว หรือคลิกขวาแล้วเลือก เพิ่มไปยังวัน',
|
||||
'สถานที่ที่มีอยู่แล้วเพิ่มลงในวันที่เปิดอยู่ได้ด้วยปุ่ม + วัน ท้ายแถว หรือคลิกขวาแล้วเลือก + วัน',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'ทำกลับกันก็ได้ และไม่ต้องเปิดวันก่อน ลากแถวของสถานที่ออกจากคอลัมน์แล้ววางบนการ์ดวัน หากวางระหว่างจุดแวะสองจุด สถานที่จะอยู่ตรงตำแหน่งนั้นพอดี',
|
||||
'help.guide.place-to-open-day.result': 'สถานที่จะแสดงอยู่ท้ายรายการของวัน ลากขึ้นหรือลงไปยังตำแหน่งที่ต้องการ',
|
||||
@@ -1749,10 +1750,10 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'ค้นหาสถานที่ในรายการ',
|
||||
'help.guide.filter-places.goal': 'กรองคอลัมน์ให้เหลือเฉพาะสถานที่ที่คุณต้องการ',
|
||||
'help.guide.filter-places.step.1':
|
||||
'เมนูแบบเลื่อนลงที่ด้านบนสลับระหว่าง ทั้งหมด ไม่ได้วางแผน (ยังไม่อยู่ในวันใด) วางแผนแล้ว (อยู่ในวันแล้ว) และ แทร็ก (แทร็ก GPX ที่นำเข้า) แต่ละตัวเลือกแสดงจำนวนไว้',
|
||||
'help.guide.filter-places.step.2': 'พิมพ์ใน ค้นหาสถานที่... รายการจะกรองให้แคบลงขณะที่คุณพิมพ์',
|
||||
'แสดง ซึ่งเป็นเมนูแบบเลื่อนลงใต้ช่องค้นหา สลับระหว่าง ทั้งหมด ไม่ได้วางแผน (ยังไม่อยู่ในวันใด) วางแผนแล้ว (อยู่ในวันแล้ว) และ แทร็ก (แทร็ก GPX ที่นำเข้า) แต่ละตัวเลือกแสดงจำนวนไว้',
|
||||
'help.guide.filter-places.step.2': 'พิมพ์ใน ค้นหา ที่ด้านบน รายการจะกรองให้แคบลงขณะที่คุณพิมพ์',
|
||||
'help.guide.filter-places.step.3':
|
||||
'หมวดหมู่ทั้งหมด จะเปิดรายการให้ติ๊กเลือกหมวดหมู่หนึ่งหรือหลายหมวดหมู่ รวมถึง ไม่มีหมวดหมู่ ส่วน ล้างตัวกรอง ที่ด้านล่างใช้รีเซ็ต',
|
||||
'ปุ่มป้ายกำกับข้าง แสดง จะแสดงรายการหมวดหมู่ ให้ติ๊กเลือกหนึ่งหรือหลายหมวดหมู่ รวมถึง ไม่มีหมวดหมู่ ปุ่มจะนับจำนวนที่ติ๊กไว้ และ ล้างตัวกรอง ที่ท้ายรายการจะยกเลิกทั้งหมด',
|
||||
'help.guide.filter-places.step.4':
|
||||
'ดาวข้างๆ ใช้ตั้งคะแนนขั้นต่ำ 5+ 4+ และอื่นๆ จะแสดงเฉพาะสถานที่ที่คุณให้คะแนนไว้อย่างน้อยเท่านั้น',
|
||||
'help.guide.filter-places.result': 'ตัวเลขเหนือแถวบอกจำนวนสถานที่ที่ตรงกัน และตัวกรองต่างๆ ใช้ร่วมกันได้',
|
||||
@@ -1765,7 +1766,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.goal': 'แก้ชื่อ ย้ายหมุด เพิ่มเว็บไซต์ หรือเปลี่ยนหมวดหมู่',
|
||||
'help.guide.edit-place.step.1': 'คลิกขวาที่แถวแล้วเลือก แก้ไข หรือเปิดสถานที่แล้วคลิก แก้ไข ในรายละเอียด',
|
||||
'help.guide.edit-place.step.2':
|
||||
'เปลี่ยนสิ่งที่ต้องการ ได้แก่ ชื่อ คำอธิบาย หมายเหตุ ที่อยู่ ละติจูดและลองจิจูด หมวดหมู่ เว็บไซต์ หากเปิดจากวัน ฟอร์มจะมี หมายเหตุสำหรับวันนี้ รวมถึง เริ่มต้น และ สิ้นสุด สำหรับวันนั้นด้วย',
|
||||
'เปลี่ยนสิ่งที่ต้องการ ได้แก่ ชื่อและป้าย หมวดหมู่ ในส่วนหัวของหน้าต่าง ที่อยู่ ละติจูดและลองจิจูด คำอธิบาย หมายเหตุ และเว็บไซต์ หากเปิดจากวัน ฟอร์มจะมี เริ่ม และ สิ้นสุด รวมถึง หมายเหตุสำหรับวันนี้ ด้วย',
|
||||
'help.guide.edit-place.step.3': 'คลิก อัปเดต',
|
||||
'help.guide.edit-place.result':
|
||||
'การเปลี่ยนแปลงมีผลทุกที่ที่สถานที่ปรากฏ ทั้งในรายการ บนแผนที่ และทุกวันที่มีสถานที่นี้',
|
||||
@@ -1778,20 +1779,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.goal': 'นำสถานที่ออกจากทริปอย่างถาวร',
|
||||
'help.guide.delete-place.step.1': 'คลิกขวาที่แถวแล้วเลือก ลบ หรือคลิก ลบ ในรายละเอียดของสถานที่',
|
||||
'help.guide.delete-place.step.2':
|
||||
'ยืนยัน หากมีการจองที่พักค้างคืนที่สถานที่นี้ หรือมีการจองที่เชื่อมโยงอยู่ คำถามจะระบุว่าสิ่งใดจะถูกลบไปด้วย',
|
||||
'คลิก ลบ ในคำถาม หากมีการจองที่พักค้างคืนที่สถานที่นี้ หรือมีการจองที่เชื่อมโยงอยู่ คำถามจะระบุว่าสิ่งใดจะถูกลบไปด้วย',
|
||||
'help.guide.delete-place.result':
|
||||
'สถานที่จะหายไปจากรายการ แผนที่ และทุกวัน เลิกทำ ในแถบเครื่องมือเหนือรายการวันจะนำกลับมา',
|
||||
'help.guide.delete-place.tip.1': 'หากต้องการนำสถานที่ออกจากวันเดียว ให้ใช้ ลบออกจากวัน ที่จุดแวะนั้นแทน',
|
||||
'help.guide.delete-place.tip.2': 'หากต้องการจัดการหลายสถานที่พร้อมกัน เครื่องหมายถูกข้างตัวกรองจะเริ่มการเลือก',
|
||||
'help.guide.delete-place.tip.2': 'หากต้องการจัดการหลายสถานที่พร้อมกัน เครื่องหมายถูกข้างช่องค้นหาจะเริ่มการเลือก',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'เปลี่ยนหรือลบหลายสถานที่พร้อมกัน',
|
||||
'help.guide.select-places.goal': 'จัดระเบียบรายการในครั้งเดียวแทนการทำทีละสถานที่',
|
||||
'help.guide.select-places.step.1':
|
||||
'คลิกเครื่องหมายถูกที่ปลายขวาของแถวตัวกรอง แต่ละแถวจะมีช่องทำเครื่องหมาย และแถบการดำเนินการจะปรากฏขึ้น',
|
||||
'help.guide.select-places.step.2': 'ติ๊กเลือกแถว หรือใช้ เลือกทั้งหมด ในแถบ แถบจะนับจำนวนที่เลือกไว้',
|
||||
'คลิกเครื่องหมายถูกข้างช่องค้นหา แต่ละแถวจะมีช่องทำเครื่องหมายทรงกลม และแถบการดำเนินการจะเลื่อนขึ้นมาที่ด้านล่างของคอลัมน์',
|
||||
'help.guide.select-places.step.2':
|
||||
'คลิกแถวเพื่อติ๊กเลือก เลือกทั้งหมด ซึ่งเป็นเครื่องหมายถูกคู่ในแถบ จะเลือกทุกแถวที่ตัวกรองเหลือไว้',
|
||||
'help.guide.select-places.step.3':
|
||||
'เปลี่ยนหมวดหมู่ จะกำหนดหมวดหมู่เดียวกันให้ทั้งหมด บันทึกลงคอลเลกชัน จะคัดลอกไปยังคอลเลกชันหนึ่งของคุณ ส่วน ลบที่เลือกไว้ จะลบหลังจากยืนยัน',
|
||||
'help.guide.select-places.step.4': 'คลิกเครื่องหมายถูกอีกครั้งเพื่อออกจากการเลือก',
|
||||
'แถบจะนับจำนวนสถานที่ที่ติ๊กไว้ เปลี่ยนหมวดหมู่ จะกำหนดหมวดหมู่เดียวกันให้ทั้งหมด บันทึกลงคอลเลกชัน จะคัดลอกไปยังคอลเลกชันหนึ่งของคุณ ส่วน ลบที่เลือกไว้ จะลบหลังจากยืนยัน',
|
||||
'help.guide.select-places.step.4': 'เสร็จแล้ว ซึ่งเป็น X ที่ท้ายแถบ ใช้ออกจากการเลือก',
|
||||
'help.guide.select-places.result':
|
||||
'การเปลี่ยนแปลงมีผลกับทุกสถานที่ที่เลือก การลบสามารถเลิกทำได้จากแถบเครื่องมือเหนือรายการวัน',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1801,7 +1803,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'นำเข้าสถานที่จากไฟล์ GPX, KML หรือ KMZ',
|
||||
'help.guide.import-places-file.goal': 'นำเข้าข้อมูลที่ส่งออกจาก Google My Maps, Google Earth หรืออุปกรณ์ติดตาม GPS',
|
||||
'help.guide.import-places-file.step.1': 'คลิก นำเข้าไฟล์ หรือวางไฟล์ที่ใดก็ได้บนคอลัมน์สถานที่',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'คลิกปุ่มนำเข้าข้างปุ่มเพิ่มแล้วเลือก นำเข้าไฟล์ หรือวางไฟล์ที่ใดก็ได้บนคอลัมน์สถานที่',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'เลือกไฟล์หรือลากไฟล์มาวางในกล่อง สำหรับ GPX ให้ติ๊กเลือกสิ่งที่จะนำเข้า ได้แก่ จุดอ้างอิง เส้นทาง แทร็ก (พร้อมเรขาคณิตของเส้นทาง) สำหรับ KML และ KMZ ได้แก่ จุด (หมุด) และ เส้นทาง (LineStrings)',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1816,7 +1819,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'นำเข้ารายการที่แชร์จาก Google Maps หรือ Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'เปลี่ยนลิงก์รายการที่แชร์ให้เป็นสถานที่',
|
||||
'help.guide.import-places-list.step.1': 'คลิก รายการนำเข้า แล้วเลือก รายการ Google หรือ เนเวอร์ลิสต์',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'คลิกปุ่มนำเข้าข้างปุ่มเพิ่มแล้วเลือก รายการ Google เมื่อเปิดใช้รายการ Naver ด้วย ตัวเลือกจะเป็น รายการนำเข้า และหน้าต่างจะถามว่าต้องการแบบใด',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'วางลิงก์ที่แชร์ของรายการ ลิงก์เส้นทางของ Google Maps ก็ใช้ได้ จุดแวะในลิงก์จะกลายเป็นสถานที่ตามลำดับการขับรถ',
|
||||
'help.guide.import-places-list.step.3': 'คลิก นำเข้า',
|
||||
@@ -1833,30 +1837,30 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'แถบเครื่องมือที่ด้านบน ได้แก่ ส่งออก (PDF, ปฏิทิน, GPX) ขยายทั้งหมด / ยุบทั้งหมด ลูกศรเลิกทำ จัดลำดับวันใหม่ และ แสดงเส้นทางการจองทั้งหมด',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'การ์ดวันมีหมายเลข สภาพอากาศ ชื่อ วันที่ และค่าใช้จ่ายของวันอยู่ในส่วนหัว คลิกส่วนหัวเพื่อเปิดวัน และลูกศรใช้ยุบการ์ด การขนส่งสาธารณะ เพิ่มการขนส่ง และ เพิ่มหมายเหตุ ก็อยู่ในส่วนหัวเช่นกัน',
|
||||
'การ์ดวันมีกล่องเล็กๆ แสดงหมายเลขวันและพยากรณ์อากาศ ชื่อและวันที่ รวมถึงป้ายสำหรับคืนที่จองไว้ รถเช่า และค่าใช้จ่ายของวัน คลิกส่วนหัวเพื่อเปิดวัน ลูกศรใช้ยุบการ์ด และปุ่ม + จะเปิดเมนู ได้แก่ เพิ่มสถานที่ในวันนี้ เพิ่มที่พัก เพิ่มการขนส่ง การขนส่งสาธารณะ และ เพิ่มหมายเหตุ',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'ภายในวันมีจุดแวะตามลำดับ แต่ละจุดมีรูปภาพ ชื่อ เวลา และแม่กุญแจบนรูปภาพ มีหมายเหตุ การจองของวันนั้น และระหว่างจุดแวะจะแสดงเวลาเดินทางของแต่ละช่วง',
|
||||
'ภายในวันมีจุดแวะตามลำดับ แต่ละจุดมีรูปภาพ ชื่อ เวลา แม่กุญแจบนรูปภาพ และการจองที่ปักไว้กับจุดนั้น มีหมายเหตุ การจองและการขนส่งของวันซึ่งแต้มสีตามประเภท และระหว่างจุดแวะจะแสดงเวลาเดินทางของแต่ละช่วง ทุกแถวมีเมนูจุดสามจุด ซึ่งเป็นเมนูเดียวกับที่เปิดด้วยการคลิกขวา',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'ใต้จุดแวะคือแถบเส้นทาง เส้นทาง จะวาดวันบนแผนที่ ปรับให้เหมาะสม จะเรียงจุดแวะ ขับรถ / เดิน ใช้ตั้งรูปแบบการเดินทางของวัน ส่วน เปิดใน Google Maps และ เปิดใน CoMaps จะส่งวันนั้นไปยังแอปเหล่านั้น',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'เพิ่มสถานที่ลงในวันได้โดยลากแถวจากคอลัมน์สถานที่ ใช้ปุ่ม + บนแถวนั้น ใช้ เพิ่มสถานที่ในวันนี้ ในวันที่ว่างอยู่ หรือจากรายละเอียดของสถานที่',
|
||||
'เพิ่มสถานที่ลงในวันได้โดยลากแถวจากคอลัมน์สถานที่ ใช้ปุ่ม + วัน บนแถวนั้น ใช้ เพิ่มสถานที่ในวันนี้ จากปุ่ม + ของวันหรือในวันที่ว่างอยู่ หรือจากรายละเอียดของสถานที่',
|
||||
'help.ctx.trip-days.bullet.6': 'ต้นทุนรวม ที่ด้านล่างจะรวมทุกจุดแวะและการจองที่มีราคา เป็นสกุลเงินของทริป',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'อ่านข้อมูลของวัน',
|
||||
'help.guide.read-day-plan.goal': 'ทำความเข้าใจว่าแต่ละส่วนของการ์ดวันบอกอะไร ก่อนที่คุณจะเปลี่ยนแปลงสิ่งใด',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'ส่วนหัวมีหมายเลขวัน พยากรณ์อากาศของวัน วัน 1 หรือชื่อที่คุณตั้งไว้ วันที่ และค่าใช้จ่ายของวัน คลิกส่วนหัวเพื่อเปิดวัน (แผงรายละเอียดของวันจะเปิดขึ้นบนแผนที่) ลูกศรทางขวาใช้ยุบและขยายการ์ด',
|
||||
'ส่วนหัวมีกล่องเล็กๆ แสดงหมายเลขวันและพยากรณ์อากาศ ตามด้วย วัน 1 หรือชื่อที่คุณตั้งไว้ วันที่ และป้ายสำหรับคืนที่จองไว้ (เช็คอินหรือเช็คเอาท์) รถเช่า และค่าใช้จ่ายของวัน คลิกส่วนหัวเพื่อเปิดวัน (แผงรายละเอียดของวันจะเปิดขึ้นบนแผนที่) ปุ่ม + ทางขวาใช้เพิ่มสถานที่ ที่พัก การขนส่ง เส้นทางขนส่งสาธารณะ หรือหมายเหตุ และลูกศรใช้ยุบการ์ด',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'จุดแวะมีที่จับทางซ้ายสำหรับลาก รูปภาพมีแม่กุญแจสำหรับการปรับเส้นทางให้เหมาะสม ตามด้วยชื่อ คำอธิบาย และหมายเหตุสำหรับวันนี้หากตั้งไว้ ป้ายเวลาจะแสดง เริ่มต้น และ สิ้นสุด เมื่อจุดแวะมีเวลา ส่วนลูกศรที่ปรากฏที่ปลายขวาใช้เลื่อนขึ้นหรือลง',
|
||||
'จุดแวะมีที่จับทางซ้ายสำหรับลาก รูปภาพมีแม่กุญแจสำหรับการปรับเส้นทางให้เหมาะสม ตามด้วยชื่อ ป้ายเวลาเมื่อจุดแวะมี เริ่ม และ สิ้นสุด คำอธิบาย และหมายเหตุสำหรับวันนี้หากตั้งไว้ ลูกศรที่ปลายขวาใช้เลื่อนขึ้นหรือลง และจุดสามจุดใช้เปิดเมนูของจุดแวะ',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'การจองในวัน การจองที่จุดแวะจะทำเครื่องหมายจุดแวะว่า ยืนยันการจองแล้ว หรือ อยู่ระหว่างการจอง ส่วนการขนส่งจะแสดงเป็น ออกเดินทาง หรือ มาถึง พร้อมเวลาและเส้นทาง และมีสวิตช์เล็กๆ สำหรับวาดเส้นทางนั้นบนแผนที่',
|
||||
'การจองที่จุดแวะจะแสดงบนจุดแวะนั้นเป็นป้าย การจอง สีเขียวเมื่อยืนยันแล้วและสีเหลืองอำพันระหว่างรอดำเนินการ พร้อมเวลาและผู้ให้บริการ คลิกป้ายเพื่อเปิดการจอง และปุ่มเส้นทางข้างๆ จะวาดเส้นทางของการจองนั้น การขนส่งเป็นแถวของตัวเอง แต้มสีตามประเภท พร้อม ออกเดินทาง หรือ มาถึง และเวลา คลิกการจองเพื่อเปิดรายละเอียด และใช้ แก้ไข ในนั้นเพื่อเปลี่ยนแปลง',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'ระหว่างจุดแวะสองจุด ตัวเชื่อมจะบอกเวลาและระยะทางของช่วงนั้นตามรูปแบบการเดินทางของวัน คลิกเพื่อเปลี่ยนรูปแบบการเดินทางเฉพาะช่วงนั้น',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'แถบเส้นทางที่ท้ายการ์ด เส้นทาง จะวาดเส้นทางของวันบนแผนที่ ปรับให้เหมาะสม จะจัดลำดับจุดแวะใหม่ ปุ่มรูปแบบใช้เลือก ขับรถ หรือ เดิน ส่วน เปิดใน Google Maps และ เปิดใน CoMaps จะเปิดวันนั้นในแอปดังกล่าว',
|
||||
'help.guide.read-day-plan.result': 'ทุกสัญลักษณ์บนการ์ดมีความหมาย คู่มือด้านล่างอธิบายวิธีเปลี่ยนแต่ละอย่าง',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'คลิกขวาที่จุดแวะเพื่อเปิดเมนู ได้แก่ แก้ไข ลบออกจากวัน เปิดเว็บไซต์ แอปนำทาง (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps) บันทึกลงคอลเลกชัน และ ลบ',
|
||||
'คลิกขวาที่จุดแวะหรือคลิกจุดสามจุดของจุดแวะเพื่อเปิดเมนู ได้แก่ แก้ไข ลบออกจากวัน เปิดเว็บไซต์ แอปนำทาง (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps) บันทึกลงคอลเลกชัน และ ลบ',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'วางเมาส์เหนือจุดแวะแล้ว เพิ่มการจอง จะปรากฏที่ปลายแถว การจองที่สร้างจากตรงนั้นจะผูกกับจุดแวะนี้ในวันนี้',
|
||||
// place-onto-day
|
||||
@@ -1865,9 +1869,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'ลากแถวจากคอลัมน์สถานที่ไปยังการ์ดวัน วางระหว่างจุดแวะสองจุดเพื่อให้อยู่ตรงตำแหน่งนั้นพอดี หรือวางที่ใดก็ได้บนการ์ดเพื่อเพิ่มต่อท้าย',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'หากไม่ต้องการลาก ให้เปิดวันโดยคลิกส่วนหัว จากนั้นคลิก + ท้ายแถวของสถานที่ หรือคลิกขวาที่แถวแล้วเลือก เพิ่มไปยังวัน',
|
||||
'หากไม่ต้องการลาก ให้เปิดวันโดยคลิกส่วนหัว จากนั้นคลิก + วัน ท้ายแถวของสถานที่ หรือคลิกขวาที่แถวแล้วเลือก + วัน',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'ในวันที่ว่างอยู่ เพิ่มสถานที่ในวันนี้ จะเปิดฟอร์มสถานที่ และสถานที่ใหม่จะถูกเพิ่มลงในวันนั้นทันที',
|
||||
'เพิ่มสถานที่ในวันนี้ ในเมนู + ของวันหรือในวันที่ว่างอยู่ จะเปิดฟอร์มสถานที่ และสถานที่ใหม่จะถูกเพิ่มลงในวันนั้นทันที',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'จากรายละเอียดของสถานที่ เพิ่มไปยังวัน จะถามว่าต้องการวันไหน และเมื่อเปิดวันจากส่วนหัวแล้ว เพิ่มในวัน ในคอลัมน์สถานที่จะสร้างสถานที่ใหม่ในวันที่เปิดอยู่',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -1893,7 +1897,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'กำหนดเวลาให้จุดแวะ',
|
||||
'help.guide.set-stop-times.goal': 'กำหนดเวลาเริ่มและสิ้นสุดของจุดแวะ เพื่อให้วันอ่านได้เหมือนตารางเวลา',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'คลิกขวาที่จุดแวะแล้วเลือก แก้ไข หากเปิดจากวัน ฟอร์มจะมี เริ่มต้น และ สิ้นสุด อยู่ด้านล่าง',
|
||||
'คลิกขวาที่จุดแวะหรือคลิกจุดสามจุดของจุดแวะ แล้วเลือก แก้ไข หากเปิดจากวัน ฟอร์มจะมี เริ่ม และ สิ้นสุด สำหรับวันนั้นอยู่ใต้ตำแหน่งที่ตั้งทันที',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'กรอก เริ่มต้น และ สิ้นสุด หากต้องการ เวลาที่ทับซ้อนกันกับ: จะเตือนเมื่อมีจุดแวะอื่นที่มีเวลาในวันเดียวกันทับซ้อนกัน และหาก สิ้นสุด อยู่ก่อน เริ่มต้น จะกด อัปเดต ไม่ได้',
|
||||
'help.guide.set-stop-times.step.3': 'คลิก อัปเดต จุดแวะจะมีป้ายเวลาและย้ายไปยังตำแหน่งตามเวลาในวันนั้น',
|
||||
@@ -1927,12 +1931,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'เพิ่มหมายเหตุให้วัน',
|
||||
'help.guide.day-note.goal': 'เก็บการเตือนความจำ หมายเลขตั๋ว หรือแผนสำรองไว้ในวันนั้นโดยตรง',
|
||||
'help.guide.day-note.step.1': 'คลิก เพิ่มหมายเหตุ ในส่วนหัวของวัน',
|
||||
'help.guide.day-note.step.1': 'คลิก + ในส่วนหัวของวันแล้วเลือก เพิ่มหมายเหตุ',
|
||||
'help.guide.day-note.step.2':
|
||||
'ตั้งชื่อใน หมายเหตุ ซึ่งเป็นสิ่งที่การ์ดวันจะแสดง แล้วเขียนส่วนที่เหลือใน หมายเหตุรายวัน แถบเครื่องมือด้านบนใช้จัดรูปแบบข้อความ (ตัวหนา รายการ ลิงก์ คำพูด) และ ดูตัวอย่าง ทางซ้ายจะแสดงการ์ดที่จะได้',
|
||||
'พิมพ์ชื่อของหมายเหตุในส่วนหัวของหน้าต่าง ตรงที่เขียนว่า หมายเหตุ ซึ่งเป็นสิ่งที่การ์ดวันจะแสดง แล้วเขียนส่วนที่เหลือใน หมายเหตุรายวัน แถบเครื่องมือด้านบนใช้จัดรูปแบบข้อความ (ตัวหนา รายการ ลิงก์ คำพูด) และ ดูตัวอย่าง ทางซ้ายจะแสดงแถวที่จะได้',
|
||||
'help.guide.day-note.step.3': 'เลือก ไอคอน และ สี เพื่อให้หมายเหตุโดดเด่นจากจุดแวะ แล้วคลิก เพิ่ม',
|
||||
'help.guide.day-note.step.4':
|
||||
'หมายเหตุจะอยู่ในวันเหมือนจุดแวะ ลากไปยังตำแหน่งที่ต้องการ และคลิกขวาเพื่อใช้ แก้ไข และ ลบ',
|
||||
'หมายเหตุจะอยู่ในวันเหมือนจุดแวะ ลากไปยังตำแหน่งที่ต้องการ และคลิกขวาหรือใช้จุดสามจุดเพื่อใช้ แก้ไข และ ลบ',
|
||||
'help.guide.day-note.result':
|
||||
'หมายเหตุเป็นส่วนหนึ่งของวัน รวมถึงใน PDF ด้วย หมายเหตุที่มีเวลาจะเรียงรวมกับจุดแวะที่มีเวลา',
|
||||
'help.guide.day-note.tip.1': 'หมายเหตุที่มีเวลาใช้แทนการขนส่งที่คุณไม่ได้จองไว้ได้: “08:15 S3 จากสถานีกลาง”',
|
||||
@@ -1976,15 +1980,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'อ่านการจองและการขนส่งในแผน',
|
||||
'help.guide.bookings-in-plan.goal': 'รู้ว่าการจองจะแสดงที่ใดเมื่อสร้างแล้ว และสร้างได้จากหน้าจอใด',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'การขนส่ง (เที่ยวบิน รถไฟ เรือเฟอร์รี่ รถบัส รถยนต์) จะแสดงเป็น ออกเดินทาง ในวันที่ออกเดินทาง และเป็น มาถึง ในวันที่ถึง พร้อมเวลาและเส้นทาง การขนส่งที่ใช้เวลาหลายวันจะครอบคลุมวันที่อยู่ระหว่างกลาง',
|
||||
'การขนส่ง (เที่ยวบิน รถไฟ เรือเฟอร์รี่ รถบัส รถยนต์) เป็นแถวที่แต้มสีตามประเภท แสดง ออกเดินทาง ในวันที่ออกเดินทาง และ มาถึง ในวันที่ถึง พร้อมเวลาและเส้นทาง การขนส่งที่ใช้เวลาหลายวันจะครอบคลุมวันที่อยู่ระหว่างกลาง คลิกแถวเพื่อเปิดการจอง',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'การจองที่ผูกกับจุดแวะ (ร้านอาหาร ทัวร์) จะทำเครื่องหมายจุดแวะนั้นว่า ยืนยันการจองแล้ว หรือ อยู่ระหว่างการจอง ส่วนการจองที่มีวันแต่ไม่มีจุดแวะจะเป็นแถวของตัวเองในวันนั้น',
|
||||
'การจองที่ผูกกับจุดแวะ (ร้านอาหาร ทัวร์) จะแสดงเป็นป้าย การจอง บนจุดแวะนั้น สีเขียวเมื่อยืนยันแล้วและสีเหลืองอำพันระหว่างรอดำเนินการ พร้อมเวลา ส่วนการจองที่มีวันแต่ไม่มีจุดแวะจะเป็นแถวของตัวเองในวันนั้น',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'การพักค้างคืนที่โรงแรมคือที่พัก ซึ่งจะอยู่ในแผงรายละเอียดของวันใต้ ที่พัก ตั้งแต่วันเช็กอินถึงวันเช็กเอาต์ และเส้นทางของแต่ละวันเหล่านั้นจะเริ่มจากที่พัก',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'บนแผนที่ สวิตช์บนแถวการขนส่งจะวาดเส้นทางของการขนส่งนั้น ส่วน แสดงเส้นทางการจองทั้งหมด ในแถบเครื่องมือจะวาดทั้งหมด',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'การสร้าง ใช้ เพิ่มการจอง บนจุดแวะที่วางเมาส์อยู่ เพิ่มการขนส่ง และ การขนส่งสาธารณะ ในส่วนหัวของวัน และแท็บ การจอง และ การขนส่ง สำหรับรายการทั้งหมดพร้อมการนำเข้าและไฟล์',
|
||||
'การสร้าง ใช้ เพิ่มการจอง บนจุดแวะที่วางเมาส์อยู่ เพิ่มการขนส่ง และ การขนส่งสาธารณะ ในเมนู + ของวัน และแท็บ การจอง และ การขนส่ง สำหรับรายการทั้งหมดพร้อมการนำเข้าและไฟล์',
|
||||
'help.guide.bookings-in-plan.result': 'หนึ่งการจองมีหนึ่งตำแหน่งในแผน ส่วนแท็บคือการจองชุดเดียวกันในรูปแบบรายการ',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
'ยืนยันแล้วและรอดำเนินการคือสถานะที่คุณตั้งในการจอง แผนจะแสดงสถานะบนจุดแวะ และแท็บ การจอง จะนับทั้งสองสถานะ',
|
||||
@@ -2013,24 +2017,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'คลิกแถวในคอลัมน์สถานที่ จุดแวะภายในวัน หรือหมุดบนแผนที่ การ์ดจะเปิดขึ้นบนแผนที่ การเลือกจากภายในวันจะบอกการ์ดว่าคุณหมายถึงจุดแวะใด ซึ่งทำให้การ์ดแสดงผู้เข้าร่วมและการจองของจุดแวะนั้นด้วย',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'ส่วนหัวมีรูปภาพทรงกลม ชื่อ หมวดหมู่ ที่อยู่ และพิกัด คลิกรูปภาพเพื่อใช้รูปของคุณเอง ดับเบิลคลิกชื่อเพื่อเปลี่ยนชื่อสถานที่ได้ทันที และ X ทางขวาใช้ปิดการ์ด',
|
||||
'ส่วนหัวมีรูปภาพทรงกลม ชื่อ ที่อยู่ในบรรทัดเดียว และป้ายสำหรับข้อมูลที่ทราบ ได้แก่ เปิดหรือปิด หมวดหมู่ ราคา หมายเลขโทรศัพท์ และพิกัด คลิกรูปภาพเพื่อใช้รูปของคุณเอง ดับเบิลคลิกชื่อเพื่อเปลี่ยนชื่อสถานที่ได้ทันที และ X ทางขวาใช้ปิดการ์ด',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'ด้านล่างมีราคาหากมี ดาวที่นักเดินทางทุกคนให้กับสถานที่ คำอธิบายและหมายเหตุ และ หมายเหตุสำหรับวันนี้ เมื่อจุดแวะมี',
|
||||
'ด้านล่างมีดาวที่นักเดินทางทุกคนให้กับสถานที่ คำอธิบายและหมายเหตุ และ หมายเหตุสำหรับวันนี้ เมื่อจุดแวะมี',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'ตามด้วย เวลาทำการ ติดตามสี ติดตามสถิติ และ ไฟล์ ตามที่เกี่ยวข้อง ไฟล์ รับไฟล์ใดก็ได้จากโฟลเดอร์ของคุณ และยังแสดงไฟล์ที่แนบกับการจองของจุดแวะนี้ด้วย',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'แถวด้านล่างมี เพิ่มไปยังวัน หรือ ลบออกจากวัน ขณะที่เปิดวันอยู่ ตามด้วย บันทึกลงคอลเลกชัน การนำทาง เปิดเว็บไซต์ แก้ไข และ ลบ',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'สถานที่ที่เลือกจากการค้นหาจะมีข้อมูลที่ดัชนีของ TREK หรือ OpenStreetMap รู้เกี่ยวกับสถานที่นั้น ได้แก่ วงแหวนสีเขียว เปิด หรือสีแดง ปิดแล้ว รอบรูปภาพตามเวลาท้องถิ่นของสถานที่ หมายเลขโทรศัพท์ใต้ดาว เวลาทำการ ถัดลงไปโดยแถวแสดงเวลาของวันนั้นและคลิกเพื่อดูทั้งสัปดาห์ และเว็บไซต์ที่เปิดได้ด้วย เปิดเว็บไซต์ คะแนนของ Google จะแสดงเฉพาะสถานที่ที่พบผ่าน Google บน TREK ที่มีคีย์ Google',
|
||||
'สถานที่ที่เลือกจากการค้นหาจะมีข้อมูลที่ดัชนีของ TREK หรือ OpenStreetMap รู้เกี่ยวกับสถานที่นั้น ได้แก่ เปิด หรือ ปิดแล้ว ในป้ายของส่วนหัว พร้อมวงแหวนสีเขียวหรือสีแดงรอบรูปภาพตามเวลาท้องถิ่นของสถานที่ หมายเลขโทรศัพท์ที่เป็นป้ายเช่นกัน เวลาทำการ ถัดลงไปโดยแถวแสดงเวลาของวันนั้นและคลิกเพื่อดูทั้งสัปดาห์ และเว็บไซต์ที่เปิดได้ด้วย เปิดเว็บไซต์ คะแนนของ Google จะแสดงเฉพาะสถานที่ที่พบผ่าน Google บน TREK ที่มีคีย์ Google',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'สิ่งที่การ์ดบอกเกี่ยวกับสถานที่',
|
||||
'help.guide.read-place.goal': 'อ่านทุกอย่างที่ทริปรู้เกี่ยวกับสถานที่หนึ่งแห่งในการ์ดเดียว',
|
||||
'help.guide.read-place.step.1':
|
||||
'ในคอลัมน์วัน คลิกจุดแวะที่ต้องการดู การ์ดจะเปิดขึ้นบนแผนที่ และจุดแวะจะยังถูกไฮไลต์อยู่ในวัน',
|
||||
'help.guide.read-place.step.2':
|
||||
'ส่วนหัวมีรูปภาพทรงกลม ชื่อ ที่อยู่ และพิกัดที่แน่นอน วงแหวนสีเขียวพร้อม เปิด หรือสีแดงพร้อม ปิดแล้ว รอบรูปภาพบอกว่าสถานที่เปิดอยู่ตอนนี้หรือไม่ตามเวลาท้องถิ่นของสถานที่ เมื่อ TREK รู้เวลาทำการ X ทางขวาใช้ปิดการ์ด',
|
||||
'ส่วนหัวมีรูปภาพทรงกลม ชื่อ และที่อยู่ในบรรทัดเดียว โดยคำแนะนำเครื่องมือจะแสดงที่อยู่เต็ม ป้ายด้านล่างบอกว่าตอนนี้ เปิด หรือ ปิดแล้ว ตามเวลาท้องถิ่นของสถานที่ พร้อมวงแหวนสีเขียวหรือสีแดงรอบรูปภาพให้เข้ากัน และมีหมายเลขโทรศัพท์ซึ่งคลิกแล้วจะส่งไปยังแอปโทรศัพท์ของคุณ รวมถึงพิกัดที่แน่นอน X ทางขวาใช้ปิดการ์ด',
|
||||
'help.guide.read-place.step.3':
|
||||
'ด้านล่างคือดาวที่นักเดินทางทุกคนให้กับสถานที่ พร้อมค่าเฉลี่ยและจำนวนผู้โหวต จะแสดง ยังไม่ได้รับการจัดอันดับ หากยังไม่มีใครให้คะแนน ถัดลงมาคือหมายเลขโทรศัพท์หากสถานที่มี คลิกเพื่อส่งหมายเลขไปยังแอปโทรศัพท์ของคุณ',
|
||||
'เรตติ้ง มาเป็นอันดับแรกใต้ส่วนหัว คือดาวที่นักเดินทางทุกคนให้กับสถานที่ พร้อมค่าเฉลี่ยและจำนวนผู้โหวต จะแสดง ยังไม่ได้รับการจัดอันดับ หากยังไม่มีใครให้คะแนน',
|
||||
'help.guide.read-place.step.4':
|
||||
'จากนั้นคือคำอธิบาย และหมายเหตุอยู่ด้านล่าง ทั้งสองเป็นข้อความจากฟอร์มของสถานที่ที่แสดงผลแล้ว รายการ ลิงก์ และตัวหนาใช้ได้ทั้งหมด',
|
||||
'help.guide.read-place.step.5': 'ผู้เข้าร่วม บอกว่าใครจะไปจุดแวะนี้ ทุกคนจะอยู่ในรายชื่อจนกว่าคุณจะนำใครออก',
|
||||
@@ -2115,17 +2119,17 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'การจองของจุดแวะ',
|
||||
'help.guide.place-booking.goal': 'อ่านการจองที่ผูกกับจุดแวะ เปิดดู และปักการจองใหม่ไว้กับจุดแวะนั้น',
|
||||
'help.guide.place-booking.step.1':
|
||||
'เปิดจุดแวะที่การจองนั้นผูกอยู่ การ์ดจะแสดงแถบที่มี ยืนยันแล้ว หรือ รอดำเนินการ พร้อมชื่อของการจอง',
|
||||
'help.guide.place-booking.step.2': 'แถบนี้แสดง วันที่ เวลา และ รหัสการจอง รวมถึงหมายเหตุใดๆ ที่การจองมี',
|
||||
'help.guide.place-booking.step.3': 'คลิกที่แถบ การจองจะเปิดขึ้นเหนือแผนที่',
|
||||
'เปิดจุดแวะที่การจองนั้นผูกอยู่ การ์ดจะแสดงการจองไว้ใต้ การจอง เป็นการ์ดเล็กๆ ของตัวเอง พร้อมชื่อของการจองและ ยืนยันแล้ว หรือ รอดำเนินการ',
|
||||
'help.guide.place-booking.step.2': 'การ์ดการจองแสดง วันที่ เวลา และ รหัสการจอง รวมถึงหมายเหตุใดๆ ที่การจองมี',
|
||||
'help.guide.place-booking.step.3': 'คลิกที่การ์ดการจอง การจองจะเปิดขึ้นเหนือแผนที่',
|
||||
'help.guide.place-booking.step.4':
|
||||
'แก้ไข ที่ด้านล่างของการจองจะเปิดแบบฟอร์มของการจองนั้น เชื่อมโยงกับแผนประจำวัน ในแบบฟอร์มคือสิ่งที่ปักการจองไว้กับจุดแวะ และในที่นี้ระบุจุดแวะนี้ไว้แล้ว ปิดแบบฟอร์มอีกครั้ง',
|
||||
'help.guide.place-booking.step.5':
|
||||
'การจองใหม่สำหรับจุดแวะเริ่มจากคอลัมน์วัน: วางเมาส์เหนือจุดแวะแล้วคลิก + ที่ท้ายแถว แบบฟอร์มจะเปิดเป็น การจองใหม่ ซึ่งเชื่อมโยงกับจุดแวะนั้นไว้แล้ว',
|
||||
'การจองใหม่สำหรับจุดแวะเริ่มจากคอลัมน์วัน: วางเมาส์เหนือจุดแวะแล้วคลิก เพิ่มการจอง ซึ่งเป็นไอคอนตั๋วที่ท้ายแถว แบบฟอร์มจะเปิดเป็น การจองใหม่ ซึ่งเชื่อมโยงกับจุดแวะนั้นไว้แล้ว',
|
||||
'help.guide.place-booking.result':
|
||||
'การจองผูกอยู่กับจุดแวะ: แสดงบนการ์ด อยู่ในวันนั้น และไฟล์ของการจองก็แสดงอยู่ใต้ ไฟล์ ตรงนี้ด้วย',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'แถบจะแสดงเฉพาะที่จุดแวะที่การจองถูกปักไว้เท่านั้น การจองที่ไม่มีจุดแวะจะอยู่ในแท็บ จอง',
|
||||
'การ์ดการจองจะแสดงเฉพาะที่จุดแวะที่การจองถูกปักไว้เท่านั้น การจองที่ไม่มีจุดแวะจะอยู่ในแท็บ จอง',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'การจองหลายรายการใช้จุดแวะเดียวกันได้ เช่น มื้อกลางวันกับทัวร์ที่ออกเดินทางจากหน้าประตูเดียวกัน',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2204,7 +2208,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'ด้านบนคือสภาพอากาศของวัน พยากรณ์อากาศสำหรับ ระบุสถานที่ที่พยากรณ์นั้นใช้: จุดแวะแรกของวัน หรือโรงแรมที่คุณตื่นนอน',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'การจอง แสดงการจองของวันนั้น แต่ละรายการพร้อมประเภท จุดแวะที่ผูกอยู่ และเวลา สีเขียวหมายถึงยืนยันแล้ว สีเหลืองอำพันหมายถึงยังรอดำเนินการ ส่วนนี้ใช้อ่านอย่างเดียว การจองจะเปลี่ยนได้ที่ การจอง',
|
||||
'การจอง แสดงการจองของวันนั้น แต่ละรายการพร้อมประเภท จุดแวะที่ผูกอยู่ และเวลา สีเขียวหมายถึงยืนยันแล้ว สีเหลืองอำพันหมายถึงยังรอดำเนินการ และคลิกแถวเพื่อเปิดการจอง',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'ที่พัก แสดงทุกคืนที่จองไว้ในวันนี้ พร้อม เช็คอิน และ เช็คเอาท์ ในวันที่เกิดขึ้น ช่วงเวลาเช็คอิน เวลาเช็คเอาท์ และหมายเลขยืนยัน',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2231,7 +2235,7 @@ const help: TranslationStrings = {
|
||||
'พยากรณ์อากาศสำหรับ ระบุสถานที่ที่ตัวเลขเหล่านี้ใช้: จุดแวะแรกของวัน หรือในวันที่ไม่มีจุดแวะ คือโรงแรมที่คุณตื่นนอน',
|
||||
'help.guide.day-weather.step.2':
|
||||
'ตัวเลขใหญ่คืออุณหภูมิของวัน ข้างๆ คืออุณหภูมิต่ำสุดและสูงสุด และสภาพอากาศเป็นคำบรรยาย',
|
||||
'help.guide.day-weather.step.3': 'ป้ายด้านล่าง: โอกาสฝนตก ปริมาณฝน ลมแรงสุด และเวลาพระอาทิตย์ขึ้นและตก',
|
||||
'help.guide.day-weather.step.3': 'ป้ายทางขวา: โอกาสฝนตก ปริมาณฝน ลมแรงสุด และเวลาพระอาทิตย์ขึ้นและตก',
|
||||
'help.guide.day-weather.step.4':
|
||||
'ด้านล่างสุดคือรายชั่วโมงของวัน ทุกสองชั่วโมง: เวลา ไอคอน อุณหภูมิ และโอกาสฝนตก ชั่วโมงที่เกิน 50 เปอร์เซ็นต์จะแรเงาเป็นสีฟ้า',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2262,17 +2266,18 @@ const help: TranslationStrings = {
|
||||
'ที่พักต้องเป็นสถานที่ของทริปก่อน สร้างในคอลัมน์สถานที่เหมือนสถานที่อื่นๆ: ตัวเลือกจะแสดงเฉพาะสิ่งที่มีอยู่แล้ว',
|
||||
'help.guide.add-accommodation.step.2': 'เปิดวันที่คุณเดินทางถึง แล้วคลิก เพิ่มที่พัก ใต้ ที่พัก',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'นำไปใช้กับวัน ระบุว่าการพักครอบคลุมคืนใดบ้าง: วันเช็คอินทางซ้าย วันเช็คเอาท์ทางขวา ทั้งหมด ครอบคลุมทั้งทริป',
|
||||
'นำไปใช้กับวัน ระบุว่าการพักครอบคลุมคืนใดบ้าง: เริ่ม คือวันเช็คอิน สิ้นสุด คือวันเช็คเอาท์ และ ทั้งหมด ครอบคลุมทั้งทริป ส่วนหัวของหน้าต่างจะแสดงช่วงวันและจำนวนคืน',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'กรอก เช็คอิน, เช็กอินได้ถึง และ เช็คเอาท์ แล้วใส่หมายเลขการจองใน การยืนยัน ทั้งสี่ช่องเว้นว่างได้',
|
||||
'help.guide.add-accommodation.step.5': 'เลือกที่พักจากสถานที่ของทริป ป้ายด้านบนรายการจะกรองให้เหลือหมวดหมู่เดียว',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'เลือกที่พักจากสถานที่ของทริป หมวดหมู่ ด้านบนรายการจะกรองให้เหลือหมวดหมู่เดียว',
|
||||
'help.guide.add-accommodation.step.6': 'คลิก บันทึก',
|
||||
'help.guide.add-accommodation.result':
|
||||
'การพักจะแสดงในทุกวันที่ครอบคลุม โดยมี เช็คอิน ในวันแรกและ เช็คเอาท์ ในวันสุดท้าย ที่พักจะกลายเป็นจุดแวะในวันเช็คอิน แผนที่จึงวาดเส้นทางไปที่นั่น และการจองประเภท ที่พัก จะปรากฏใน การจอง',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'ตัวเลือกจะเปิดที่วันที่คุณมาจาก โดยเช็คเอาท์เป็นวันถัดไป ทั้งสองอย่างเลื่อนได้ก่อนบันทึก',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'กำหนดหมวดหมู่ Hotel ให้โรงแรมตอนสร้าง แล้วป้ายด้านบนรายการจะกรองให้เหลือเฉพาะโรงแรมของคุณในคลิกเดียว',
|
||||
'กำหนดหมวดหมู่ Hotel ให้โรงแรมตอนสร้าง แล้ว หมวดหมู่ ด้านบนรายการจะกรองให้เหลือเฉพาะโรงแรมของคุณในคลิกเดียว',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'เวลาทั้งหมดไม่บังคับ: การพักที่ไม่มีเวลาเช็คอินและไม่มีรหัสก็ยังครอบคลุมคืนของมันและยังวาดเส้นทาง',
|
||||
// edit-accommodation
|
||||
@@ -2282,7 +2287,7 @@ const help: TranslationStrings = {
|
||||
'ในทุกวันของการพัก การ์ดจะแสดงที่พัก ช่วงเวลาเช็คอิน เวลาเช็คเอาท์ และหมายเลขยืนยัน',
|
||||
'help.guide.edit-accommodation.step.2': 'ไอคอนดินสอทางขวาจะเปิดการพักอีกครั้ง ป๊อปอัปจะแสดงว่า แก้ไขที่พัก',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'แก้ไขแถวของช่อง: เช็คอิน, เช็กอินได้ถึง, เช็คเอาท์ และ การยืนยัน วันด้านบนและที่พักด้านล่างก็เปลี่ยนได้ที่นี่เช่นกัน',
|
||||
'แก้ไข เช็คอิน, เช็กอินได้ถึง, เช็คเอาท์ และ การยืนยัน วันด้านบนและที่พักด้านล่างก็เปลี่ยนได้ที่นี่เช่นกัน',
|
||||
'help.guide.edit-accommodation.step.4': 'คลิก บันทึก',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'X ข้างไอคอนดินสอจะยกเลิกการพักโดยไม่ถามอะไร และการจองประเภท ที่พัก ที่ผูกกับการพักนั้นจะถูกลบไปด้วย',
|
||||
@@ -2298,7 +2303,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'การจอง แสดงการจองของวัน: รายการที่ลงวันที่ไว้ในวันนั้น และรายการที่ผูกกับจุดแวะใดจุดแวะหนึ่งของวัน',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'แต่ละแถวแสดงประเภทของการจอง ชื่อ และหากผูกกับจุดแวะ ก็จะแสดงจุดแวะนั้นหลังจุดคั่น เวลาอยู่ที่ปลายด้านขวา',
|
||||
'แต่ละแถวแสดงประเภทของการจอง ชื่อ และหากผูกกับจุดแวะ ก็จะแสดงจุดแวะนั้นเป็นสีเทาต่อท้าย เวลาอยู่ที่ปลายด้านขวา ก่อนจุดสถานะ',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'สีบอกสถานะของการจอง: แถวสีเขียวคือยืนยันแล้ว แถวสีเหลืองอำพันคือยังรอดำเนินการ โรงแรมไม่อยู่ในรายการนี้ แต่มีส่วนของตัวเองอยู่ด้านล่าง',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Benim ödediklerim',
|
||||
'costs.filter.owed': 'Bana borçlu',
|
||||
'costs.addExpense': 'Harcama ekle',
|
||||
'costs.view.label': 'Görünüm',
|
||||
'costs.view.list': 'Liste',
|
||||
'costs.view.table': 'Tablo',
|
||||
'costs.table.lockedPayer': 'Birisi ödedi: bakiyeler doğru kalsın diye tutarı harcamanın içinde değiştirin.',
|
||||
'costs.table.lockedCurrency': '{currency} olarak girildi: tutarı harcamanın içinde değiştirin.',
|
||||
'costs.table.summary': 'Özet',
|
||||
'costs.table.byCategory': 'Kategori',
|
||||
'costs.table.byDate': 'Gün',
|
||||
'costs.table.byPayer': 'Ödeyen',
|
||||
'costs.table.byStatus': 'Durum',
|
||||
'costs.table.noPayer': 'Henüz ödeyen yok',
|
||||
'costs.table.paid': 'Ödendi',
|
||||
'costs.table.open': 'Açık',
|
||||
'costs.editExpense': 'Harcamayı düzenle',
|
||||
'costs.noMatch': 'Aramanızla eşleşen harcama yok.',
|
||||
'costs.emptyText': 'Henüz harcama yok. İlkini ekleyin.',
|
||||
|
||||
+59
-57
@@ -1726,7 +1726,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Başlık, tarihler, kapak ve para birimi Seyahatlerim’den, seyahat kartındaki kalemle düzenlenir.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Bir sütunun iç kenarındaki ok uçları onu katlar ve yeri harita alır; sütunun yanındaki ince ayırıcı genişliğini değiştirir.',
|
||||
'Bir sütunun iç kenarındaki kulakçık onu kenara katlar ve yeri harita alır; sütunun yanındaki ince ayırıcı genişliğini değiştirir.',
|
||||
'help.ctx.trip.bullet.6': 'Günlerin araç çubuğundaki geri alma oku plandaki son değişikliği geri alır.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Üye ekleyin',
|
||||
@@ -1794,8 +1794,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Haritaya yer açın',
|
||||
'help.guide.collapse-columns.goal': 'Bir sütunu katlayın ya da ona daha fazla genişlik verin.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Günler sütununun iç kenarındaki ok ucuna tıklayarak onu daraltın; yeri harita alır. Yerler sütununda da aynı ok ucu vardır.',
|
||||
'help.guide.collapse-columns.step.2': 'Sütunu geri getirmek için ok ucuna yeniden tıklayın.',
|
||||
'Sütunu kenara katlamak için günler sütununun iç kenarındaki kulakçığa, panel simgesi olana tıklayın; yeri harita alır. Yerler sütununda da aynı kulakçık vardır.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Katlanan bir sütun haritanın köşesinde bir kutucuk bırakır: günler için Planı, yerler için Yerler. Sütunu geri getirmek için ona tıklayın.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Sütunun genişliğini değiştirmek için sütunla harita arasındaki ince ayırıcıyı sürükleyin.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1820,15 +1821,15 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Üstteki Yer/etkinlik Ekle, yazdığınız ya da aradığınız bir yer için formu açar. Bir gün açıkken düğmede Yeni yer yazar ve yanındaki Güne, yeri doğrudan o günde oluşturur.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Dosyayı içe aktar .gpx, .kml ve .kmz dosyalarını alır; Liste İçe Aktarma paylaşılan bir Google Maps ya da Naver Maps listesini alır. Bir dosya sütunun üzerine de bırakılabilir.',
|
||||
'Yanındaki içe aktarma düğmesi .gpx, .kml ve .kmz dosyaları için Dosyayı içe aktar ve Google Maps ya da Naver Maps üzerinden paylaşılan bir liste için Google Listesi (Naver listeleri de açıksa Liste İçe Aktarma) sunar. Bir dosya sütunun üzerine de bırakılabilir.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Açılır liste Tüm, Planlanmamış, Planlanmış ve bir parça içe aktarıldığında Parçalar arasında geçiş yapar; altında arama, kategori filtresi ve en düşük puan için yıldız durur.',
|
||||
'Bunların altında, yanında seçim başlatan onay işaretiyle arama ve bir filtre satırı durur: Göster açılır listesi Tüm, Planlanmamış, Planlanmış ve bir parça içe aktarıldığında Parçalar arasında geçiş yapar, her biri kendi sayısıyla; etiket düğmesi kategoriye, yıldız da en düşük puana göre filtreler.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
"Bir satır resmi, adı ve açıklamayı ya da adresi gösterir. Yerin ayrıntıları için satıra tıklayın, bir güne sürükleyin ya da Düzenle, + Gün, Web Sitesini Aç, Google Haritalar'da aç, Koleksiyona kaydet ve Sil için sağ tıklayın.",
|
||||
"Bir satır resmi, adı ve açıklamayı ya da adresi gösterir. Yerin ayrıntıları için satıra tıklayın, bir güne sürükleyin ya da Düzenle, + Gün, Web Sitesini Aç, Google Haritalar'da aç, Koleksiyona kaydet ve Sil için sağ tıklayın (ya da üç noktasına tıklayın).",
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Bir gün açıkken, planlanmamış bir satırın sonundaki + yeri o güne koyar ve Planlanmış yalnızca o günü listeler; yeniden genişletmek için yanında Tüm yolculuğu göster bulunur.',
|
||||
'Bir gün açıkken, planlanmamış bir satırın sonundaki + Gün yeri o güne koyar ve Planlanmış yalnızca o günü listeler; yeniden genişletmek için yanında Tüm yolculuğu göster bulunur.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Filtre satırının sağ ucundaki onay işareti bir seçim başlatır: birkaç satır birden yeni bir kategori alır, bir koleksiyona gider ya da silinir.',
|
||||
'Aramanın yanındaki onay işareti bir seçim başlatır: sütunun altındaki çubuktan birkaç satır birden yeni bir kategori alır, bir koleksiyona gider, ziyaret edildi olarak işaretlenir ya da silinir.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Bir yer oluşturun',
|
||||
'help.guide.create-place.goal':
|
||||
@@ -1836,11 +1837,11 @@ const help: TranslationStrings = {
|
||||
'help.guide.create-place.step.1':
|
||||
'Yerler sütununun üstündeki Yer/etkinlik Ekle düğmesine tıklayın (bir gün açıkken Yeni yer). Form açılır.',
|
||||
'help.guide.create-place.step.2':
|
||||
"Yeri üstteki Yerleri ara... alanına yazın ve bir sonuç seçin. İsim, Adres, Enlem, Boylam ve Web sitesi dolar, soldaki Yer ayrıntıları ise onun için resimleri, çalışma saatlerini ve bir açıklamayı gösterir. Google anahtarı olan bir TREK’te, listenin altında Doğru yer değil mi? Bunun yerine Google'da ara satırı durur ve aynı aramayı Google üzerinden çalıştırır.",
|
||||
"Yeri Yerleri ara... alanına yazın ve bir sonuç seçin. İletişim kutusunun başındaki ad, Adres, Enlem, Boylam ve Web sitesi dolar, soldaki Yer ayrıntıları ise onun için resimleri, çalışma saatlerini ve bir açıklamayı gösterir. Google anahtarı olan bir TREK’te, listenin altında Doğru yer değil mi? Bunun yerine Google'da ara satırı durur ve aynı aramayı Google üzerinden çalıştırır. Sağdaki Kaydedilen yerler, koleksiyonlarınızdaki yerleri aynı şekilde sunar.",
|
||||
'help.guide.create-place.step.3':
|
||||
'Yer ayrıntıları içinde, Bir görsel seç altındaki bir resme tıklamak onu yerin görseli yapar; Bu metni kullan açıklamayı forma aktarır.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Alanları kontrol edin: İsim zorunludur; Tanım ve Notlar sizindir; Adres, Enlem ve Boylam aramadan gelir ya da yazılır; Kategori gezinin kategorilerinden birini seçer ve yanındaki + anında yenisini oluşturur; Web sitesi bağlantıyı alır.',
|
||||
'Formda neler olduğunu kontrol edin: ad iletişim kutusunun başında durur ve tek zorunlu alandır; altındaki Kategori etiketi gezinin kategorilerinden birini seçer ve yanındaki + anında yenisini oluşturur. Adres, Enlem ve Boylam aramadan gelir ya da yazılır; Tanım ve Notlar sizindir; Web sitesi bağlantıyı alır.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Ekle düğmesine tıklayın. Aynı adlı bir yer gezide zaten varsa form bunu söyler ve düğme Yine de ekle olur.',
|
||||
'help.guide.create-place.result': 'Yer listede ve haritadadır, bir güne konana kadar Planlanmamış altında.',
|
||||
@@ -1858,7 +1859,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'Güne, Yeni yer ile aynı formu açar, yalnızca Ekle düğmesine tıkladığınız anda yer açık güne iner.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Zaten var olan bir yer, satırının sonundaki + ile ya da sağ tıklayıp + Gün ile açık güne gider.',
|
||||
'Zaten var olan bir yer, satırının sonundaki + Gün ile ya da sağ tıklayıp + Gün ile açık güne gider.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Tersi de olur, üstelik önce bir gün açmanız gerekmez: yerin satırını sütundan dışarı sürükleyip bir gün kartının üzerine bırakın. İki durağın arasına bırakırsanız tam oraya oturur.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1870,12 +1871,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Listede bir yer bulun',
|
||||
'help.guide.filter-places.goal': 'Sütunu peşinde olduğunuz yerlere daraltın.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Üstteki açılır liste Tüm, Planlanmamış (henüz hiçbir günde değil), Planlanmış (bir günde) ve Parçalar (içe aktarılmış GPX izleri) arasında geçiş yapar, her biri kendi sayısıyla.',
|
||||
'help.guide.filter-places.step.2': 'Yer ara... alanına yazın; liste siz yazdıkça daralır.',
|
||||
'Aramanın altındaki Göster açılır listesi Tüm, Planlanmamış (henüz hiçbir günde değil), Planlanmış (bir günde) ve Parçalar (içe aktarılmış GPX izleri) arasında geçiş yapar, her biri kendi sayısıyla.',
|
||||
'help.guide.filter-places.step.2': 'Üstteki Ara alanına yazın; liste siz yazdıkça daralır.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Tüm Kategoriler, bir ya da daha fazla kategoriyi işaretleyeceğiniz bir liste açar, aralarında Kategori Yok da vardır; altındaki Filtreyi temizle bunu sıfırlar.',
|
||||
"Göster'in yanındaki etiket düğmesi kategorileri listeler: bir ya da daha fazlasını işaretleyin, aralarında Kategori Yok da vardır. Düğme işaretlenenleri sayar, listenin altındaki Filtreyi temizle ise hepsini kaldırır.",
|
||||
'help.guide.filter-places.step.4':
|
||||
'Yanındaki yıldız en düşük puanı belirler: 5+, 4+ ve devamı yalnızca en az o kadar puan verdiğiniz yerleri gösterir.',
|
||||
'Onun yanındaki yıldız en düşük puanı belirler: 5+, 4+ ve devamı yalnızca en az o kadar puan verdiğiniz yerleri gösterir.',
|
||||
'help.guide.filter-places.result': 'Satırların üstündeki sayı kaç yerin uyduğunu söyler; filtreler birleşir.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'Bir gün açıkken Planlanmış yalnızca o günü listeler ve bunu söyler: Yalnızca açık gün gösteriliyor, yanında Tüm yolculuğu göster ile.',
|
||||
@@ -1886,7 +1887,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Satıra sağ tıklayın ve Düzenle seçeneğini seçin, ya da yeri açıp ayrıntılarında Düzenle düğmesine tıklayın.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Neye ihtiyacınız varsa değiştirin: İsim, Tanım, Notlar, Adres, Enlem ve Boylam, Kategori, Web sitesi. Bir günden açıldığında formda ayrıca Bu gün için notlar ve o gün için Başlangıç ile Son bulunur.',
|
||||
'Neye ihtiyacınız varsa değiştirin: iletişim kutusunun başındaki ad ve Kategori etiketi, Adres, Enlem ve Boylam, Tanım, Notlar ve Web sitesi. Bir günden açıldığında formda ayrıca Başlangıç ile Son ve Bu gün için notlar bulunur.',
|
||||
'help.guide.edit-place.step.3': 'Güncelle düğmesine tıklayın.',
|
||||
'help.guide.edit-place.result':
|
||||
'Değişiklik yerin göründüğü her yerde geçerlidir: listede, haritada ve bulunduğu her günde.',
|
||||
@@ -1899,22 +1900,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Satıra sağ tıklayın ve Sil seçeneğini seçin, ya da yerin ayrıntılarında Sil düğmesine tıklayın.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Onaylayın. Yerde bir gece rezerve edilmişse ya da ona bağlı bir rezervasyon varsa, soru onunla birlikte neyin gittiğini söyler.',
|
||||
'Sorudaki Sil düğmesine tıklayın. Yerde bir gece rezerve edilmişse ya da ona bağlı bir rezervasyon varsa, soru onunla birlikte neyin gittiğini söyler.',
|
||||
'help.guide.delete-place.result':
|
||||
'Yer listeden, haritadan ve her günden kalkar; günlerin üstündeki araç çubuğundaki Geri al onu geri getirir.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Bir yeri yalnızca bir günden almak için, bunun yerine o durakta Günden Kaldır kullanın.',
|
||||
'help.guide.delete-place.tip.2': 'Aynı anda birkaç yer: filtrelerin yanındaki onay işareti bir seçim başlatır.',
|
||||
'help.guide.delete-place.tip.2': 'Aynı anda birkaç yer: aramanın yanındaki onay işareti bir seçim başlatır.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Aynı anda birkaç yeri değiştirin ya da silin',
|
||||
'help.guide.select-places.goal': 'Listeyi tek tek yer yerine bir seferde toparlayın.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Filtre satırının sağ ucundaki onay işaretine tıklayın. Satırlar onay kutuları alır ve eylemlerin bulunduğu bir çubuk belirir.',
|
||||
'Arama alanının yanındaki onay işaretine tıklayın. Satırlar yuvarlak onay kutuları alır ve sütunun altında eylemlerin bulunduğu bir çubuk yükselir.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Satırları işaretleyin ya da çubuktaki Tümünü seç düğmesini kullanın; çubuk neyin seçili olduğunu sayar.',
|
||||
'İşaretlemek için satırlara tıklayın. Çubuktaki çift onay işareti olan Tümünü seç, filtrelerin bıraktığı her satırı alır.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category hepsine tek bir kategori verir; Koleksiyona kaydet onları koleksiyonlarınızdan birine kopyalar; Seçileni sil bir onaydan sonra onları kaldırır.',
|
||||
'help.guide.select-places.step.4': 'Seçimden çıkmak için onay işaretine yeniden tıklayın.',
|
||||
'Çubuk işaretlenen yerleri sayar. Kategoriyi değiştir hepsine tek bir kategori verir; Koleksiyona kaydet onları koleksiyonlarınızdan birine kopyalar; Seçileni sil bir onaydan sonra onları kaldırır.',
|
||||
'help.guide.select-places.step.4': 'Çubuğun sonundaki X olan Bitti, seçimden çıkar.',
|
||||
'help.guide.select-places.result':
|
||||
'Değişiklik seçili her yer için geçerlidir; bir silme günlerin üstündeki araç çubuğundan geri alınabilir.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1926,7 +1927,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.goal':
|
||||
'Google My Maps, Google Earth ya da bir GPS izleyicinin dışa aktardığını içeri getirin.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Dosyayı içe aktar düğmesine tıklayın ya da dosyayı yerler sütununun herhangi bir yerine bırakın.',
|
||||
'Ekleme düğmesinin yanındaki içe aktarma düğmesine tıklayıp Dosyayı içe aktar seçeneğini seçin ya da dosyayı yerler sütununun herhangi bir yerine bırakın.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
"Dosyayı seçin ya da kutuya sürükleyin. Bir GPX için neyin içe aktarılacağını işaretleyin: Ara noktalar, Rotalar, İzler (yol geometrisi ile); KML ve KMZ için Noktalar (Yer İşaretleri) ve Yollar (LineString'ler).",
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1943,7 +1944,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-list.title': 'Paylaşılan bir Google Maps ya da Naver Maps listesini içe aktarın',
|
||||
'help.guide.import-places-list.goal': 'Paylaşılan bir liste bağlantısını yerlere dönüştürün.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Liste İçe Aktarma düğmesine tıklayın ve Google Listesi ya da Naver Listesi seçeneğini seçin.',
|
||||
'Ekleme düğmesinin yanındaki içe aktarma düğmesine tıklayıp Google Listesi seçeneğini seçin. Naver listeleri de açıksa girişin adı Liste İçe Aktarma olur ve iletişim kutusu ikisinden hangisi olduğunu sorar.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Listenin paylaşılan bağlantısını yapıştırın. Bir Google Maps yol tarifi bağlantısı da olur: durakları sürüş sırasına göre birer yer olur.',
|
||||
'help.guide.import-places-list.step.3': 'İçe aktar düğmesine tıklayın.',
|
||||
@@ -1961,24 +1962,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Üstteki araç çubuğu: Dışa aktar (PDF, takvim, GPX), Tüm günleri genişlet / Tüm günleri daralt, geri alma oku, Günleri yeniden sırala ve Tüm rezervasyon rotalarını göster.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Bir gün kartı: başlıkta numara, hava durumu, başlık, tarih ve günün maliyeti; günü açmak için başlığa tıklayın, sağdaki ok kartı katlar. Toplu taşıma, Ulaşım ekle ve Not Ekle de başlıkta durur.',
|
||||
'Bir gün kartı: gün numarası ve hava tahminiyle bir kutucuk, başlık ve tarih, ayrıca rezerve edilen gece, kiralık araç ve günün maliyeti için etiketler. Günü açmak için başa tıklayın, ok onu katlar, + ise bir menü açar: Bu güne yer ekle, Konaklama ekle, Ulaşım ekle, Toplu taşıma ve Not Ekle.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Bir günün içinde: sırayla duraklar, her biri resim, ad, saat ve resmin üzerinde bir kilitle; notlar; güne ait rezervasyonlar; ve duraklar arasında her etabın yolculuk süresi.',
|
||||
'Bir günün içinde: sırayla duraklar, her biri resim, ad, saat, resmin üzerinde bir kilit ve ona iliştirilmiş rezervasyonlarla; notlar; türüne göre renklendirilmiş, günün rezervasyonları ve ulaşımları; ve duraklar arasında her etabın yolculuk süresi. Her satırın, sağ tıklamanın açtığıyla aynı olan üç noktalı bir menüsü vardır.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
"Durakların altında rota çubuğu: Rota günü haritaya çizer, Optimize et durakları sıralar, Araba / Yürüyüş günün ulaşım türünü belirler, Google Haritalar'da aç ve CoMaps'te aç ise günü devreder.",
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Yerler bir güne, yerler sütunundan bir satır sürükleyerek, o satırdaki + ile, boş bir günde Bu güne yer ekle ile ya da yerin ayrıntılarından gelir.',
|
||||
'Yerler bir güne, yerler sütunundan bir satır sürükleyerek, o satırdaki + Gün ile, günün + menüsündeki ya da boş bir gündeki Bu güne yer ekle ile ya da yerin ayrıntılarından gelir.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Alttaki Toplam Maliyet, fiyatı olan her durağı ve her rezervasyonu gezinin para biriminde toplar.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Bir günü okuyun',
|
||||
'help.guide.read-day-plan.goal': 'Bir şeyi değiştirmeden önce gün kartının her parçasının size ne söylediğini bilin.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Başlık: gün numarası, o günün tahmini, 1. gün ya da ona verdiğiniz ad, tarih ve günün maliyeti. Günü açmak için başlığa tıklayın (ayrıntı paneli haritanın üzerinde açılır); sağdaki ok kartı katlar ve açar.',
|
||||
'Baş kısım: gün numarası ve hava tahminiyle bir kutucuk, sonra 1. gün ya da ona verdiğiniz ad, tarih ve rezerve edilen gece (giriş ya da çıkış), kiralık araç ve günün maliyeti için etiketler. Günü açmak için baş kısma tıklayın (ayrıntı paneli haritanın üzerinde açılır); sağdaki + bir yer, bir konaklama, bir ulaşım, bir toplu taşıma bağlantısı ya da bir not ekler, ok ise kartı katlar.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Bir durak: soldaki tutamak onu sürükler, resim rota optimizasyonu için bir kilit taşır, sonra ad, açıklama ve ayarlıysa Bu gün için notlar gelir. Durağın saatleri varsa bir saat rozeti Başlangıç ve Son değerlerini gösterir; sağ ucunda beliren oklar onu yukarı ya da aşağı taşır.',
|
||||
'Bir durak: soldaki tutamak onu sürükler, resim rota optimizasyonu için bir kilit taşır, sonra ad, durağın Başlangıç ve Son değerleri varsa bir saat rozeti, açıklama ve ayarlıysa Bu gün için notlar gelir. Sağ ucundaki oklar onu yukarı ya da aşağı taşır, üç nokta ise menüsünü açar.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Gündeki bir rezervasyon: bir durağa bağlı rezervasyon o durağı Rezervasyon onaylandı ya da Rezervasyon beklemede olarak işaretler, bir ulaşım ise saati ve rotasıyla Kalkış ya da Varış olarak görünür; üzerindeki küçük düğme o rotayı haritada çizer.',
|
||||
'Bir duraktaki rezervasyon, onun üzerinde bir Rezervasyon rozeti olarak durur; onaylandığında yeşil, beklemedeyken kehribar rengidir ve saatini ve sağlayıcısını gösterir. Rezervasyonu açmak için rozete tıklayın, yanındaki rota düğmesi de rotasını çizer. Bir ulaşım, türüne göre renklendirilmiş kendi satırıdır; Kalkış ya da Varış ve saatiyle. Bir rezervasyona tıklayın, ayrıntıları açılır; oradaki Düzenle onu değiştirir.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'İki durak arasında bağlayıcı, etabın günün ulaşım türüyle ne kadar sürdüğünü ve ne kadar uzun olduğunu söyler; yalnızca o etabın türünü değiştirmek için üzerine tıklayın.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -1986,7 +1987,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Karttaki her simgenin bir anlamı var; aşağıdaki kılavuzlar her birini değiştirir.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Menüsü için bir durağa sağ tıklayın: Düzenle, Günden kaldır, Web Sitesini Aç, navigasyon uygulamaları (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Koleksiyona kaydet, Sil.',
|
||||
'Menüsü için bir durağa sağ tıklayın ya da üç noktasına tıklayın: Düzenle, Günden kaldır, Web Sitesini Aç, navigasyon uygulamaları (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Koleksiyona kaydet, Sil.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Bir durağın üzerine gelin, sonunda Rezervasyon ekle belirir: orada oluşturulan rezervasyon bu günkü bu durağa bağlıdır.',
|
||||
// place-onto-day
|
||||
@@ -1995,8 +1996,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Yerler sütunundan bir satırı gün kartına sürükleyin. Tam oraya koymak için iki durak arasına bırakın, sona eklemek için kartın herhangi bir yerine bırakın.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Sürüklemeden: başlığına tıklayarak günü açın, sonra yerin satırının sonundaki + işaretine tıklayın ya da satıra sağ tıklayıp + Gün seçin.',
|
||||
'help.guide.place-onto-day.step.3': 'Boş bir günde Bu güne yer ekle, yer formunu açar ve yeni yer hemen o güne iner.',
|
||||
'Sürüklemeden: baş kısmına tıklayarak günü açın, sonra yerin satırının sonundaki + Gün düğmesine tıklayın ya da satıra sağ tıklayıp + Gün seçin.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Günün + menüsündeki ya da boş bir gündeki Bu güne yer ekle, yer formunu açar ve yeni yer hemen o güne iner.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Bir yerin ayrıntılarından Güne Ekle hangi gün olduğunu sorar; gün başlığından açıkken yerler sütunundaki Güne, açık günde doğrudan yeni bir yer oluşturur.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2025,7 +2027,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Bir durağın ne zaman başlayıp bittiğini belirleyin, böylece gün bir program gibi okunur.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Durağa sağ tıklayın ve Düzenle seçin. Günden açıldığında formun altında Başlangıç ve Son bulunur.',
|
||||
'Durağa sağ tıklayın ya da üç noktasına tıklayın ve Düzenle seçin. Günden açıldığında formda, konumun hemen altında o gün için Başlangıç ve Son bulunur.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Başlangıç değerini, isterseniz Son değerini de girin. Zaman şununla çakışıyor: uyarısı günün saatli başka bir durağıyla çakışmayı bildirir; Başlangıç saatinden önceki bir Son, Güncelle düğmesini engeller.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2062,13 +2064,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Bir güne not ekleyin',
|
||||
'help.guide.day-note.goal': 'Bir hatırlatmayı, bir bilet numarasını ya da bir B planını doğrudan günün içinde tutun.',
|
||||
'help.guide.day-note.step.1': 'Günün başlığındaki Not Ekle düğmesine tıklayın.',
|
||||
'help.guide.day-note.step.1': 'Günün baş kısmındaki + işaretine tıklayın ve Not Ekle seçin.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Not alanına bir ad verin, gün kartında görünen budur, gerisini de Günlük Not altına yazın. Metnin üstündeki çubuk onu biçimlendirir (Kalın, listeler, bağlantılar, alıntılar) ve soldaki Önizleme ortaya çıkacak kartı gösterir.',
|
||||
'Notun adını iletişim kutusunun başına, Not yazan yere yazın; gün kartında görünen budur. Gerisini Günlük Not altına yazın: üstündeki araç çubuğu metni biçimlendirir (kalın, listeler, bağlantılar, alıntılar), soldaki Önizleme ise ortaya çıkacak satırı gösterir.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Not duraklardan ayırt edilsin diye bir Simge ve bir Renk seçin, sonra Ekle düğmesine tıklayın.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Not günde bir durak gibi oturur: sürükleyerek yerine koyun, Düzenle ve Sil için sağ tıklayın.',
|
||||
'Not günde bir durak gibi oturur: sürükleyerek yerine koyun, Düzenle ve Sil için de sağ tıklayın ya da üç noktasını kullanın.',
|
||||
'help.guide.day-note.result':
|
||||
'Not günün bir parçasıdır, PDF içinde de; saatli bir not saatli duraklarla birlikte sıralanır.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2118,15 +2120,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.goal':
|
||||
'Bir rezervasyon var olduktan sonra nerede göründüğünü ve onu hangi ekranın oluşturduğunu bilin.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Bir ulaşım (Uçuş, Tren, Feribot, Otobüs, Araba) kalktığı günde Kalkış, vardığı günde Varış olarak saatiyle ve rotasıyla görünür; birkaç gün süren biri aradaki günlere yayılır.',
|
||||
'Bir ulaşım (Uçuş, Tren, Feribot, Otobüs, Araba) türüne göre renklendirilmiş bir satırdır: kalktığı günde Kalkış, vardığı günde Varış, saati ve rotasıyla; birkaç gün süren biri aradaki günlere yayılır. Satıra tıklayın, rezervasyon açılır.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Bir durağa bağlı rezervasyon (bir Restoran, bir Tur) o durağı Rezervasyon onaylandı ya da Rezervasyon beklemede olarak işaretler; günü olan ama durağı olmayan bir rezervasyon günde kendi satırıdır.',
|
||||
'Bir durağa bağlı rezervasyon (bir Restoran, bir Tur) o durakta bir Rezervasyon rozetidir; onaylandığında yeşil, beklemedeyken kehribar rengidir ve saatini gösterir. Günü olan ama durağı olmayan bir rezervasyon günde kendi satırıdır.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Otelde bir gece bir konaklamadır: günün ayrıntı panelinde Konaklama altında, Giriş saatinden Çıkış saatine kadar oturur ve o günlerin her birinin rotası oradan başlar.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Haritada, bir ulaşım satırındaki düğme onun rotasını çizer; araç çubuğundaki Tüm rezervasyon rotalarını göster hepsini çizer.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Oluşturma: üzerine gelinen bir durakta Rezervasyon ekle, gün başlığında Ulaşım ekle ve Toplu taşıma, içe aktarma ve dosyalarla tam liste için de Rezervasyonlar ve Ulaşım sekmeleri.',
|
||||
'Oluşturma: üzerine gelinen bir durakta Rezervasyon ekle, günün + menüsünde Ulaşım ekle ve Toplu taşıma, içe aktarma ve dosyalarla tam liste için de Rezervasyonlar ve Ulaşım sekmeleri.',
|
||||
'help.guide.bookings-in-plan.result': 'Bir rezervasyon, planda bir yer; sekmeler aynı rezervasyonların liste hali.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
'Onaylandı ve Askıda olması, rezervasyona sizin verdiğiniz durumlardır; plan bunları durakta gösterir, Rezervasyonlar sekmesi ikisini de sayar.',
|
||||
@@ -2156,24 +2158,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Yerler sütununda bir satıra, bir günün içindeki bir durağa ya da haritadaki bir işaretçiye tıklayın, kart haritanın üzerinde açılır. Onu günün içinden seçmek karta hangi durağı kastettiğinizi söyler, durağın katılımcılarını ve rezervasyonunu da beraberinde getiren budur.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Baş kısım yuvarlak görseli, adı, kategoriyi, adresi ve koordinatları taşır. Kendi görselinizi kullanmak için görsele tıklayın, yeri yerinde yeniden adlandırmak için ada çift tıklayın, sağdaki X ise kartı kapatır.',
|
||||
'Baş kısım yuvarlak görseli, adı, tek satırda adresi ve bilinenler için etiketleri taşır: açık ya da kapalı, kategori, fiyat, telefon numarası ve koordinatlar. Kendi görselinizi kullanmak için görsele tıklayın, yeri yerinde yeniden adlandırmak için ada çift tıklayın, sağdaki X ise kartı kapatır.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Altında: varsa fiyat, her gezginin yere verdiği yıldızlar, açıklama ve notlar, ve durak bir tane taşıyorsa Bu gün için notlar.',
|
||||
'Altında: her gezginin yere verdiği yıldızlar, açıklama ve notlar, ve durak bir tane taşıyorsa Bu gün için notlar.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Geçerli oldukları ölçüde Açılış Saatleri, İz rengi, İstatistikleri Takip Et ve Dosyalar gelir. Dosyalar klasörlerinizden her şeyi alır ve bu durağın rezervasyonunda asılı olanı da listeler.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Alttaki satır: bir gün açıkken Güne Ekle ya da Günden Kaldır, sonra Koleksiyona kaydet, Navigasyon, Web Sitesini Aç, Düzenle ve Sil.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Aramadan seçilen bir yer, TREK dizininin ya da OpenStreetMap’in onun hakkında bildiklerini taşır: görselin çevresinde, yerin kendi saatine göre yargılanan yeşil bir Açık ya da kırmızı bir Kapalı halkası, yıldızların altında telefon numarası, daha aşağıda satırında günün çizgisi ve bir tıklamanın arkasında bütün haftayla Açılış Saatleri, ve Web Sitesini Aç arkasında web sitesi. Google’ın puanı yalnızca Google ile bulunmuş bir yerde, Google anahtarı olan bir TREK’te görünür.',
|
||||
'Aramadan seçilen bir yer, TREK dizininin ya da OpenStreetMap’in onun hakkında bildiklerini taşır: baş kısmın etiketleri arasında, yerin kendi saatine göre yargılanan Açık ya da Kapalı ve görselin çevresinde yeşil ya da kırmızı bir halka, yine bir etiket olarak telefon numarası, daha aşağıda satırında günün çizgisi ve bir tıklamanın arkasında bütün haftayla Açılış Saatleri, ve Web Sitesini Aç arkasında web sitesi. Google’ın puanı yalnızca Google ile bulunmuş bir yerde, Google anahtarı olan bir TREK’te görünür.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Kartın size bir yer hakkında anlattıkları',
|
||||
'help.guide.read-place.goal': 'Gezinin tek bir yer hakkında bildiği her şeyi tek bir kartta okuyun.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Günler sütununda okumak istediğiniz durağa tıklayın. Kart haritanın üzerinde açılır ve durak kendi gününde işaretli kalır.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Baş kısım: yuvarlak görsel, ad, adres ve tam koordinatlar. Görselin çevresinde Açık yazan yeşil ya da Kapalı yazan kırmızı bir halka, TREK saatlerini öğrendiğinde, yerin şu anda kendi saatine göre açık olup olmadığını söyler. Sağdaki X kartı yeniden kapatır.',
|
||||
'Baş kısım: yuvarlak görsel, ad ve tek satırda adres; ipucu tam adresi gösterir. Altlarındaki etiketler yerin şu anda kendi saatine göre Açık ya da Kapalı olduğunu söyler, görselin çevresinde buna uyan yeşil ya da kırmızı bir halkayla; ayrıca bir tıklamanın telefon uygulamanıza verdiği telefon numarasını ve tam koordinatları taşır. Sağdaki X kartı yeniden kapatır.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Altında her gezginin yere verdiği yıldızlar, ortalamayla ve kaç kişinin oy verdiğiyle. Kimse vermediği sürece Henüz puanlanmadı. Hemen altında, yerin varsa telefon numarası: ona tıklamak numarayı telefon uygulamanıza verir.',
|
||||
'Baş kısmın altında önce Puan gelir: her gezginin yere verdiği yıldızlar, ortalamayla ve kaç kişinin oy verdiğiyle. Kimse vermediği sürece Henüz puanlanmadı.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Sonra açıklama ve onun altında notlar. İkisi de yerin formundaki metindir, işlenmiş hâliyle: listeler, bağlantılar ve kalın yazı çalışır.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2266,18 +2268,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'Bir duraktaki rezervasyon',
|
||||
'help.guide.place-booking.goal': 'Bir durağa ait rezervasyonu okuyun, açın ve ona yeni bir tane iliştirin.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Rezervasyonun ait olduğu durağı açın. Kart, Onaylandı ya da Askıda olması ile rezervasyonun adını taşıyan bir şerit gösterir.',
|
||||
'Rezervasyonun ait olduğu durağı açın. Kart onu Rezervasyonlar altında kendi küçük kartı olarak, rezervasyonun adı ve Onaylandı ya da Askıda olması durumuyla listeler.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Şerit Tarih, Zaman ve Rezervasyon Kodu ile rezervasyonun sahip olduğu notları taşır.',
|
||||
'help.guide.place-booking.step.3': 'Şeride tıklayın. Rezervasyon haritanın üzerinde açılır.',
|
||||
'Rezervasyon kartı Tarih, Zaman ve Rezervasyon Kodu ile rezervasyonun sahip olduğu notları taşır.',
|
||||
'help.guide.place-booking.step.3': 'Rezervasyon kartına tıklayın. Rezervasyon haritanın üzerinde açılır.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Rezervasyonun altındaki Düzenle, onun kendi formunu açar. Bir rezervasyonu bir durağa iliştiren şey oradaki Gün atamasına bağla alanıdır ve burada zaten bu durağın adını verir. Formu yeniden kapatın.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Bir durak için yeni bir rezervasyon günler sütununda başlar: imleci durağın üzerine getirin ve sonundaki + işaretine tıklayın. Form Yeni Rezervasyon olarak, ona bağlı hâlde açılır.',
|
||||
'Bir durak için yeni bir rezervasyon günler sütununda başlar: imleci durağın üzerine getirin ve sonundaki bilet simgesi olan Rezervasyon ekle düğmesine tıklayın. Form Yeni Rezervasyon olarak, ona bağlı hâlde açılır.',
|
||||
'help.guide.place-booking.result':
|
||||
'Rezervasyon durakta asılıdır: karttadır, gündedir ve dosyaları burada da Dosyalar altında listelenir.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Şerit yalnızca rezervasyonun iliştirildiği durak için görünür. Durağı olmayan bir rezervasyon Rezervasyonlar sekmesinde yaşar.',
|
||||
'Rezervasyon kartı yalnızca rezervasyonun iliştirildiği durak için görünür. Durağı olmayan bir rezervasyon Rezervasyonlar sekmesinde yaşar.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Birkaç rezervasyon tek bir durağı paylaşabilir: öğle yemeği ve aynı kapıdan başlayan tur.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2515,7 +2517,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'En üstte günün havası. Yer adı için tahmin ifadesi, tahminin hangi yer için olduğunu adlandırır: günün ilk durağı ya da uyandığınız otel.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Rezervasyonlar o günün rezervasyonlarını listeler, her birini türü, ait olduğu durağı ve saatleriyle. Yeşil onaylandı demektir, kehribar rengi hâlâ askıda; bu bir okuma listesidir, rezervasyonlar Rezervasyonlar sekmesinde değiştirilir.',
|
||||
'Rezervasyonlar o günün rezervasyonlarını listeler, her birini türü, ait olduğu durağı ve saatleriyle. Yeşil onaylandı demektir, kehribar rengi hâlâ askıda; bir satıra tıklamak rezervasyonu açar.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Konaklama bu güne denk gelen her geceyi gösterir, gerçekleştikleri günlerde Giriş ve Çıkış yapmak ile, giriş aralığı, çıkış saati ve onay koduyla birlikte.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2548,7 +2550,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Büyük sayı günün sıcaklığıdır, yanında en düşük ve en yüksek değer ve hava durumu sözcüklerle.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Altındaki etiketler: yağış olasılığı, ne kadar yağacağı, en güçlü rüzgâr, gün doğumu ve gün batımı.',
|
||||
'Sağındaki etiketler: yağış olasılığı, ne kadar yağacağı, en güçlü rüzgâr, gün doğumu ve gün batımı.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'En altta gün saat saat, iki saatte bir: saat, simge, sıcaklık ve yağış olasılığı. Yüzde 50 üzerindeki bir saat maviye boyanır.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2579,18 +2581,18 @@ const help: TranslationStrings = {
|
||||
'Tesisin önce gezinin bir yeri olması gerekir. Onu yerler sütununda başka herhangi bir yer gibi oluşturun: seçici yalnızca orada zaten olanı sunar.',
|
||||
'help.guide.add-accommodation.step.2': 'Vardığınız günü açın ve Konaklama altında Konaklama ekle düğmesine tıklayın.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Günlere uygula, konaklamanın hangi geceleri kapsadığını söyler: solda giriş günü, sağda çıkış günü. Tüm bütün geziyi kapsar.',
|
||||
'Günlere uygula, konaklamanın hangi geceleri kapsadığını söyler: Başlangıç giriş günü, Bitiş çıkış günüdür, Tüm ise bütün geziyi kapsar. İletişim kutusunun başı tarih aralığını ve gece sayısını gösterir.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Giriş, Kadar ve Çıkış yapmak alanlarını doldurun ve rezervasyonun numarasını Onay kodu altına yazın. Dördü de boş kalabilir.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Tesisi gezinin yerlerinden seçin. Listenin üstündeki etiketler onu tek bir kategoriye daraltır.',
|
||||
'Tesisi gezinin yerlerinden seçin. Listenin üstündeki Kategori onu tek bir kategoriye daraltır.',
|
||||
'help.guide.add-accommodation.step.6': 'Kaydet düğmesine tıklayın.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Konaklama kapsadığı her günde görünür, ilkinde Giriş ve sonuncusunda Çıkış yapmak ile. Tesis giriş gününde bir durak olur, böylece harita oraya giden yolu çizer ve Rezervasyonlar sekmesinde Konaklama türünde bir rezervasyon belirir.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Seçici geldiğiniz günde açılır, çıkış ertesi günde; kaydetmeden önce ikisi de taşınabilir.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Oteli oluştururken ona gezinin Hotel kategorisini verin, listenin üstündeki etiketler onu tek tıkla otellerinize daraltsın.',
|
||||
'Oteli oluştururken ona gezinin Hotel kategorisini verin, listenin üstündeki Kategori onu tek tıkla otellerinize daraltsın.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Saatlerin hepsi isteğe bağlıdır: girişi ve kodu olmayan bir konaklama yine gecelerini kapsar ve yine rotasını çizer.',
|
||||
// edit-accommodation
|
||||
@@ -2602,7 +2604,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Sağındaki kalem konaklamayı yeniden açar. Pencere artık Konaklamayı düzenle yazar.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Alanlar satırını düzeltin: Giriş, Kadar, Çıkış yapmak ve Onay kodu. Üstündeki günler ve altındaki tesis de burada değiştirilebilir.',
|
||||
'Giriş, Kadar, Çıkış yapmak ve Onay kodu alanlarını düzeltin. Üstlerindeki günler ve alttaki tesis de burada değiştirilebilir.',
|
||||
'help.guide.edit-accommodation.step.4': 'Kaydet düğmesine tıklayın.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'Kalemin yanındaki X konaklamayı bitirir. Hiçbir şey sormaz ve ona ait Konaklama türündeki rezervasyon da onunla gider.',
|
||||
@@ -2618,7 +2620,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Rezervasyonlar günün rezervasyonlarını listeler: tarihi o güne düşenleri ve duraklarından birine bağlı olanları.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Bir satır rezervasyonun türünü, adını ve bir durağa ait olduğunda o durağı bir noktadan sonra gösterir. Saatleri sağ uçta durur.',
|
||||
'Bir satır rezervasyonun türünü, adını ve bir durağa ait olduğunda o durağı ardından gri olarak gösterir. Saatleri sağ uçta, durum noktasından önce durur.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Renk bir rezervasyonun nerede olduğunu söyler: yeşil satır onaylandı, kehribar rengi olan hâlâ askıda. Oteller bu listede değildir, aşağıda kendi blokları vardır.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Сплачено мною',
|
||||
'costs.filter.owed': 'Мені винні',
|
||||
'costs.addExpense': 'Додати витрату',
|
||||
'costs.view.label': 'Вигляд',
|
||||
'costs.view.list': 'Список',
|
||||
'costs.view.table': 'Таблиця',
|
||||
'costs.table.lockedPayer': 'Хтось уже заплатив: змінюйте суму в самій витраті, щоб баланси сходилися.',
|
||||
'costs.table.lockedCurrency': 'Введено в {currency}: змінюйте суму в самій витраті.',
|
||||
'costs.table.summary': 'Підсумок',
|
||||
'costs.table.byCategory': 'Категорія',
|
||||
'costs.table.byDate': 'День',
|
||||
'costs.table.byPayer': 'Платник',
|
||||
'costs.table.byStatus': 'Статус',
|
||||
'costs.table.noPayer': 'Платника ще немає',
|
||||
'costs.table.paid': 'Сплачено',
|
||||
'costs.table.open': 'Відкрито',
|
||||
'costs.editExpense': 'Редагувати витрату',
|
||||
'costs.noMatch': 'Жодна витрата не відповідає пошуку.',
|
||||
'costs.emptyText': 'Витрат ще немає. Додайте першу.',
|
||||
|
||||
+62
-57
@@ -1708,7 +1708,7 @@ const help: TranslationStrings = {
|
||||
'Поділитися праворуч угорі відкриває людей поїздки: учасників, гостей, посилання-запрошення та публічне посилання лише для читання.',
|
||||
'help.ctx.trip.bullet.4': 'Назва, дати, обкладинка й валюта редагуються з Мої поїздки, олівцем на картці поїздки.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Стрілки біля внутрішнього краю колонки згортають її, і карта займає місце; тонкий роздільник поруч із колонкою змінює її ширину.',
|
||||
'Язичок біля внутрішнього краю колонки згортає її, і карта займає місце; тонкий роздільник поруч із колонкою змінює її ширину.',
|
||||
'help.ctx.trip.bullet.6': 'Стрілка скасування на панелі інструментів днів повертає останню зміну плану.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Додати учасника',
|
||||
@@ -1775,8 +1775,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Звільнити місце для карти',
|
||||
'help.guide.collapse-columns.goal': 'Згорніть колонку або дайте їй більше ширини.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Натисніть стрілку біля внутрішнього краю колонки днів, щоб згорнути її; карта займає місце. Колонка місць має таку саму стрілку.',
|
||||
'help.guide.collapse-columns.step.2': 'Натисніть стрілку ще раз, щоб повернути колонку.',
|
||||
'Натисніть язичок біля внутрішнього краю колонки днів, той, що зі значком панелі, щоб згорнути колонку; карта займає місце. Колонка місць має такий самий язичок.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Згорнута колонка залишає плитку в куті карти: План для днів і Місця для місць. Натисніть на неї, щоб повернути колонку.',
|
||||
'help.guide.collapse-columns.step.3':
|
||||
'Перетягніть тонкий роздільник між колонкою й картою, щоб змінити ширину колонки.',
|
||||
'help.guide.collapse-columns.result':
|
||||
@@ -1800,26 +1801,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'Додати місце/активність угорі відкриває форму для місця, яке ви вводите або шукаєте. Поки день відкритий, кнопка читається як Нове місце, а До дня поруч створює місце одразу на тому дні.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'Імпортувати файл приймає файли .gpx, .kml і .kmz; Імпорт списку приймає спільний список Google Maps або Naver Maps. Файл можна також просто кинути на колонку.',
|
||||
'Кнопка імпорту поруч із нею пропонує Імпортувати файл для файлів .gpx, .kml і .kmz та Список Google (Імпорт списку, якщо ввімкнено й списки Naver) для списку, яким поділилися з Google Maps або Naver Maps. Файл можна також просто кинути на колонку.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Випадний список перемикає між Усі, Незаплановані, Заплановані і, щойно імпортовано трек, Треки; під ним сидять пошук, фільтр категорій і зірка для мінімальної оцінки.',
|
||||
'Під ними пошук, поруч із ним галочка, що починає виділення, і ряд фільтрів: Показати перемикає між Усі, Незаплановані, Заплановані і, щойно імпортовано трек, Треки, кожне зі своїм числом; кнопка з ярликом фільтрує за категорією, а зірка за мінімальною оцінкою.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Рядок показує картинку, назву та опис або адресу. Натисніть на нього, щоб побачити відомості про місце, перетягніть його на день або натисніть правою кнопкою, щоб отримати Редагувати, + День, Відкрити сайт, Google Maps, Зберегти в колекцію та Видалити.',
|
||||
'Рядок показує картинку, назву та опис або адресу. Натисніть на нього, щоб побачити відомості про місце, перетягніть його на день або натисніть правою кнопкою (чи на його три крапки), щоб отримати Редагувати, + День, Відкрити сайт, Google Maps, Зберегти в колекцію та Видалити.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Коли день відкритий, + наприкінці незапланованого рядка кладе місце на той день, а Заплановані перелічують лише той день, з Показати всю подорож, щоб знову розширити.',
|
||||
'Коли день відкритий, + День наприкінці незапланованого рядка кладе місце на той день, а Заплановані перелічують лише той день, з Показати всю подорож, щоб знову розширити.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Галочка в правому кінці рядка фільтрів починає виділення: кілька рядків одразу отримують нову категорію, йдуть у колекцію або видаляються.',
|
||||
'Галочка поруч із пошуком починає виділення: з панелі внизу колонки кілька рядків одразу отримують нову категорію, йдуть у колекцію, позначаються відвіданими або видаляються.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Створити місце',
|
||||
'help.guide.create-place.goal': 'Додайте місце або активність вручну, з усім, що плану треба про нього знати.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Натисніть Додати місце/активність угорі колонки місць (Нове місце, поки день відкритий). Відкривається форма.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Введіть місце вгорі в Пошук місць... і виберіть результат. Назва, Адреса, Широта, Довгота й Веб-сайт заповнюються, а Відомості про місце ліворуч показують картинки, години роботи й опис. На TREK із ключем Google під списком стоїть Не те місце? Пошукати в Google і запускає той самий пошук через Google.',
|
||||
'Введіть місце в Пошук місць... і виберіть результат. Назва в шапці діалогу, Адреса, Широта, Довгота й Веб-сайт заповнюються, а Відомості про місце ліворуч показують картинки, години роботи й опис. На TREK із ключем Google під списком стоїть Не те місце? Пошукати в Google і запускає той самий пошук через Google. Збережені місця праворуч так само пропонують місця з ваших колекцій.',
|
||||
'help.guide.create-place.step.3':
|
||||
'У Відомостях про місце натискання на картинку під Вибрати зображення робить її зображенням місця; Використати цей текст переносить опис у форму.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Перевірте поля: Назва обов’язкова; Опис і Нотатки ваші; Адреса, Широта й Довгота приходять із пошуку або вводяться; Категорія вибирає одну з категорій поїздки, а + поруч створює нову на місці; Веб-сайт приймає посилання.',
|
||||
'Перевірте, що є у формі: назва стоїть у шапці діалогу і це єдине обов’язкове поле; плашка Категорія під нею вибирає одну з категорій поїздки, а + поруч створює нову на місці. Адреса, Широта й Довгота приходять із пошуку або вводяться; Опис і Нотатки ваші; Веб-сайт приймає посилання.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Натисніть Додати. Якщо місце з такою ж назвою вже є в поїздці, форма про це каже, а кнопка перетворюється на Все одно додати.',
|
||||
'help.guide.create-place.result': 'Місце в списку й на карті, під Незаплановані, доки його не покладуть на день.',
|
||||
@@ -1838,7 +1839,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'До дня відкриває ту саму форму, що й Нове місце, тільки місце потрапляє на відкритий день тієї миті, коли ви натискаєте Додати.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Місце, яке вже існує, іде на відкритий день через + наприкінці свого рядка або правою кнопкою, + День.',
|
||||
'Місце, яке вже існує, іде на відкритий день через + День наприкінці свого рядка або правою кнопкою, + День.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Працює і навпаки, і день відкривати наперед не треба: перетягніть рядок місця зі стовпця й відпустіть на картці дня. Відпустите між двома зупинками — місце стане саме туди.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1850,12 +1851,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Знайти місце в списку',
|
||||
'help.guide.filter-places.goal': 'Звузьте колонку до місць, які вам потрібні.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Випадний список угорі перемикає між Усі, Незаплановані (ще на жодному дні), Заплановані (на дні) та Треки (імпортовані треки GPX), кожне зі своїм числом.',
|
||||
'help.guide.filter-places.step.2': 'Друкуйте в Пошук місць...; список звужується, поки ви друкуєте.',
|
||||
'Показати, випадний список під пошуком, перемикає між Усі, Незаплановані (ще на жодному дні), Заплановані (на дні) та Треки (імпортовані треки GPX), кожне зі своїм числом.',
|
||||
'help.guide.filter-places.step.2': 'Друкуйте в Пошук угорі; список звужується, поки ви друкуєте.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'Всі категорії відкривають список, де ви позначаєте одну чи кілька категорій, серед них Без категорії; Скинути фільтр унизу його скидає.',
|
||||
'Кнопка з ярликом поруч із Показати перелічує категорії: позначте одну чи кілька, серед них Без категорії. Кнопка рахує, скільки позначено, а Скинути фільтр унизу списку знімає всі позначки.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Зірка поруч задає мінімальну оцінку: 5+, 4+ і так далі показують лише місця, яким ви поставили принаймні стільки.',
|
||||
'Зірка поруч із нею задає мінімальну оцінку: 5+, 4+ і так далі показують лише місця, яким ви поставили принаймні стільки.',
|
||||
'help.guide.filter-places.result': 'Число над рядками каже, скільки місць підходить; фільтри поєднуються.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
'Коли день відкритий, Заплановані перелічують лише той день і кажуть про це: Показано лише відкритий день, з Показати всю подорож поруч.',
|
||||
@@ -1867,7 +1868,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Натисніть на рядок правою кнопкою й виберіть Редагувати, або відкрийте місце й натисніть Редагувати в його відомостях.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Змініть, що потрібно: Назва, Опис, Нотатки, Адреса, Широта й Довгота, Категорія, Веб-сайт. Відкрита з дня форма має ще Нотатки на цей день і Початок та Кінець для того дня.',
|
||||
'Змініть, що потрібно: назву й плашку Категорія в шапці діалогу, Адресу, Широту й Довготу, Опис, Нотатки та Веб-сайт. Відкрита з дня форма має ще Початок і Кінець та Нотатки на цей день.',
|
||||
'help.guide.edit-place.step.3': 'Натисніть Оновити.',
|
||||
'help.guide.edit-place.result':
|
||||
'Зміна діє скрізь, де з’являється місце: у списку, на карті та на кожному дні, де воно стоїть.',
|
||||
@@ -1881,20 +1882,21 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Натисніть на рядок правою кнопкою й виберіть Видалити, або натисніть Видалити у відомостях про місце.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Підтвердьте. Якщо в цьому місці заброньовано ніч або до нього прив’язане бронювання, питання каже, що йде разом із ним.',
|
||||
'Натисніть Видалити у вікні з питанням. Якщо в цьому місці заброньовано ніч або до нього прив’язане бронювання, питання каже, що йде разом із ним.',
|
||||
'help.guide.delete-place.result':
|
||||
'Місце зникає зі списку, з карти та з усіх днів; Відмінити на панелі інструментів над днями повертає його.',
|
||||
'help.guide.delete-place.tip.1': 'Щоб зняти місце лише з одного дня, скористайтеся на тій зупинці Прибрати з дня.',
|
||||
'help.guide.delete-place.tip.2': 'Кілька місць одразу: галочка поруч із фільтрами починає виділення.',
|
||||
'help.guide.delete-place.tip.2': 'Кілька місць одразу: галочка поруч із пошуком починає виділення.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Змінити або видалити кілька місць одразу',
|
||||
'help.guide.select-places.goal': 'Упорядкуйте список за один раз, а не місце за місцем.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Натисніть галочку в правому кінці рядка фільтрів. Рядки отримують прапорці, і з’являється панель із діями.',
|
||||
'help.guide.select-places.step.2': 'Позначте рядки або Вибрати все на панелі; панель рахує, що вибрано.',
|
||||
'Натисніть галочку поруч із полем пошуку. Рядки отримують круглі прапорці, а внизу колонки піднімається панель із діями.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Натискайте на рядки, щоб позначити їх. Вибрати все, подвійна галочка на панелі, бере кожен рядок, який залишають фільтри.',
|
||||
'help.guide.select-places.step.3':
|
||||
'Change category дає їм усім одну категорію; Зберегти в колекцію копіює їх в одну з ваших колекцій; Видалити вибране прибирає їх після підтвердження.',
|
||||
'help.guide.select-places.step.4': 'Натисніть галочку ще раз, щоб вийти з виділення.',
|
||||
'Панель рахує позначені місця. Змінити категорію дає їм усім одну категорію; Зберегти в колекцію копіює їх в одну з ваших колекцій; Видалити вибране прибирає їх після підтвердження.',
|
||||
'help.guide.select-places.step.4': 'Готово, хрестик X у кінці панелі, завершує виділення.',
|
||||
'help.guide.select-places.result':
|
||||
'Зміна діє для кожного вибраного місця; видалення можна скасувати з панелі інструментів над днями.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1904,7 +1906,8 @@ const help: TranslationStrings = {
|
||||
// import-places-file
|
||||
'help.guide.import-places-file.title': 'Імпортувати місця з файлу GPX, KML або KMZ',
|
||||
'help.guide.import-places-file.goal': 'Внесіть те, що вивантажили Google My Maps, Google Earth або GPS-трекер.',
|
||||
'help.guide.import-places-file.step.1': 'Натисніть Імпортувати файл або киньте файл у будь-яке місце колонки місць.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Натисніть кнопку імпорту поруч із кнопкою додавання й виберіть Імпортувати файл або киньте файл у будь-яке місце колонки місць.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Виберіть файл або перетягніть його в рамку. Для GPX позначте, що імпортувати: Путеві точки, Маршрути, Треки (з геометрією маршруту); для KML і KMZ Точки (Placemark) і Маршрути (LineStrings).',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1919,7 +1922,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Імпортувати спільний список Google Maps або Naver Maps',
|
||||
'help.guide.import-places-list.goal': 'Перетворіть посилання на спільний список у місця.',
|
||||
'help.guide.import-places-list.step.1': 'Натисніть Імпорт списку й виберіть Список Google або Список Naver.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Натисніть кнопку імпорту поруч із кнопкою додавання й виберіть Список Google. Якщо ввімкнено й списки Naver, пункт називається Імпорт списку, і діалог питає, який із двох.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Вставте спільне посилання списку. Посилання на маршрут у Google Maps теж працює: його зупинки стають місцями, у порядку їзди.',
|
||||
'help.guide.import-places-list.step.3': 'Натисніть Імпорт.',
|
||||
@@ -1937,31 +1941,31 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Панель інструментів угорі: Експорт (PDF, календар, GPX), Розгорнути всі дні / Згорнути всі дні, стрілка скасування, Змінити порядок днів і Показати всі маршрути бронювань.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Картка дня: номер, погода, назва, дата й вартість дня в заголовку; натисніть на заголовок, щоб відкрити день, стрілка праворуч картку згортає. Громадський транспорт, Додати транспорт і Додати нотатку теж сидять у заголовку.',
|
||||
'Картка дня: плитка з номером дня й прогнозом, назва й дата, а також плашки для заброньованої ночі, орендованого авто й вартості дня. Натисніть на шапку, щоб відкрити день, стрілка його згортає, а + відкриває меню: Додати місце в цей день, Додати проживання, Додати транспорт, Громадський транспорт і Додати нотатку.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Усередині дня: зупинки по порядку, кожна з картинкою, назвою, часом і замком на картинці; нотатки; бронювання, які належать дню; а між зупинками час у дорозі кожної ділянки.',
|
||||
'Усередині дня: зупинки по порядку, кожна з картинкою, назвою, часом, замком на картинці й прикріпленими до неї бронюваннями; нотатки; бронювання й транспорт дня, забарвлені за своїм типом; а між зупинками час у дорозі кожної ділянки. Кожен рядок має меню з трьома крапками, те саме, що відкривається правою кнопкою.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Під зупинками панель маршруту: Маршрут малює день на карті, Оптимізувати сортує зупинки, На авто / Пішки задає спосіб пересування дня, а Відкрити в Google Maps і Відкрити в CoMaps передають день далі.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Місця потрапляють на день перетягуванням рядка з колонки місць, через + на тому рядку, через Додати місце в цей день на порожньому дні або з відомостей про місце.',
|
||||
'Місця потрапляють на день перетягуванням рядка з колонки місць, через + День на тому рядку, через Додати місце в цей день із + дня або на порожньому дні, або з відомостей про місце.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'Загальна вартість унизу складає кожну зупинку й кожне бронювання з ціною, у валюті поїздки.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Прочитати день',
|
||||
'help.guide.read-day-plan.goal': 'Дізнайтеся, що вам каже кожна частина картки дня, перш ніж щось міняти.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Заголовок: номер дня, прогноз на той день, День 1 або назва, яку ви дали дню, дата й вартість дня. Натисніть на заголовок, щоб відкрити день (над картою відкриються його подробиці); стрілка праворуч згортає й розгортає картку.',
|
||||
'Шапка: плитка з номером дня й прогнозом, далі День 1 або назва, яку ви дали дню, дата й плашки для заброньованої ночі (заїзд або виїзд), орендованого авто й вартості дня. Натисніть на шапку, щоб відкрити день (над картою відкриються його подробиці); + праворуч додає місце, проживання, транспорт, поїздку громадським транспортом або нотатку, а стрілка згортає картку.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Зупинка: держак ліворуч її тягне, картинка несе замок для оптимізації маршруту, далі йдуть назва, опис і, якщо задані, Нотатки на цей день. Позначка часу показує Початок і Кінець, коли вони в зупинки є; стрілки, що з’являються біля її правого краю, рухають її вгору або вниз.',
|
||||
'Зупинка: держак ліворуч її тягне, картинка несе замок для оптимізації маршруту, далі йдуть назва, позначка часу, коли в зупинки є Початок і Кінець, опис і, якщо задані, Нотатки на цей день. Стрілки біля її правого краю рухають її вгору або вниз, а три крапки відкривають її меню.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Бронювання на дні: бронювання біля зупинки позначає зупинку як Бронювання підтверджено або Бронювання очікує, а транспорт показується як Виліт або Приліт зі своїм часом і маршрутом, з маленьким перемикачем, який малює цей маршрут на карті.',
|
||||
'Бронювання біля зупинки сидить на ній позначкою Бронювання, зеленою, коли його підтверджено, і бурштиновою, поки воно очікує, зі своїм часом і постачальником; натисніть на позначку, щоб відкрити бронювання, а кнопка маршруту поруч малює його маршрут. Транспорт стоїть окремим рядком, забарвленим за його типом, з Виліт або Приліт і своїм часом. Натисніть на бронювання, і відкриються його подробиці; Редагувати там його змінює.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Між двома зупинками з’єднувач каже, скільки ділянка триває і яка вона завдовжки, у способі пересування дня; натисніть на нього, щоб змінити спосіб для тієї однієї ділянки.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
'Панель маршруту в кінці: Маршрут малює шлях дня на карті, Оптимізувати переставляє зупинки, кнопки способу вибирають На авто або Пішки, а Відкрити в Google Maps і Відкрити в CoMaps відкривають день там.',
|
||||
'help.guide.read-day-plan.result': 'Кожен значок на картці щось означає; посібники нижче міняють кожен із них.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Натисніть на зупинку правою кнопкою заради її меню: Редагувати, Прибрати з дня, Відкрити сайт, застосунки навігації (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Зберегти в колекцію, Видалити.',
|
||||
'Натисніть на зупинку правою кнопкою або на її три крапки, щоб відкрити її меню: Редагувати, Прибрати з дня, Відкрити сайт, застосунки навігації (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), Зберегти в колекцію, Видалити.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Наведіть курсор на зупинку, і в її кінці з’явиться Додати бронювання: створене там бронювання прив’язане до цієї зупинки на цьому дні.',
|
||||
// place-onto-day
|
||||
@@ -1970,9 +1974,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Перетягніть рядок із колонки місць на картку дня. Киньте його між двома зупинками, щоб він став рівно туди, або будь-де на картку, щоб він додався в кінець.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Без перетягування: відкрийте день натисканням на його заголовок, потім натисніть + наприкінці рядка місця або натисніть на рядок правою кнопкою й виберіть + День.',
|
||||
'Без перетягування: відкрийте день натисканням на його шапку, потім натисніть + День наприкінці рядка місця або натисніть на рядок правою кнопкою й виберіть + День.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'На порожньому дні Додати місце в цей день відкриває форму місця, і нове місце потрапляє на день одразу.',
|
||||
'Додати місце в цей день, у меню + дня або на порожньому дні, відкриває форму місця, і нове місце одразу потрапляє на день.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'З відомостей про місце Додати до дня питає, до якого дня; коли день відкритий із його заголовка, До дня в колонці місць створює нове місце просто на відкритому дні.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2001,7 +2005,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.title': 'Дати зупинці час',
|
||||
'help.guide.set-stop-times.goal': 'Задайте, коли зупинка починається й закінчується, щоб день читався як розклад.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Натисніть на зупинку правою кнопкою й виберіть Редагувати. Відкрита з дня форма тримає внизу Початок і Кінець.',
|
||||
'Натисніть на зупинку правою кнопкою або на її три крапки й виберіть Редагувати. Відкрита з дня форма має Початок і Кінець для цього дня просто під розташуванням.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Введіть Початок і, якщо хочете, Кінець. Перетин за часом із: попереджає, що інша зупинка дня з часом перетинається; Кінець раніше за Початок блокує Оновити.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2039,12 +2043,12 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Додати нотатку до дня',
|
||||
'help.guide.day-note.goal': 'Тримайте нагадування, номер квитка або план Б прямо в дні.',
|
||||
'help.guide.day-note.step.1': 'Натисніть Додати нотатку в заголовку дня.',
|
||||
'help.guide.day-note.step.1': 'Натисніть + у шапці дня й виберіть Додати нотатку.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Дайте їй назву в полі Нотатка, саме її показує картка дня, а решту напишіть під Нотатка на день. Панель над текстом його форматує (Жирний, списки, посилання, цитати), а Попередній перегляд ліворуч показує картку, яка з нього вийде.',
|
||||
'Введіть назву нотатки в шапку діалогу, там, де написано Нотатка; саме її показує картка дня. Решту напишіть під Нотатка на день: панель над текстом його форматує (жирний, списки, посилання, цитати), а Попередній перегляд ліворуч показує рядок, який із цього вийде.',
|
||||
'help.guide.day-note.step.3': 'Виберіть Значок і Колір, щоб нотатка вирізнялася серед зупинок, і натисніть Додати.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Нотатка сидить у дні як зупинка: перетягніть її на місце, натисніть на неї правою кнопкою заради Редагувати й Видалити.',
|
||||
'Нотатка сидить у дні як зупинка: перетягніть її на місце, а правою кнопкою чи через її три крапки відкрийте Редагувати й Видалити.',
|
||||
'help.guide.day-note.result':
|
||||
'Нотатка є частиною дня, і в PDF теж; нотатка з часом сортується разом із зупинками з часом.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2090,15 +2094,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Читати бронювання й транспорт у плані',
|
||||
'help.guide.bookings-in-plan.goal': 'Дізнайтеся, де бронювання показується, щойно воно є, і який екран його створює.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Транспорт (Авіаквиток, Поїзд, Пором, Автобус, Автомобіль) показується в день відправлення як Виліт і в день прибуття як Приліт, з часом і маршрутом; багатоденний розтягується на дні між ними.',
|
||||
'Транспорт (Авіаквиток, Поїзд, Пором, Автобус, Автомобіль) показується рядком, забарвленим за його типом: Виліт у день відправлення, Приліт у день прибуття, з часом і маршрутом; багатоденний розтягується на дні між ними. Натисніть на рядок, і відкриється бронювання.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Бронювання, прив’язане до зупинки (Ресторан, Екскурсія), позначає ту зупинку як Бронювання підтверджено або Бронювання очікує; бронювання, у якого є день, але немає зупинки, стоїть у дні своїм рядком.',
|
||||
'Бронювання, прив’язане до зупинки (Ресторан, Екскурсія), показується на тій зупинці позначкою Бронювання, зеленою, коли його підтверджено, і бурштиновою, поки воно очікує, зі своїм часом; бронювання, у якого є день, але немає зупинки, стоїть у дні своїм рядком.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Ніч у готелі це проживання: воно сидить у панелі подробиць дня під Проживання, від Заїзду до Виїзду, і маршрут кожного з тих днів починається там.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'На карті перемикач на рядку транспорту малює його маршрут; Показати всі маршрути бронювань на панелі інструментів малює їх усі.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Створення: Додати бронювання на зупинці під курсором, Додати транспорт і Громадський транспорт у заголовку дня та вкладки Бронювання й Транспорт заради повного списку з імпортом і файлами.',
|
||||
'Створення: Додати бронювання на зупинці під курсором, Додати транспорт і Громадський транспорт у меню + дня та вкладки Бронювання й Транспорт заради повного списку з імпортом і файлами.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Одне бронювання, одне місце в плані; вкладки це ті самі бронювання у вигляді списку.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2129,24 +2133,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Натисніть на рядок у колонці місць, на зупинку всередині дня або на маркер на карті, і картка відкриється поверх карти. Вибір усередині дня каже картці, яку зупинку ви маєте на увазі, і саме це приводить із собою учасників зупинки та її бронювання.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Шапка несе круглу картинку, назву, категорію, адресу й координати. Натисніть на картинку, щоб поставити свою, двічі натисніть на назву, щоб перейменувати місце на місці, а X праворуч закриває картку.',
|
||||
'Шапка несе круглу картинку, назву, адресу в один рядок і плашки для того, що відомо: відкрито чи закрито, категорія, ціна, номер телефону й координати. Натисніть на картинку, щоб поставити свою, двічі натисніть на назву, щоб перейменувати місце на місці, а X праворуч закриває картку.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Під цим: ціна, якщо вона є, зірки, які місцю поставив кожен мандрівник, опис і нотатки, та Нотатки на цей день, коли зупинка їх несе.',
|
||||
'Під нею: зірки, які місцю поставив кожен мандрівник, опис і нотатки, та Нотатки на цей день, коли зупинка їх несе.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'Далі йдуть Години роботи, Колір маршруту, Дані маршруту й Файли, наскільки вони стосуються справи. Файли беруть будь-що з ваших тек і перелічують також те, що висить на бронюванні цієї зупинки.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Рядок унизу: Додати до дня або Прибрати з дня, поки день відкритий, далі Зберегти в колекцію, Навігація, Відкрити сайт, Редагувати й Видалити.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Місце, вибране з пошуку, несе те, що про нього знають індекс TREK або OpenStreetMap: зелене кільце Відкрито або червоне Закрито навколо картинки, за годинником самого місця, номер телефону під зірками, Години роботи нижче з годинами цього дня в рядку та всім тижнем за натисканням, і його сайт за Відкрити сайт. Рейтинг Google показується лише в місця, знайденого через Google, на TREK із ключем Google.',
|
||||
'Місце, вибране з пошуку, несе те, що про нього знають індекс TREK або OpenStreetMap: Відкрито або Закрито серед плашок шапки, із зеленим або червоним кільцем навколо картинки, за годинником самого місця, номер телефону теж плашкою, Години роботи нижче з годинами цього дня в рядку та всім тижнем за натисканням, і його сайт за Відкрити сайт. Рейтинг Google показується лише в місця, знайденого через Google, на TREK із ключем Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Що картка розповідає про місце',
|
||||
'help.guide.read-place.goal': 'Прочитайте все, що поїздка знає про одне місце, в одній картці.',
|
||||
'help.guide.read-place.step.1':
|
||||
'У колонці днів натисніть на зупинку, яку хочете прочитати. Картка відкривається поверх карти, а зупинка лишається позначеною у своєму дні.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Шапка: кругла картинка, назва, адреса й точні координати. Зелене кільце з Відкрито або червоне із Закрито навколо картинки каже, чи місце відкрите просто зараз, за його власним годинником, щойно TREK знає його години. X праворуч знову закриває картку.',
|
||||
'Шапка: кругла картинка, назва й адреса в один рядок; її підказка містить повну адресу. Плашки під ними кажуть, Відкрито чи Закрито просто зараз, за годинником самого місця, із зеленим або червоним кільцем навколо картинки в тон, і несуть номер телефону, який натискання передає вашому застосунку телефону, і точні координати. X праворуч знову закриває картку.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Під цим зірки, які місцю поставив кожен мандрівник, із середнім і числом голосів. Ще не оцінено, поки не проголосував ніхто. Одразу нижче номер телефону там, де він у місця є: натискання на нього передає номер вашому застосунку телефону.',
|
||||
'Рейтинг іде першим під шапкою: зірки, які місцю поставив кожен мандрівник, із середнім і числом голосів. Ще не оцінено, поки не проголосував ніхто.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Потім опис, а під ним нотатки. І те, і те це текст із форми місця, відмальований: списки, посилання й жирний шрифт працюють.',
|
||||
'help.guide.read-place.step.5': 'Учасники кажуть, хто йде на цю зупинку. Поки ви когось не приберете, усередині всі.',
|
||||
@@ -2239,17 +2243,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.goal':
|
||||
'Прочитайте бронювання, яке належить зупинці, відкрийте його та прикріпіть до неї нове.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Відкрийте зупинку, якій належить бронювання. Картка показує смужку з Підтверджено або Очікування і з назвою бронювання.',
|
||||
'help.guide.place-booking.step.2': 'Смужка несе Дату, Час і Код бронювання, і будь-які нотатки, які бронювання має.',
|
||||
'help.guide.place-booking.step.3': 'Натисніть на смужку. Бронювання відкривається поверх карти.',
|
||||
'Відкрийте зупинку, якій належить бронювання. Картка показує його в розділі Бронювання окремою маленькою карткою з назвою бронювання й Підтверджено або Очікування.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Картка бронювання несе Дату, Час і Код бронювання, і будь-які нотатки, які бронювання має.',
|
||||
'help.guide.place-booking.step.3': 'Натисніть на картку бронювання. Бронювання відкривається поверх карти.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'Редагувати внизу бронювання відкриває його власну форму. Бронювання до зупинки прикріплює саме Прив’язати до призначення дня в ній, і тут воно вже називає цю зупинку. Закрийте форму назад.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Нове бронювання для зупинки починається в колонці днів: наведіть на зупинку й натисніть на + у її кінці. Форма відкривається як Нове бронювання, уже пов’язана з нею.',
|
||||
'Нове бронювання для зупинки починається в колонці днів: наведіть на зупинку й натисніть Додати бронювання, квиток у її кінці. Форма відкривається як Нове бронювання, уже пов’язана з нею.',
|
||||
'help.guide.place-booking.result':
|
||||
'Бронювання висить на зупинці: воно в картці, воно в дні, і його файли перелічені тут під Файли теж.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Смужка показується лише в зупинки, до якої бронювання прикріплене. Бронювання без зупинки живе на вкладці Бронювання.',
|
||||
'Картка бронювання показується лише в зупинки, до якої бронювання прикріплене. Бронювання без зупинки живе на вкладці Бронювання.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Одну зупинку можуть ділити кілька бронювань: обід і екскурсія, яка починається від тих самих дверей.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2491,7 +2496,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Угорі погода дня. Прогноз для називає місце, якого вона стосується: першу зупинку дня або готель, у якому ви прокидаєтеся.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'Бронювання перелічують бронювання того дня, кожне з його видом, зупинкою, до якої воно належить, і часом. Зелений означає підтверджено, бурштиновий ще в очікуванні; це лише виписка, бронювання змінюють на вкладці Бронювання.',
|
||||
'Бронювання перелічують бронювання того дня, кожне з його видом, зупинкою, до якої воно належить, і часом. Зелений означає підтверджено, бурштиновий ще в очікуванні, а натискання на рядок відкриває бронювання.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'Проживання показує кожну ніч, заброньовану на цей день, із Заїзд і Виїзд у ті дні, коли вони стаються, з вікном заїзду, часом виїзду та номером підтвердження.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2525,7 +2530,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Велике число це температура дня, поруч із ним мінімум і максимум, і стан погоди словами.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Плашки під ним: ймовірність опадів, скільки їх буде, найсильніший вітер, а також схід і захід.',
|
||||
'Плашки праворуч від нього: ймовірність опадів, скільки їх буде, найсильніший вітер, а також схід і захід.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Унизу день година за годиною, кожну другу годину: час, іконка, температура та ймовірність опадів. Година понад 50 відсотків підсвічена синім.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2558,18 +2563,18 @@ const help: TranslationStrings = {
|
||||
'Об’єкт спершу має бути місцем поїздки. Створіть його в колонці місць так само, як будь-яке інше місце: вибір пропонує лише те, що вже там є.',
|
||||
'help.guide.add-accommodation.step.2': 'Відкрийте день приїзду й натисніть Додати проживання під Проживання.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'Застосувати до днів каже, які ночі покриває проживання: день заїзду ліворуч, день виїзду праворуч. Усі покриває всю поїздку.',
|
||||
'Застосувати до днів каже, які ночі покриває проживання: Початок задає день заїзду, Кінець задає день виїзду, а Усі покриває всю поїздку. Шапка діалогу показує діапазон і кількість ночей.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Заповніть Заїзд, До і Виїзд, а номер броні впишіть під Підтвердження. Усі чотири можуть лишитися порожніми.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Виберіть об’єкт із місць поїздки. Плашки над списком звужують його до однієї категорії.',
|
||||
'Виберіть об’єкт із місць поїздки. Категорія над списком звужує його до однієї категорії.',
|
||||
'help.guide.add-accommodation.step.6': 'Натисніть Зберегти.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Проживання показується в кожному дні, який воно покриває, Заїзд у першому та Виїзд в останньому. Об’єкт стає зупинкою в день заїзду, тож карта малює шлях туди, а на вкладці Бронювання з’являється бронювання виду Житло.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Вибір відкривається на дні, з якого ви прийшли, з виїздом наступного дня; і те, і те можна зсунути до збереження.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Дайте готелю при створенні категорію поїздки Hotel, і плашки над списком звузять його до ваших готелів одним натисканням.',
|
||||
'Дайте готелю при створенні категорію поїздки Hotel, і Категорія над списком звузить його до ваших готелів одним натисканням.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Час увесь необов’язковий: проживання без заїзду й без коду однаково покриває свої ночі й однаково малює свій маршрут.',
|
||||
// edit-accommodation
|
||||
@@ -2580,7 +2585,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Олівець праворуч від неї відкриває проживання знову. Вікно тепер читається Редагувати проживання.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Виправте рядок полів: Заїзд, До, Виїзд і Підтвердження. Дні над ним та об’єкт під ним теж можна змінити тут.',
|
||||
'Виправте Заїзд, До, Виїзд і Підтвердження. Дні над ними та об’єкт нижче теж можна змінити тут.',
|
||||
'help.guide.edit-accommodation.step.4': 'Натисніть Зберегти.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'X поруч з олівцем завершує проживання. Він ні про що не питає, і бронювання виду Житло, яке до нього належить, іде разом з ним.',
|
||||
@@ -2596,7 +2601,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'Бронювання перелічують бронювання дня: ті, що датовані ним, і ті, що висять на одній з його зупинок.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Рядок показує, якого виду це бронювання, його назву і, коли воно належить до зупинки, ту зупинку після крапки. Його час сидить на правому кінці.',
|
||||
'Рядок показує, якого виду це бронювання, його назву і, коли воно належить до зупинки, ту зупинку сірим після неї. Його час сидить на правому кінці, перед крапкою статусу.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Колір каже, як стоїть бронювання: зелений рядок підтверджений, бурштиновий ще в очікуванні. Готелів у цьому списку немає, у них свій блок нижче.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -126,7 +126,7 @@ const reservations: TranslationStrings = {
|
||||
'reservations.span.end': 'Кінець',
|
||||
'reservations.span.ongoing': 'Триває',
|
||||
'reservations.validation.endBeforeStart': 'Дата/час закінчення повинен бути пізніше дати/часу початку',
|
||||
'reservations.addBooking': 'Добавить бронирование',
|
||||
'reservations.addBooking': 'Додати бронювання',
|
||||
'reservations.import.title': 'Імпорт підтверджень бронювання',
|
||||
'reservations.import.cta': 'Імпортувати з файлу',
|
||||
'reservations.import.dropHere': 'Перетягніть файли підтверджень бронювання сюди або натисніть для вибору',
|
||||
|
||||
@@ -64,6 +64,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': 'Do tôi trả tiền',
|
||||
'costs.filter.owed': 'tôi nợ',
|
||||
'costs.addExpense': 'Thêm chi phí',
|
||||
'costs.view.label': 'Chế độ xem',
|
||||
'costs.view.list': 'Danh sách',
|
||||
'costs.view.table': 'Bảng',
|
||||
'costs.table.lockedPayer': 'Đã có người trả: đổi số tiền trong khoản chi để số dư luôn đúng.',
|
||||
'costs.table.lockedCurrency': 'Nhập bằng {currency}: đổi số tiền trong khoản chi.',
|
||||
'costs.table.summary': 'Tóm tắt',
|
||||
'costs.table.byCategory': 'Danh mục',
|
||||
'costs.table.byDate': 'Ngày',
|
||||
'costs.table.byPayer': 'Người trả',
|
||||
'costs.table.byStatus': 'Trạng thái',
|
||||
'costs.table.noPayer': 'Chưa có người trả',
|
||||
'costs.table.paid': 'Đã trả',
|
||||
'costs.table.open': 'Chưa trả',
|
||||
'costs.editExpense': 'Chỉnh sửa chi phí',
|
||||
'costs.noMatch': 'Không có chi phí phù hợp với tìm kiếm của bạn.',
|
||||
'costs.emptyText': 'Chưa có chi phí nào. Thêm cái đầu tiên của bạn.',
|
||||
|
||||
+60
-57
@@ -1708,7 +1708,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip.bullet.4':
|
||||
'Tiêu đề, ngày, ảnh bìa và tiền tệ được sửa từ “Chuyến đi”, bằng cây bút chì trên thẻ chuyến đi.',
|
||||
'help.ctx.trip.bullet.5':
|
||||
'Mũi tên nhỏ ở mép trong của một cột sẽ gập cột lại và bản đồ chiếm chỗ đó; vạch chia mỏng cạnh cột thay đổi độ rộng của nó.',
|
||||
'Tab nhỏ ở mép trong của một cột sẽ gập cột đó đi và bản đồ chiếm chỗ; vạch chia mỏng cạnh cột thay đổi độ rộng của nó.',
|
||||
'help.ctx.trip.bullet.6': 'Mũi tên hoàn tác trên thanh công cụ của các ngày lấy lại thay đổi gần nhất trên kế hoạch.',
|
||||
// add-member
|
||||
'help.guide.add-member.title': 'Thêm thành viên',
|
||||
@@ -1777,8 +1777,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.collapse-columns.title': 'Nhường chỗ cho bản đồ',
|
||||
'help.guide.collapse-columns.goal': 'Gập một cột lại hoặc cho nó rộng hơn.',
|
||||
'help.guide.collapse-columns.step.1':
|
||||
'Nhấp mũi tên nhỏ ở mép trong của cột các ngày để thu gọn nó; bản đồ chiếm chỗ đó. Cột địa điểm có mũi tên nhỏ giống vậy.',
|
||||
'help.guide.collapse-columns.step.2': 'Nhấp mũi tên nhỏ lần nữa để đưa cột trở lại.',
|
||||
'Nhấp tab nhỏ ở mép trong của cột các ngày, cái có biểu tượng bảng điều khiển, để gập cột đi; bản đồ chiếm chỗ đó. Cột địa điểm có tab nhỏ giống vậy.',
|
||||
'help.guide.collapse-columns.step.2':
|
||||
'Một cột đã gập để lại một ô ở góc bản đồ, “Kế hoạch” cho các ngày và “Địa điểm” cho các địa điểm. Nhấp vào ô đó để đưa cột trở lại.',
|
||||
'help.guide.collapse-columns.step.3': 'Kéo vạch chia mỏng giữa cột và bản đồ để thay đổi độ rộng của cột.',
|
||||
'help.guide.collapse-columns.result': 'Độ rộng được ghi nhớ; các cột trở lại ở trạng thái mở trong lần truy cập sau.',
|
||||
'help.guide.collapse-columns.tip.1': 'Có thể gập cả hai cột cùng lúc để chỉ xem bản đồ.',
|
||||
@@ -1802,26 +1803,26 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-places.bullet.1':
|
||||
'“Thêm địa điểm/Hoạt động” ở trên cùng mở biểu mẫu cho một địa điểm bạn gõ vào hoặc tìm kiếm. Khi một ngày đang mở, nút đó ghi “Địa điểm mới”, và “Vào ngày” bên cạnh tạo địa điểm thẳng vào ngày đó.',
|
||||
'help.ctx.trip-places.bullet.2':
|
||||
'“Nhập tập tin” nhận các tập tin .gpx, .kml và .kmz; “Nhập danh sách” nhận một danh sách Google Maps hoặc Naver Maps được chia sẻ. Bạn cũng có thể chỉ cần thả tập tin lên cột này.',
|
||||
'Nút nhập bên cạnh nó có “Nhập tập tin” cho các tập tin .gpx, .kml và .kmz, và “Danh sách Google” (“Nhập danh sách” khi danh sách Naver cũng được bật) cho một danh sách được chia sẻ từ Google Maps hoặc Naver Maps. Bạn cũng có thể chỉ cần thả tập tin lên cột này.',
|
||||
'help.ctx.trip-places.bullet.3':
|
||||
'Danh sách thả xuống chuyển giữa “Tất cả”, “Không có kế hoạch”, “Có kế hoạch” và, khi đã nhập một đường đi, “Bài hát”; bên dưới nó là ô tìm kiếm, bộ lọc danh mục và ngôi sao cho mức đánh giá tối thiểu.',
|
||||
'Bên dưới là ô tìm kiếm, cạnh đó là dấu tích để bắt đầu một lượt chọn, và một hàng bộ lọc: “Hiển thị” chuyển giữa “Tất cả”, “Không có kế hoạch”, “Có kế hoạch” và, khi đã nhập một đường đi, “Bài hát”, mỗi mục kèm số lượng; nút nhãn lọc theo danh mục và ngôi sao lọc theo mức đánh giá tối thiểu.',
|
||||
'help.ctx.trip-places.bullet.4':
|
||||
'Một hàng hiển thị hình ảnh, tên và mô tả hoặc địa chỉ. Nhấp vào đó để xem chi tiết địa điểm, kéo nó lên một ngày, hoặc nhấp chuột phải để có “Chỉnh sửa”, “+ Ngày”, “Mở trang web”, “Google Maps”, “Lưu vào Bộ sưu tập” và “Xóa bỏ”.',
|
||||
'Một hàng hiển thị hình ảnh, tên và mô tả hoặc địa chỉ. Nhấp vào đó để xem chi tiết địa điểm, kéo nó lên một ngày, hoặc nhấp chuột phải (hay nhấp ba chấm của nó) để có “Chỉnh sửa”, “+ Ngày”, “Mở trang web”, “Google Maps”, “Lưu vào Bộ sưu tập” và “Xóa bỏ”.',
|
||||
'help.ctx.trip-places.bullet.5':
|
||||
'Khi một ngày đang mở, dấu + ở cuối một hàng chưa có kế hoạch sẽ đặt địa điểm vào ngày đó, và “Có kế hoạch” chỉ liệt kê ngày đó, với “Hiện toàn bộ chuyến đi” để mở rộng trở lại.',
|
||||
'Khi một ngày đang mở, “+ Ngày” ở cuối một hàng chưa có kế hoạch sẽ đặt địa điểm vào ngày đó, và “Có kế hoạch” chỉ liệt kê ngày đó, với “Hiện toàn bộ chuyến đi” để mở rộng trở lại.',
|
||||
'help.ctx.trip-places.bullet.6':
|
||||
'Dấu tích ở đầu bên phải của hàng bộ lọc bắt đầu một lượt chọn: nhiều hàng cùng lúc nhận một danh mục mới, vào một bộ sưu tập hoặc bị xóa.',
|
||||
'Dấu tích cạnh ô tìm kiếm bắt đầu một lượt chọn: từ thanh ở chân cột, nhiều hàng cùng lúc nhận một danh mục mới, vào một bộ sưu tập, được đánh dấu đã đến hoặc bị xóa.',
|
||||
// create-place
|
||||
'help.guide.create-place.title': 'Tạo một địa điểm',
|
||||
'help.guide.create-place.goal': 'Thêm một địa điểm hoặc hoạt động bằng tay, với mọi thứ mà kế hoạch cần biết về nó.',
|
||||
'help.guide.create-place.step.1':
|
||||
'Nhấp “Thêm địa điểm/Hoạt động” ở đầu cột địa điểm (“Địa điểm mới” khi một ngày đang mở). Biểu mẫu mở ra.',
|
||||
'help.guide.create-place.step.2':
|
||||
'Gõ địa điểm vào “Tìm kiếm địa điểm...” ở trên cùng và chọn một kết quả. “Tên”, “Địa chỉ”, “Vĩ độ”, “Kinh độ” và “Trang web” được điền, và “Chi tiết địa điểm” ở bên trái hiển thị hình ảnh, giờ mở cửa và một mô tả về nó. Trên một TREK có khóa Google, “Không đúng địa điểm? Tìm trên Google” nằm dưới danh sách và chạy đúng tìm kiếm đó qua Google.',
|
||||
'Gõ địa điểm vào “Tìm kiếm địa điểm...” và chọn một kết quả. Tên ở phần đầu hộp thoại, “Địa chỉ”, “Vĩ độ”, “Kinh độ” và “Trang web” được điền, và “Chi tiết địa điểm” ở bên trái hiển thị hình ảnh, giờ mở cửa và một mô tả về nó. Trên một TREK có khóa Google, “Không đúng địa điểm? Tìm trên Google” nằm dưới danh sách và chạy đúng tìm kiếm đó qua Google. “Địa điểm đã lưu” ở bên phải đưa ra các địa điểm trong bộ sưu tập của bạn theo cùng cách đó.',
|
||||
'help.guide.create-place.step.3':
|
||||
'Trong “Chi tiết địa điểm”, một cú nhấp vào hình ảnh dưới “Chọn một hình ảnh” biến nó thành ảnh của địa điểm; “Dùng văn bản này” đưa phần mô tả sang biểu mẫu.',
|
||||
'help.guide.create-place.step.4':
|
||||
'Kiểm tra các ô: “Tên” là bắt buộc; “Miêu tả” và “Ghi chú” là của bạn; “Địa chỉ”, “Vĩ độ” và “Kinh độ” đến từ tìm kiếm hoặc do bạn gõ; “Loại” chọn một trong các danh mục của chuyến đi, và dấu + bên cạnh tạo ngay một danh mục mới; “Trang web” nhận liên kết.',
|
||||
'Kiểm tra những gì biểu mẫu chứa: tên nằm ở phần đầu hộp thoại và là ô bắt buộc duy nhất; chip “Loại” bên dưới nó chọn một trong các danh mục của chuyến đi, và dấu + bên cạnh tạo ngay một danh mục mới. “Địa chỉ”, “Vĩ độ” và “Kinh độ” đến từ tìm kiếm hoặc do bạn gõ; “Miêu tả” và “Ghi chú” là của bạn; “Trang web” nhận liên kết.',
|
||||
'help.guide.create-place.step.5':
|
||||
'Nhấp “Thêm”. Nếu một địa điểm cùng tên đã có trong chuyến đi, biểu mẫu sẽ báo và nút đổi thành “Vẫn thêm”.',
|
||||
'help.guide.create-place.result':
|
||||
@@ -1841,7 +1842,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-to-open-day.step.2':
|
||||
'“Vào ngày” mở đúng biểu mẫu như “Địa điểm mới”, chỉ khác là địa điểm rơi vào ngày đang mở ngay khi bạn nhấp “Thêm”.',
|
||||
'help.guide.place-to-open-day.step.3':
|
||||
'Một địa điểm đã có sẵn sẽ vào ngày đang mở bằng dấu + ở cuối hàng của nó, hoặc bằng nhấp chuột phải rồi “+ Ngày”.',
|
||||
'Một địa điểm đã có sẵn sẽ vào ngày đang mở bằng “+ Ngày” ở cuối hàng của nó, hoặc bằng nhấp chuột phải rồi “+ Ngày”.',
|
||||
'help.guide.place-to-open-day.step.4':
|
||||
'Chiều ngược lại cũng được, mà không cần mở ngày trước: kéo hàng của địa điểm ra khỏi cột rồi thả lên thẻ của một ngày. Thả vào giữa hai điểm dừng thì nó nằm đúng chỗ đó.',
|
||||
'help.guide.place-to-open-day.result':
|
||||
@@ -1853,12 +1854,12 @@ const help: TranslationStrings = {
|
||||
'help.guide.filter-places.title': 'Tìm một địa điểm trong danh sách',
|
||||
'help.guide.filter-places.goal': 'Thu hẹp cột lại còn những địa điểm bạn đang tìm.',
|
||||
'help.guide.filter-places.step.1':
|
||||
'Danh sách thả xuống ở trên cùng chuyển giữa “Tất cả”, “Không có kế hoạch” (chưa ở ngày nào), “Có kế hoạch” (đã ở một ngày) và “Bài hát” (các đường GPX đã nhập), mỗi mục kèm số lượng.',
|
||||
'help.guide.filter-places.step.2': 'Gõ vào “Tìm kiếm địa điểm...”; danh sách thu hẹp lại khi bạn gõ.',
|
||||
'“Hiển thị”, danh sách thả xuống dưới ô tìm kiếm, chuyển giữa “Tất cả”, “Không có kế hoạch” (chưa ở ngày nào), “Có kế hoạch” (đã ở một ngày) và “Bài hát” (các đường GPX đã nhập), mỗi mục kèm số lượng.',
|
||||
'help.guide.filter-places.step.2': 'Gõ vào “Tìm kiếm” ở trên cùng; danh sách thu hẹp lại khi bạn gõ.',
|
||||
'help.guide.filter-places.step.3':
|
||||
'“Tất cả danh mục” mở một danh sách để tích một hoặc nhiều danh mục, trong đó có “Không có danh mục”; “Xóa bộ lọc” ở dưới cùng đặt lại nó.',
|
||||
'Nút nhãn cạnh “Hiển thị” liệt kê các danh mục: tích một hoặc nhiều, trong đó có “Không có danh mục”. Nút này đếm những gì đã tích, và “Xóa bộ lọc” ở chân danh sách bỏ tất cả.',
|
||||
'help.guide.filter-places.step.4':
|
||||
'Ngôi sao bên cạnh đặt mức đánh giá tối thiểu: 5+, 4+ và cứ thế, chỉ hiện những địa điểm bạn chấm ít nhất từng đó.',
|
||||
'Ngôi sao bên cạnh nút đó đặt mức đánh giá tối thiểu: 5+, 4+ và cứ thế, chỉ hiện những địa điểm bạn chấm ít nhất từng đó.',
|
||||
'help.guide.filter-places.result':
|
||||
'Con số phía trên các hàng cho biết có bao nhiêu địa điểm khớp; các bộ lọc kết hợp với nhau.',
|
||||
'help.guide.filter-places.tip.1':
|
||||
@@ -1871,7 +1872,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-place.step.1':
|
||||
'Nhấp chuột phải vào hàng và chọn “Chỉnh sửa”, hoặc mở địa điểm và nhấp “Chỉnh sửa” trong phần chi tiết của nó.',
|
||||
'help.guide.edit-place.step.2':
|
||||
'Đổi những gì bạn cần: “Tên”, “Miêu tả”, “Ghi chú”, “Địa chỉ”, “Vĩ độ” và “Kinh độ”, “Loại”, “Trang web”. Khi mở từ một ngày, biểu mẫu còn có “Ghi chú cho ngày này” cùng “Bắt đầu” và “Kết thúc” cho ngày đó.',
|
||||
'Đổi những gì bạn cần: tên và chip “Loại” ở phần đầu hộp thoại, “Địa chỉ”, “Vĩ độ” và “Kinh độ”, “Miêu tả”, “Ghi chú” và “Trang web”. Khi mở từ một ngày, biểu mẫu còn có “Bắt đầu” và “Kết thúc” cùng “Ghi chú cho ngày này”.',
|
||||
'help.guide.edit-place.step.3': 'Nhấp “Cập nhật”.',
|
||||
'help.guide.edit-place.result': 'Thay đổi áp dụng ở mọi nơi địa điểm xuất hiện: danh sách, bản đồ và mọi ngày có nó.',
|
||||
'help.guide.edit-place.tip.1':
|
||||
@@ -1884,22 +1885,22 @@ const help: TranslationStrings = {
|
||||
'help.guide.delete-place.step.1':
|
||||
'Nhấp chuột phải vào hàng và chọn “Xóa bỏ”, hoặc nhấp “Xóa bỏ” trong phần chi tiết của địa điểm.',
|
||||
'help.guide.delete-place.step.2':
|
||||
'Xác nhận. Nếu có một đêm đã đặt tại địa điểm đó, hoặc có một đặt chỗ liên kết với nó, câu hỏi sẽ nói rõ những gì mất theo.',
|
||||
'Nhấp “Xóa bỏ” trong câu hỏi. Nếu có một đêm đã đặt tại địa điểm đó, hoặc có một đặt chỗ liên kết với nó, câu hỏi sẽ nói rõ những gì mất theo.',
|
||||
'help.guide.delete-place.result':
|
||||
'Địa điểm biến mất khỏi danh sách, bản đồ và mọi ngày; “Hoàn tác” trên thanh công cụ phía trên các ngày mang nó trở lại.',
|
||||
'help.guide.delete-place.tip.1':
|
||||
'Để bỏ một địa điểm chỉ khỏi một ngày, thay vào đó hãy dùng “Xóa khỏi ngày” trên điểm dừng đó.',
|
||||
'help.guide.delete-place.tip.2': 'Nhiều địa điểm cùng lúc: dấu tích cạnh các bộ lọc bắt đầu một lượt chọn.',
|
||||
'help.guide.delete-place.tip.2': 'Nhiều địa điểm cùng lúc: dấu tích cạnh ô tìm kiếm bắt đầu một lượt chọn.',
|
||||
// select-places
|
||||
'help.guide.select-places.title': 'Thay đổi hoặc xóa nhiều địa điểm cùng lúc',
|
||||
'help.guide.select-places.goal': 'Dọn danh sách trong một lần thay vì từng địa điểm một.',
|
||||
'help.guide.select-places.step.1':
|
||||
'Nhấp dấu tích ở đầu bên phải của hàng bộ lọc. Các hàng có thêm ô đánh dấu và một thanh với các thao tác hiện ra.',
|
||||
'Nhấp dấu tích cạnh ô tìm kiếm. Các hàng có thêm ô đánh dấu tròn, và một thanh với các thao tác trồi lên ở chân cột.',
|
||||
'help.guide.select-places.step.2':
|
||||
'Tích các hàng, hoặc “Chọn tất cả” trên thanh đó; thanh đó đếm những gì đang được chọn.',
|
||||
'Nhấp vào các hàng để tích chúng. “Chọn tất cả”, dấu tích đôi trên thanh, lấy mọi hàng mà bộ lọc còn giữ lại.',
|
||||
'help.guide.select-places.step.3':
|
||||
'“Change category” cho tất cả chúng một danh mục; “Lưu vào Bộ sưu tập” sao chép chúng vào một bộ sưu tập của bạn; “Xóa đã chọn” gỡ chúng sau một lần xác nhận.',
|
||||
'help.guide.select-places.step.4': 'Nhấp lại dấu tích để rời khỏi lượt chọn.',
|
||||
'Thanh đó đếm các địa điểm đã tích. “Đổi danh mục” cho tất cả chúng một danh mục; “Lưu vào Bộ sưu tập” sao chép chúng vào một bộ sưu tập của bạn; “Xóa đã chọn” gỡ chúng sau một lần xác nhận.',
|
||||
'help.guide.select-places.step.4': '“Xong”, dấu X ở cuối thanh, rời khỏi lượt chọn.',
|
||||
'help.guide.select-places.result':
|
||||
'Thay đổi áp dụng cho mọi địa điểm được chọn; một lần xóa có thể hoàn tác từ thanh công cụ phía trên các ngày.',
|
||||
'help.guide.select-places.tip.1':
|
||||
@@ -1910,7 +1911,8 @@ const help: TranslationStrings = {
|
||||
'help.guide.import-places-file.title': 'Nhập địa điểm từ tập tin GPX, KML hoặc KMZ',
|
||||
'help.guide.import-places-file.goal':
|
||||
'Đưa vào những gì Google My Maps, Google Earth hoặc một thiết bị theo dõi GPS đã xuất ra.',
|
||||
'help.guide.import-places-file.step.1': 'Nhấp “Nhập tập tin”, hoặc thả tập tin vào bất cứ chỗ nào trên cột địa điểm.',
|
||||
'help.guide.import-places-file.step.1':
|
||||
'Nhấp nút nhập cạnh nút thêm và chọn “Nhập tập tin”, hoặc thả tập tin vào bất cứ chỗ nào trên cột địa điểm.',
|
||||
'help.guide.import-places-file.step.2':
|
||||
'Chọn tập tin hoặc kéo nó vào ô. Với GPX, tích những gì cần nhập: “Điểm tham chiếu”, “Tuyến đường”, “Đường đi (có hình dạng đường dẫn)”; với KML và KMZ, “Điểm (Dấu vị trí)” và “Đường dẫn (LineStrings)”.',
|
||||
'help.guide.import-places-file.step.3':
|
||||
@@ -1925,7 +1927,8 @@ const help: TranslationStrings = {
|
||||
// import-places-list
|
||||
'help.guide.import-places-list.title': 'Nhập một danh sách Google Maps hoặc Naver Maps được chia sẻ',
|
||||
'help.guide.import-places-list.goal': 'Biến liên kết của một danh sách được chia sẻ thành các địa điểm.',
|
||||
'help.guide.import-places-list.step.1': 'Nhấp “Nhập danh sách” và chọn “Danh sách Google” hoặc “Danh sách Naver”.',
|
||||
'help.guide.import-places-list.step.1':
|
||||
'Nhấp nút nhập cạnh nút thêm và chọn “Danh sách Google”. Khi danh sách Naver cũng được bật, mục đó ghi “Nhập danh sách” và hộp thoại hỏi bạn chọn loại nào trong hai.',
|
||||
'help.guide.import-places-list.step.2':
|
||||
'Dán liên kết chia sẻ của danh sách. Liên kết chỉ đường của Google Maps cũng được: các điểm dừng của nó trở thành địa điểm, theo thứ tự lái xe.',
|
||||
'help.guide.import-places-list.step.3': 'Nhấp “Nhập”.',
|
||||
@@ -1943,24 +1946,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-days.bullet.1':
|
||||
'Thanh công cụ ở trên cùng: “Xuất” (PDF, lịch, GPX), “Mở rộng tất cả các ngày” / “Thu gọn tất cả các ngày”, mũi tên hoàn tác, “Sắp xếp lại ngày” và “Hiển thị tất cả lộ trình đặt chỗ”.',
|
||||
'help.ctx.trip-days.bullet.2':
|
||||
'Một thẻ ngày: số thứ tự, thời tiết, tiêu đề, ngày tháng và chi phí của ngày ở phần đầu thẻ; nhấp vào phần đầu để mở ngày đó, mũi nhọn của nó gập thẻ lại. “Giao thông công cộng”, “Thêm phương tiện di chuyển” và “Thêm ghi chú” cũng nằm ở phần đầu thẻ.',
|
||||
'Một thẻ ngày: một ô với số thứ tự ngày và dự báo thời tiết, tiêu đề và ngày tháng, cùng các chip cho đêm đã đặt, xe thuê và chi phí của ngày. Nhấp vào phần đầu để mở ngày đó, mũi nhọn gập thẻ lại, và dấu + mở một menu: “Thêm địa điểm vào ngày này”, “Thêm chỗ ở”, “Thêm phương tiện di chuyển”, “Giao thông công cộng” và “Thêm ghi chú”.',
|
||||
'help.ctx.trip-days.bullet.3':
|
||||
'Bên trong một ngày: các điểm dừng theo thứ tự, mỗi điểm có hình ảnh, tên, thời gian và một ổ khóa trên hình; các ghi chú; các đặt chỗ thuộc về ngày đó; và giữa các điểm dừng là thời gian đi của từng chặng.',
|
||||
'Bên trong một ngày: các điểm dừng theo thứ tự, mỗi điểm có hình ảnh, tên, thời gian, một ổ khóa trên hình và các đặt chỗ được ghim vào nó; các ghi chú; các đặt chỗ và phương tiện di chuyển của ngày, được tô màu theo loại; và giữa các điểm dừng là thời gian đi của từng chặng. Mỗi hàng có một menu ba chấm, giống với menu mở ra khi nhấp chuột phải.',
|
||||
'help.ctx.trip-days.bullet.4':
|
||||
'Dưới các điểm dừng là thanh lộ trình: “Chỉ đường” vẽ ngày đó lên bản đồ, “Tối ưu hóa” sắp xếp các điểm dừng, “Lái xe” / “Đi bộ” đặt phương thức di chuyển của ngày, “Mở trong Google Maps” và “Mở trong CoMaps” giao ngày đó sang ứng dụng khác.',
|
||||
'help.ctx.trip-days.bullet.5':
|
||||
'Địa điểm vào một ngày bằng cách kéo một hàng từ cột địa điểm, bằng dấu + trên hàng đó, bằng “Thêm địa điểm vào ngày này” trên một ngày trống, hoặc từ chi tiết của địa điểm.',
|
||||
'Địa điểm vào một ngày bằng cách kéo một hàng từ cột địa điểm, bằng “+ Ngày” trên hàng đó, bằng “Thêm địa điểm vào ngày này” từ dấu + của ngày hoặc trên một ngày trống, hoặc từ chi tiết của địa điểm.',
|
||||
'help.ctx.trip-days.bullet.6':
|
||||
'“Tổng chi phí” ở dưới cùng cộng mọi điểm dừng và đặt chỗ có giá, theo tiền tệ của chuyến đi.',
|
||||
// read-day-plan
|
||||
'help.guide.read-day-plan.title': 'Đọc một ngày',
|
||||
'help.guide.read-day-plan.goal': 'Biết từng phần của thẻ ngày nói gì trước khi bạn thay đổi bất cứ thứ gì.',
|
||||
'help.guide.read-day-plan.step.1':
|
||||
'Phần đầu thẻ: số thứ tự ngày, dự báo thời tiết cho ngày đó, “Ngày 1” hoặc tiêu đề bạn đặt, ngày tháng và chi phí của ngày. Nhấp vào phần đầu để mở ngày đó (bảng “Chi tiết ngày” mở ra trên bản đồ); mũi nhọn ở bên phải gập và mở thẻ.',
|
||||
'Phần đầu thẻ: một ô với số thứ tự ngày và dự báo thời tiết, rồi “Ngày 1” hoặc tiêu đề bạn đặt, ngày tháng, và các chip cho đêm đã đặt (nhận phòng hoặc trả phòng), xe thuê và chi phí của ngày. Nhấp vào phần đầu để mở ngày đó (bảng “Chi tiết ngày” mở ra trên bản đồ); dấu + bên phải thêm một địa điểm, một chỗ ở, một phương tiện di chuyển, một chuyến giao thông công cộng hoặc một ghi chú, và mũi nhọn gập thẻ lại.',
|
||||
'help.guide.read-day-plan.step.2':
|
||||
'Một điểm dừng: tay nắm ở bên trái để kéo nó, hình ảnh mang một ổ khóa dành cho việc tối ưu hóa lộ trình, rồi đến tên, mô tả và, nếu có, “Ghi chú cho ngày này”. Một huy hiệu thời gian hiển thị “Bắt đầu” và “Kết thúc” khi điểm dừng có chúng; các mũi tên hiện ra ở đầu bên phải sẽ đưa nó lên hoặc xuống.',
|
||||
'Một điểm dừng: tay nắm ở bên trái để kéo nó, hình ảnh mang một ổ khóa dành cho việc tối ưu hóa lộ trình, rồi đến tên, một huy hiệu thời gian khi điểm dừng có “Bắt đầu” và “Kết thúc”, mô tả và, nếu có, “Ghi chú cho ngày này”. Các mũi tên ở đầu bên phải đưa nó lên hoặc xuống, và ba chấm mở menu của nó.',
|
||||
'help.guide.read-day-plan.step.3':
|
||||
'Một đặt chỗ trong ngày: một đặt chỗ gắn với điểm dừng sẽ đánh dấu điểm dừng đó là “Đã xác nhận đặt chỗ” hoặc “Đang chờ đặt chỗ”, còn phương tiện di chuyển hiện ra là “Khởi hành” hoặc “Đến” cùng giờ và lộ trình của nó, với một công tắc nhỏ vẽ lộ trình đó lên bản đồ.',
|
||||
'Một đặt chỗ tại một điểm dừng nằm trên điểm dừng đó dưới dạng huy hiệu “Sự đặt chỗ”, màu xanh lá khi đã xác nhận và màu hổ phách khi còn chờ, kèm giờ và nhà cung cấp; nhấp vào huy hiệu để mở đặt chỗ, và nút lộ trình bên cạnh vẽ lộ trình của nó. Một phương tiện di chuyển là một hàng riêng, được tô màu theo loại, với “Khởi hành” hoặc “Đến” và giờ của nó. Nhấp vào một đặt chỗ thì chi tiết của nó mở ra; “Chỉnh sửa” ở đó thay đổi nó.',
|
||||
'help.guide.read-day-plan.step.4':
|
||||
'Giữa hai điểm dừng, đường nối cho biết chặng đó mất bao lâu và xa bao nhiêu, theo phương thức di chuyển của ngày; nhấp vào đó để đổi phương thức cho riêng chặng ấy.',
|
||||
'help.guide.read-day-plan.step.5':
|
||||
@@ -1968,7 +1971,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.read-day-plan.result':
|
||||
'Mọi ký hiệu trên thẻ đều có nghĩa; các hướng dẫn bên dưới thay đổi từng ký hiệu một.',
|
||||
'help.guide.read-day-plan.tip.1':
|
||||
'Nhấp chuột phải vào một điểm dừng để có menu của nó: “Chỉnh sửa”, “Xóa khỏi ngày”, “Mở trang web”, các ứng dụng dẫn đường (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), “Lưu vào Bộ sưu tập”, “Xóa bỏ”.',
|
||||
'Nhấp chuột phải vào một điểm dừng, hoặc nhấp ba chấm của nó, để có menu của nó: “Chỉnh sửa”, “Xóa khỏi ngày”, “Mở trang web”, các ứng dụng dẫn đường (Google Maps, Waze, Apple Maps, OpenStreetMap, CoMaps), “Lưu vào Bộ sưu tập”, “Xóa bỏ”.',
|
||||
'help.guide.read-day-plan.tip.2':
|
||||
'Đưa chuột lên một điểm dừng và “Thêm đặt chỗ” hiện ra ở cuối: một đặt chỗ tạo ở đó gắn với điểm dừng này trong ngày này.',
|
||||
// place-onto-day
|
||||
@@ -1978,9 +1981,9 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-onto-day.step.1':
|
||||
'Kéo một hàng từ cột địa điểm lên thẻ ngày. Thả giữa hai điểm dừng để đặt nó đúng ở đó, hoặc thả bất kỳ chỗ nào trên thẻ để thêm vào cuối.',
|
||||
'help.guide.place-onto-day.step.2':
|
||||
'Không cần kéo: mở ngày bằng cách nhấp vào phần đầu thẻ, rồi nhấp dấu + ở cuối hàng của địa điểm, hoặc nhấp chuột phải vào hàng đó và chọn “+ Ngày”.',
|
||||
'Không cần kéo: mở ngày bằng cách nhấp vào phần đầu thẻ, rồi nhấp “+ Ngày” ở cuối hàng của địa điểm, hoặc nhấp chuột phải vào hàng đó và chọn “+ Ngày”.',
|
||||
'help.guide.place-onto-day.step.3':
|
||||
'Trên một ngày trống, “Thêm địa điểm vào ngày này” mở biểu mẫu địa điểm, và địa điểm mới nằm ngay vào ngày đó.',
|
||||
'“Thêm địa điểm vào ngày này”, trong menu + của ngày hoặc trên một ngày trống, mở biểu mẫu địa điểm, và địa điểm mới nằm ngay vào ngày đó.',
|
||||
'help.guide.place-onto-day.step.4':
|
||||
'Từ chi tiết của một địa điểm, “Thêm vào ngày” hỏi bạn ngày nào; khi một ngày đang mở, “Vào ngày” ở cột địa điểm tạo một địa điểm mới ngay trong ngày đang mở.',
|
||||
'help.guide.place-onto-day.result':
|
||||
@@ -2009,7 +2012,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.set-stop-times.goal':
|
||||
'Ấn định khi nào một điểm dừng bắt đầu và kết thúc, để ngày đó đọc như một lịch trình.',
|
||||
'help.guide.set-stop-times.step.1':
|
||||
'Nhấp chuột phải vào điểm dừng và chọn “Chỉnh sửa”. Khi mở từ ngày, biểu mẫu có “Bắt đầu” và “Kết thúc” ở dưới cùng.',
|
||||
'Nhấp chuột phải vào điểm dừng, hoặc nhấp ba chấm của nó, và chọn “Chỉnh sửa”. Khi mở từ ngày, biểu mẫu có “Bắt đầu” và “Kết thúc” cho ngày đó, ngay dưới vị trí.',
|
||||
'help.guide.set-stop-times.step.2':
|
||||
'Nhập “Bắt đầu” và, nếu muốn, “Kết thúc”. “Thời gian trùng lặp với:” cảnh báo rằng một điểm dừng có giờ khác trong ngày bị trùng; một “Kết thúc” trước “Bắt đầu” sẽ chặn “Cập nhật”.',
|
||||
'help.guide.set-stop-times.step.3':
|
||||
@@ -2048,13 +2051,13 @@ const help: TranslationStrings = {
|
||||
// day-note
|
||||
'help.guide.day-note.title': 'Thêm một ghi chú vào một ngày',
|
||||
'help.guide.day-note.goal': 'Giữ một lời nhắc, một số vé hay một phương án dự phòng ngay trong ngày.',
|
||||
'help.guide.day-note.step.1': 'Nhấp “Thêm ghi chú” ở phần đầu thẻ ngày.',
|
||||
'help.guide.day-note.step.1': 'Nhấp dấu + ở phần đầu thẻ ngày và chọn “Thêm ghi chú”.',
|
||||
'help.guide.day-note.step.2':
|
||||
'Đặt tên cho nó ở mục “Ghi chú”, đó là phần mà thẻ ngày hiển thị, rồi viết phần còn lại ở mục “Ghi chú hàng ngày”. Thanh “Định dạng” phía trên định dạng văn bản (“Đậm”, “Danh sách dấu đầu dòng”, “Danh sách đánh số”, “Liên kết”, “Trích dẫn”) và “Xem trước” ở bên trái cho thấy tấm thẻ mà nó sẽ trở thành.',
|
||||
'Gõ tên ghi chú vào phần đầu hộp thoại, chỗ ghi “Ghi chú”; đó là phần mà thẻ ngày hiển thị. Viết phần còn lại ở mục “Ghi chú hàng ngày”: thanh công cụ phía trên định dạng văn bản (đậm, danh sách, liên kết, trích dẫn), và “Xem trước” ở bên trái cho thấy hàng mà nó sẽ trở thành.',
|
||||
'help.guide.day-note.step.3':
|
||||
'Chọn một “Biểu tượng” và một “Màu”, để ghi chú nổi lên giữa các điểm dừng, rồi “Thêm”.',
|
||||
'help.guide.day-note.step.4':
|
||||
'Ghi chú nằm trong ngày như một điểm dừng: kéo nó vào chỗ, nhấp chuột phải để có “Chỉnh sửa” và “Xóa bỏ”.',
|
||||
'Ghi chú nằm trong ngày như một điểm dừng: kéo nó vào chỗ, và nhấp chuột phải hoặc dùng ba chấm của nó để có “Chỉnh sửa” và “Xóa bỏ”.',
|
||||
'help.guide.day-note.result':
|
||||
'Ghi chú là một phần của ngày, có cả trong PDF; một ghi chú có giờ sẽ sắp cùng với các điểm dừng có giờ.',
|
||||
'help.guide.day-note.tip.1':
|
||||
@@ -2102,15 +2105,15 @@ const help: TranslationStrings = {
|
||||
'help.guide.bookings-in-plan.title': 'Đọc đặt chỗ và phương tiện di chuyển trong kế hoạch',
|
||||
'help.guide.bookings-in-plan.goal': 'Biết một đặt chỗ hiện ra ở đâu khi nó đã tồn tại, và màn hình nào tạo ra nó.',
|
||||
'help.guide.bookings-in-plan.step.1':
|
||||
'Một phương tiện di chuyển (chuyến bay, xe lửa, phà, xe buýt, xe hơi) hiện trong ngày khởi hành là “Khởi hành” và trong ngày tới nơi là “Đến”, kèm giờ và lộ trình; loại kéo dài nhiều ngày thì trải qua những ngày ở giữa.',
|
||||
'Một phương tiện di chuyển (chuyến bay, xe lửa, phà, xe buýt, xe hơi) là một hàng được tô màu theo loại: “Khởi hành” vào ngày đi, “Đến” vào ngày tới nơi, kèm giờ và lộ trình; loại kéo dài nhiều ngày thì trải qua những ngày ở giữa. Nhấp vào hàng thì đặt chỗ mở ra.',
|
||||
'help.guide.bookings-in-plan.step.2':
|
||||
'Một đặt chỗ gắn với một điểm dừng (một nhà hàng, một chuyến du lịch) đánh dấu điểm dừng đó là “Đã xác nhận đặt chỗ” hoặc “Đang chờ đặt chỗ”; một đặt chỗ có ngày nhưng không có điểm dừng thì thành một hàng riêng trong ngày.',
|
||||
'Một đặt chỗ gắn với một điểm dừng (một nhà hàng, một chuyến du lịch) là một huy hiệu “Sự đặt chỗ” trên điểm dừng đó, màu xanh lá khi đã xác nhận và màu hổ phách khi còn chờ, kèm giờ của nó; một đặt chỗ có ngày nhưng không có điểm dừng thì thành một hàng riêng trong ngày.',
|
||||
'help.guide.bookings-in-plan.step.3':
|
||||
'Một đêm ở khách sạn là chỗ ở: nó nằm trong bảng chi tiết của ngày, dưới mục “Chỗ ở”, từ “Nhận phòng” đến “Trả phòng”, và lộ trình của từng ngày trong số đó bắt đầu từ đấy.',
|
||||
'help.guide.bookings-in-plan.step.4':
|
||||
'Trên bản đồ, công tắc ở hàng phương tiện di chuyển vẽ lộ trình của nó; “Hiển thị tất cả lộ trình đặt chỗ” trên thanh công cụ vẽ tất cả.',
|
||||
'help.guide.bookings-in-plan.step.5':
|
||||
'Tạo mới: “Thêm đặt chỗ” trên một điểm dừng đang được trỏ chuột, “Thêm phương tiện di chuyển” và “Giao thông công cộng” ở phần đầu thẻ ngày, và các tab “Đặt chỗ” và “Di chuyển” cho danh sách đầy đủ kèm nhập dữ liệu và tệp.',
|
||||
'Tạo mới: “Thêm đặt chỗ” trên một điểm dừng đang được trỏ chuột, “Thêm phương tiện di chuyển” và “Giao thông công cộng” trong menu + của ngày, và các tab “Đặt chỗ” và “Di chuyển” cho danh sách đầy đủ kèm nhập dữ liệu và tệp.',
|
||||
'help.guide.bookings-in-plan.result':
|
||||
'Một đặt chỗ, một chỗ trong kế hoạch; các tab chính là những đặt chỗ ấy dưới dạng danh sách.',
|
||||
'help.guide.bookings-in-plan.tip.1':
|
||||
@@ -2141,24 +2144,24 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-place.bullet.1':
|
||||
'Nhấp một hàng trong cột địa điểm, một điểm dừng bên trong một ngày, hoặc một điểm đánh dấu trên bản đồ, và thẻ mở ra trên bản đồ. Chọn nó bên trong một ngày sẽ cho thẻ biết bạn muốn nói đến điểm dừng nào, và chính điều đó mang theo người tham gia của điểm dừng cùng đặt chỗ của nó.',
|
||||
'help.ctx.trip-place.bullet.2':
|
||||
'Phần đầu mang hình tròn, tên, danh mục, địa chỉ và tọa độ. Nhấp vào hình để dùng ảnh của riêng bạn, nhấp đúp vào tên để đổi tên địa điểm ngay tại chỗ, và dấu X bên phải đóng thẻ.',
|
||||
'Phần đầu mang hình tròn, tên, địa chỉ trên một dòng và các chip cho những gì đã biết: mở hay đóng cửa, danh mục, giá, số điện thoại và tọa độ. Nhấp vào hình để dùng ảnh của riêng bạn, nhấp đúp vào tên để đổi tên địa điểm ngay tại chỗ, và dấu X bên phải đóng thẻ.',
|
||||
'help.ctx.trip-place.bullet.3':
|
||||
'Bên dưới: giá nếu có, những ngôi sao mà mỗi người đi đã cho địa điểm, phần mô tả và ghi chú, cùng “Ghi chú cho ngày này” khi điểm dừng có mang nó.',
|
||||
'Bên dưới: những ngôi sao mà mỗi người đi đã cho địa điểm, phần mô tả và ghi chú, cùng “Ghi chú cho ngày này” khi điểm dừng có mang nó.',
|
||||
'help.ctx.trip-place.bullet.4':
|
||||
'“Giờ mở cửa”, “Màu đường đi”, “Theo dõi số liệu thống kê” và “Tập tin” theo sau, trong chừng mực chúng áp dụng. “Tập tin” nhận bất cứ thứ gì từ các thư mục của bạn và cũng liệt kê những gì treo trên đặt chỗ của điểm dừng này.',
|
||||
'help.ctx.trip-place.bullet.5':
|
||||
'Hàng ở dưới cùng: “Thêm vào ngày” hoặc “Xóa khỏi ngày” khi một ngày đang mở, rồi “Lưu vào Bộ sưu tập”, “Điều hướng”, “Mở trang web”, “Chỉnh sửa” và “Xóa bỏ”.',
|
||||
'help.ctx.trip-place.bullet.6':
|
||||
'Một địa điểm được chọn ra từ tìm kiếm mang theo những gì chỉ mục của TREK hoặc OpenStreetMap biết về nó: một vòng “Mở” màu xanh lá hoặc “Đã đóng” màu đỏ quanh hình ảnh, xét theo giờ của chính địa điểm, số điện thoại dưới các ngôi sao, “Giờ mở cửa” xa hơn bên dưới với dòng của ngày hôm đó trên hàng và cả tuần phía sau một cú nhấp, cùng trang web của nó phía sau “Mở trang web”. Đánh giá của Google chỉ hiện ở địa điểm tìm được qua Google, trên một TREK có khóa Google.',
|
||||
'Một địa điểm được chọn ra từ tìm kiếm mang theo những gì chỉ mục của TREK hoặc OpenStreetMap biết về nó: “Mở” hoặc “Đã đóng” trong các chip của phần đầu, với một vòng xanh lá hoặc đỏ quanh hình ảnh, xét theo giờ của chính địa điểm, số điện thoại cũng là một chip, “Giờ mở cửa” xa hơn bên dưới với dòng của ngày hôm đó trên hàng và cả tuần phía sau một cú nhấp, cùng trang web của nó phía sau “Mở trang web”. Đánh giá của Google chỉ hiện ở địa điểm tìm được qua Google, trên một TREK có khóa Google.',
|
||||
// read-place
|
||||
'help.guide.read-place.title': 'Thẻ cho bạn biết gì về một địa điểm',
|
||||
'help.guide.read-place.goal': 'Đọc mọi thứ chuyến đi biết về một địa điểm, trong một thẻ.',
|
||||
'help.guide.read-place.step.1':
|
||||
'Ở cột các ngày, nhấp vào điểm dừng bạn muốn đọc. Thẻ mở ra trên bản đồ và điểm dừng vẫn được đánh dấu trong ngày của nó.',
|
||||
'help.guide.read-place.step.2':
|
||||
'Phần đầu: hình tròn, tên, địa chỉ và tọa độ chính xác. Một vòng xanh lá với “Mở”, hoặc một vòng đỏ với “Đã đóng”, quanh hình ảnh cho biết địa điểm có đang mở cửa lúc này không, theo giờ của chính nó, một khi TREK biết giờ mở cửa của nó. Dấu X bên phải đóng thẻ lại.',
|
||||
'Phần đầu: hình tròn, tên và địa chỉ trên một dòng; chú thích khi di chuột của nó chứa toàn bộ địa chỉ. Các chip bên dưới cho biết lúc này là “Mở” hay “Đã đóng”, theo giờ của chính địa điểm, với một vòng xanh lá hoặc đỏ quanh hình ảnh tương ứng, và mang số điện thoại, mà một cú nhấp sẽ chuyển cho ứng dụng điện thoại của bạn, cùng tọa độ chính xác. Dấu X bên phải đóng thẻ lại.',
|
||||
'help.guide.read-place.step.3':
|
||||
'Bên dưới là những ngôi sao mà mỗi người đi đã cho địa điểm, kèm mức trung bình và số người đã bình chọn. “Chưa có đánh giá” khi chưa ai cho. Ngay bên dưới là số điện thoại nếu địa điểm có: một cú nhấp vào nó chuyển số cho ứng dụng điện thoại của bạn.',
|
||||
'“Đánh giá” đứng đầu tiên dưới phần đầu: những ngôi sao mà mỗi người đi đã cho địa điểm, kèm mức trung bình và số người đã bình chọn. “Chưa có đánh giá” khi chưa ai cho.',
|
||||
'help.guide.read-place.step.4':
|
||||
'Rồi đến phần mô tả và, bên dưới nó, ghi chú. Cả hai là văn bản từ biểu mẫu của địa điểm, đã được kết xuất: danh sách, liên kết và chữ đậm đều hoạt động.',
|
||||
'help.guide.read-place.step.5':
|
||||
@@ -2252,18 +2255,18 @@ const help: TranslationStrings = {
|
||||
'help.guide.place-booking.title': 'Đặt chỗ trên một điểm dừng',
|
||||
'help.guide.place-booking.goal': 'Đọc đặt chỗ thuộc về một điểm dừng, mở nó ra, và ghim một đặt chỗ mới vào đó.',
|
||||
'help.guide.place-booking.step.1':
|
||||
'Mở điểm dừng mà đặt chỗ thuộc về. Thẻ hiện một dải có “Đã xác nhận” hoặc “Chưa giải quyết” và tên của đặt chỗ.',
|
||||
'Mở điểm dừng mà đặt chỗ thuộc về. Thẻ liệt kê nó dưới “Đặt chỗ” như một thẻ nhỏ riêng, với tên của đặt chỗ và “Đã xác nhận” hoặc “Chưa giải quyết”.',
|
||||
'help.guide.place-booking.step.2':
|
||||
'Dải đó mang “Ngày”, “Thời gian” và “Mã đặt chỗ”, cùng bất kỳ ghi chú nào mà đặt chỗ có.',
|
||||
'help.guide.place-booking.step.3': 'Nhấp vào dải đó. Đặt chỗ mở ra phía trên bản đồ.',
|
||||
'Thẻ đặt chỗ mang “Ngày”, “Thời gian” và “Mã đặt chỗ”, cùng bất kỳ ghi chú nào mà đặt chỗ có.',
|
||||
'help.guide.place-booking.step.3': 'Nhấp vào thẻ đặt chỗ. Đặt chỗ mở ra phía trên bản đồ.',
|
||||
'help.guide.place-booking.step.4':
|
||||
'“Chỉnh sửa” ở chân đặt chỗ mở biểu mẫu riêng của nó. Trong đó, “Liên kết đến bài tập trong ngày” là thứ ghim một đặt chỗ vào một điểm dừng, và ở đây nó đã gọi tên điểm dừng này. Đóng biểu mẫu lại.',
|
||||
'help.guide.place-booking.step.5':
|
||||
'Một đặt chỗ mới cho một điểm dừng bắt đầu ở cột các ngày: di chuột lên điểm dừng và nhấp dấu + ở cuối nó. Biểu mẫu mở ra dưới tên “Đặt chỗ mới”, đã được liên kết sẵn với nó.',
|
||||
'Một đặt chỗ mới cho một điểm dừng bắt đầu ở cột các ngày: di chuột lên điểm dừng và nhấp “Thêm đặt chỗ”, biểu tượng vé ở cuối nó. Biểu mẫu mở ra dưới tên “Đặt chỗ mới”, đã được liên kết sẵn với nó.',
|
||||
'help.guide.place-booking.result':
|
||||
'Đặt chỗ treo trên điểm dừng: nó ở trên thẻ, nó ở trong ngày, và các tập tin của nó cũng được liệt kê dưới “Tập tin” ở đây.',
|
||||
'help.guide.place-booking.tip.1':
|
||||
'Dải đó chỉ hiện với điểm dừng mà đặt chỗ được ghim vào. Một đặt chỗ không có điểm dừng thì nằm ở tab “Đặt”.',
|
||||
'Thẻ đặt chỗ chỉ hiện với điểm dừng mà đặt chỗ được ghim vào. Một đặt chỗ không có điểm dừng thì nằm ở tab “Đặt”.',
|
||||
'help.guide.place-booking.tip.2':
|
||||
'Nhiều đặt chỗ có thể dùng chung một điểm dừng: bữa trưa và chuyến tham quan khởi hành từ cùng một cửa.',
|
||||
'help.guide.place-booking.tip.3':
|
||||
@@ -2501,7 +2504,7 @@ const help: TranslationStrings = {
|
||||
'help.ctx.trip-day-detail.bullet.3':
|
||||
'Trên cùng là thời tiết của ngày. “Dự báo cho” nêu tên nơi mà nó nói tới: điểm dừng đầu tiên của ngày, hoặc khách sạn nơi bạn thức dậy.',
|
||||
'help.ctx.trip-day-detail.bullet.4':
|
||||
'“Đặt chỗ” liệt kê các đặt chỗ của ngày đó, mỗi mục với loại của nó, điểm dừng mà nó thuộc về và giờ giấc. Màu xanh lá nghĩa là đã xác nhận, màu hổ phách là chưa giải quyết; đây chỉ là chỗ đọc, còn đặt chỗ được thay đổi trong tab “Đặt chỗ”.',
|
||||
'“Đặt chỗ” liệt kê các đặt chỗ của ngày đó, mỗi mục với loại của nó, điểm dừng mà nó thuộc về và giờ giấc. Màu xanh lá nghĩa là đã xác nhận, màu hổ phách là chưa giải quyết, và nhấp vào một hàng sẽ mở đặt chỗ đó.',
|
||||
'help.ctx.trip-day-detail.bullet.5':
|
||||
'“Chỗ ở” hiển thị mọi đêm đã đặt trên ngày này, với “Nhận phòng” và “Trả phòng” đúng vào ngày diễn ra, khung giờ nhận phòng, giờ trả phòng và số xác nhận.',
|
||||
'help.ctx.trip-day-detail.bullet.6':
|
||||
@@ -2534,7 +2537,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-weather.step.2':
|
||||
'Con số lớn là nhiệt độ của ngày, cạnh nó là mức thấp và mức cao, và tình trạng thời tiết bằng chữ.',
|
||||
'help.guide.day-weather.step.3':
|
||||
'Các chip bên dưới: xác suất mưa, lượng mưa, cơn gió mạnh nhất, cùng bình minh và hoàng hôn.',
|
||||
'Các chip ở bên phải nó: xác suất mưa, lượng mưa, cơn gió mạnh nhất, cùng bình minh và hoàng hôn.',
|
||||
'help.guide.day-weather.step.4':
|
||||
'Dưới cùng là ngày theo từng giờ, cách hai giờ một: giờ, biểu tượng, nhiệt độ và xác suất mưa. Giờ nào trên 50% thì được tô xanh.',
|
||||
'help.guide.day-weather.result':
|
||||
@@ -2567,18 +2570,18 @@ const help: TranslationStrings = {
|
||||
'Chỗ nghỉ trước hết phải là một địa điểm của chuyến đi. Hãy tạo nó trong cột địa điểm như bạn tạo bất kỳ địa điểm nào khác: bộ chọn chỉ đưa ra những gì đã có sẵn.',
|
||||
'help.guide.add-accommodation.step.2': 'Mở ngày bạn đến và nhấp “Thêm chỗ ở” dưới “Chỗ ở”.',
|
||||
'help.guide.add-accommodation.step.3':
|
||||
'“Áp dụng cho ngày” cho biết kỳ nghỉ phủ những đêm nào: ngày nhận phòng ở bên trái, ngày trả phòng ở bên phải. “Tất cả” phủ cả chuyến đi.',
|
||||
'“Áp dụng cho ngày” cho biết kỳ nghỉ phủ những đêm nào: “Bắt đầu” là ngày nhận phòng, “Kết thúc” là ngày trả phòng, và “Tất cả” phủ cả chuyến đi. Phần đầu hộp thoại hiển thị khoảng ngày và số đêm.',
|
||||
'help.guide.add-accommodation.step.4':
|
||||
'Điền “Nhận phòng”, “Cho đến khi” và “Trả phòng”, và đặt số đặt chỗ dưới “Xác nhận”. Cả bốn đều có thể để trống.',
|
||||
'help.guide.add-accommodation.step.5':
|
||||
'Chọn chỗ nghỉ từ các địa điểm của chuyến đi. Các chip phía trên danh sách thu hẹp nó về một danh mục.',
|
||||
'Chọn chỗ nghỉ từ các địa điểm của chuyến đi. “Loại” phía trên danh sách thu hẹp nó về một danh mục.',
|
||||
'help.guide.add-accommodation.step.6': 'Nhấp “Lưu”.',
|
||||
'help.guide.add-accommodation.result':
|
||||
'Kỳ nghỉ hiện trên mọi ngày nó phủ, “Nhận phòng” ở ngày đầu và “Trả phòng” ở ngày cuối. Chỗ nghỉ trở thành một điểm dừng trên ngày nhận phòng, nên bản đồ vẽ đường tới đó, và một đặt chỗ “Chỗ ở” xuất hiện trong tab “Đặt chỗ”.',
|
||||
'help.guide.add-accommodation.tip.1':
|
||||
'Bộ chọn mở ở ngày bạn vừa rời, với trả phòng vào ngày kế tiếp; cả hai đều có thể dời trước khi bạn lưu.',
|
||||
'help.guide.add-accommodation.tip.2':
|
||||
'Hãy cho khách sạn danh mục Hotel của chuyến đi khi bạn tạo nó, và các chip phía trên danh sách sẽ thu về đúng các khách sạn của bạn chỉ bằng một cú nhấp.',
|
||||
'Hãy cho khách sạn danh mục Hotel của chuyến đi khi bạn tạo nó, và “Loại” phía trên danh sách sẽ thu về đúng các khách sạn của bạn chỉ bằng một cú nhấp.',
|
||||
'help.guide.add-accommodation.tip.3':
|
||||
'Giờ giấc đều là tùy chọn: một kỳ nghỉ không có giờ nhận phòng và không có mã vẫn phủ các đêm của nó và vẫn vẽ tuyến đường của nó.',
|
||||
// edit-accommodation
|
||||
@@ -2589,7 +2592,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.edit-accommodation.step.2':
|
||||
'Cây bút chì ở bên phải nó mở lại kỳ nghỉ. Cửa sổ bật lên giờ ghi “Chỉnh sửa chỗ ở”.',
|
||||
'help.guide.edit-accommodation.step.3':
|
||||
'Sửa hàng các ô: “Nhận phòng”, “Cho đến khi”, “Trả phòng” và “Xác nhận”. Các ngày ở trên nó và chỗ nghỉ ở dưới nó cũng đổi được tại đây.',
|
||||
'Sửa “Nhận phòng”, “Cho đến khi”, “Trả phòng” và “Xác nhận”. Các ngày ở trên chúng và chỗ nghỉ ở dưới cũng đổi được tại đây.',
|
||||
'help.guide.edit-accommodation.step.4': 'Nhấp “Lưu”.',
|
||||
'help.guide.edit-accommodation.step.5':
|
||||
'Dấu X cạnh cây bút chì kết thúc kỳ nghỉ. Nó không hỏi gì, và đặt chỗ “Chỗ ở” thuộc về nó cũng đi theo.',
|
||||
@@ -2605,7 +2608,7 @@ const help: TranslationStrings = {
|
||||
'help.guide.day-bookings.step.1':
|
||||
'“Đặt chỗ” liệt kê các đặt chỗ của ngày: những cái ghi ngày đúng vào đó, và những cái treo trên một trong các điểm dừng của nó.',
|
||||
'help.guide.day-bookings.step.2':
|
||||
'Một hàng hiển thị đó là loại đặt chỗ nào, tên của nó và, khi nó thuộc về một điểm dừng, điểm dừng đó sau một dấu chấm. Giờ giấc nằm ở đầu bên phải.',
|
||||
'Một hàng hiển thị đó là loại đặt chỗ nào, tên của nó và, khi nó thuộc về một điểm dừng, điểm dừng đó màu xám theo sau. Giờ giấc nằm ở đầu bên phải, trước chấm trạng thái.',
|
||||
'help.guide.day-bookings.step.3':
|
||||
'Màu sắc cho biết một đặt chỗ đang ở đâu: hàng màu xanh lá là đã xác nhận, hàng màu hổ phách là chưa giải quyết. Khách sạn không nằm trong danh sách này, chúng có khối riêng ở bên dưới.',
|
||||
'help.guide.day-bookings.step.4':
|
||||
|
||||
@@ -63,6 +63,19 @@ const budget: TranslationStrings = {
|
||||
'costs.filter.mine': '我支付的',
|
||||
'costs.filter.owed': '他人欠我',
|
||||
'costs.addExpense': '新增支出',
|
||||
'costs.view.label': '檢視',
|
||||
'costs.view.list': '清單',
|
||||
'costs.view.table': '表格',
|
||||
'costs.table.lockedPayer': '已有人付款:請在支出中修改金額,以保持結餘正確。',
|
||||
'costs.table.lockedCurrency': '以 {currency} 輸入:請在支出中修改金額。',
|
||||
'costs.table.summary': '摘要',
|
||||
'costs.table.byCategory': '類別',
|
||||
'costs.table.byDate': '日期',
|
||||
'costs.table.byPayer': '付款人',
|
||||
'costs.table.byStatus': '狀態',
|
||||
'costs.table.noPayer': '尚無付款人',
|
||||
'costs.table.paid': '已付',
|
||||
'costs.table.open': '未付',
|
||||
'costs.editExpense': '編輯支出',
|
||||
'costs.noMatch': '沒有符合搜尋的支出。',
|
||||
'costs.emptyText': '尚無支出,新增第一筆吧。',
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user