admin: show the TREK API as its three services

The card names place search, address search and routing with what each
answers and what is left of today's allowance. Each service is a tile with
what is left as its figure, the day's use as a bar and used and limit as
badges; the state, the kind of installation, a key from the environment
and the time the count starts again sit as badges in the header. The
sources add the terrain tiles the routes take their heights from.
This commit is contained in:
Maurice
2026-10-30 16:16:09 +01:00
parent c508bb9758
commit deb125bedc
33 changed files with 644 additions and 110 deletions
@@ -39,9 +39,13 @@ describe('ServiceIdentityPanel', () => {
const bar = screen.getByRole('progressbar', { name: 'admin.trekApi.quota.service.places' });
expect(bar).toHaveAttribute('aria-valuenow', '2500');
expect(bar).toHaveAttribute('aria-valuemax', '10000');
expect(screen.getByText('2,500 / 10,000')).toBeInTheDocument();
// What is left is the figure of the tile; used and the limit sit beside it as badges.
expect(screen.getByText('7,500')).toBeInTheDocument();
expect(screen.getByText('admin.trekApi.quota.resets')).toBeInTheDocument();
expect(screen.getByText('2,500')).toBeInTheDocument();
expect(screen.getByText('10,000')).toBeInTheDocument();
expect(screen.getByText('admin.trekApi.quota.limit')).toBeInTheDocument();
// The day starts again at the same time for every service, so it is said once, in the header.
expect(screen.getAllByText('admin.trekApi.quota.resets')).toHaveLength(1);
expect(screen.queryByText(/admin\.trekApi\.quota\.hint\./)).toBeNull();
});
@@ -63,7 +67,9 @@ describe('ServiceIdentityPanel', () => {
it('FE-ADMIN-SVCID-004: a key from the environment is named, and only changed there', async () => {
serve({ ...CONNECTED, keySource: 'env', tier: 'own' });
render(<ServiceIdentityPanel />);
expect(await screen.findByText('admin.trekApi.quota.envKey')).toBeInTheDocument();
// A badge naming the variable; the sentence explaining it is its tooltip.
expect(await screen.findByText('TREK_SERVICES_KEY')).toBeInTheDocument();
expect(screen.getByText('admin.trekApi.quota.key')).toBeInTheDocument();
expect(screen.queryByRole('button', { name: 'admin.trekApi.quota.regenerate' })).toBeNull();
});
@@ -1,5 +1,5 @@
import type { ServiceAllowance, ServiceIdentityState, ServiceIdentityStatus, ServiceQuotaView } from '@trek/shared';
import { RefreshCw } from 'lucide-react';
import { MapPin, RefreshCw, Route, Search, type LucideIcon } from 'lucide-react';
import { useRef, useState } from 'react';
import { useTranslation } from '../../i18n';
import { useSettingsStore } from '../../store/settingsStore';
@@ -8,6 +8,7 @@ import { getApiErrorMessage } from '../../utils/apiError';
import { formatClockTime } from '../../utils/formatters';
import ConfirmDialog from '../shared/ConfirmDialog';
import { useToast } from '../shared/Toast';
import { FigureBadge } from '../Tours/paddle/FigureBadge';
import { useServiceIdentity } from './useServiceIdentity';
const STATE_DOT: Record<ServiceIdentityState, string> = {
@@ -18,78 +19,88 @@ const STATE_DOT: Record<ServiceIdentityState, string> = {
revoked: 'bg-danger',
};
const SERVICE_ICON: Record<string, LucideIcon> = { places: MapPin, photon: Search, valhalla: Route };
/** Below a tenth of the day left the bar turns amber, at nothing left red. */
function barTone(quota: ServiceQuotaView): string {
if (quota.remaining === 0) return 'bg-danger';
return quota.remaining < quota.limit / 10 ? 'bg-warning' : 'bg-accent';
}
function Stat({ label, value }: { label: string; value: string }) {
return (
<div className="min-w-0">
<dt className="text-caption text-content-muted">{label}</dt>
<dd className="m-0 truncate text-body font-medium tabular-nums text-content">{value}</dd>
</div>
);
function figureTone(quota: ServiceQuotaView): string {
if (quota.remaining === 0) return 'text-danger';
return quota.remaining < quota.limit / 10 ? 'text-warning' : 'text-content';
}
function QuotaMeter({ quota, label }: { quota: ServiceQuotaView; label: string }) {
const { t, locale } = useTranslation();
/** The clock time the counts start again, in the user's format; one for all services, which share the day. */
function useResetTime(status: ServiceIdentityStatus | null): string | null {
const is12h = useSettingsStore((s) => s.settings.time_format === '12h');
const number = new Intl.NumberFormat(locale);
const share = quota.limit > 0 ? Math.min(100, (quota.used / quota.limit) * 100) : 100;
const reset = new Date(quota.resetAt);
const resetAt = formatClockTime(
const at = status?.services.find((s) => s.quota)?.quota?.resetAt;
if (!at) return null;
const reset = new Date(at);
return formatClockTime(
`${String(reset.getHours()).padStart(2, '0')}:${String(reset.getMinutes()).padStart(2, '0')}`,
is12h
);
return (
<div className="flex flex-col gap-2.5">
<div
role="progressbar"
aria-label={label}
aria-valuemin={0}
aria-valuemax={quota.limit}
aria-valuenow={quota.used}
className="h-1.5 overflow-hidden rounded-full bg-surface-tertiary"
>
<div
className={`h-full rounded-full transition-[width] duration-500 ${barTone(quota)}`}
style={{ width: `${share}%` }}
/>
</div>
<dl className="m-0 grid grid-cols-3 gap-3">
<Stat
label={t('admin.trekApi.quota.used')}
value={`${number.format(quota.used)} / ${number.format(quota.limit)}`}
/>
<Stat label={t('admin.trekApi.quota.remaining')} value={number.format(quota.remaining)} />
<Stat label={t('admin.trekApi.quota.resets')} value={resetAt} />
</dl>
</div>
);
}
function rowNote(t: TranslationFn, allowance: ServiceAllowance): string | null {
function tileNote(t: TranslationFn, allowance: ServiceAllowance): string | null {
if (!allowance.inUse) return t('admin.trekApi.quota.notInUse');
return allowance.quota ? null : t('admin.trekApi.quota.unavailable');
}
/**
* One service under the key: its name, today's allowance where its host told
* it, and whether this instance asks it at all. A service not in use is
* dimmed rather than hidden, so the list reads the same on every install.
* One service under the key, as a tile: what is left today as the figure that
* matters, the day's use as a bar, used and limit as badges. A service not in
* use is dimmed rather than hidden, so the row reads the same on every install.
*/
function ServiceRow({ allowance }: { allowance: ServiceAllowance }) {
const { t } = useTranslation();
function ServiceTile({ allowance }: { allowance: ServiceAllowance }) {
const { t, locale } = useTranslation();
const number = new Intl.NumberFormat(locale);
const name = t(`admin.trekApi.quota.service.${allowance.service}`);
const note = rowNote(t, allowance);
const note = tileNote(t, allowance);
const quota = allowance.quota;
const Icon = SERVICE_ICON[allowance.service] ?? MapPin;
const share = quota && quota.limit > 0 ? Math.min(100, (quota.used / quota.limit) * 100) : 100;
return (
<li className={`flex flex-col gap-2 py-2.5 first:pt-0 last:pb-0 ${allowance.inUse ? '' : 'opacity-60'}`}>
<p className="m-0 text-caption font-medium text-content-secondary">{name}</p>
{allowance.quota && <QuotaMeter quota={allowance.quota} label={name} />}
<li
className={`flex min-w-0 flex-col gap-2.5 rounded-xl border border-edge-faint bg-surface-card p-3 shadow-sm ${allowance.inUse ? '' : 'opacity-60'}`}
>
<div className="flex min-w-0 items-center gap-2">
<span className="grid h-7 w-7 flex-none place-items-center rounded-lg bg-surface-tertiary text-content-muted">
<Icon size={14} strokeWidth={2} aria-hidden="true" />
</span>
<p className="m-0 truncate text-caption font-medium text-content-secondary">{name}</p>
</div>
{quota && (
<>
<div className="min-w-0">
<p className={`m-0 truncate text-title font-semibold tabular-nums leading-tight ${figureTone(quota)}`}>
{number.format(quota.remaining)}
</p>
<p className="m-0 text-caption text-content-muted">{t('admin.trekApi.quota.remaining')}</p>
</div>
<div
role="progressbar"
aria-label={name}
aria-valuemin={0}
aria-valuemax={quota.limit}
aria-valuenow={quota.used}
className="h-1.5 overflow-hidden rounded-full bg-surface-tertiary"
>
<div
className={`h-full rounded-full transition-[width] duration-500 ${barTone(quota)}`}
style={{ width: `${share}%` }}
/>
</div>
<div className="flex flex-wrap gap-1.5">
<FigureBadge label={t('admin.trekApi.quota.used')} value={number.format(quota.used)} />
<FigureBadge label={t('admin.trekApi.quota.limit')} value={number.format(quota.limit)} />
</div>
</>
)}
{note && <p className="m-0 text-caption leading-snug text-content-muted">{note}</p>}
</li>
);
@@ -113,6 +124,7 @@ export default function ServiceIdentityPanel({ managed = false }: { managed?: bo
const panel = useRef<HTMLElement>(null);
const { status, failed, regenerating, regenerate } = useServiceIdentity(panel);
const [confirming, setConfirming] = useState(false);
const resetAt = useResetTime(status);
const confirmRegenerate = async () => {
setConfirming(false);
@@ -131,32 +143,38 @@ export default function ServiceIdentityPanel({ managed = false }: { managed?: bo
<section
ref={panel}
aria-label={t('admin.trekApi.quota.title')}
className="flex flex-col gap-3 rounded-xl border border-edge-faint bg-surface-secondary px-3.5 py-3"
className="flex flex-col gap-3 rounded-xl border border-edge-faint bg-surface-secondary p-3"
>
<div className="flex flex-wrap items-center justify-between gap-2">
<p className="m-0 flex items-center gap-2 text-body font-medium text-content">
<p className="m-0 inline-flex h-[26px] items-center gap-2 rounded-full bg-surface-card px-2.5 text-caption font-semibold text-content shadow-sm">
<span aria-hidden="true" className={`h-2 w-2 flex-none rounded-full ${STATE_DOT[status?.state ?? 'off']}`} />
{status ? t(`admin.trekApi.quota.state.${status.state}`) : t('admin.trekApi.quota.title')}
</p>
{status?.tier && (
<span className="rounded-full border border-edge-faint bg-surface-card px-2 py-0.5 text-caption font-medium text-content-secondary">
{t(`admin.trekApi.quota.tier.${status.tier}`)}
</span>
)}
<div className="flex flex-wrap items-center gap-1.5">
{status?.tier && <FigureBadge value={t(`admin.trekApi.quota.tier.${status.tier}`)} />}
{status?.keySource === 'env' && (
<FigureBadge
label={t('admin.trekApi.quota.key')}
value="TREK_SERVICES_KEY"
info={t('admin.trekApi.quota.envKey')}
/>
)}
{resetAt && <FigureBadge label={t('admin.trekApi.quota.resets')} value={resetAt} />}
</div>
</div>
{status && status.services.length > 0 && (
<ul aria-label={t('admin.trekApi.quota.title')} className="m-0 list-none divide-y divide-edge-faint p-0">
<ul
aria-label={t('admin.trekApi.quota.title')}
className="m-0 grid list-none grid-cols-1 gap-2 p-0 sm:grid-cols-3"
>
{status.services.map((allowance) => (
<ServiceRow key={allowance.service} allowance={allowance} />
<ServiceTile key={allowance.service} allowance={allowance} />
))}
</ul>
)}
{hint && <p className="m-0 text-caption leading-snug text-content-muted">{hint}</p>}
{status?.keySource === 'env' && (
<p className="m-0 text-caption text-content-faint">{t('admin.trekApi.quota.envKey')}</p>
)}
{canRegenerate && (
<button
type="button"
@@ -1,8 +1,14 @@
import { describe, expect, it } from 'vitest';
import { TREK_API_SOURCES, trekApiFacts, trekApiFields } from './trekApiModel';
import {
TREK_API_SOURCES,
trekApiAddressFeatures,
trekApiFacts,
trekApiFields,
trekApiRoutingFeatures,
} from './trekApiModel';
// FE-TREKAPIMODEL-001 to FE-TREKAPIMODEL-003
// FE-TREKAPIMODEL-001 to FE-TREKAPIMODEL-004
const t = (key: string) => `<${key}>`;
@@ -22,10 +28,12 @@ describe('trekApiModel', () => {
]);
});
it('FE-TREKAPIMODEL-002: leads with four facts, each with a glyph', () => {
it('FE-TREKAPIMODEL-002: leads with the three services, then the terms, each with a glyph', () => {
const facts = trekApiFacts(t);
expect(facts.map((f) => f.text)).toEqual([
'<admin.trekApi.factPlaces>',
'<admin.trekApi.factAddresses>',
'<admin.trekApi.factRouting>',
'<admin.trekApi.factNoKey>',
'<admin.trekApi.factOffline>',
'<admin.trekApi.factPrivacy>',
@@ -34,6 +42,28 @@ describe('trekApiModel', () => {
});
it('FE-TREKAPIMODEL-003: names the data sources untranslated', () => {
expect(TREK_API_SOURCES).toEqual(['Overture Maps Foundation', 'OpenStreetMap', 'Wikivoyage', 'Wikimedia']);
expect(TREK_API_SOURCES).toEqual([
'Overture Maps Foundation',
'OpenStreetMap',
'Wikivoyage',
'Wikimedia',
'Mapzen Terrain Tiles',
]);
});
it('FE-TREKAPIMODEL-004: lists what the address search and the routing answer', () => {
expect(trekApiAddressFeatures(t)).toEqual([
'<admin.trekApi.addrStreets>',
'<admin.trekApi.addrTowns>',
'<admin.trekApi.addrReverse>',
'<admin.trekApi.addrLanguages>',
]);
expect(trekApiRoutingFeatures(t)).toEqual([
'<admin.trekApi.routeCar>',
'<admin.trekApi.routeBike>',
'<admin.trekApi.routeFoot>',
'<admin.trekApi.routeAvoid>',
'<admin.trekApi.routeElevation>',
]);
});
});
+33 -4
View File
@@ -1,13 +1,19 @@
import { Globe2, KeyRound, ShieldOff, WifiOff } from 'lucide-react';
import { Globe2, KeyRound, Route, Search, ShieldOff, WifiOff } from 'lucide-react';
import type { TranslationFn } from '../../types';
/**
* Proper nouns, so they are not translated. Naming them is also a licence obligation,
* not decoration: ODbL and CC BY-SA both require attribution wherever their content is
* shown.
* shown, and the terrain tiles the routes take their heights from ask to be named too.
*/
export const TREK_API_SOURCES = ['Overture Maps Foundation', 'OpenStreetMap', 'Wikivoyage', 'Wikimedia'];
export const TREK_API_SOURCES = [
'Overture Maps Foundation',
'OpenStreetMap',
'Wikivoyage',
'Wikimedia',
'Mapzen Terrain Tiles',
];
/**
* The fields a TREK Places API result carries, for the desktop card and the phone block
@@ -29,10 +35,33 @@ export function trekApiFields(t: TranslationFn): string[] {
];
}
/** The four facts the TREK Places API block leads with, each with its glyph. */
/** What the address search answers: an address typed, a town, the address of a point. */
export function trekApiAddressFeatures(t: TranslationFn): string[] {
return [
t('admin.trekApi.addrStreets'),
t('admin.trekApi.addrTowns'),
t('admin.trekApi.addrReverse'),
t('admin.trekApi.addrLanguages'),
];
}
/** What the routing does: the three ways of getting there, what a drive can avoid, the heights. */
export function trekApiRoutingFeatures(t: TranslationFn): string[] {
return [
t('admin.trekApi.routeCar'),
t('admin.trekApi.routeBike'),
t('admin.trekApi.routeFoot'),
t('admin.trekApi.routeAvoid'),
t('admin.trekApi.routeElevation'),
];
}
/** The facts the TREK API block leads with, each with its glyph: the three services first, then the terms. */
export function trekApiFacts(t: TranslationFn) {
return [
{ Icon: Globe2, text: t('admin.trekApi.factPlaces') },
{ Icon: Search, text: t('admin.trekApi.factAddresses') },
{ Icon: Route, text: t('admin.trekApi.factRouting') },
{ Icon: KeyRound, text: t('admin.trekApi.factNoKey') },
{ Icon: WifiOff, text: t('admin.trekApi.factOffline') },
{ Icon: ShieldOff, text: t('admin.trekApi.factPrivacy') },
@@ -1,7 +1,13 @@
import { useState } from 'react'
import { Check, ChevronRight, Library, X } from 'lucide-react'
import { Check, ChevronRight, Library, Route, Search, X } from 'lucide-react'
import TrekMark from '../../../components/shared/TrekMark'
import { TREK_API_SOURCES as SOURCES, trekApiFacts, trekApiFields } from '../../../components/Admin/trekApiModel'
import {
TREK_API_SOURCES as SOURCES,
trekApiAddressFeatures,
trekApiFacts,
trekApiFields,
trekApiRoutingFeatures,
} from '../../../components/Admin/trekApiModel'
import { useTranslation } from '../../../i18n'
/**
@@ -118,6 +124,18 @@ export function MTrekApiBlock() {
note={t('admin.trekApi.notIncludedNote')}
dashed
/>
<ChipGroup
icon={<Search size={13} strokeWidth={2.2} className="text-m-faint" aria-hidden />}
label={t('admin.trekApi.quota.service.photon')}
items={trekApiAddressFeatures(t)}
note={t('admin.trekApi.addressNote')}
/>
<ChipGroup
icon={<Route size={13} strokeWidth={2.2} className="text-m-faint" aria-hidden />}
label={t('admin.trekApi.quota.service.valhalla')}
items={trekApiRoutingFeatures(t)}
note={t('admin.trekApi.routingNote')}
/>
<ChipGroup
icon={<Library size={13} strokeWidth={2.2} className="text-m-faint" aria-hidden />}
label={t('admin.trekApi.sourcesLabel')}
+36 -8
View File
@@ -1,12 +1,18 @@
import React from 'react'
import { Check, Library, X } from 'lucide-react'
import { Library, MapPin, Route, Search, X } from 'lucide-react'
import TrekMark from '../../components/shared/TrekMark'
import { fs } from '../../components/shared/DialogShell'
import { StatusPill } from '../../components/Settings/settingsKit'
import FoldSummary from './FoldSummary'
import ServiceIdentityPanel from '../../components/Admin/ServiceIdentityPanel'
import type { TranslationFn } from '../../types'
import { TREK_API_SOURCES as SOURCES, trekApiFacts, trekApiFields } from '../../components/Admin/trekApiModel'
import {
TREK_API_SOURCES as SOURCES,
trekApiAddressFeatures,
trekApiFacts,
trekApiFields,
trekApiRoutingFeatures,
} from '../../components/Admin/trekApiModel'
interface TrekApiCardProps {
t: TranslationFn
@@ -14,7 +20,9 @@ interface TrekApiCardProps {
}
/**
* The TREK Places API, above the Google key because it is the alternative to it.
* The TREK API, above the Google key because it is the alternative to it: the
* place index, the address search and the routing an installation gets from
* the TREK services, each listed with what it answers.
*
* Given real weight on the page on purpose: it is what makes a key optional
* instead of expected. The weight comes from the mark, one line of type and an
@@ -28,7 +36,7 @@ interface TrekApiCardProps {
*/
const CHIP = 'rounded-full border px-2.5 py-[3px] font-medium'
/** One of the three lists under "more": an icon and a name, chips, a note. */
/** One of the lists under "more": an icon and a name, chips, a note. */
function FactGroup({ icon, title, note, children }: { icon: React.ReactNode; title: string; note: string; children: React.ReactNode }) {
return (
<div className="flex flex-col gap-2 px-3.5 py-3">
@@ -55,7 +63,7 @@ export default function TrekApiCard({ t, managed = false }: TrekApiCardProps): R
A pill beside the mark rather than a banner, so it does not shout
over the settings around it. */}
<div className="flex flex-wrap items-center justify-between gap-2">
<TrekMark className="h-7 w-auto text-content" aria-label="TREK Places API" />
<TrekMark className="h-7 w-auto text-content" aria-label="TREK API" />
<StatusPill tone="accent">{t('admin.trekApi.badgeDefault')}</StatusPill>
</div>
@@ -85,10 +93,10 @@ export default function TrekApiCard({ t, managed = false }: TrekApiCardProps): R
{/* The fields as chips rather than a paragraph. A list of what you
get is something you scan, not something you read, and a sentence
forces the reader to parse commas to answer "is the phone number
in there". */}
in there". One list per service, under the service's own name. */}
<FactGroup
icon={<Check size={14} strokeWidth={2.4} className="text-success" aria-hidden="true" />}
title={t('admin.trekApi.included')}
icon={<MapPin size={14} strokeWidth={2.2} className="text-content-muted" aria-hidden="true" />}
title={t('admin.trekApi.quota.service.places')}
note={t('admin.trekApi.includedNote')}
>
{fields.map(field => (
@@ -109,6 +117,26 @@ export default function TrekApiCard({ t, managed = false }: TrekApiCardProps): R
))}
</FactGroup>
<FactGroup
icon={<Search size={14} strokeWidth={2.2} className="text-content-muted" aria-hidden="true" />}
title={t('admin.trekApi.quota.service.photon')}
note={t('admin.trekApi.addressNote')}
>
{trekApiAddressFeatures(t).map(item => (
<li key={item} className={`${CHIP} border-edge-faint bg-surface-card text-content-secondary`}>{item}</li>
))}
</FactGroup>
<FactGroup
icon={<Route size={14} strokeWidth={2.2} className="text-content-muted" aria-hidden="true" />}
title={t('admin.trekApi.quota.service.valhalla')}
note={t('admin.trekApi.routingNote')}
>
{trekApiRoutingFeatures(t).map(item => (
<li key={item} className={`${CHIP} border-edge-faint bg-surface-card text-content-secondary`}>{item}</li>
))}
</FactGroup>
{/* Attribution, and not in the small print: the licences require the
sources to be named, and naming them is also the answer to "where
does this actually come from". */}
+16 -1
View File
@@ -142,11 +142,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK مفتوح المصدر ولسنا محايدين هنا. بهذا الحجم لا توجد التقييمات وصور المحال العادية إلا لدى Google، وهذا هو الاحتكار. الحقل موجود لانعدام البديل، لا لأننا نوصي به. عندئذ يذهب كل استعلام إلى Google.',
'admin.trekApi.tagline':
'فهرس الأماكن الخاص بـ TREK. بحث بلا مفتاح من Google ودون إدخال أي مفتاح: يحصل كل تثبيت على حصة يومية عادلة، ولا يُحسب إلا عدد الطلبات.',
'خدمات TREK الخاصة: البحث عن الأماكن والعناوين وتحديد المسارات، بلا مفتاح من Google ودون إدخال أي مفتاح. يحصل كل تثبيت على حصة يومية عادلة، ولا يُحتسب سوى عدد الطلبات.',
'admin.trekApi.factPlaces': '73.6 مليون مكان حول العالم',
'admin.trekApi.factNoKey': 'لا مفتاح لإدخاله، حصة يومية عادلة',
'admin.trekApi.factOffline': 'حِزَم الدول تعمل دون اتصال',
'admin.trekApi.factPrivacy': 'لا تُسجَّل عمليات البحث أبدًا',
'admin.trekApi.factAddresses': 'عناوين ومدن حول العالم بـ 26 لغة',
'admin.trekApi.factRouting': 'مسارات بالسيارة والدراجة وسيرًا على الأقدام مع الارتفاع',
'admin.trekApi.addrStreets': 'الشوارع وأرقام المنازل',
'admin.trekApi.addrTowns': 'المدن والمناطق',
'admin.trekApi.addrReverse': 'عنوان نقطة على الخريطة',
'admin.trekApi.addrLanguages': '26 لغة',
'admin.trekApi.addressNote': 'كل عنوان في OpenStreetMap، أثناء الكتابة ومن نقطة على الخريطة.',
'admin.trekApi.routeCar': 'بالسيارة',
'admin.trekApi.routeBike': 'بالدراجة',
'admin.trekApi.routeFoot': 'سيرًا على الأقدام',
'admin.trekApi.routeAvoid': 'تجنّب الرسوم والطرق السريعة والعبّارات',
'admin.trekApi.routeElevation': 'مخطط الارتفاع',
'admin.trekApi.routingNote': 'مسارات عبر الكوكب بأكمله، يُعاد بناؤها كل شهر من OpenStreetMap، مع الارتفاعات من بلاطات التضاريس.',
'admin.trekApi.more': 'ماذا يحتوي',
'admin.trekApi.fieldPhone': 'هاتف',
'admin.trekApi.fieldStableId': 'معرّف ثابت',
@@ -163,6 +176,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'المستخدَم',
'admin.trekApi.quota.remaining': 'المتبقي',
'admin.trekApi.quota.resets': 'إعادة الضبط عند',
'admin.trekApi.quota.limit': 'الحد',
'admin.trekApi.quota.key': 'المفتاح',
'admin.trekApi.quota.state.connected': 'متصل',
'admin.trekApi.quota.state.registering': 'جارٍ الإعداد',
'admin.trekApi.quota.state.legacy': 'الحصة المشتركة',
+16 -1
View File
@@ -155,11 +155,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK açıq mənbəlidir və biz burada bitərəf deyilik. Adi müəssisələrin reytinqləri və fotoları bu miqyasda yalnız Google-da mövcuddur və inhisar məhz budur. Bu sahə onu tövsiyə etdiyimiz üçün deyil, alternativ olmadığı üçün buradadır. Bundan sonra hər sorğu Google-a göndərilir.',
'admin.trekApi.tagline':
'TREK-in öz məkan indeksi. Google açarı olmadan və heç bir açar daxil etmədən axtarın: hər quraşdırma ədalətli gündəlik limit alır və yalnız sorğuların sayı hesablanır.',
'TREK-in öz xidmətləri: məkan axtarışı, ünvan axtarışı və marşrut, Google açarı olmadan və heç bir açar daxil etmədən. Hər quraşdırma ədalətli gündəlik limit alır və yalnız sorğuların sayı hesablanır.',
'admin.trekApi.factPlaces': 'Dünya üzrə 73,6 milyon məkan',
'admin.trekApi.factNoKey': 'Açar daxil etmək lazım deyil, ədalətli gündəlik limit',
'admin.trekApi.factOffline': 'Ölkə paketləri oflayn işləyir',
'admin.trekApi.factPrivacy': 'Axtarışlar heç vaxt qeydə alınmır',
'admin.trekApi.factAddresses': 'Dünya üzrə ünvanlar və şəhərlər, 26 dildə',
'admin.trekApi.factRouting': 'Avtomobil, velosiped və piyada marşrut, yüksəklik ilə',
'admin.trekApi.addrStreets': 'Küçələr və ev nömrələri',
'admin.trekApi.addrTowns': 'Şəhərlər və regionlar',
'admin.trekApi.addrReverse': 'Xəritədəki nöqtənin ünvanı',
'admin.trekApi.addrLanguages': '26 dil',
'admin.trekApi.addressNote': 'OpenStreetMap-dəki hər ünvan, yazdıqca və xəritədəki nöqtədən.',
'admin.trekApi.routeCar': 'Avtomobillə',
'admin.trekApi.routeBike': 'Velosipedlə',
'admin.trekApi.routeFoot': 'Piyada',
'admin.trekApi.routeAvoid': 'Ödənişli yollardan, magistrallardan və bərələrdən çəkinin',
'admin.trekApi.routeElevation': 'Yüksəklik profili',
'admin.trekApi.routingNote': 'Bütün planet üzrə marşrutlar, hər ay OpenStreetMap-dən yenidən qurulur, hündürlüklər relyef plitələrindən götürülür.',
'admin.trekApi.more': 'Nələr daxildir',
'admin.trekApi.fieldPhone': 'Telefon',
'admin.trekApi.fieldStableId': 'Sabit ID',
@@ -177,6 +190,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'İstifadə edilib',
'admin.trekApi.quota.remaining': 'Qalıb',
'admin.trekApi.quota.resets': 'Sıfırlanma vaxtı',
'admin.trekApi.quota.limit': 'Limit',
'admin.trekApi.quota.key': 'Açar',
'admin.trekApi.quota.state.connected': 'Qoşulub',
'admin.trekApi.quota.state.registering': 'Qurulur',
'admin.trekApi.quota.state.legacy': 'Ümumi hovuz',
+16 -1
View File
@@ -98,11 +98,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'O TREK é código aberto e aqui não somos neutros. Nesta escala, avaliações e fotos de estabelecimentos comuns só existem no Google, e isso é um monopólio. O campo está aqui por falta de alternativa, não porque o recomendamos. Aí cada consulta vai para o Google.',
'admin.trekApi.tagline':
'O índice de locais do próprio TREK. Pesquise sem chave do Google e sem digitar chave nenhuma: cada instalação recebe uma cota diária justa, e só o número de solicitações é contado.',
'Os serviços próprios do TREK: busca de locais, busca de endereços e rotas, sem chave do Google e sem digitar chave nenhuma. Cada instalação recebe uma cota diária justa, e só o número de solicitações é contado.',
'admin.trekApi.factPlaces': '73,6 milhões de locais no mundo',
'admin.trekApi.factNoKey': 'Nenhuma chave para digitar, cota diária justa',
'admin.trekApi.factOffline': 'Os pacotes por país funcionam offline',
'admin.trekApi.factPrivacy': 'As buscas nunca são registadas',
'admin.trekApi.factAddresses': 'Endereços e cidades no mundo todo, em 26 idiomas',
'admin.trekApi.factRouting': 'Rotas de carro, bicicleta e a pé, com altitude',
'admin.trekApi.addrStreets': 'Ruas e números',
'admin.trekApi.addrTowns': 'Cidades e regiões',
'admin.trekApi.addrReverse': 'Endereço de um ponto no mapa',
'admin.trekApi.addrLanguages': '26 idiomas',
'admin.trekApi.addressNote': 'Todos os endereços do OpenStreetMap, enquanto você digita e a partir de um ponto no mapa.',
'admin.trekApi.routeCar': 'De carro',
'admin.trekApi.routeBike': 'De bicicleta',
'admin.trekApi.routeFoot': 'A pé',
'admin.trekApi.routeAvoid': 'Evitar pedágios, rodovias e balsas',
'admin.trekApi.routeElevation': 'Perfil de elevação',
'admin.trekApi.routingNote': 'Rotas por todo o planeta, refeitas todo mês a partir do OpenStreetMap, com altitudes de blocos de terreno.',
'admin.trekApi.more': 'O que vem dentro',
'admin.trekApi.fieldPhone': 'Telefone',
'admin.trekApi.fieldStableId': 'Identificador estável',
@@ -120,6 +133,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Usado',
'admin.trekApi.quota.remaining': 'Restante',
'admin.trekApi.quota.resets': 'Reinicia às',
'admin.trekApi.quota.limit': 'Limite',
'admin.trekApi.quota.key': 'Chave',
'admin.trekApi.quota.state.connected': 'Conectado',
'admin.trekApi.quota.state.registering': 'Configurando',
'admin.trekApi.quota.state.legacy': 'Reserva compartilhada',
+16 -1
View File
@@ -105,11 +105,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
"TREK és programari lliure i aquí no som neutrals. En aquesta escala, les valoracions i les fotos de negocis corrents només existeixen a Google, i això és un monopoli. El camp hi és per manca d'alternativa, no perquè el recomanem. Llavors cada consulta va a Google.",
'admin.trekApi.tagline':
"L'índex de llocs propi de TREK. Cerca sense clau de Google i sense haver d'introduir cap clau: cada instal·lació rep una quota diària justa, i només es compta el nombre de sol·licituds.",
"Els serveis propis de TREK: cerca de llocs, cerca d'adreces i rutes, sense clau de Google i sense haver d'introduir cap clau. Cada instal·lació rep una quota diària justa, i només es compta el nombre de sol·licituds.",
'admin.trekApi.factPlaces': '73,6 milions de llocs al món',
'admin.trekApi.factNoKey': 'Cap clau per introduir, quota diària justa',
'admin.trekApi.factOffline': 'Els paquets per país funcionen sense connexió',
'admin.trekApi.factPrivacy': 'Les cerques no es registren mai',
'admin.trekApi.factAddresses': 'Adreces i poblacions de tot el món, en 26 idiomes',
'admin.trekApi.factRouting': 'Rutes en cotxe, en bici i a peu, amb altitud',
'admin.trekApi.addrStreets': 'Carrers i números',
'admin.trekApi.addrTowns': 'Poblacions i regions',
'admin.trekApi.addrReverse': "Adreça d'un punt del mapa",
'admin.trekApi.addrLanguages': '26 idiomes',
'admin.trekApi.addressNote': "Totes les adreces d'OpenStreetMap, mentre escrius i des d'un punt del mapa.",
'admin.trekApi.routeCar': 'En cotxe',
'admin.trekApi.routeBike': 'En bici',
'admin.trekApi.routeFoot': 'A peu',
'admin.trekApi.routeAvoid': 'Evita peatges, autopistes i transbordadors',
'admin.trekApi.routeElevation': "Perfil d'elevació",
'admin.trekApi.routingNote': "Rutes arreu del planeta, reconstruïdes cada mes a partir d'OpenStreetMap, amb altituds de rajoles de terreny.",
'admin.trekApi.more': 'Què hi ha a dins',
'admin.trekApi.fieldPhone': 'Telèfon',
'admin.trekApi.fieldStableId': 'Identificador estable',
@@ -127,6 +140,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Utilitzat',
'admin.trekApi.quota.remaining': 'Restant',
'admin.trekApi.quota.resets': 'Es reinicia a les',
'admin.trekApi.quota.limit': 'Límit',
'admin.trekApi.quota.key': 'Clau',
'admin.trekApi.quota.state.connected': 'Connectat',
'admin.trekApi.quota.state.registering': "S'està configurant",
'admin.trekApi.quota.state.legacy': 'Reserva compartida',
+16 -1
View File
@@ -100,11 +100,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK je otevřený software a nejsme v tom neutrální. V tomto měřítku existují hodnocení a fotografie běžných podniků jen u Googlu, a to je monopol. Pole tu je z nedostatku alternativy, ne proto, že bychom je doporučovali. Každý dotaz pak jde do Googlu.',
'admin.trekApi.tagline':
'Vlastní index míst TREK. Hledejte bez klíče Google a bez zadávání jakéhokoli klíče: každá instalace dostane férový denní limit a počítá se jen počet požadavků.',
'Vlastní služby TREK: hledání míst, hledání adres a trasy, bez klíče Google a bez zadávání jakéhokoli klíče. Každá instalace dostane férový denní limit a počítá se jen počet požadavků.',
'admin.trekApi.factPlaces': '73,6 milionu míst po celém světě',
'admin.trekApi.factNoKey': 'Žádný klíč k zadání, férový denní limit',
'admin.trekApi.factOffline': 'Balíčky zemí fungují offline',
'admin.trekApi.factPrivacy': 'Dotazy se nikdy nezaznamenávají',
'admin.trekApi.factAddresses': 'Adresy a města po celém světě, v 26 jazycích',
'admin.trekApi.factRouting': 'Trasy autem, na kole a pěšky, s nadmořskou výškou',
'admin.trekApi.addrStreets': 'Ulice a čísla domů',
'admin.trekApi.addrTowns': 'Města a regiony',
'admin.trekApi.addrReverse': 'Adresa bodu na mapě',
'admin.trekApi.addrLanguages': '26 jazyků',
'admin.trekApi.addressNote': 'Každá adresa z OpenStreetMap, již při psaní i z bodu na mapě.',
'admin.trekApi.routeCar': 'Autem',
'admin.trekApi.routeBike': 'Na kole',
'admin.trekApi.routeFoot': 'Pěšky',
'admin.trekApi.routeAvoid': 'Vyhnout se mýtným úsekům, dálnicím a trajektům',
'admin.trekApi.routeElevation': 'Výškový profil',
'admin.trekApi.routingNote': 'Trasy po celé planetě, každý měsíc znovu sestavené z OpenStreetMap, s výškami z terénních dlaždic.',
'admin.trekApi.more': 'Co v tom je',
'admin.trekApi.fieldPhone': 'Telefon',
'admin.trekApi.fieldStableId': 'Stálý identifikátor',
@@ -122,6 +135,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Využito',
'admin.trekApi.quota.remaining': 'Zbývá',
'admin.trekApi.quota.resets': 'Obnoví se v',
'admin.trekApi.quota.limit': 'Limit',
'admin.trekApi.quota.key': 'Klíč',
'admin.trekApi.quota.state.connected': 'Připojeno',
'admin.trekApi.quota.state.registering': 'Nastavuje se',
'admin.trekApi.quota.state.legacy': 'Sdílený fond',
+16 -1
View File
@@ -100,11 +100,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK ist quelloffen und wir sind hier nicht neutral. Bewertungen und Fotos gewöhnlicher Läden gibt es in dieser Größenordnung nur bei Google, und genau das ist ein Monopol. Das Feld steht hier, weil es keine Alternative gibt, nicht weil wir es empfehlen. Jede Abfrage geht dann an Google.',
'admin.trekApi.tagline':
'TREKs eigener Ortsindex. Suchen ohne Google-Schlüssel und ohne einen Schlüssel einzutragen: Jede Installation bekommt ein faires Tageskontingent, gezählt wird nur die Anzahl der Anfragen.',
'TREKs eigene Dienste: Ortssuche, Adresssuche und Routing, ohne Google-Schlüssel und ohne einen Schlüssel einzutragen. Jede Installation bekommt ein faires Tageskontingent, gezählt wird nur die Anzahl der Anfragen.',
'admin.trekApi.factPlaces': '73,6 Millionen Orte weltweit',
'admin.trekApi.factNoKey': 'Kein Schlüssel nötig, faires Tageskontingent',
'admin.trekApi.factOffline': 'Länderpakete auch offline',
'admin.trekApi.factPrivacy': 'Suchanfragen werden nie protokolliert',
'admin.trekApi.factAddresses': 'Adressen und Orte weltweit, in 26 Sprachen',
'admin.trekApi.factRouting': 'Routing mit Auto, Fahrrad und zu Fuß, mit Höhenprofil',
'admin.trekApi.addrStreets': 'Straßen und Hausnummern',
'admin.trekApi.addrTowns': 'Orte und Regionen',
'admin.trekApi.addrReverse': 'Adresse eines Punkts auf der Karte',
'admin.trekApi.addrLanguages': '26 Sprachen',
'admin.trekApi.addressNote': 'Jede Adresse aus OpenStreetMap, schon beim Tippen und von einem Punkt auf der Karte aus.',
'admin.trekApi.routeCar': 'Mit dem Auto',
'admin.trekApi.routeBike': 'Mit dem Fahrrad',
'admin.trekApi.routeFoot': 'Zu Fuß',
'admin.trekApi.routeAvoid': 'Mautstraßen, Autobahnen und Fähren meiden',
'admin.trekApi.routeElevation': 'Höhenprofil',
'admin.trekApi.routingNote': 'Routen über den ganzen Planeten, jeden Monat neu aus OpenStreetMap berechnet, mit Höhen aus Geländekacheln.',
'admin.trekApi.more': 'Was drin ist',
'admin.trekApi.fieldPhone': 'Telefon',
'admin.trekApi.fieldStableId': 'Stabile Kennung',
@@ -122,6 +135,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Verbraucht',
'admin.trekApi.quota.remaining': 'Verbleibend',
'admin.trekApi.quota.resets': 'Zurückgesetzt um',
'admin.trekApi.quota.limit': 'Limit',
'admin.trekApi.quota.key': 'Schlüssel',
'admin.trekApi.quota.state.connected': 'Verbunden',
'admin.trekApi.quota.state.registering': 'Wird eingerichtet',
'admin.trekApi.quota.state.legacy': 'Gemeinsamer Topf',
+16 -1
View File
@@ -150,11 +150,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK is open source and we are not neutral here. Ratings and photos of ordinary businesses exist at this scale only at Google, and that is what a monopoly is. The field is here because there is no alternative, not because we recommend it. Every lookup then goes to Google.',
'admin.trekApi.tagline':
"TREK's own place index. Search without a Google key and without a key to enter: every installation gets a fair daily allowance, and only the number of requests is counted.",
"TREK's own services: place search, address search and routing, without a Google key and without a key to enter. Every installation gets a fair daily allowance, and only the number of requests is counted.",
'admin.trekApi.factPlaces': '73.6 million places worldwide',
'admin.trekApi.factNoKey': 'No key to enter, fair daily allowance',
'admin.trekApi.factOffline': 'Country packages work offline',
'admin.trekApi.factPrivacy': 'Searches are never logged',
'admin.trekApi.factAddresses': 'Addresses and towns worldwide, in 26 languages',
'admin.trekApi.factRouting': 'Routing by car, bike and on foot, with elevation',
'admin.trekApi.addrStreets': 'Streets and house numbers',
'admin.trekApi.addrTowns': 'Towns and regions',
'admin.trekApi.addrReverse': 'Address of a point on the map',
'admin.trekApi.addrLanguages': '26 languages',
'admin.trekApi.addressNote': 'Every address in OpenStreetMap, as you type and from a point on the map.',
'admin.trekApi.routeCar': 'By car',
'admin.trekApi.routeBike': 'By bike',
'admin.trekApi.routeFoot': 'On foot',
'admin.trekApi.routeAvoid': 'Avoid tolls, motorways and ferries',
'admin.trekApi.routeElevation': 'Elevation profile',
'admin.trekApi.routingNote': 'Routes across the whole planet, rebuilt every month from OpenStreetMap, with heights from terrain tiles.',
'admin.trekApi.more': 'What is in it',
'admin.trekApi.fieldPhone': 'Phone',
'admin.trekApi.fieldStableId': 'Stable id',
@@ -172,6 +185,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Used',
'admin.trekApi.quota.remaining': 'Remaining',
'admin.trekApi.quota.resets': 'Resets at',
'admin.trekApi.quota.limit': 'Limit',
'admin.trekApi.quota.key': 'Key',
'admin.trekApi.quota.state.connected': 'Connected',
'admin.trekApi.quota.state.registering': 'Setting up',
'admin.trekApi.quota.state.legacy': 'Shared pool',
+16 -1
View File
@@ -100,11 +100,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK es software libre y aquí no somos neutrales. A esta escala, las valoraciones y las fotos de negocios corrientes solo existen en Google, y eso es un monopolio. El campo está aquí por falta de alternativa, no porque lo recomendemos. Cada consulta va entonces a Google.',
'admin.trekApi.tagline':
'El índice de lugares propio de TREK. Busca sin clave de Google y sin introducir ninguna clave: cada instalación recibe un cupo diario justo y solo se cuenta el número de solicitudes.',
'Los servicios propios de TREK: búsqueda de lugares, búsqueda de direcciones y rutas, sin clave de Google y sin introducir ninguna clave. Cada instalación recibe un cupo diario justo y solo se cuenta el número de solicitudes.',
'admin.trekApi.factPlaces': '73,6 millones de lugares en el mundo',
'admin.trekApi.factNoKey': 'Sin clave que introducir, cupo diario justo',
'admin.trekApi.factOffline': 'Los paquetes por país funcionan sin conexión',
'admin.trekApi.factPrivacy': 'Las búsquedas nunca se registran',
'admin.trekApi.factAddresses': 'Direcciones y localidades de todo el mundo, en 26 idiomas',
'admin.trekApi.factRouting': 'Rutas en coche, en bici y a pie, con altitud',
'admin.trekApi.addrStreets': 'Calles y números',
'admin.trekApi.addrTowns': 'Localidades y regiones',
'admin.trekApi.addrReverse': 'Dirección de un punto del mapa',
'admin.trekApi.addrLanguages': '26 idiomas',
'admin.trekApi.addressNote': 'Todas las direcciones de OpenStreetMap, mientras escribes y desde un punto del mapa.',
'admin.trekApi.routeCar': 'En coche',
'admin.trekApi.routeBike': 'En bici',
'admin.trekApi.routeFoot': 'A pie',
'admin.trekApi.routeAvoid': 'Evitar peajes, autopistas y ferris',
'admin.trekApi.routeElevation': 'Perfil de elevación',
'admin.trekApi.routingNote': 'Rutas por todo el planeta, reconstruidas cada mes a partir de OpenStreetMap, con alturas de teselas de terreno.',
'admin.trekApi.more': 'Qué contiene',
'admin.trekApi.fieldPhone': 'Teléfono',
'admin.trekApi.fieldStableId': 'Identificador estable',
@@ -122,6 +135,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Usado',
'admin.trekApi.quota.remaining': 'Restante',
'admin.trekApi.quota.resets': 'Se reinicia a las',
'admin.trekApi.quota.limit': 'Límite',
'admin.trekApi.quota.key': 'Clave',
'admin.trekApi.quota.state.connected': 'Conectado',
'admin.trekApi.quota.state.registering': 'Configurando',
'admin.trekApi.quota.state.legacy': 'Fondo compartido',
+16 -1
View File
@@ -152,11 +152,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
"TREK on avatud lähtekoodiga ja me ei ole selles küsimuses neutraalsed. Tavaliste ettevõtete hinnanguid ja fotosid leidub sellises mahus ainult Google'il ning see ongi monopol. See väli on siin alternatiivi puudumise tõttu, mitte meie soovitusel. Sel juhul läheb iga päring Google'ile.",
'admin.trekApi.tagline':
"TREKi oma kohtade indeks. Otsi ilma Google'i võtmeta ja ilma ühtegi võtit sisestamata: iga paigaldus saab õiglase päevakvoodi ning loetakse ainult päringute arvu.",
"TREKi enda teenused: kohtade otsing, aadresside otsing ja marsruutimine, ilma Google'i võtmeta ja ilma ühtegi võtit sisestamata. Iga paigaldus saab õiglase päevakvoodi ning loetakse ainult päringute arvu.",
'admin.trekApi.factPlaces': '73,6 miljonit kohta üle maailma',
'admin.trekApi.factNoKey': 'Võtit pole vaja sisestada, õiglane päevakvoot',
'admin.trekApi.factOffline': 'Riigipaketid töötavad võrguühenduseta',
'admin.trekApi.factPrivacy': 'Otsinguid ei logita kunagi',
'admin.trekApi.factAddresses': 'Aadressid ja asulad üle maailma, 26 keeles',
'admin.trekApi.factRouting': 'Marsruudid autoga, rattaga ja jalgsi, koos kõrgusega',
'admin.trekApi.addrStreets': 'Tänavad ja majanumbrid',
'admin.trekApi.addrTowns': 'Asulad ja piirkonnad',
'admin.trekApi.addrReverse': 'Kaardil oleva punkti aadress',
'admin.trekApi.addrLanguages': '26 keelt',
'admin.trekApi.addressNote': 'Iga OpenStreetMapi aadress, juba tippimise ajal ja kaardil oleva punkti põhjal.',
'admin.trekApi.routeCar': 'Autoga',
'admin.trekApi.routeBike': 'Rattaga',
'admin.trekApi.routeFoot': 'Jalgsi',
'admin.trekApi.routeAvoid': 'Väldi teemakse, kiirteid ja parvlaevu',
'admin.trekApi.routeElevation': 'Kõrgusprofiil',
'admin.trekApi.routingNote': 'Marsruudid üle kogu planeedi, igal kuul OpenStreetMapi põhjal uuesti ehitatud, kõrgused maastikuplaatidest.',
'admin.trekApi.more': 'Mida see sisaldab',
'admin.trekApi.fieldPhone': 'Telefon',
'admin.trekApi.fieldStableId': 'Püsiv ID',
@@ -174,6 +187,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Kasutatud',
'admin.trekApi.quota.remaining': 'Järel',
'admin.trekApi.quota.resets': 'Lähtestub kell',
'admin.trekApi.quota.limit': 'Limiit',
'admin.trekApi.quota.key': 'Võti',
'admin.trekApi.quota.state.connected': 'Ühendatud',
'admin.trekApi.quota.state.registering': 'Seadistamisel',
'admin.trekApi.quota.state.legacy': 'Ühine kogum',
+16 -1
View File
@@ -100,11 +100,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
"TREK est un logiciel libre et nous ne sommes pas neutres ici. À cette échelle, les avis et les photos de commerces ordinaires n'existent que chez Google, et c'est cela, un monopole. Le champ est là faute d'alternative, pas parce que nous le recommandons. Chaque requête part alors chez Google.",
'admin.trekApi.tagline':
"L'index de lieux propre à TREK. Chercher sans clé Google et sans clé à saisir : chaque installation dispose d'un quota journalier équitable, et seul le nombre de requêtes est compté.",
"Les services propres à TREK : recherche de lieux, recherche d'adresses et calcul d'itinéraires, sans clé Google et sans clé à saisir. Chaque installation dispose d'un quota journalier équitable, et seul le nombre de requêtes est compté.",
'admin.trekApi.factPlaces': '73,6 millions de lieux dans le monde',
'admin.trekApi.factNoKey': 'Aucune clé à saisir, quota journalier équitable',
'admin.trekApi.factOffline': 'Paquets par pays utilisables hors ligne',
'admin.trekApi.factPrivacy': 'Les recherches ne sont jamais journalisées',
'admin.trekApi.factAddresses': 'Adresses et villes dans le monde entier, en 26 langues',
'admin.trekApi.factRouting': 'Itinéraires en voiture, à vélo et à pied, avec dénivelé',
'admin.trekApi.addrStreets': 'Rues et numéros',
'admin.trekApi.addrTowns': 'Villes et régions',
'admin.trekApi.addrReverse': "Adresse d'un point sur la carte",
'admin.trekApi.addrLanguages': '26 langues',
'admin.trekApi.addressNote': "Toutes les adresses d'OpenStreetMap, pendant la saisie et depuis un point sur la carte.",
'admin.trekApi.routeCar': 'En voiture',
'admin.trekApi.routeBike': 'À vélo',
'admin.trekApi.routeFoot': 'À pied',
'admin.trekApi.routeAvoid': 'Éviter les péages, les autoroutes et les ferries',
'admin.trekApi.routeElevation': "Profil d'élévation",
'admin.trekApi.routingNote': "Des itinéraires sur toute la planète, reconstruits chaque mois à partir d'OpenStreetMap, avec les altitudes issues de tuiles de relief.",
'admin.trekApi.more': "Ce qu'il contient",
'admin.trekApi.fieldPhone': 'Téléphone',
'admin.trekApi.fieldStableId': 'Identifiant stable',
@@ -122,6 +135,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Utilisé',
'admin.trekApi.quota.remaining': 'Restant',
'admin.trekApi.quota.resets': 'Remise à zéro à',
'admin.trekApi.quota.limit': 'Limite',
'admin.trekApi.quota.key': 'Clé',
'admin.trekApi.quota.state.connected': 'Connecté',
'admin.trekApi.quota.state.registering': 'Configuration en cours',
'admin.trekApi.quota.state.legacy': 'Réserve partagée',
+16 -1
View File
@@ -155,11 +155,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'Το TREK είναι ανοιχτού κώδικα και εδώ δεν είμαστε ουδέτεροι. Σε αυτή την κλίμακα, βαθμολογίες και φωτογραφίες συνηθισμένων καταστημάτων υπάρχουν μόνο στη Google, και αυτό είναι μονοπώλιο. Το πεδίο υπάρχει ελλείψει εναλλακτικής, όχι επειδή το συνιστούμε. Τότε κάθε αναζήτηση πηγαίνει στη Google.',
'admin.trekApi.tagline':
'Ο δικός κατάλογος τοποθεσιών του TREK. Αναζήτηση χωρίς κλειδί Google και χωρίς να εισαγάγετε κανένα κλειδί: κάθε εγκατάσταση παίρνει ένα δίκαιο ημερήσιο όριο, και μετριέται μόνο ο αριθμός των αιτημάτων.',
'Οι δικές υπηρεσίες του TREK: αναζήτηση τοποθεσιών, αναζήτηση διευθύνσεων και διαδρομές, χωρίς κλειδί Google και χωρίς να εισαγάγετε κανένα κλειδί. Κάθε εγκατάσταση παίρνει δίκαιο ημερήσιο όριο και μετράται μόνο ο αριθμός των αιτημάτων.',
'admin.trekApi.factPlaces': '73,6 εκατομμύρια τόποι παγκοσμίως',
'admin.trekApi.factNoKey': 'Κανένα κλειδί προς εισαγωγή, δίκαιο ημερήσιο όριο',
'admin.trekApi.factOffline': 'Τα πακέτα χωρών δουλεύουν και εκτός σύνδεσης',
'admin.trekApi.factPrivacy': 'Οι αναζητήσεις δεν καταγράφονται ποτέ',
'admin.trekApi.factAddresses': 'Διευθύνσεις και πόλεις παγκοσμίως, σε 26 γλώσσες',
'admin.trekApi.factRouting': 'Διαδρομές με αυτοκίνητο, ποδήλατο και πεζή, με υψόμετρο',
'admin.trekApi.addrStreets': 'Οδοί και αριθμοί',
'admin.trekApi.addrTowns': 'Πόλεις και περιοχές',
'admin.trekApi.addrReverse': 'Διεύθυνση ενός σημείου στον χάρτη',
'admin.trekApi.addrLanguages': '26 γλώσσες',
'admin.trekApi.addressNote': 'Κάθε διεύθυνση του OpenStreetMap, καθώς πληκτρολογείτε και από ένα σημείο στον χάρτη.',
'admin.trekApi.routeCar': 'Με αυτοκίνητο',
'admin.trekApi.routeBike': 'Με ποδήλατο',
'admin.trekApi.routeFoot': 'Πεζή',
'admin.trekApi.routeAvoid': 'Αποφυγή διοδίων, αυτοκινητοδρόμων και πορθμείων',
'admin.trekApi.routeElevation': 'Προφίλ υψομέτρου',
'admin.trekApi.routingNote': 'Διαδρομές σε ολόκληρο τον πλανήτη, που ξαναχτίζονται κάθε μήνα από το OpenStreetMap, με υψόμετρα από πλακίδια εδάφους.',
'admin.trekApi.more': 'Τι περιλαμβάνει',
'admin.trekApi.fieldPhone': 'Τηλέφωνο',
'admin.trekApi.fieldStableId': 'Σταθερό αναγνωριστικό',
@@ -177,6 +190,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Χρησιμοποιήθηκαν',
'admin.trekApi.quota.remaining': 'Απομένουν',
'admin.trekApi.quota.resets': 'Μηδενίζεται στις',
'admin.trekApi.quota.limit': 'Όριο',
'admin.trekApi.quota.key': 'Κλειδί',
'admin.trekApi.quota.state.connected': 'Συνδεδεμένο',
'admin.trekApi.quota.state.registering': 'Ρύθμιση σε εξέλιξη',
'admin.trekApi.quota.state.legacy': 'Κοινή δεξαμενή',
+16 -1
View File
@@ -99,11 +99,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'A TREK nyílt forráskódú, és ebben nem vagyunk semlegesek. Ebben a méretben az értékelések és a hétköznapi üzletek fotói csak a Google-nél léteznek, és ez a monopólium. A mező alternatíva híján van itt, nem mert ajánljuk. Minden lekérdezés ilyenkor a Google-höz megy.',
'admin.trekApi.tagline':
'A TREK saját helyindexe. Keress Google-kulcs nélkül és kulcs megadása nélkül: minden telepítés méltányos napi keretet kap, és csak a kérések száma számít.',
'A TREK saját szolgáltatásai: helykeresés, címkeresés és útvonaltervezés, Google-kulcs nélkül és kulcs megadása nélkül. Minden telepítés méltányos napi keretet kap, és csak a kérések száma számít.',
'admin.trekApi.factPlaces': '73,6 millió hely világszerte',
'admin.trekApi.factNoKey': 'Nem kell kulcsot megadni, méltányos napi keret',
'admin.trekApi.factOffline': 'Az országcsomagok offline is működnek',
'admin.trekApi.factPrivacy': 'A kereséseket soha nem naplózzuk',
'admin.trekApi.factAddresses': 'Címek és települések világszerte, 26 nyelven',
'admin.trekApi.factRouting': 'Útvonaltervezés autóval, kerékpárral és gyalog, szintadatokkal',
'admin.trekApi.addrStreets': 'Utcák és házszámok',
'admin.trekApi.addrTowns': 'Települések és régiók',
'admin.trekApi.addrReverse': 'A térkép egy pontjának címe',
'admin.trekApi.addrLanguages': '26 nyelv',
'admin.trekApi.addressNote': 'Minden OpenStreetMap-cím, gépelés közben és a térkép egy pontjáról.',
'admin.trekApi.routeCar': 'Autóval',
'admin.trekApi.routeBike': 'Kerékpárral',
'admin.trekApi.routeFoot': 'Gyalog',
'admin.trekApi.routeAvoid': 'Kerüld a fizetős utakat, autópályákat és kompokat',
'admin.trekApi.routeElevation': 'Magassági profil',
'admin.trekApi.routingNote': 'Útvonalak az egész bolygón, havonta újraépítve az OpenStreetMapből, a magasságok domborzati csempékből származnak.',
'admin.trekApi.more': 'Mi van benne',
'admin.trekApi.fieldPhone': 'Telefon',
'admin.trekApi.fieldStableId': 'Állandó azonosító',
@@ -121,6 +134,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Felhasznált',
'admin.trekApi.quota.remaining': 'Hátralévő',
'admin.trekApi.quota.resets': 'Visszaáll ekkor',
'admin.trekApi.quota.limit': 'Korlát',
'admin.trekApi.quota.key': 'Kulcs',
'admin.trekApi.quota.state.connected': 'Csatlakoztatva',
'admin.trekApi.quota.state.registering': 'Beállítás folyamatban',
'admin.trekApi.quota.state.legacy': 'Közös keret',
+16 -1
View File
@@ -147,11 +147,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK adalah perangkat lunak sumber terbuka dan di sini kami tidak netral. Pada skala ini ulasan dan foto usaha biasa hanya ada di Google, dan itulah monopoli. Kolom ini ada karena tidak ada penggantinya, bukan karena kami menyarankan. Lalu setiap pencarian pergi ke Google.',
'admin.trekApi.tagline':
'Indeks tempat milik TREK sendiri. Cari tanpa kunci Google dan tanpa perlu memasukkan kunci apa pun: setiap instalasi mendapat kuota harian yang adil, dan hanya jumlah permintaan yang dihitung.',
'Layanan milik TREK sendiri: pencarian tempat, pencarian alamat, dan rute, tanpa kunci Google dan tanpa perlu memasukkan kunci apa pun. Setiap instalasi mendapat kuota harian yang adil, dan hanya jumlah permintaan yang dihitung.',
'admin.trekApi.factPlaces': '73,6 juta tempat di seluruh dunia',
'admin.trekApi.factNoKey': 'Tanpa kunci yang perlu dimasukkan, kuota harian yang adil',
'admin.trekApi.factOffline': 'Paket per negara jalan offline',
'admin.trekApi.factPrivacy': 'Pencarian tidak pernah dicatat',
'admin.trekApi.factAddresses': 'Alamat dan kota di seluruh dunia, dalam 26 bahasa',
'admin.trekApi.factRouting': 'Rute dengan mobil, sepeda, dan jalan kaki, lengkap dengan elevasi',
'admin.trekApi.addrStreets': 'Jalan dan nomor rumah',
'admin.trekApi.addrTowns': 'Kota dan wilayah',
'admin.trekApi.addrReverse': 'Alamat dari titik di peta',
'admin.trekApi.addrLanguages': '26 bahasa',
'admin.trekApi.addressNote': 'Setiap alamat di OpenStreetMap, saat Anda mengetik dan dari titik di peta.',
'admin.trekApi.routeCar': 'Dengan mobil',
'admin.trekApi.routeBike': 'Dengan sepeda',
'admin.trekApi.routeFoot': 'Jalan kaki',
'admin.trekApi.routeAvoid': 'Hindari jalan tol, jalan raya, dan feri',
'admin.trekApi.routeElevation': 'Profil elevasi',
'admin.trekApi.routingNote': 'Rute di seluruh planet, dibangun ulang setiap bulan dari OpenStreetMap, dengan ketinggian dari ubin medan.',
'admin.trekApi.more': 'Apa isinya',
'admin.trekApi.fieldPhone': 'Telepon',
'admin.trekApi.fieldStableId': 'Id tetap',
@@ -169,6 +182,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Terpakai',
'admin.trekApi.quota.remaining': 'Tersisa',
'admin.trekApi.quota.resets': 'Direset pukul',
'admin.trekApi.quota.limit': 'Batas',
'admin.trekApi.quota.key': 'Kunci',
'admin.trekApi.quota.state.connected': 'Terhubung',
'admin.trekApi.quota.state.registering': 'Sedang disiapkan',
'admin.trekApi.quota.state.legacy': 'Kumpulan bersama',
+16 -1
View File
@@ -99,11 +99,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
"TREK è software libero e su questo non siamo neutrali. A questa scala recensioni e foto degli esercizi comuni esistono solo da Google, ed è questo un monopolio. Il campo c'è per mancanza di alternative, non perché lo consigliamo. Ogni interrogazione va allora a Google.",
'admin.trekApi.tagline':
"L'indice dei luoghi di TREK. Cerca senza chiave Google e senza chiavi da inserire: ogni installazione riceve una quota giornaliera equa e viene contato solo il numero di richieste.",
'I servizi propri di TREK: ricerca di luoghi, ricerca di indirizzi e calcolo dei percorsi, senza chiave Google e senza chiavi da inserire. Ogni installazione riceve una quota giornaliera equa e viene contato solo il numero di richieste.',
'admin.trekApi.factPlaces': '73,6 milioni di luoghi nel mondo',
'admin.trekApi.factNoKey': 'Nessuna chiave da inserire, quota giornaliera equa',
'admin.trekApi.factOffline': 'I pacchetti per Paese funzionano offline',
'admin.trekApi.factPrivacy': 'Le ricerche non vengono mai registrate',
'admin.trekApi.factAddresses': 'Indirizzi e località in tutto il mondo, in 26 lingue',
'admin.trekApi.factRouting': 'Percorsi in auto, in bici e a piedi, con altitudine',
'admin.trekApi.addrStreets': 'Strade e numeri civici',
'admin.trekApi.addrTowns': 'Località e regioni',
'admin.trekApi.addrReverse': 'Indirizzo di un punto sulla mappa',
'admin.trekApi.addrLanguages': '26 lingue',
'admin.trekApi.addressNote': 'Ogni indirizzo di OpenStreetMap, mentre scrivi e da un punto sulla mappa.',
'admin.trekApi.routeCar': 'In auto',
'admin.trekApi.routeBike': 'In bici',
'admin.trekApi.routeFoot': 'A piedi',
'admin.trekApi.routeAvoid': 'Evita pedaggi, autostrade e traghetti',
'admin.trekApi.routeElevation': 'Profilo altimetrico',
'admin.trekApi.routingNote': 'Percorsi su tutto il pianeta, ricostruiti ogni mese da OpenStreetMap, con le altitudini da tessere del terreno.',
'admin.trekApi.more': 'Che cosa contiene',
'admin.trekApi.fieldPhone': 'Telefono',
'admin.trekApi.fieldStableId': 'Identificativo stabile',
@@ -121,6 +134,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Usata',
'admin.trekApi.quota.remaining': 'Rimanente',
'admin.trekApi.quota.resets': 'Si azzera alle',
'admin.trekApi.quota.limit': 'Limite',
'admin.trekApi.quota.key': 'Chiave',
'admin.trekApi.quota.state.connected': 'Connesso',
'admin.trekApi.quota.state.registering': 'Configurazione in corso',
'admin.trekApi.quota.state.legacy': 'Riserva condivisa',
+16 -1
View File
@@ -138,11 +138,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK はオープンソースで、この点で中立ではありません。この規模でレビューとふつうの店舗の写真があるのは Google だけで、それが独占です。この欄は代わりがないから置いてあるのであって、勧めているからではありません。使えば問い合わせはすべて Google に届きます。',
'admin.trekApi.tagline':
'TREK 自前の場所インデックス。Google のキーも、入力するキーも不要です。各インストールに公平な1日の上限があり、数えるのはリクエストの件数だけです。',
'TREK 独自のサービス: 場所の検索、住所の検索、ルート案内を、Google キーなし、入力するキーなしで利用できます。設置ごとに公平な1日の上限があり、数えるのはリクエスト数だけです。',
'admin.trekApi.factPlaces': '世界で 7,360 万件の場所',
'admin.trekApi.factNoKey': '入力するキーは不要、公平な1日の上限',
'admin.trekApi.factOffline': '国別パッケージはオフラインでも使えます',
'admin.trekApi.factPrivacy': '検索内容は一切記録しません',
'admin.trekApi.factAddresses': '世界中の住所と町を26言語で',
'admin.trekApi.factRouting': '車、自転車、徒歩のルート案内(標高付き)',
'admin.trekApi.addrStreets': '番地までの通り',
'admin.trekApi.addrTowns': '町と地域',
'admin.trekApi.addrReverse': '地図上の地点の住所',
'admin.trekApi.addrLanguages': '26言語',
'admin.trekApi.addressNote': 'OpenStreetMap のすべての住所を、入力中でも地図上の地点からでも検索できます。',
'admin.trekApi.routeCar': '車',
'admin.trekApi.routeBike': '自転車',
'admin.trekApi.routeFoot': '徒歩',
'admin.trekApi.routeAvoid': '有料道路、高速道路、フェリーを避ける',
'admin.trekApi.routeElevation': '標高プロファイル',
'admin.trekApi.routingNote': '地球全体のルートを、OpenStreetMap から毎月作り直し、高さは地形タイルから取得します。',
'admin.trekApi.more': '何が入っているか',
'admin.trekApi.fieldPhone': '電話',
'admin.trekApi.fieldStableId': '不変の識別子',
@@ -160,6 +173,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': '使用済み',
'admin.trekApi.quota.remaining': '残り',
'admin.trekApi.quota.resets': 'リセット時刻',
'admin.trekApi.quota.limit': '上限',
'admin.trekApi.quota.key': 'キー',
'admin.trekApi.quota.state.connected': '接続済み',
'admin.trekApi.quota.state.registering': '設定中',
'admin.trekApi.quota.state.legacy': '共有枠',
+16 -1
View File
@@ -143,11 +143,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK은 오픈 소스이며 이 점에서 중립이 아닙니다. 이 규모에서 평점과 일반 상점 사진은 Google에만 있고, 그것이 독점입니다. 이 입력란은 대안이 없어서 있는 것이지 권해서가 아닙니다. 쓰면 모든 조회가 Google로 갑니다.',
'admin.trekApi.tagline':
'TREK의 자체 장소 색인입니다. Google 키도, 입력할 키도 필요 없습니다. 설치마다 공정한 일일 할당량이 주어지며, 요청 수만 집계합니다.',
'TREK의 자체 서비스입니다. 장소 검색, 주소 검색, 경로 안내를 Google 키도, 입력할 키도 없이 쓸 수 있습니다. 설치마다 공정한 일일 할당량이 주어지며, 요청 수만 집계합니다.',
'admin.trekApi.factPlaces': '전 세계 7,363만 개 장소',
'admin.trekApi.factNoKey': '입력할 키 없음, 공정한 일일 할당량',
'admin.trekApi.factOffline': '국가별 패키지는 오프라인에서도 동작',
'admin.trekApi.factPrivacy': '검색어는 결코 기록하지 않음',
'admin.trekApi.factAddresses': '전 세계 주소와 도시, 26개 언어',
'admin.trekApi.factRouting': '자동차, 자전거, 도보 경로와 고도',
'admin.trekApi.addrStreets': '도로명과 번지',
'admin.trekApi.addrTowns': '도시와 지역',
'admin.trekApi.addrReverse': '지도 위 지점의 주소',
'admin.trekApi.addrLanguages': '26개 언어',
'admin.trekApi.addressNote': 'OpenStreetMap의 모든 주소를 입력하는 동안, 그리고 지도 위 지점에서 찾을 수 있습니다.',
'admin.trekApi.routeCar': '자동차',
'admin.trekApi.routeBike': '자전거',
'admin.trekApi.routeFoot': '도보',
'admin.trekApi.routeAvoid': '유료 도로, 고속도로, 페리 피하기',
'admin.trekApi.routeElevation': '고도 프로필',
'admin.trekApi.routingNote': '전 지구의 경로를 OpenStreetMap에서 매달 새로 만들고, 고도는 지형 타일에서 가져옵니다.',
'admin.trekApi.more': '무엇이 들어 있나',
'admin.trekApi.fieldPhone': '전화',
'admin.trekApi.fieldStableId': '고정 식별자',
@@ -165,6 +178,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': '사용함',
'admin.trekApi.quota.remaining': '남음',
'admin.trekApi.quota.resets': '초기화 시각',
'admin.trekApi.quota.limit': '한도',
'admin.trekApi.quota.key': '키',
'admin.trekApi.quota.state.connected': '연결됨',
'admin.trekApi.quota.state.registering': '설정 중',
'admin.trekApi.quota.state.legacy': '공용 풀',
+16 -1
View File
@@ -100,11 +100,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
"TREK is open source en wij zijn hier niet neutraal. Op deze schaal bestaan beoordelingen en foto's van gewone zaken alleen bij Google, en dat is een monopolie. Het veld staat er bij gebrek aan alternatief, niet omdat wij het aanraden. Elke opvraging gaat dan naar Google.",
'admin.trekApi.tagline':
'De eigen plaatsindex van TREK. Zoeken zonder Google-sleutel en zonder een sleutel in te voeren: elke installatie krijgt een eerlijk dagtegoed, en alleen het aantal verzoeken wordt geteld.',
'De eigen diensten van TREK: plaatsen zoeken, adressen zoeken en routeplanning, zonder Google-sleutel en zonder een sleutel in te voeren. Elke installatie krijgt een eerlijk dagtegoed, en alleen het aantal verzoeken wordt geteld.',
'admin.trekApi.factPlaces': '73,6 miljoen plaatsen wereldwijd',
'admin.trekApi.factNoKey': 'Geen sleutel nodig, eerlijk dagtegoed',
'admin.trekApi.factOffline': 'Landpakketten werken offline',
'admin.trekApi.factPrivacy': 'Zoekopdrachten worden nooit vastgelegd',
'admin.trekApi.factAddresses': 'Adressen en plaatsen wereldwijd, in 26 talen',
'admin.trekApi.factRouting': 'Routes met de auto, de fiets en te voet, met hoogte',
'admin.trekApi.addrStreets': 'Straten en huisnummers',
'admin.trekApi.addrTowns': "Plaatsen en regio's",
'admin.trekApi.addrReverse': 'Adres van een punt op de kaart',
'admin.trekApi.addrLanguages': '26 talen',
'admin.trekApi.addressNote': 'Elk adres uit OpenStreetMap, tijdens het typen en vanaf een punt op de kaart.',
'admin.trekApi.routeCar': 'Met de auto',
'admin.trekApi.routeBike': 'Met de fiets',
'admin.trekApi.routeFoot': 'Te voet',
'admin.trekApi.routeAvoid': 'Tolwegen, snelwegen en veerboten vermijden',
'admin.trekApi.routeElevation': 'Hoogteprofiel',
'admin.trekApi.routingNote': 'Routes over de hele planeet, elke maand opnieuw opgebouwd uit OpenStreetMap, met hoogtes uit terreintegels.',
'admin.trekApi.more': 'Wat erin zit',
'admin.trekApi.fieldPhone': 'Telefoon',
'admin.trekApi.fieldStableId': 'Stabiele id',
@@ -122,6 +135,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Gebruikt',
'admin.trekApi.quota.remaining': 'Resterend',
'admin.trekApi.quota.resets': 'Wordt gereset om',
'admin.trekApi.quota.limit': 'Limiet',
'admin.trekApi.quota.key': 'Sleutel',
'admin.trekApi.quota.state.connected': 'Verbonden',
'admin.trekApi.quota.state.registering': 'Wordt ingericht',
'admin.trekApi.quota.state.legacy': 'Gedeelde pot',
+16 -1
View File
@@ -98,11 +98,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK jest otwartym oprogramowaniem i nie jesteśmy tu neutralni. W tej skali oceny i zdjęcia zwykłych lokali istnieją tylko u Google, i to jest właśnie monopol. Pole jest tu z braku alternatywy, a nie dlatego, że je zalecamy. Każde zapytanie idzie wtedy do Google.',
'admin.trekApi.tagline':
'Własny indeks miejsc TREK. Szukaj bez klucza Google i bez wpisywania żadnego klucza: każda instalacja dostaje uczciwy dzienny limit, a liczona jest tylko liczba zapytań.',
'Własne usługi TREK: wyszukiwanie miejsc, wyszukiwanie adresów i wyznaczanie tras, bez klucza Google i bez wpisywania żadnego klucza. Każda instalacja dostaje uczciwy dzienny limit, a liczona jest tylko liczba zapytań.',
'admin.trekApi.factPlaces': '73,6 miliona miejsc na świecie',
'admin.trekApi.factNoKey': 'Bez klucza do wpisania, uczciwy dzienny limit',
'admin.trekApi.factOffline': 'Pakiety krajowe działają offline',
'admin.trekApi.factPrivacy': 'Zapytania nigdy nie są zapisywane',
'admin.trekApi.factAddresses': 'Adresy i miejscowości na całym świecie, w 26 językach',
'admin.trekApi.factRouting': 'Trasy samochodem, rowerem i pieszo, z wysokością',
'admin.trekApi.addrStreets': 'Ulice i numery domów',
'admin.trekApi.addrTowns': 'Miejscowości i regiony',
'admin.trekApi.addrReverse': 'Adres punktu na mapie',
'admin.trekApi.addrLanguages': '26 języków',
'admin.trekApi.addressNote': 'Każdy adres z OpenStreetMap, już podczas pisania i z punktu na mapie.',
'admin.trekApi.routeCar': 'Samochodem',
'admin.trekApi.routeBike': 'Rowerem',
'admin.trekApi.routeFoot': 'Pieszo',
'admin.trekApi.routeAvoid': 'Unikaj płatnych dróg, autostrad i promów',
'admin.trekApi.routeElevation': 'Profil wysokościowy',
'admin.trekApi.routingNote': 'Trasy na całej planecie, co miesiąc budowane od nowa z OpenStreetMap, z wysokościami z kafli terenu.',
'admin.trekApi.more': 'Co w tym jest',
'admin.trekApi.fieldPhone': 'Telefon',
'admin.trekApi.fieldStableId': 'Stały identyfikator',
@@ -120,6 +133,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Wykorzystano',
'admin.trekApi.quota.remaining': 'Pozostało',
'admin.trekApi.quota.resets': 'Reset o',
'admin.trekApi.quota.limit': 'Limit',
'admin.trekApi.quota.key': 'Klucz',
'admin.trekApi.quota.state.connected': 'Połączono',
'admin.trekApi.quota.state.registering': 'Konfigurowanie',
'admin.trekApi.quota.state.legacy': 'Wspólna pula',
+16 -1
View File
@@ -108,11 +108,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK с открытым исходным кодом, и мы здесь не нейтральны. В таком масштабе отзывы и фотографии обычных заведений есть только у Google, и это и есть монополия. Поле здесь из-за отсутствия альтернативы, а не потому, что мы его советуем. Тогда каждый запрос уходит в Google.',
'admin.trekApi.tagline':
'Собственный индекс мест TREK. Поиск без ключа Google и без ввода какого-либо ключа: каждая установка получает справедливый дневной лимит, и считается только число запросов.',
'Собственные сервисы TREK: поиск мест, поиск адресов и построение маршрутов, без ключа Google и без ввода какого-либо ключа. Каждая установка получает справедливый дневной лимит, считается только количество запросов.',
'admin.trekApi.factPlaces': '73,6 миллиона мест по всему миру',
'admin.trekApi.factNoKey': 'Ключ вводить не нужно, справедливый дневной лимит',
'admin.trekApi.factOffline': 'Страновые пакеты работают офлайн',
'admin.trekApi.factPrivacy': 'Запросы никогда не записываются',
'admin.trekApi.factAddresses': 'Адреса и города по всему миру, на 26 языках',
'admin.trekApi.factRouting': 'Маршруты на машине, велосипеде и пешком, с высотой',
'admin.trekApi.addrStreets': 'Улицы и номера домов',
'admin.trekApi.addrTowns': 'Города и регионы',
'admin.trekApi.addrReverse': 'Адрес точки на карте',
'admin.trekApi.addrLanguages': '26 языков',
'admin.trekApi.addressNote': 'Любой адрес из OpenStreetMap, прямо при вводе и по точке на карте.',
'admin.trekApi.routeCar': 'На машине',
'admin.trekApi.routeBike': 'На велосипеде',
'admin.trekApi.routeFoot': 'Пешком',
'admin.trekApi.routeAvoid': 'Избегать платных дорог, автомагистралей и паромов',
'admin.trekApi.routeElevation': 'Профиль высот',
'admin.trekApi.routingNote': 'Маршруты по всей планете, каждый месяц заново собираются из OpenStreetMap, высоты берутся из тайлов рельефа.',
'admin.trekApi.more': 'Что внутри',
'admin.trekApi.fieldPhone': 'Телефон',
'admin.trekApi.fieldStableId': 'Постоянный идентификатор',
@@ -130,6 +143,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Использовано',
'admin.trekApi.quota.remaining': 'Осталось',
'admin.trekApi.quota.resets': 'Сброс в',
'admin.trekApi.quota.limit': 'Лимит',
'admin.trekApi.quota.key': 'Ключ',
'admin.trekApi.quota.state.connected': 'Подключено',
'admin.trekApi.quota.state.registering': 'Настройка',
'admin.trekApi.quota.state.legacy': 'Общий пул',
+16 -1
View File
@@ -153,11 +153,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK je otvorený softvér a nie sme v tomto neutrálni. V takomto rozsahu existujú hodnotenia a fotografie bežných podnikov len u Googlu, a to je monopol. Toto pole tu je preto, že nie je alternatíva, nie preto, že by sme ho odporúčali. Každý dotaz potom ide do Googlu.',
'admin.trekApi.tagline':
'Vlastný index miest TREK. Hľadajte bez kľúča Google a bez zadávania akéhokoľvek kľúča: každá inštalácia dostane férový denný limit a počíta sa len počet požiadaviek.',
'Vlastné služby TREK: hľadanie miest, hľadanie adries a trasy, bez kľúča Google a bez zadávania akéhokoľvek kľúča. Každá inštalácia dostane férový denný limit a počíta sa len počet požiadaviek.',
'admin.trekApi.factPlaces': '73,6 milióna miest na celom svete',
'admin.trekApi.factNoKey': 'Žiadny kľúč na zadanie, férový denný limit',
'admin.trekApi.factOffline': 'Balíčky krajín fungujú offline',
'admin.trekApi.factPrivacy': 'Vyhľadávania sa nikdy nezaznamenávajú',
'admin.trekApi.factAddresses': 'Adresy a mestá po celom svete, v 26 jazykoch',
'admin.trekApi.factRouting': 'Trasy autom, na bicykli a pešo, s nadmorskou výškou',
'admin.trekApi.addrStreets': 'Ulice a čísla domov',
'admin.trekApi.addrTowns': 'Mestá a regióny',
'admin.trekApi.addrReverse': 'Adresa bodu na mape',
'admin.trekApi.addrLanguages': '26 jazykov',
'admin.trekApi.addressNote': 'Každá adresa z OpenStreetMap, už pri písaní aj z bodu na mape.',
'admin.trekApi.routeCar': 'Autom',
'admin.trekApi.routeBike': 'Na bicykli',
'admin.trekApi.routeFoot': 'Pešo',
'admin.trekApi.routeAvoid': 'Vyhnúť sa spoplatneným cestám, diaľniciam a trajektom',
'admin.trekApi.routeElevation': 'Výškový profil',
'admin.trekApi.routingNote': 'Trasy po celej planéte, každý mesiac znova zostavené z OpenStreetMap, s výškami z terénnych dlaždíc.',
'admin.trekApi.more': 'Čo v tom je',
'admin.trekApi.fieldPhone': 'Telefón',
'admin.trekApi.fieldStableId': 'Stály identifikátor',
@@ -175,6 +188,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Využité',
'admin.trekApi.quota.remaining': 'Zostáva',
'admin.trekApi.quota.resets': 'Obnoví sa o',
'admin.trekApi.quota.limit': 'Limit',
'admin.trekApi.quota.key': 'Kľúč',
'admin.trekApi.quota.state.connected': 'Pripojené',
'admin.trekApi.quota.state.registering': 'Nastavuje sa',
'admin.trekApi.quota.state.legacy': 'Spoločný fond',
+16 -1
View File
@@ -152,11 +152,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK är öppen källkod och vi är inte neutrala här. I den här skalan finns omdömen och foton på vanliga verksamheter bara hos Google, och det är ett monopol. Fältet finns i brist på alternativ, inte för att vi rekommenderar det. Varje uppslagning går då till Google.',
'admin.trekApi.tagline':
'TREK:s eget platsindex. Sök utan Google-nyckel och utan att ange någon nyckel: varje installation får en rimlig dagskvot, och bara antalet förfrågningar räknas.',
'TREK:s egna tjänster: platssökning, adresssökning och ruttplanering, utan Google-nyckel och utan att ange någon nyckel. Varje installation får en rimlig dagskvot, och bara antalet förfrågningar räknas.',
'admin.trekApi.factPlaces': '73,6 miljoner platser i världen',
'admin.trekApi.factNoKey': 'Ingen nyckel att ange, rimlig dagskvot',
'admin.trekApi.factOffline': 'Landpaket fungerar offline',
'admin.trekApi.factPrivacy': 'Sökningar loggas aldrig',
'admin.trekApi.factAddresses': 'Adresser och orter över hela världen, på 26 språk',
'admin.trekApi.factRouting': 'Rutter med bil, cykel och till fots, med höjd',
'admin.trekApi.addrStreets': 'Gator och husnummer',
'admin.trekApi.addrTowns': 'Orter och regioner',
'admin.trekApi.addrReverse': 'Adressen till en punkt på kartan',
'admin.trekApi.addrLanguages': '26 språk',
'admin.trekApi.addressNote': 'Varje adress i OpenStreetMap, medan du skriver och från en punkt på kartan.',
'admin.trekApi.routeCar': 'Med bil',
'admin.trekApi.routeBike': 'Med cykel',
'admin.trekApi.routeFoot': 'Till fots',
'admin.trekApi.routeAvoid': 'Undvik vägtullar, motorvägar och färjor',
'admin.trekApi.routeElevation': 'Höjdprofil',
'admin.trekApi.routingNote': 'Rutter över hela planeten, byggs om varje månad från OpenStreetMap, med höjder från terrängrutor.',
'admin.trekApi.more': 'Vad som ingår',
'admin.trekApi.fieldPhone': 'Telefon',
'admin.trekApi.fieldStableId': 'Stabilt id',
@@ -174,6 +187,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Använt',
'admin.trekApi.quota.remaining': 'Kvar',
'admin.trekApi.quota.resets': 'Nollställs kl.',
'admin.trekApi.quota.limit': 'Gräns',
'admin.trekApi.quota.key': 'Nyckel',
'admin.trekApi.quota.state.connected': 'Ansluten',
'admin.trekApi.quota.state.registering': 'Konfigureras',
'admin.trekApi.quota.state.legacy': 'Gemensam pool',
+16 -1
View File
@@ -782,11 +782,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK เป็นโอเพนซอร์ส และเราไม่ได้วางตัวเป็นกลางในเรื่องนี้ คะแนนและรูปภาพของธุรกิจทั่วไปในระดับนี้มีอยู่ที่ Google เท่านั้น ซึ่งก็คือการผูกขาด ช่องนี้มีไว้เพราะไม่มีทางเลือก ไม่ใช่เพราะเราแนะนำ ทุกการค้นหาจะส่งไปยัง Google',
'admin.trekApi.tagline':
'ดัชนีสถานที่ของ TREK เอง ค้นหาได้โดยไม่ต้องใช้คีย์ Google และไม่ต้องกรอกคีย์ใด ๆ ทุกการติดตั้งได้รับโควตารายวันอย่างเป็นธรรม และนับเฉพาะจำนวนคำขอเท่านั้น',
'บริการของ TREK เอง ทั้งค้นหาสถานที่ ค้นหาที่อยู่ และวางเส้นทาง โดยไม่ต้องใช้คีย์ Google และไม่ต้องกรอกคีย์ใด ๆ ทุกการติดตั้งจะได้โควตารายวันที่เป็นธรรม และนับเฉพาะจำนวนคำขอเท่านั้น',
'admin.trekApi.factPlaces': '73.6 ล้านสถานที่ทั่วโลก',
'admin.trekApi.factNoKey': 'ไม่ต้องกรอกคีย์ โควตารายวันที่เป็นธรรม',
'admin.trekApi.factOffline': 'แพ็กเกจประเทศใช้งานแบบออฟไลน์ได้',
'admin.trekApi.factPrivacy': 'จะไม่บันทึกการค้นหา',
'admin.trekApi.factAddresses': 'ที่อยู่และเมืองทั่วโลก ใน 26 ภาษา',
'admin.trekApi.factRouting': 'เส้นทางทั้งขับรถ ปั่นจักรยาน และเดินเท้า พร้อมความสูง',
'admin.trekApi.addrStreets': 'ถนนและเลขที่บ้าน',
'admin.trekApi.addrTowns': 'เมืองและภูมิภาค',
'admin.trekApi.addrReverse': 'ที่อยู่ของจุดบนแผนที่',
'admin.trekApi.addrLanguages': '26 ภาษา',
'admin.trekApi.addressNote': 'ทุกที่อยู่ใน OpenStreetMap ทั้งขณะพิมพ์และจากจุดบนแผนที่',
'admin.trekApi.routeCar': 'ขับรถ',
'admin.trekApi.routeBike': 'ปั่นจักรยาน',
'admin.trekApi.routeFoot': 'เดินเท้า',
'admin.trekApi.routeAvoid': 'หลีกเลี่ยงทางด่วน ทางพิเศษ และเรือเฟอร์รี',
'admin.trekApi.routeElevation': 'โปรไฟล์ความสูง',
'admin.trekApi.routingNote': 'เส้นทางทั่วทั้งโลก สร้างใหม่ทุกเดือนจาก OpenStreetMap พร้อมความสูงจากไทล์ภูมิประเทศ',
'admin.trekApi.more': 'มีอะไรบ้าง',
'admin.trekApi.fieldPhone': 'โทรศัพท์',
'admin.trekApi.fieldStableId': 'รหัสประจำที่คงที่',
@@ -804,6 +817,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'ใช้ไปแล้ว',
'admin.trekApi.quota.remaining': 'คงเหลือ',
'admin.trekApi.quota.resets': 'รีเซ็ตเวลา',
'admin.trekApi.quota.limit': 'ขีดจำกัด',
'admin.trekApi.quota.key': 'คีย์',
'admin.trekApi.quota.state.connected': 'เชื่อมต่อแล้ว',
'admin.trekApi.quota.state.registering': 'กำลังตั้งค่า',
'admin.trekApi.quota.state.legacy': 'โควตาส่วนกลาง',
+16 -1
View File
@@ -152,11 +152,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
"TREK açık kaynaklıdır ve burada tarafsız değiliz. Bu ölçekte değerlendirmeler ve sıradan işletme fotoğrafları yalnızca Google'da vardır; tekel budur. Alan, başka seçenek olmadığı için burada; önerdiğimiz için değil. O zaman her sorgu Google'a gider.",
'admin.trekApi.tagline':
"TREK'in kendi yer dizini. Google anahtarı olmadan ve hiçbir anahtar girmeden arayın: her kurulum adil bir günlük kota alır ve yalnızca istek sayısı sayılır.",
"TREK'in kendi hizmetleri: yer arama, adres arama ve rota oluşturma; Google anahtarı olmadan ve hiçbir anahtar girmeden. Her kurulum adil bir günlük kota alır ve yalnızca istek sayısı sayılır.",
'admin.trekApi.factPlaces': 'Dünya genelinde 73,6 milyon yer',
'admin.trekApi.factNoKey': 'Girilecek anahtar yok, adil günlük kota',
'admin.trekApi.factOffline': 'Ülke paketleri çevrimdışı da çalışır',
'admin.trekApi.factPrivacy': 'Aramalar hiçbir zaman kaydedilmez',
'admin.trekApi.factAddresses': 'Dünya genelinde adresler ve şehirler, 26 dilde',
'admin.trekApi.factRouting': 'Araba, bisiklet ve yürüyüş rotaları, yükseklik bilgisiyle',
'admin.trekApi.addrStreets': 'Sokaklar ve kapı numaraları',
'admin.trekApi.addrTowns': 'Şehirler ve bölgeler',
'admin.trekApi.addrReverse': 'Haritadaki bir noktanın adresi',
'admin.trekApi.addrLanguages': '26 dil',
'admin.trekApi.addressNote': "OpenStreetMap'teki her adres, yazarken ve haritadaki bir noktadan.",
'admin.trekApi.routeCar': 'Arabayla',
'admin.trekApi.routeBike': 'Bisikletle',
'admin.trekApi.routeFoot': 'Yürüyerek',
'admin.trekApi.routeAvoid': 'Ücretli yollardan, otoyollardan ve feribotlardan kaçın',
'admin.trekApi.routeElevation': 'Yükseklik profili',
'admin.trekApi.routingNote': "Tüm gezegen için rotalar, her ay OpenStreetMap'ten yeniden oluşturulur, yükseklikler arazi karolarından gelir.",
'admin.trekApi.more': 'İçinde ne var',
'admin.trekApi.fieldPhone': 'Telefon',
'admin.trekApi.fieldStableId': 'Kalıcı kimlik',
@@ -174,6 +187,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Kullanılan',
'admin.trekApi.quota.remaining': 'Kalan',
'admin.trekApi.quota.resets': 'Sıfırlanma saati',
'admin.trekApi.quota.limit': 'Sınır',
'admin.trekApi.quota.key': 'Anahtar',
'admin.trekApi.quota.state.connected': 'Bağlı',
'admin.trekApi.quota.state.registering': 'Kuruluyor',
'admin.trekApi.quota.state.legacy': 'Ortak havuz',
+16 -1
View File
@@ -108,11 +108,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK має відкритий код, і ми тут не нейтральні. У такому масштабі відгуки та світлини звичайних закладів є лише в Google, і це і є монополія. Поле тут через брак альтернативи, а не тому, що ми його радимо. Тоді кожен запит іде до Google.',
'admin.trekApi.tagline':
'Власний індекс місць TREK. Пошук без ключа Google і без введення будь-якого ключа: кожна інсталяція отримує справедливий денний ліміт, і рахується лише кількість запитів.',
'Власні сервіси TREK: пошук місць, пошук адрес і побудова маршрутів, без ключа Google і без введення будь-якого ключа. Кожна інсталяція отримує справедливий денний ліміт, рахується лише кількість запитів.',
'admin.trekApi.factPlaces': '73,6 мільйона місць у світі',
'admin.trekApi.factNoKey': 'Ключ вводити не потрібно, справедливий денний ліміт',
'admin.trekApi.factOffline': 'Пакети країн працюють офлайн',
'admin.trekApi.factPrivacy': 'Запити ніколи не записуються',
'admin.trekApi.factAddresses': 'Адреси та міста по всьому світу, 26 мовами',
'admin.trekApi.factRouting': 'Маршрути авто, велосипедом і пішки, з висотою',
'admin.trekApi.addrStreets': 'Вулиці та номери будинків',
'admin.trekApi.addrTowns': 'Міста та регіони',
'admin.trekApi.addrReverse': 'Адреса точки на карті',
'admin.trekApi.addrLanguages': '26 мов',
'admin.trekApi.addressNote': 'Будь-яка адреса з OpenStreetMap, просто під час введення і за точкою на карті.',
'admin.trekApi.routeCar': 'Авто',
'admin.trekApi.routeBike': 'Велосипедом',
'admin.trekApi.routeFoot': 'Пішки',
'admin.trekApi.routeAvoid': 'Уникати платних доріг, автомагістралей і поромів',
'admin.trekApi.routeElevation': 'Профіль висот',
'admin.trekApi.routingNote': 'Маршрути по всій планеті, щомісяця заново збираються з OpenStreetMap, висоти беруться з тайлів рельєфу.',
'admin.trekApi.more': 'Що всередині',
'admin.trekApi.fieldPhone': 'Телефон',
'admin.trekApi.fieldStableId': 'Стала позначка',
@@ -130,6 +143,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Використано',
'admin.trekApi.quota.remaining': 'Залишилось',
'admin.trekApi.quota.resets': 'Скидання о',
'admin.trekApi.quota.limit': 'Ліміт',
'admin.trekApi.quota.key': 'Ключ',
'admin.trekApi.quota.state.connected': 'Підключено',
'admin.trekApi.quota.state.registering': 'Налаштування',
'admin.trekApi.quota.state.legacy': 'Спільний пул',
+16 -1
View File
@@ -147,11 +147,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK là phần mềm nguồn mở và ở đây chúng tôi không trung lập. Ở quy mô này, đánh giá và ảnh của các cửa hàng thông thường chỉ có ở Google, và đó là độc quyền. Ô này có mặt vì không có lựa chọn khác, không phải vì chúng tôi khuyến nghị. Khi đó mọi truy vấn đều đi tới Google.',
'admin.trekApi.tagline':
'Chỉ mục địa điểm riêng của TREK. Tìm kiếm không cần khóa Google và không phải nhập khóa nào: mỗi bản cài đặt nhận một hạn mức hằng ngày công bằng, và chỉ số lượng yêu cầu được đếm.',
'Các dịch vụ riêng của TREK: tìm địa điểm, tìm địa chỉ và chỉ đường, không cần khóa Google và không phải nhập khóa nào. Mỗi bản cài đặt nhận một hạn mức hằng ngày công bằng, và chỉ số lượng yêu cầu được tính.',
'admin.trekApi.factPlaces': '73,6 triệu địa điểm trên toàn thế giới',
'admin.trekApi.factNoKey': 'Không cần nhập khóa, hạn mức hằng ngày công bằng',
'admin.trekApi.factOffline': 'Gói theo quốc gia dùng được ngoại tuyến',
'admin.trekApi.factPrivacy': 'Không bao giờ ghi lại nội dung tìm kiếm',
'admin.trekApi.factAddresses': 'Địa chỉ và thị trấn trên toàn thế giới, bằng 26 ngôn ngữ',
'admin.trekApi.factRouting': 'Chỉ đường bằng ô tô, xe đạp và đi bộ, kèm độ cao',
'admin.trekApi.addrStreets': 'Đường phố và số nhà',
'admin.trekApi.addrTowns': 'Thị trấn và khu vực',
'admin.trekApi.addrReverse': 'Địa chỉ của một điểm trên bản đồ',
'admin.trekApi.addrLanguages': '26 ngôn ngữ',
'admin.trekApi.addressNote': 'Mọi địa chỉ trong OpenStreetMap, ngay khi bạn gõ và từ một điểm trên bản đồ.',
'admin.trekApi.routeCar': 'Bằng ô tô',
'admin.trekApi.routeBike': 'Bằng xe đạp',
'admin.trekApi.routeFoot': 'Đi bộ',
'admin.trekApi.routeAvoid': 'Tránh đường thu phí, đường cao tốc và phà',
'admin.trekApi.routeElevation': 'Biểu đồ độ cao',
'admin.trekApi.routingNote': 'Tuyến đường trên toàn hành tinh, dựng lại hằng tháng từ OpenStreetMap, với độ cao từ các ô địa hình.',
'admin.trekApi.more': 'Bên trong có gì',
'admin.trekApi.fieldPhone': 'Điện thoại',
'admin.trekApi.fieldStableId': 'Mã định danh ổn định',
@@ -169,6 +182,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': 'Đã dùng',
'admin.trekApi.quota.remaining': 'Còn lại',
'admin.trekApi.quota.resets': 'Đặt lại lúc',
'admin.trekApi.quota.limit': 'Giới hạn',
'admin.trekApi.quota.key': 'Khóa',
'admin.trekApi.quota.state.connected': 'Đã kết nối',
'admin.trekApi.quota.state.registering': 'Đang thiết lập',
'admin.trekApi.quota.state.legacy': 'Nhóm dùng chung',
+16 -1
View File
@@ -141,11 +141,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK 是開源軟體,在這件事上我們並不中立。在這個規模上,評分和一般店家的照片只有 Google 有,這就是壟斷。這個欄位存在是因為沒有替代品,而不是因為我們推薦。填了它,每次查詢都會送往 Google。',
'admin.trekApi.tagline':
'TREK 自有的地點索引。不需要 Google 金鑰,也不需要輸入任何金鑰:每個安裝都有公平的每日額度,只計算請求次數。',
'TREK 自有的服務:地點搜尋、地址搜尋和路線規劃。不需要 Google 金鑰,也不需要輸入任何金鑰:每個安裝都有公平的每日額度,只計算請求次數。',
'admin.trekApi.factPlaces': '全球 7363 萬個地點',
'admin.trekApi.factNoKey': '不需輸入金鑰,公平的每日額度',
'admin.trekApi.factOffline': '國家資料包可離線使用',
'admin.trekApi.factPrivacy': '搜尋內容從不記錄',
'admin.trekApi.factAddresses': '全球地址和城鎮,支援 26 種語言',
'admin.trekApi.factRouting': '開車、騎車和步行路線,附帶海拔',
'admin.trekApi.addrStreets': '街道和門牌號碼',
'admin.trekApi.addrTowns': '城鎮和地區',
'admin.trekApi.addrReverse': '地圖上某個點的地址',
'admin.trekApi.addrLanguages': '26 種語言',
'admin.trekApi.addressNote': 'OpenStreetMap 中的每個地址,輸入時即可搜尋,也可從地圖上的點取得。',
'admin.trekApi.routeCar': '開車',
'admin.trekApi.routeBike': '騎車',
'admin.trekApi.routeFoot': '步行',
'admin.trekApi.routeAvoid': '避開收費路段、高速公路和渡輪',
'admin.trekApi.routeElevation': '海拔剖面',
'admin.trekApi.routingNote': '涵蓋全球的路線,每月依據 OpenStreetMap 重新建構,海拔來自地形圖磚。',
'admin.trekApi.more': '裡面有什麼',
'admin.trekApi.fieldPhone': '電話',
'admin.trekApi.fieldStableId': '穩定識別碼',
@@ -161,6 +174,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': '已用',
'admin.trekApi.quota.remaining': '剩餘',
'admin.trekApi.quota.resets': '重設時間',
'admin.trekApi.quota.limit': '上限',
'admin.trekApi.quota.key': '金鑰',
'admin.trekApi.quota.state.connected': '已連線',
'admin.trekApi.quota.state.registering': '設定中',
'admin.trekApi.quota.state.legacy': '共用池',
+16 -1
View File
@@ -93,11 +93,24 @@ const admin: TranslationStrings = {
'admin.googleCaveat.body':
'TREK 是开源软件,在这件事上我们并不中立。在这个规模上,评分和普通店铺的照片只有 Google 有,这就是垄断。这个输入框存在是因为没有替代品,而不是因为我们推荐。填了它,每次查询都会发往 Google。',
'admin.trekApi.tagline':
'TREK 自有的地点索引。无需 Google 密钥,也无需填写任何密钥:每个安装都有公平的每日额度,只统计请求次数。',
'TREK 自有的服务:地点搜索、地址搜索和路线规划。无需 Google 密钥,也无需填写任何密钥:每个安装都有公平的每日额度,只统计请求次数。',
'admin.trekApi.factPlaces': '全球 7363 万个地点',
'admin.trekApi.factNoKey': '无需填写密钥,公平的每日额度',
'admin.trekApi.factOffline': '国家数据包可离线使用',
'admin.trekApi.factPrivacy': '搜索内容从不记录',
'admin.trekApi.factAddresses': '全球地址和城镇,支持 26 种语言',
'admin.trekApi.factRouting': '驾车、骑行和步行路线,附带海拔',
'admin.trekApi.addrStreets': '街道和门牌号',
'admin.trekApi.addrTowns': '城镇和地区',
'admin.trekApi.addrReverse': '地图上某个点的地址',
'admin.trekApi.addrLanguages': '26 种语言',
'admin.trekApi.addressNote': 'OpenStreetMap 中的每个地址,输入时即可搜索,也可从地图上的点获取。',
'admin.trekApi.routeCar': '驾车',
'admin.trekApi.routeBike': '骑行',
'admin.trekApi.routeFoot': '步行',
'admin.trekApi.routeAvoid': '避开收费路段、高速公路和渡轮',
'admin.trekApi.routeElevation': '海拔剖面',
'admin.trekApi.routingNote': '覆盖全球的路线,每月基于 OpenStreetMap 重新构建,海拔来自地形瓦片。',
'admin.trekApi.more': '里面有什么',
'admin.trekApi.fieldPhone': '电话',
'admin.trekApi.fieldStableId': '稳定标识',
@@ -113,6 +126,8 @@ const admin: TranslationStrings = {
'admin.trekApi.quota.used': '已用',
'admin.trekApi.quota.remaining': '剩余',
'admin.trekApi.quota.resets': '重置时间',
'admin.trekApi.quota.limit': '上限',
'admin.trekApi.quota.key': '密钥',
'admin.trekApi.quota.state.connected': '已连接',
'admin.trekApi.quota.state.registering': '正在设置',
'admin.trekApi.quota.state.legacy': '共享池',