mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-11-12 23:31:02 +00:00
feat(native): the app needs TREK 5.1.3 on the server and checks a remembered one once after the update
The fixes that keep the app's sign-in in the app live in the server's UI, so an updated app on a 5.1.2 server still ended in the browser. The server now reports nativeApi 2 and the app refuses anything below it, naming 5.1.3. A server the app remembers from before is not loaded unchecked: the first launch after the update shows the address screen filled in with it, says why and checks it right away. A server that is new enough loads again with its session; an older one gets the update hint.
This commit is contained in:
@@ -26,6 +26,7 @@ public class MainActivity extends BridgeActivity {
|
||||
// runs and on its own origin. BridgeActivity reads `config` while it
|
||||
// builds the bridge inside super.onCreate().
|
||||
boolean restarting = TrekServerStore.consumeRestart(this);
|
||||
TrekServerStore.recheckAfterUpdate(this);
|
||||
String server = TrekServerStore.getUrl(this);
|
||||
boolean onServer = server != null && !TrekServerStore.consumeShellOnce(this);
|
||||
config = TrekServerStore.configFor(this, onServer ? server : null, restarting);
|
||||
|
||||
@@ -22,6 +22,16 @@ final class TrekServerStore {
|
||||
|
||||
private static final String PREFS = "trek_shell";
|
||||
private static final String KEY_URL = "server_url";
|
||||
private static final String KEY_PREVIOUS_URL = "previous_server_url";
|
||||
private static final String KEY_SERVER_CHECK = "server_check";
|
||||
|
||||
/**
|
||||
* The server API this build needs (MIN_NATIVE_API in serverAddress.ts). A
|
||||
* server remembered under a lower value is checked once more: the first
|
||||
* launch after an update that raised it puts the address screen back up,
|
||||
* filled in with that server (getPreviousUrl). Raise both together.
|
||||
*/
|
||||
private static final int SERVER_CHECK = 2;
|
||||
private static final String KEY_SIGN_IN_HOSTS = "sign_in_hosts";
|
||||
private static final String KEY_SHELL_ONCE = "shell_once";
|
||||
private static final String KEY_RESTART = "restart";
|
||||
@@ -56,6 +66,21 @@ final class TrekServerStore {
|
||||
return prefs(context).getString(KEY_URL, null);
|
||||
}
|
||||
|
||||
/** Runs before the bridge is built, so a server picked under an older minimum is not loaded unchecked. */
|
||||
static void recheckAfterUpdate(Context context) {
|
||||
SharedPreferences prefs = prefs(context);
|
||||
if (prefs.getInt(KEY_SERVER_CHECK, 0) >= SERVER_CHECK) return;
|
||||
String server = getUrl(context);
|
||||
SharedPreferences.Editor editor = prefs.edit().putInt(KEY_SERVER_CHECK, SERVER_CHECK);
|
||||
if (server != null) editor.remove(KEY_URL).remove(KEY_SIGN_IN_HOSTS).putString(KEY_PREVIOUS_URL, server);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
/** The server an update asked to check again, until a server is set. */
|
||||
static String getPreviousUrl(Context context) {
|
||||
return prefs(context).getString(KEY_PREVIOUS_URL, null);
|
||||
}
|
||||
|
||||
/** Remembers the server; its sign-in hosts go with it and are replaced or dropped too. */
|
||||
static void setUrl(Context context, String url) {
|
||||
setServer(context, url, null);
|
||||
@@ -66,7 +91,7 @@ final class TrekServerStore {
|
||||
if (url == null) {
|
||||
editor.remove(KEY_URL);
|
||||
} else {
|
||||
editor.putString(KEY_URL, url);
|
||||
editor.putString(KEY_URL, url).remove(KEY_PREVIOUS_URL);
|
||||
}
|
||||
if (signInHosts == null || signInHosts.isEmpty()) {
|
||||
editor.remove(KEY_SIGN_IN_HOSTS);
|
||||
|
||||
@@ -310,8 +310,10 @@ public class TrekShellPlugin extends Plugin {
|
||||
@PluginMethod
|
||||
public void getServer(PluginCall call) {
|
||||
String url = TrekServerStore.getUrl(getContext());
|
||||
String previous = TrekServerStore.getPreviousUrl(getContext());
|
||||
JSObject result = new JSObject();
|
||||
result.put("url", url == null ? JSONObject.NULL : url);
|
||||
result.put("previousUrl", previous == null ? JSONObject.NULL : previous);
|
||||
call.resolve(result);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import WebKit
|
||||
class TrekBridgeViewController: CAPBridgeViewController {
|
||||
override func instanceDescriptor() -> InstanceDescriptor {
|
||||
let descriptor = super.instanceDescriptor()
|
||||
TrekServerStore.recheckAfterUpdate()
|
||||
if let server = TrekServerStore.url {
|
||||
// The trailing slash matters: Capacitor treats every URL that starts
|
||||
// with this string as the app's own, and without it that would take
|
||||
@@ -157,13 +158,44 @@ enum TrekKeyCommands {
|
||||
enum TrekServerStore {
|
||||
private static let key = "TrekServerURL"
|
||||
|
||||
private static let previousKey = "TrekPreviousServerURL"
|
||||
|
||||
private static let checkedKey = "TrekServerCheck"
|
||||
|
||||
/// The server API this build needs (MIN_NATIVE_API in serverAddress.ts).
|
||||
/// A server remembered under a lower value is checked once more: the first
|
||||
/// launch after an update that raised it puts the address screen back up,
|
||||
/// filled in with that server (previousURL). Raise both together.
|
||||
private static let serverCheck = 2
|
||||
|
||||
/// Runs before the first bridge is built, so a server picked under an older
|
||||
/// minimum is not loaded unchecked.
|
||||
static func recheckAfterUpdate() {
|
||||
let defaults = UserDefaults.standard
|
||||
guard defaults.integer(forKey: checkedKey) < serverCheck else { return }
|
||||
defaults.set(serverCheck, forKey: checkedKey)
|
||||
guard let server = url else { return }
|
||||
url = nil
|
||||
defaults.set(server, forKey: previousKey)
|
||||
}
|
||||
|
||||
/// The server an update asked to check again, until a server is set.
|
||||
static var previousURL: String? {
|
||||
UserDefaults.standard.string(forKey: previousKey)
|
||||
}
|
||||
|
||||
private static let signInHostsKey = "TrekServerSignInHosts"
|
||||
|
||||
/// Setting the server drops the sign-in hosts of the one before it.
|
||||
static var url: String? {
|
||||
get { UserDefaults.standard.string(forKey: key) }
|
||||
set {
|
||||
if let newValue { UserDefaults.standard.set(newValue, forKey: key) } else { UserDefaults.standard.removeObject(forKey: key) }
|
||||
if let newValue {
|
||||
UserDefaults.standard.set(newValue, forKey: key)
|
||||
UserDefaults.standard.removeObject(forKey: previousKey)
|
||||
} else {
|
||||
UserDefaults.standard.removeObject(forKey: key)
|
||||
}
|
||||
UserDefaults.standard.removeObject(forKey: signInHostsKey)
|
||||
try? FileManager.default.removeItem(at: offlineCopyURL)
|
||||
}
|
||||
|
||||
@@ -348,7 +348,10 @@ public class TrekShellPlugin: CAPPlugin, CAPBridgedPlugin, ASWebAuthenticationPr
|
||||
private var authSession: ASWebAuthenticationSession?
|
||||
|
||||
@objc func getServer(_ call: CAPPluginCall) {
|
||||
call.resolve(["url": TrekServerStore.url ?? NSNull()])
|
||||
call.resolve([
|
||||
"url": TrekServerStore.url ?? NSNull(),
|
||||
"previousUrl": TrekServerStore.previousURL ?? NSNull(),
|
||||
])
|
||||
}
|
||||
|
||||
@objc func setServer(_ call: CAPPluginCall) {
|
||||
|
||||
@@ -275,7 +275,12 @@ function showWelcome(opts: { back?: boolean } = {}): void {
|
||||
}
|
||||
|
||||
// ── Connect (address) ───────────────────────────────────────────────────────
|
||||
function showConnect(prefill = '', opts: { back?: boolean } = {}): void {
|
||||
/**
|
||||
* `recheck`: an app update needs a newer server than the one it remembered, so
|
||||
* the address screen comes back once with it filled in, says why and checks it
|
||||
* right away. A server that is new enough loads again without another tap.
|
||||
*/
|
||||
function showConnect(prefill = '', opts: { back?: boolean; recheck?: boolean } = {}): void {
|
||||
const input = el('input', {
|
||||
type: 'url',
|
||||
placeholder: t('native.connect.placeholder'),
|
||||
@@ -344,14 +349,15 @@ function showConnect(prefill = '', opts: { back?: boolean } = {}): void {
|
||||
[
|
||||
topbar(() => showWelcome({ back: true })),
|
||||
el('h1', { className: 'title-sm' }, t('native.connect.title')),
|
||||
el('p', { className: 'sub' }, t('native.connect.hint')),
|
||||
el('p', { className: 'sub' }, t(opts.recheck ? 'native.connect.recheckHint' : 'native.connect.hint')),
|
||||
],
|
||||
[form, footLinks(externalLink(t('native.connect.whatIsServer'), SERVER_DOCS_URL))]
|
||||
)
|
||||
),
|
||||
opts
|
||||
);
|
||||
requestAnimationFrame(() => input.focus());
|
||||
if (opts.recheck && prefill) form.requestSubmit();
|
||||
else requestAnimationFrame(() => input.focus());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1322,8 +1328,9 @@ async function start(): Promise<void> {
|
||||
followBackGesture();
|
||||
letKeyboardClose();
|
||||
let url: string | null;
|
||||
let previousUrl: string | null | undefined;
|
||||
try {
|
||||
({ url } = await TrekShell.getServer());
|
||||
({ url, previousUrl } = await TrekShell.getServer());
|
||||
} catch {
|
||||
// No native shell under us (a web preview, or a simulator without the
|
||||
// plugin): there is no remembered server, so start at the welcome screen
|
||||
@@ -1332,7 +1339,9 @@ async function start(): Promise<void> {
|
||||
await SplashScreen.hide().catch(() => {});
|
||||
return;
|
||||
}
|
||||
if (!url) {
|
||||
if (!url && previousUrl) {
|
||||
showConnect(previousUrl, { recheck: true });
|
||||
} else if (!url) {
|
||||
showWelcome();
|
||||
} else {
|
||||
// Only reached when loading the server failed. A proxy that wanted a client
|
||||
|
||||
@@ -3,7 +3,7 @@ import { candidateUrls, probeDemo, probeServer, type ProbeResponse } from './ser
|
||||
|
||||
const features = (
|
||||
url: string,
|
||||
data: unknown = { bookingImport: false, aiParsing: false, nativeApp: true }
|
||||
data: unknown = { bookingImport: false, aiParsing: false, nativeApp: true, nativeApi: 2 }
|
||||
): ProbeResponse => ({ status: 200, data, url });
|
||||
|
||||
describe('candidateUrls', () => {
|
||||
@@ -26,13 +26,21 @@ describe('candidateUrls', () => {
|
||||
|
||||
describe('probeServer', () => {
|
||||
it('accepts a server at the minimum native API version or above', async () => {
|
||||
const data = { bookingImport: false, nativeApp: true, nativeApi: 1 };
|
||||
const get = vi.fn().mockResolvedValue(features('https://trek.example.com/api/health/features', data));
|
||||
expect(await probeServer('https://trek.example.com', get)).toEqual({ ok: true, url: 'https://trek.example.com' });
|
||||
for (const nativeApi of [2, 3]) {
|
||||
const data = { bookingImport: false, nativeApp: true, nativeApi };
|
||||
const get = vi.fn().mockResolvedValue(features('https://trek.example.com/api/health/features', data));
|
||||
expect(await probeServer('https://trek.example.com', get)).toEqual({ ok: true, url: 'https://trek.example.com' });
|
||||
}
|
||||
});
|
||||
|
||||
it('calls a server below the minimum native API version too old', async () => {
|
||||
const data = { bookingImport: false, nativeApp: true, nativeApi: 0 };
|
||||
const data = { bookingImport: false, nativeApp: true, nativeApi: 1 };
|
||||
const get = vi.fn().mockResolvedValue(features('https://trek.example.com/api/health/features', data));
|
||||
expect(await probeServer('https://trek.example.com', get)).toEqual({ ok: false, reason: 'tooOld' });
|
||||
});
|
||||
|
||||
it('calls a server that speaks to the app but reports no native API version too old', async () => {
|
||||
const data = { bookingImport: false, nativeApp: true };
|
||||
const get = vi.fn().mockResolvedValue(features('https://trek.example.com/api/health/features', data));
|
||||
expect(await probeServer('https://trek.example.com', get)).toEqual({ ok: false, reason: 'tooOld' });
|
||||
});
|
||||
@@ -173,7 +181,7 @@ describe('probeServer behind mutual TLS', () => {
|
||||
});
|
||||
|
||||
it('connects where the proxy asked and TREK answered, with or without a certificate', async () => {
|
||||
const trek = { bookingImport: false, nativeApp: true, nativeApi: 1 };
|
||||
const trek = { bookingImport: false, nativeApp: true, nativeApi: 2 };
|
||||
for (const sent of [true, false]) {
|
||||
const get = vi.fn().mockResolvedValue(asked(200, sent, trek));
|
||||
expect(await probeServer('https://trek.example.com', get)).toEqual({ ok: true, url: 'https://trek.example.com' });
|
||||
|
||||
@@ -43,10 +43,12 @@ const FEATURES_PATH = '/api/health/features';
|
||||
|
||||
/**
|
||||
* The oldest server API this app can work with (`nativeApi` in the features
|
||||
* response). A server from before the field existed answers without it and is
|
||||
* accepted while the minimum is 1.
|
||||
* response). 2 is TREK 5.1.3, the first server whose sign-in from the app does
|
||||
* not end in the browser. A server without the field is older still. Raising it
|
||||
* goes with SERVER_CHECK in TrekServerStore (iOS and Android), so a server the
|
||||
* app remembers from before is checked against the new minimum once.
|
||||
*/
|
||||
const MIN_NATIVE_API = 1;
|
||||
export const MIN_NATIVE_API = 2;
|
||||
|
||||
function normalize(raw: string): string | null {
|
||||
let parsed: URL;
|
||||
@@ -80,7 +82,7 @@ function judge(response: ProbeResponse): ProbeResult {
|
||||
if (response.status !== 200 || !isRecord(response.data)) return { ok: false, reason: 'notTrek' };
|
||||
if (response.data.nativeApp === true) {
|
||||
const api = response.data.nativeApi;
|
||||
if (typeof api === 'number' && api < MIN_NATIVE_API) return { ok: false, reason: 'tooOld' };
|
||||
if (typeof api !== 'number' || api < MIN_NATIVE_API) return { ok: false, reason: 'tooOld' };
|
||||
// Follow a redirect (http to https, a canonical host) so the app loads the
|
||||
// address the server actually answers on.
|
||||
const base = response.url.endsWith(FEATURES_PATH) ? response.url.slice(0, -FEATURES_PATH.length) : null;
|
||||
|
||||
@@ -13,7 +13,12 @@ import type { NativeCapabilities } from './capabilities';
|
||||
* worker.
|
||||
*/
|
||||
export interface TrekShellPlugin {
|
||||
getServer(): Promise<{ url: string | null }>;
|
||||
/**
|
||||
* `previousUrl`: the server this app remembered before an update asked for a
|
||||
* newer one (SERVER_CHECK in TrekServerStore). Set only while no server is,
|
||||
* so the address screen can check it again, pre-filled.
|
||||
*/
|
||||
getServer(): Promise<{ url: string | null; previousUrl?: string | null }>;
|
||||
/**
|
||||
* Remembers the server and loads it. The current page is gone afterwards.
|
||||
* `signInHosts` are the hosts of a proxy's sign-in page in front of it
|
||||
|
||||
@@ -69,7 +69,10 @@ export class FeaturesController {
|
||||
// The version of what the apps rely on from the server (the hand-off
|
||||
// routes, the shell bridge in the served UI). Raised only for a change an
|
||||
// older app cannot follow; the app refuses a server below its minimum.
|
||||
nativeApi: 1,
|
||||
// 2 (5.1.3): the browser sign-in starts under /api, past an older TREK's
|
||||
// service worker, and the hand-off page signs in by itself. Apps from then
|
||||
// on refuse a server below it, so its users stop landing in the browser.
|
||||
nativeApi: 2,
|
||||
// The other way round: the oldest app binary this server's UI works with,
|
||||
// as the shell API the app reports (TrekShell.getCapabilities). An app
|
||||
// below it is asked to update instead of running native calls it lacks.
|
||||
|
||||
@@ -37,7 +37,7 @@ describe('FeaturesController (GET /api/health/features)', () => {
|
||||
aiParsing: true,
|
||||
aiAssistant: true,
|
||||
nativeApp: true,
|
||||
nativeApi: 1,
|
||||
nativeApi: 2,
|
||||
minNativeShellApi: 1,
|
||||
});
|
||||
});
|
||||
@@ -49,7 +49,7 @@ describe('FeaturesController (GET /api/health/features)', () => {
|
||||
aiParsing: false,
|
||||
aiAssistant: false,
|
||||
nativeApp: true,
|
||||
nativeApi: 1,
|
||||
nativeApi: 2,
|
||||
minNativeShellApi: 1,
|
||||
});
|
||||
});
|
||||
@@ -60,7 +60,7 @@ describe('FeaturesController (GET /api/health/features)', () => {
|
||||
aiParsing: false,
|
||||
aiAssistant: false,
|
||||
nativeApp: true,
|
||||
nativeApi: 1,
|
||||
nativeApi: 2,
|
||||
minNativeShellApi: 1,
|
||||
});
|
||||
expect(await make(false, true).controller.features()).toEqual({
|
||||
@@ -68,7 +68,7 @@ describe('FeaturesController (GET /api/health/features)', () => {
|
||||
aiParsing: true,
|
||||
aiAssistant: true,
|
||||
nativeApp: true,
|
||||
nativeApi: 1,
|
||||
nativeApi: 2,
|
||||
minNativeShellApi: 1,
|
||||
});
|
||||
});
|
||||
@@ -94,7 +94,7 @@ describe('FeaturesController (GET /api/health/features)', () => {
|
||||
it('FEAT-014: tells the native apps it speaks their sign-in hand-off, and at which version', async () => {
|
||||
const features = await make(false, false).controller.features();
|
||||
expect(features.nativeApp).toBe(true);
|
||||
expect(features.nativeApi).toBe(1);
|
||||
expect(features.nativeApi).toBe(2);
|
||||
// And which app binaries its UI still works with.
|
||||
expect(features.minNativeShellApi).toBe(1);
|
||||
});
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'لا يبدو هذا عنوان ويب.',
|
||||
'native.connect.errorUnreachable': 'لا يستجيب أي خادم على هذا العنوان. تحقق من العنوان ومن اتصالك.',
|
||||
'native.connect.errorNotTrek': 'الخادم على هذا العنوان ليس TREK.',
|
||||
'native.connect.errorTooOld': 'خادم TREK هذا قديم جدًا بالنسبة للتطبيق. يحتاج إلى تحديث أولًا.',
|
||||
'native.connect.errorTooOld':
|
||||
'يعمل على هذا الخادم إصدار أقدم من TREK. يحتاج التطبيق إلى TREK 5.1.3 أو أحدث، لذا يجب تحديث الخادم أولًا.',
|
||||
'native.connect.recheckHint':
|
||||
'يحتاج هذا الإصدار من التطبيق إلى TREK 5.1.3 أو أحدث على خادمك، لذا يتحقق من خادمك مرة أخرى.',
|
||||
'native.offline.title': 'تعذّر الوصول إلى الخادم',
|
||||
'native.offline.hint': 'تعذّر على TREK الوصول إلى {server}. تحقق من اتصالك ثم حاول مرة أخرى.',
|
||||
'native.offline.retry': 'إعادة المحاولة',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Bu, veb ünvana bənzəmir.',
|
||||
'native.connect.errorUnreachable': 'Bu ünvanda heç bir server cavab vermədi. Ünvanı və bağlantınızı yoxlayın.',
|
||||
'native.connect.errorNotTrek': 'Bu ünvandakı server TREK deyil.',
|
||||
'native.connect.errorTooOld': 'Bu TREK serveri tətbiq üçün çox köhnədir. Əvvəlcə onu yeniləmək lazımdır.',
|
||||
'native.connect.errorTooOld':
|
||||
'Bu serverdə köhnə TREK işləyir. Tətbiqə TREK 5.1.3 və ya daha yenisi lazımdır, ona görə əvvəlcə serveri yeniləmək lazımdır.',
|
||||
'native.connect.recheckHint':
|
||||
'Tətbiqin bu versiyası serverinizdə TREK 5.1.3 və ya daha yenisini tələb edir, ona görə serverinizi bir daha yoxlayır.',
|
||||
'native.offline.title': 'Serverə çatmaq mümkün deyil',
|
||||
'native.offline.hint': 'TREK {server} ünvanına çata bilmədi. Bağlantınızı yoxlayın və yenidən cəhd edin.',
|
||||
'native.offline.retry': 'Yenidən cəhd et',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Isso não parece um endereço da web.',
|
||||
'native.connect.errorUnreachable': 'Nenhum servidor respondeu neste endereço. Verifique o endereço e sua conexão.',
|
||||
'native.connect.errorNotTrek': 'O servidor neste endereço não é o TREK.',
|
||||
'native.connect.errorTooOld': 'Este servidor TREK é antigo demais para o app. Ele precisa ser atualizado primeiro.',
|
||||
'native.connect.errorTooOld':
|
||||
'Este servidor roda uma versão antiga do TREK. O app precisa do TREK 5.1.3 ou mais recente, então o servidor precisa ser atualizado primeiro.',
|
||||
'native.connect.recheckHint':
|
||||
'Esta versão do app precisa do TREK 5.1.3 ou mais recente no seu servidor, por isso verifica o servidor mais uma vez.',
|
||||
'native.offline.title': 'Servidor inacessível',
|
||||
'native.offline.hint': 'O TREK não conseguiu acessar {server}. Verifique sua conexão e tente novamente.',
|
||||
'native.offline.retry': 'Tentar novamente',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Això no sembla una adreça web.',
|
||||
'native.connect.errorUnreachable': 'Cap servidor respon en aquesta adreça. Comprova l’adreça i la connexió.',
|
||||
'native.connect.errorNotTrek': 'El servidor d’aquesta adreça no és TREK.',
|
||||
'native.connect.errorTooOld': 'Aquest servidor de TREK és massa antic per a l’app. Primer cal actualitzar-lo.',
|
||||
'native.connect.errorTooOld':
|
||||
'Aquest servidor executa una versió antiga de TREK. L’app necessita TREK 5.1.3 o posterior, així que primer cal actualitzar el servidor.',
|
||||
'native.connect.recheckHint':
|
||||
'Aquesta versió de l’app necessita TREK 5.1.3 o posterior al teu servidor, per això el torna a comprovar.',
|
||||
'native.offline.title': 'No es pot accedir al servidor',
|
||||
'native.offline.hint': 'TREK no ha pogut connectar amb {server}. Comprova la connexió i torna-ho a provar.',
|
||||
'native.offline.retry': 'Torna-ho a provar',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'To nevypadá jako webová adresa.',
|
||||
'native.connect.errorUnreachable': 'Na této adrese neodpovídá žádný server. Zkontrolujte adresu a připojení.',
|
||||
'native.connect.errorNotTrek': 'Server na této adrese není TREK.',
|
||||
'native.connect.errorTooOld': 'Tento server TREK je pro aplikaci příliš starý. Nejprve potřebuje aktualizaci.',
|
||||
'native.connect.errorTooOld':
|
||||
'Na tomto serveru běží starší TREK. Aplikace potřebuje TREK 5.1.3 nebo novější, server proto nejprve potřebuje aktualizaci.',
|
||||
'native.connect.recheckHint':
|
||||
'Tato verze aplikace potřebuje na vašem serveru TREK 5.1.3 nebo novější, proto server ještě jednou zkontroluje.',
|
||||
'native.offline.title': 'Server není dostupný',
|
||||
'native.offline.hint': 'TREK se nepodařilo spojit s {server}. Zkontrolujte připojení a zkuste to znovu.',
|
||||
'native.offline.retry': 'Zkusit znovu',
|
||||
|
||||
@@ -12,7 +12,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorUnreachable':
|
||||
'Unter dieser Adresse antwortet kein Server. Prüfe die Adresse und deine Verbindung.',
|
||||
'native.connect.errorNotTrek': 'Unter dieser Adresse läuft kein TREK.',
|
||||
'native.connect.errorTooOld': 'Dieser TREK-Server ist zu alt für die App. Er braucht zuerst ein Update.',
|
||||
'native.connect.errorTooOld':
|
||||
'Auf diesem Server läuft ein älteres TREK. Die App braucht TREK 5.1.3 oder neuer, der Server braucht also zuerst ein Update.',
|
||||
'native.connect.recheckHint':
|
||||
'Diese Version der App braucht TREK 5.1.3 oder neuer auf deinem Server und prüft ihn deshalb einmal neu.',
|
||||
'native.offline.title': 'Server nicht erreichbar',
|
||||
'native.offline.hint': 'TREK konnte {server} nicht erreichen. Prüfe deine Verbindung und versuche es erneut.',
|
||||
'native.offline.retry': 'Erneut versuchen',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'That does not look like a web address.',
|
||||
'native.connect.errorUnreachable': 'No server answered at this address. Check the address and your connection.',
|
||||
'native.connect.errorNotTrek': 'The server at this address is not TREK.',
|
||||
'native.connect.errorTooOld': 'This TREK server is too old for the app. It needs an update first.',
|
||||
'native.connect.errorTooOld':
|
||||
'This server runs an older TREK. The app needs TREK 5.1.3 or newer, so the server needs an update first.',
|
||||
'native.connect.recheckHint':
|
||||
'This version of the app needs TREK 5.1.3 or newer on your server, so it checks your server once more.',
|
||||
'native.offline.title': 'Server not reachable',
|
||||
'native.offline.hint': 'TREK could not reach {server}. Check your connection and try again.',
|
||||
'native.offline.retry': 'Try again',
|
||||
|
||||
@@ -12,7 +12,9 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorUnreachable': 'Ningún servidor responde en esta dirección. Revisa la dirección y tu conexión.',
|
||||
'native.connect.errorNotTrek': 'El servidor de esta dirección no es TREK.',
|
||||
'native.connect.errorTooOld':
|
||||
'Este servidor de TREK es demasiado antiguo para la app. Primero necesita una actualización.',
|
||||
'Este servidor ejecuta una versión antigua de TREK. La app necesita TREK 5.1.3 o posterior, así que primero hay que actualizar el servidor.',
|
||||
'native.connect.recheckHint':
|
||||
'Esta versión de la app necesita TREK 5.1.3 o posterior en tu servidor, así que lo comprueba una vez más.',
|
||||
'native.offline.title': 'Servidor no disponible',
|
||||
'native.offline.hint': 'TREK no pudo conectar con {server}. Revisa tu conexión e inténtalo de nuevo.',
|
||||
'native.offline.retry': 'Reintentar',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'See ei näe välja nagu veebiaadress.',
|
||||
'native.connect.errorUnreachable': 'Sellel aadressil ei vastanud ükski server. Kontrolli aadressi ja oma ühendust.',
|
||||
'native.connect.errorNotTrek': 'Sellel aadressil olev server ei ole TREK.',
|
||||
'native.connect.errorTooOld': 'See TREKi server on rakenduse jaoks liiga vana. Seda tuleb esmalt uuendada.',
|
||||
'native.connect.errorTooOld':
|
||||
'Selles serveris töötab vanem TREK. Rakendus vajab TREK 5.1.3 või uuemat, seega tuleb server esmalt uuendada.',
|
||||
'native.connect.recheckHint':
|
||||
'See rakenduse versioon vajab sinu serveris TREK 5.1.3 või uuemat, seega kontrollib see serverit veel kord.',
|
||||
'native.offline.title': 'Server pole kättesaadav',
|
||||
'native.offline.hint': 'TREK ei jõudnud serverini {server}. Kontrolli oma ühendust ja proovi uuesti.',
|
||||
'native.offline.retry': 'Proovi uuesti',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Cela ne ressemble pas à une adresse web.',
|
||||
'native.connect.errorUnreachable': 'Aucun serveur ne répond à cette adresse. Vérifiez l’adresse et votre connexion.',
|
||||
'native.connect.errorNotTrek': 'Le serveur à cette adresse n’est pas TREK.',
|
||||
'native.connect.errorTooOld': 'Ce serveur TREK est trop ancien pour l’application. Il doit d’abord être mis à jour.',
|
||||
'native.connect.errorTooOld':
|
||||
'Ce serveur exécute une ancienne version de TREK. L’application a besoin de TREK 5.1.3 ou plus récent, le serveur doit donc d’abord être mis à jour.',
|
||||
'native.connect.recheckHint':
|
||||
'Cette version de l’application a besoin de TREK 5.1.3 ou plus récent sur votre serveur, elle le vérifie donc une nouvelle fois.',
|
||||
'native.offline.title': 'Serveur injoignable',
|
||||
'native.offline.hint': 'TREK n’a pas pu joindre {server}. Vérifiez votre connexion et réessayez.',
|
||||
'native.offline.retry': 'Réessayer',
|
||||
|
||||
@@ -13,7 +13,9 @@ const native: TranslationStrings = {
|
||||
'Κανένας διακομιστής δεν απαντά σε αυτή τη διεύθυνση. Ελέγξτε τη διεύθυνση και τη σύνδεσή σας.',
|
||||
'native.connect.errorNotTrek': 'Ο διακομιστής σε αυτή τη διεύθυνση δεν είναι TREK.',
|
||||
'native.connect.errorTooOld':
|
||||
'Αυτός ο διακομιστής TREK είναι πολύ παλιός για την εφαρμογή. Χρειάζεται πρώτα ενημέρωση.',
|
||||
'Αυτός ο διακομιστής εκτελεί παλαιότερη έκδοση του TREK. Η εφαρμογή χρειάζεται TREK 5.1.3 ή νεότερο, οπότε ο διακομιστής χρειάζεται πρώτα ενημέρωση.',
|
||||
'native.connect.recheckHint':
|
||||
'Αυτή η έκδοση της εφαρμογής χρειάζεται TREK 5.1.3 ή νεότερο στον διακομιστή σας, γι’ αυτό τον ελέγχει ξανά.',
|
||||
'native.offline.title': 'Ο διακομιστής δεν είναι προσβάσιμος',
|
||||
'native.offline.hint': 'Το TREK δεν μπόρεσε να συνδεθεί στο {server}. Ελέγξτε τη σύνδεσή σας και δοκιμάστε ξανά.',
|
||||
'native.offline.retry': 'Δοκιμάστε ξανά',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'זה לא נראה ככתובת אינטרנט.',
|
||||
'native.connect.errorUnreachable': 'אף שרת לא ענה בכתובת הזו. בדקו את הכתובת ואת החיבור.',
|
||||
'native.connect.errorNotTrek': 'השרת בכתובת הזו אינו TREK.',
|
||||
'native.connect.errorTooOld': 'שרת TREK הזה ישן מדי עבור האפליקציה. צריך קודם לעדכן אותו.',
|
||||
'native.connect.errorTooOld':
|
||||
'בשרת הזה פועלת גרסה ישנה של TREK. האפליקציה צריכה TREK 5.1.3 ומעלה, ולכן צריך קודם לעדכן את השרת.',
|
||||
'native.connect.recheckHint':
|
||||
'גרסה זו של האפליקציה צריכה TREK 5.1.3 ומעלה בשרת שלך, ולכן היא בודקת את השרת פעם נוספת.',
|
||||
'native.offline.title': 'השרת לא זמין',
|
||||
'native.offline.hint': 'TREK לא הצליח להגיע אל {server}. בדקו את החיבור ונסו שוב.',
|
||||
'native.offline.retry': 'נסו שוב',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Ez nem úgy néz ki, mint egy webcím.',
|
||||
'native.connect.errorUnreachable': 'Ezen a címen nem válaszol szerver. Ellenőrizd a címet és a kapcsolatot.',
|
||||
'native.connect.errorNotTrek': 'Az ezen a címen futó szerver nem TREK.',
|
||||
'native.connect.errorTooOld': 'Ez a TREK-szerver túl régi az alkalmazáshoz. Előbb frissíteni kell.',
|
||||
'native.connect.errorTooOld':
|
||||
'Ezen a szerveren régebbi TREK fut. Az alkalmazásnak TREK 5.1.3 vagy újabb kell, ezért előbb frissíteni kell a szervert.',
|
||||
'native.connect.recheckHint':
|
||||
'Az alkalmazás ezen verziójának TREK 5.1.3 vagy újabb kell a szervereden, ezért még egyszer ellenőrzi.',
|
||||
'native.offline.title': 'A szerver nem érhető el',
|
||||
'native.offline.hint': 'A TREK nem érte el ezt: {server}. Ellenőrizd a kapcsolatot, és próbáld újra.',
|
||||
'native.offline.retry': 'Újra',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Itu tidak terlihat seperti alamat web.',
|
||||
'native.connect.errorUnreachable': 'Tidak ada server yang merespons di alamat ini. Periksa alamat dan koneksimu.',
|
||||
'native.connect.errorNotTrek': 'Server di alamat ini bukan TREK.',
|
||||
'native.connect.errorTooOld': 'Server TREK ini terlalu lama untuk aplikasi. Server perlu diperbarui terlebih dahulu.',
|
||||
'native.connect.errorTooOld':
|
||||
'Server ini menjalankan TREK versi lama. Aplikasi memerlukan TREK 5.1.3 atau lebih baru, jadi server perlu diperbarui terlebih dahulu.',
|
||||
'native.connect.recheckHint':
|
||||
'Versi aplikasi ini memerlukan TREK 5.1.3 atau lebih baru di server Anda, jadi aplikasi memeriksa server Anda sekali lagi.',
|
||||
'native.offline.title': 'Server tidak dapat dijangkau',
|
||||
'native.offline.hint': 'TREK tidak dapat menjangkau {server}. Periksa koneksimu dan coba lagi.',
|
||||
'native.offline.retry': 'Coba lagi',
|
||||
|
||||
@@ -12,7 +12,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorUnreachable':
|
||||
'Nessun server risponde a questo indirizzo. Controlla l’indirizzo e la connessione.',
|
||||
'native.connect.errorNotTrek': 'Il server a questo indirizzo non è TREK.',
|
||||
'native.connect.errorTooOld': 'Questo server TREK è troppo vecchio per l’app. Deve prima essere aggiornato.',
|
||||
'native.connect.errorTooOld':
|
||||
'Su questo server gira una versione vecchia di TREK. L’app richiede TREK 5.1.3 o successivo, quindi il server deve prima essere aggiornato.',
|
||||
'native.connect.recheckHint':
|
||||
'Questa versione dell’app richiede TREK 5.1.3 o successivo sul tuo server, quindi lo controlla ancora una volta.',
|
||||
'native.offline.title': 'Server non raggiungibile',
|
||||
'native.offline.hint': 'TREK non è riuscito a raggiungere {server}. Controlla la connessione e riprova.',
|
||||
'native.offline.retry': 'Riprova',
|
||||
|
||||
@@ -11,7 +11,8 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Web アドレスではないようです。',
|
||||
'native.connect.errorUnreachable': 'このアドレスで応答するサーバーがありません。アドレスと接続を確認してください。',
|
||||
'native.connect.errorNotTrek': 'このアドレスのサーバーは TREK ではありません。',
|
||||
'native.connect.errorTooOld': 'この TREK サーバーはアプリに対して古すぎます。先に更新が必要です。',
|
||||
'native.connect.errorTooOld': 'このサーバーでは古い TREK が動作しています。アプリには TREK 5.1.3 以降が必要なため、先にサーバーを更新してください。',
|
||||
'native.connect.recheckHint': 'このバージョンのアプリはサーバーに TREK 5.1.3 以降が必要なため、サーバーをもう一度確認します。',
|
||||
'native.offline.title': 'サーバーに接続できません',
|
||||
'native.offline.hint': 'TREK は {server} に接続できませんでした。接続を確認して、もう一度お試しください。',
|
||||
'native.offline.retry': '再試行',
|
||||
|
||||
@@ -11,7 +11,8 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': '웹 주소가 아닌 것 같습니다.',
|
||||
'native.connect.errorUnreachable': '이 주소에서 응답하는 서버가 없습니다. 주소와 연결 상태를 확인하세요.',
|
||||
'native.connect.errorNotTrek': '이 주소의 서버는 TREK이 아닙니다.',
|
||||
'native.connect.errorTooOld': '이 TREK 서버는 앱에서 사용하기에 너무 오래되었습니다. 먼저 업데이트가 필요합니다.',
|
||||
'native.connect.errorTooOld': '이 서버는 이전 버전의 TREK을 실행 중입니다. 앱에는 TREK 5.1.3 이상이 필요하므로 먼저 서버를 업데이트해야 합니다.',
|
||||
'native.connect.recheckHint': '이 버전의 앱은 서버에 TREK 5.1.3 이상이 필요하므로 서버를 한 번 더 확인합니다.',
|
||||
'native.offline.title': '서버에 연결할 수 없음',
|
||||
'native.offline.hint': 'TREK이 {server}에 연결하지 못했습니다. 연결 상태를 확인한 후 다시 시도하세요.',
|
||||
'native.offline.retry': '다시 시도',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Dat lijkt geen webadres.',
|
||||
'native.connect.errorUnreachable': 'Er reageert geen server op dit adres. Controleer het adres en je verbinding.',
|
||||
'native.connect.errorNotTrek': 'De server op dit adres is geen TREK.',
|
||||
'native.connect.errorTooOld': 'Deze TREK-server is te oud voor de app. Hij moet eerst worden bijgewerkt.',
|
||||
'native.connect.errorTooOld':
|
||||
'Op deze server draait een oudere TREK. De app heeft TREK 5.1.3 of nieuwer nodig, dus de server moet eerst worden bijgewerkt.',
|
||||
'native.connect.recheckHint':
|
||||
'Deze versie van de app heeft TREK 5.1.3 of nieuwer op je server nodig en controleert je server daarom nog een keer.',
|
||||
'native.offline.title': 'Server niet bereikbaar',
|
||||
'native.offline.hint': 'TREK kon {server} niet bereiken. Controleer je verbinding en probeer het opnieuw.',
|
||||
'native.offline.retry': 'Opnieuw proberen',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'To nie wygląda na adres internetowy.',
|
||||
'native.connect.errorUnreachable': 'Pod tym adresem nie odpowiada żaden serwer. Sprawdź adres i połączenie.',
|
||||
'native.connect.errorNotTrek': 'Serwer pod tym adresem to nie TREK.',
|
||||
'native.connect.errorTooOld': 'Ten serwer TREK jest za stary dla aplikacji. Najpierw wymaga aktualizacji.',
|
||||
'native.connect.errorTooOld':
|
||||
'Na tym serwerze działa starsza wersja TREK. Aplikacja wymaga TREK 5.1.3 lub nowszego, więc najpierw trzeba zaktualizować serwer.',
|
||||
'native.connect.recheckHint':
|
||||
'Ta wersja aplikacji wymaga na Twoim serwerze TREK 5.1.3 lub nowszego, dlatego sprawdza go jeszcze raz.',
|
||||
'native.offline.title': 'Serwer nieosiągalny',
|
||||
'native.offline.hint': 'TREK nie mógł połączyć się z {server}. Sprawdź połączenie i spróbuj ponownie.',
|
||||
'native.offline.retry': 'Spróbuj ponownie',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Это не похоже на веб-адрес.',
|
||||
'native.connect.errorUnreachable': 'По этому адресу не отвечает ни один сервер. Проверьте адрес и подключение.',
|
||||
'native.connect.errorNotTrek': 'Сервер по этому адресу не является TREK.',
|
||||
'native.connect.errorTooOld': 'Этот сервер TREK слишком старый для приложения. Сначала его нужно обновить.',
|
||||
'native.connect.errorTooOld':
|
||||
'На этом сервере работает старая версия TREK. Приложению нужен TREK 5.1.3 или новее, поэтому сначала нужно обновить сервер.',
|
||||
'native.connect.recheckHint':
|
||||
'Этой версии приложения нужен TREK 5.1.3 или новее на вашем сервере, поэтому оно проверяет сервер ещё раз.',
|
||||
'native.offline.title': 'Сервер недоступен',
|
||||
'native.offline.hint': 'TREK не удалось подключиться к {server}. Проверьте подключение и повторите попытку.',
|
||||
'native.offline.retry': 'Повторить',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Toto nevyzerá ako webová adresa.',
|
||||
'native.connect.errorUnreachable': 'Na tejto adrese neodpovedal žiadny server. Skontrolujte adresu a pripojenie.',
|
||||
'native.connect.errorNotTrek': 'Server na tejto adrese nie je TREK.',
|
||||
'native.connect.errorTooOld': 'Tento server TREK je pre aplikáciu príliš starý. Najprv ho treba aktualizovať.',
|
||||
'native.connect.errorTooOld':
|
||||
'Na tomto serveri beží starší TREK. Aplikácia potrebuje TREK 5.1.3 alebo novší, preto treba server najprv aktualizovať.',
|
||||
'native.connect.recheckHint':
|
||||
'Táto verzia aplikácie potrebuje na vašom serveri TREK 5.1.3 alebo novší, preto server ešte raz skontroluje.',
|
||||
'native.offline.title': 'Server nie je dostupný',
|
||||
'native.offline.hint': 'TREK sa nepodarilo spojiť so serverom {server}. Skontrolujte pripojenie a skúste to znova.',
|
||||
'native.offline.retry': 'Skúsiť znova',
|
||||
|
||||
@@ -12,7 +12,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorUnreachable':
|
||||
'Ingen server svarar på den här adressen. Kontrollera adressen och din anslutning.',
|
||||
'native.connect.errorNotTrek': 'Servern på den här adressen är inte TREK.',
|
||||
'native.connect.errorTooOld': 'Den här TREK-servern är för gammal för appen. Den behöver uppdateras först.',
|
||||
'native.connect.errorTooOld':
|
||||
'Den här servern kör en äldre TREK. Appen behöver TREK 5.1.3 eller senare, så servern behöver uppdateras först.',
|
||||
'native.connect.recheckHint':
|
||||
'Den här versionen av appen behöver TREK 5.1.3 eller senare på din server och kontrollerar den därför en gång till.',
|
||||
'native.offline.title': 'Servern går inte att nå',
|
||||
'native.offline.hint': 'TREK kunde inte nå {server}. Kontrollera din anslutning och försök igen.',
|
||||
'native.offline.retry': 'Försök igen',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'ดูเหมือนว่านี่ไม่ใช่ที่อยู่เว็บ',
|
||||
'native.connect.errorUnreachable': 'ไม่มีเซิร์ฟเวอร์ตอบกลับที่ที่อยู่นี้ โปรดตรวจสอบที่อยู่และการเชื่อมต่อของคุณ',
|
||||
'native.connect.errorNotTrek': 'เซิร์ฟเวอร์ที่ที่อยู่นี้ไม่ใช่ TREK',
|
||||
'native.connect.errorTooOld': 'เซิร์ฟเวอร์ TREK นี้เก่าเกินไปสำหรับแอป ต้องอัปเดตก่อน',
|
||||
'native.connect.errorTooOld':
|
||||
'เซิร์ฟเวอร์นี้ใช้ TREK เวอร์ชันเก่า แอปต้องใช้ TREK 5.1.3 ขึ้นไป จึงต้องอัปเดตเซิร์ฟเวอร์ก่อน',
|
||||
'native.connect.recheckHint':
|
||||
'แอปเวอร์ชันนี้ต้องใช้ TREK 5.1.3 ขึ้นไปบนเซิร์ฟเวอร์ของคุณ จึงตรวจสอบเซิร์ฟเวอร์อีกครั้ง',
|
||||
'native.offline.title': 'เข้าถึงเซิร์ฟเวอร์ไม่ได้',
|
||||
'native.offline.hint': 'TREK เข้าถึง {server} ไม่ได้ โปรดตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง',
|
||||
'native.offline.retry': 'ลองอีกครั้ง',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Bu bir web adresine benzemiyor.',
|
||||
'native.connect.errorUnreachable': 'Bu adreste yanıt veren bir sunucu yok. Adresi ve bağlantını kontrol et.',
|
||||
'native.connect.errorNotTrek': 'Bu adresteki sunucu TREK değil.',
|
||||
'native.connect.errorTooOld': 'Bu TREK sunucusu uygulama için çok eski. Önce güncellenmesi gerekiyor.',
|
||||
'native.connect.errorTooOld':
|
||||
'Bu sunucuda eski bir TREK sürümü çalışıyor. Uygulama TREK 5.1.3 veya daha yenisini gerektirdiğinden önce sunucunun güncellenmesi gerekiyor.',
|
||||
'native.connect.recheckHint':
|
||||
'Uygulamanın bu sürümü sunucunuzda TREK 5.1.3 veya daha yenisini gerektirdiğinden sunucunuzu bir kez daha kontrol ediyor.',
|
||||
'native.offline.title': 'Sunucuya ulaşılamıyor',
|
||||
'native.offline.hint': 'TREK, {server} adresine ulaşamadı. Bağlantını kontrol edip tekrar dene.',
|
||||
'native.offline.retry': 'Tekrar dene',
|
||||
|
||||
@@ -11,7 +11,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': 'Це не схоже на вебадресу.',
|
||||
'native.connect.errorUnreachable': 'За цією адресою не відповідає жоден сервер. Перевірте адресу та з’єднання.',
|
||||
'native.connect.errorNotTrek': 'Сервер за цією адресою не є TREK.',
|
||||
'native.connect.errorTooOld': 'Цей сервер TREK застарий для застосунку. Спершу його потрібно оновити.',
|
||||
'native.connect.errorTooOld':
|
||||
'На цьому сервері працює старіша версія TREK. Застосунку потрібен TREK 5.1.3 або новіший, тож спершу потрібно оновити сервер.',
|
||||
'native.connect.recheckHint':
|
||||
'Цій версії застосунку потрібен TREK 5.1.3 або новіший на вашому сервері, тому вона ще раз перевіряє сервер.',
|
||||
'native.offline.title': 'Сервер недоступний',
|
||||
'native.offline.hint': 'TREK не вдалося підключитися до {server}. Перевірте з’єднання та спробуйте ще раз.',
|
||||
'native.offline.retry': 'Спробувати ще раз',
|
||||
|
||||
@@ -12,7 +12,10 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorUnreachable':
|
||||
'Không có máy chủ nào phản hồi tại địa chỉ này. Hãy kiểm tra địa chỉ và kết nối của bạn.',
|
||||
'native.connect.errorNotTrek': 'Máy chủ tại địa chỉ này không phải TREK.',
|
||||
'native.connect.errorTooOld': 'Máy chủ TREK này quá cũ đối với ứng dụng. Máy chủ cần được cập nhật trước.',
|
||||
'native.connect.errorTooOld':
|
||||
'Máy chủ này đang chạy phiên bản TREK cũ. Ứng dụng cần TREK 5.1.3 trở lên, vì vậy máy chủ cần được cập nhật trước.',
|
||||
'native.connect.recheckHint':
|
||||
'Phiên bản ứng dụng này cần TREK 5.1.3 trở lên trên máy chủ của bạn, vì vậy ứng dụng kiểm tra lại máy chủ một lần nữa.',
|
||||
'native.offline.title': 'Không kết nối được máy chủ',
|
||||
'native.offline.hint': 'TREK không thể kết nối tới {server}. Hãy kiểm tra kết nối và thử lại.',
|
||||
'native.offline.retry': 'Thử lại',
|
||||
|
||||
@@ -11,7 +11,8 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': '這看起來不像網址。',
|
||||
'native.connect.errorUnreachable': '此網址沒有伺服器回應。請檢查網址與網路連線。',
|
||||
'native.connect.errorNotTrek': '此網址上的伺服器不是 TREK。',
|
||||
'native.connect.errorTooOld': '此 TREK 伺服器版本過舊,無法用於 App。請先更新伺服器。',
|
||||
'native.connect.errorTooOld': '此伺服器執行的是舊版 TREK。App 需要 TREK 5.1.3 或更新版本,請先更新伺服器。',
|
||||
'native.connect.recheckHint': '此版本的 App 需要伺服器執行 TREK 5.1.3 或更新版本,因此會再次檢查你的伺服器。',
|
||||
'native.offline.title': '無法連線到伺服器',
|
||||
'native.offline.hint': 'TREK 無法連線到 {server}。請檢查網路連線後再試一次。',
|
||||
'native.offline.retry': '再試一次',
|
||||
|
||||
@@ -11,7 +11,8 @@ const native: TranslationStrings = {
|
||||
'native.connect.errorInvalid': '这看起来不像网址。',
|
||||
'native.connect.errorUnreachable': '此地址没有服务器响应。请检查地址和网络连接。',
|
||||
'native.connect.errorNotTrek': '此地址上的服务器不是 TREK。',
|
||||
'native.connect.errorTooOld': '此 TREK 服务器版本过旧,无法用于应用。请先更新服务器。',
|
||||
'native.connect.errorTooOld': '此服务器运行的是旧版 TREK。应用需要 TREK 5.1.3 或更高版本,请先更新服务器。',
|
||||
'native.connect.recheckHint': '此版本的应用需要服务器运行 TREK 5.1.3 或更高版本,因此会再次检查你的服务器。',
|
||||
'native.offline.title': '无法连接服务器',
|
||||
'native.offline.hint': 'TREK 无法连接到 {server}。请检查网络连接后重试。',
|
||||
'native.offline.retry': '重试',
|
||||
|
||||
Reference in New Issue
Block a user