fix(i18n): the app's first screens read without dashes in every language

The welcome subtitle and the TREK Cloud texts used an em dash as a pause in
all locales. Each is reworded with a comma, a colon or a new clause, and a
spec keeps a dash from coming back in any locale's native strings.
This commit is contained in:
Maurice
2026-11-07 23:21:18 +01:00
parent 5346182807
commit 641b1882b5
29 changed files with 69 additions and 32 deletions
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'الخادم',
'native.settings.serverHint': 'هذا التطبيق متصل بـ {server}.',
'native.welcome.headline': 'رحلاتك.\nخطتك.',
'native.welcome.sub': 'خطّطوا معًا في الوقت الفعلي: جولات وميزانيات ويوميات وألبوم صور — بالذكاء الاصطناعي.',
'native.welcome.sub': 'خطّطوا معًا في الوقت الفعلي: جولات وميزانيات ويوميات وألبوم صور، بمساعدة الذكاء الاصطناعي.',
'native.welcome.connect': 'اربط TREK الخاص بك',
'native.welcome.connectSub': 'افتح العنوان الذي تستخدمه بالفعل',
'native.welcome.getCloud': 'احصل على TREK Cloud',
+2 -1
View File
@@ -25,7 +25,8 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'Bu tətbiq {server} serverinə qoşulub.',
'native.welcome.headline': 'Səyahətlərin.\nPlanın.',
'native.welcome.sub': 'Real vaxtda birlikdə planlayın: turlar, büdcələr, jurnallar, foto kitab — süni intellektlə.',
'native.welcome.sub':
'Real vaxtda birlikdə planlayın: turlar, büdcələr, jurnallar və foto kitab, süni intellektin köməyi ilə.',
'native.welcome.connect': 'TREK-inizi qoşun',
'native.welcome.connectSub': 'Artıq istifadə etdiyiniz ünvanı açın',
'native.welcome.getCloud': 'TREK Cloud əldə edin',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Servidor',
'native.settings.serverHint': 'Este app está conectado a {server}.',
'native.welcome.headline': 'Suas viagens.\nSeu plano.',
'native.welcome.sub': 'Planejem juntos em tempo real: roteiros, orçamentos, diário, fotolivro — com IA.',
'native.welcome.sub': 'Planejem juntos em tempo real: roteiros, orçamentos, diário e fotolivro, com a ajuda da IA.',
'native.welcome.connect': 'Conecte seu TREK',
'native.welcome.connectSub': 'Abra o endereço que você já usa',
'native.welcome.getCloud': 'Obter o TREK Cloud',
+2 -1
View File
@@ -25,7 +25,8 @@ const native: TranslationStrings = {
'native.settings.server': 'Servidor',
'native.settings.serverHint': 'Aquesta app està connectada a {server}.',
'native.welcome.headline': 'Els teus viatges.\nEl teu pla.',
'native.welcome.sub': 'Planifiqueu junts en temps real: rutes, pressupostos, diari, fotollibre — amb IA.',
'native.welcome.sub':
'Planifiqueu junts en temps real: rutes, pressupostos, diari i fotollibre, amb l’ajuda de la IA.',
'native.welcome.connect': 'Connecta el teu TREK',
'native.welcome.connectSub': 'Obre l’adreça que ja fas servir',
'native.welcome.getCloud': 'Obtén el TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'Tato aplikace je připojena k {server}.',
'native.welcome.headline': 'Vaše cesty.\nVáš plán.',
'native.welcome.sub': 'Plánujte společně v reálném čase: trasy, rozpočty, deník, fotokniha — s AI.',
'native.welcome.sub': 'Plánujte společně v reálném čase: trasy, rozpočty, deník a fotokniha, s pomocí AI.',
'native.welcome.connect': 'Připojte svůj TREK',
'native.welcome.connectSub': 'Otevřete adresu, kterou už používáte',
'native.welcome.getCloud': 'Získat TREK Cloud',
+3 -3
View File
@@ -26,17 +26,17 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'Diese App ist mit {server} verbunden.',
'native.welcome.headline': 'Deine Reisen.\nDein Plan.',
'native.welcome.sub': 'Gemeinsam in Echtzeit planen: Touren, Budgets, Journal, Fotobuch — mit KI.',
'native.welcome.sub': 'Gemeinsam in Echtzeit planen: Touren, Budgets, Journal und Fotobuch, mit Hilfe von KI.',
'native.welcome.connect': 'Mit deinem TREK verbinden',
'native.welcome.connectSub': 'Die Adresse öffnen, die du schon nutzt',
'native.welcome.getCloud': 'TREK Cloud holen',
'native.welcome.getCloudSub': 'Für dich gehostet, ohne Einrichtung',
'native.cloud.title': 'TREK Cloud',
'native.cloud.sub':
'Wir hosten TREK für dich, auf deiner eigenen Adresse. Nichts installieren, nichts warten — in Minuten bereit.',
'Wir hosten TREK für dich, auf deiner eigenen Adresse. Nichts zu installieren, nichts zu warten, in wenigen Minuten bereit.',
'native.cloud.f1': 'Eigene Adresse, auf Servern in Deutschland',
'native.cloud.f2': 'In Minuten eingerichtet, Updates übernehmen wir',
'native.cloud.f3': 'Deine Daten bleiben deine — keine Werbung, kein Tracking',
'native.cloud.f3': 'Deine Daten bleiben deine: keine Werbung, kein Tracking',
'native.cloud.cta': 'Loslegen',
'native.cloud.haveServer': 'Ich habe schon einen TREK-Server',
'native.connecting': 'Verbinde mit {host}',
+3 -3
View File
@@ -25,17 +25,17 @@ const native: TranslationStrings = {
'native.settings.server': 'Server',
'native.settings.serverHint': 'This app is connected to {server}.',
'native.welcome.headline': 'Your Trips.\nYour Plan.',
'native.welcome.sub': 'Plan together in real time: tours, budgets, journals, photo book — with AI.',
'native.welcome.sub': 'Plan together in real time: tours, budgets, journals and a photo book, with help from AI.',
'native.welcome.connect': 'Connect your TREK',
'native.welcome.connectSub': 'Open the address you already use',
'native.welcome.getCloud': 'Get TREK Cloud',
'native.welcome.getCloudSub': 'Hosted for you, no setup',
'native.cloud.title': 'TREK Cloud',
'native.cloud.sub':
'We host TREK for you, on your own address. Nothing to install, nothing to maintain — ready in minutes.',
'We host TREK for you, on your own address. Nothing to install, nothing to maintain, and it is ready in minutes.',
'native.cloud.f1': 'Your own address, on servers in Germany',
'native.cloud.f2': 'Set up in minutes, updates handled for you',
'native.cloud.f3': 'Your data stays yours — no ads, no tracking',
'native.cloud.f3': 'Your data stays yours: no ads, no tracking',
'native.cloud.cta': 'Get started',
'native.cloud.haveServer': 'I already have a TREK',
'native.connecting': 'Connecting to {host}',
+2 -1
View File
@@ -26,7 +26,8 @@ const native: TranslationStrings = {
'native.settings.server': 'Servidor',
'native.settings.serverHint': 'Esta app está conectada a {server}.',
'native.welcome.headline': 'Tus viajes.\nTu plan.',
'native.welcome.sub': 'Planifica en equipo y en tiempo real: rutas, presupuestos, diario, fotolibro — con IA.',
'native.welcome.sub':
'Planifica en equipo y en tiempo real: rutas, presupuestos, diario y fotolibro, con ayuda de la IA.',
'native.welcome.connect': 'Conecta tu TREK',
'native.welcome.connectSub': 'Abre la dirección que ya usas',
'native.welcome.getCloud': 'Obtén TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'See rakendus on ühendatud serveriga {server}.',
'native.welcome.headline': 'Sinu reisid.\nSinu plaan.',
'native.welcome.sub': 'Planeeri koos reaalajas: teekonnad, eelarved, päevik, fotoraamat — tehisintellektiga.',
'native.welcome.sub': 'Planeeri koos reaalajas: teekonnad, eelarved, päevik ja fotoraamat, tehisintellekti abiga.',
'native.welcome.connect': 'Ühenda oma TREK',
'native.welcome.connectSub': 'Ava aadress, mida juba kasutad',
'native.welcome.getCloud': 'Hangi TREK Cloud',
+2 -1
View File
@@ -26,7 +26,8 @@ const native: TranslationStrings = {
'native.settings.server': 'Serveur',
'native.settings.serverHint': 'Cette application est connectée à {server}.',
'native.welcome.headline': 'Vos voyages.\nVotre plan.',
'native.welcome.sub': 'Planifiez ensemble en temps réel : circuits, budgets, journal, livre photo — avec l’IA.',
'native.welcome.sub':
'Planifiez ensemble en temps réel : circuits, budgets, journal et livre photo, avec l’aide de l’IA.',
'native.welcome.connect': 'Connecter votre TREK',
'native.welcome.connectSub': 'Ouvrez l’adresse que vous utilisez déjà',
'native.welcome.getCloud': 'Obtenir TREK Cloud',
+1 -1
View File
@@ -28,7 +28,7 @@ const native: TranslationStrings = {
'native.settings.serverHint': 'Αυτή η εφαρμογή είναι συνδεδεμένη στο {server}.',
'native.welcome.headline': 'Τα ταξίδια σας.\nΤο πλάνο σας.',
'native.welcome.sub':
'Σχεδιάστε μαζί σε πραγματικό χρόνο: διαδρομές, προϋπολογισμούς, ημερολόγιο, φωτογραφικό άλμπουμ — με AI.',
'Σχεδιάστε μαζί σε πραγματικό χρόνο: διαδρομές, προϋπολογισμούς, ημερολόγιο και φωτογραφικό άλμπουμ, με τη βοήθεια του AI.',
'native.welcome.connect': 'Συνδέστε το TREK σας',
'native.welcome.connectSub': 'Ανοίξτε τη διεύθυνση που ήδη χρησιμοποιείτε',
'native.welcome.getCloud': 'Αποκτήστε το TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'שרת',
'native.settings.serverHint': 'האפליקציה הזו מחוברת אל {server}.',
'native.welcome.headline': 'הטיולים שלכם.\nהתוכנית שלכם.',
'native.welcome.sub': 'מתכננים ביחד בזמן אמת: מסלולים, תקציבים, יומן, אלבום תמונות — עם AI.',
'native.welcome.sub': 'מתכננים ביחד בזמן אמת: מסלולים, תקציבים, יומן ואלבום תמונות, בעזרת AI.',
'native.welcome.connect': 'חיבור ה-TREK שלכם',
'native.welcome.connectSub': 'פתחו את הכתובת שאתם כבר משתמשים בה',
'native.welcome.getCloud': 'קבלת TREK Cloud',
+1 -1
View File
@@ -26,7 +26,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Szerver',
'native.settings.serverHint': 'Ez az alkalmazás ehhez csatlakozik: {server}.',
'native.welcome.headline': 'Az utazásaid.\nA terved.',
'native.welcome.sub': 'Tervezzetek együtt valós időben: túrák, költségvetések, napló, fotókönyv — MI-vel.',
'native.welcome.sub': 'Tervezzetek együtt valós időben: túrák, költségvetések, napló és fotókönyv, MI segítségével.',
'native.welcome.connect': 'Csatlakoztasd a TREK-edet',
'native.welcome.connectSub': 'Nyisd meg a címet, amit már használsz',
'native.welcome.getCloud': 'TREK Cloud beszerzése',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'Aplikasi ini terhubung ke {server}.',
'native.welcome.headline': 'Perjalanan Anda.\nRencana Anda.',
'native.welcome.sub': 'Rencanakan bersama secara real time: tur, anggaran, jurnal, buku foto — dengan AI.',
'native.welcome.sub': 'Rencanakan bersama secara real time: tur, anggaran, jurnal, dan buku foto, dibantu AI.',
'native.welcome.connect': 'Hubungkan TREK Anda',
'native.welcome.connectSub': 'Buka alamat yang sudah Anda pakai',
'native.welcome.getCloud': 'Dapatkan TREK Cloud',
+1 -1
View File
@@ -26,7 +26,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'Questa app è collegata a {server}.',
'native.welcome.headline': 'I tuoi viaggi.\nIl tuo piano.',
'native.welcome.sub': 'Pianifica insieme in tempo reale: tour, budget, diario, fotolibro — con l’IA.',
'native.welcome.sub': 'Pianifica insieme in tempo reale: tour, budget, diario e fotolibro, con l’aiuto dell’IA.',
'native.welcome.connect': 'Collega il tuo TREK',
'native.welcome.connectSub': 'Apri l’indirizzo che già usi',
'native.welcome.getCloud': 'Attiva TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'サーバー',
'native.settings.serverHint': 'このアプリは {server} に接続されています。',
'native.welcome.headline': 'あなたの旅。\nあなたの計画。',
'native.welcome.sub': 'みんなでリアルタイムに計画:ツアー、予算、ジャーナル、フォトブック — AIも活用。',
'native.welcome.sub': 'みんなでリアルタイムに計画:ツアー、予算、ジャーナル、フォトブック。AIも活用できます。',
'native.welcome.connect': 'あなたのTREKに接続',
'native.welcome.connectSub': 'すでに使っているアドレスを開く',
'native.welcome.getCloud': 'TREK Cloudを始める',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': '서버',
'native.settings.serverHint': '이 앱은 {server}에 연결되어 있습니다.',
'native.welcome.headline': '당신의 여행.\n당신의 계획.',
'native.welcome.sub': '실시간으로 함께 계획하세요: 투어, 예산, 저널, 포토북 — AI와 함께.',
'native.welcome.sub': '실시간으로 함께 계획하세요: 투어, 예산, 저널, 포토북까지 AI와 함께.',
'native.welcome.connect': '내 TREK 연결',
'native.welcome.connectSub': '이미 사용하는 주소 열기',
'native.welcome.getCloud': 'TREK Cloud 시작하기',
+32
View File
@@ -0,0 +1,32 @@
/// <reference types="vite/client" />
import type { TranslationStrings } from './types';
import { describe, expect, it } from 'vitest';
/**
* The strings of the app's own first screens (client/native-shell: welcome,
* the server address, TREK Cloud, the plans) carry no dash as punctuation in
* any language: no em dash, no en dash, no spaced hyphen. A pause is a colon,
* a comma or a new sentence. These screens are the first thing a new user
* reads, and the style is held here because a re-translation can bring a dash
* back without any other check noticing.
*/
const nativeModules = import.meta.glob<{ default: TranslationStrings }>('./*/native.ts', { eager: true });
const DASH = /[‒–—―]| - /;
describe('native shell wording', () => {
it('I18N-NATIVE-DASH-001: every locale has its native strings', () => {
expect(Object.keys(nativeModules).length).toBeGreaterThanOrEqual(27);
});
it('I18N-NATIVE-DASH-002: no native string uses a dash as punctuation, in any locale', () => {
const offenders: string[] = [];
for (const [file, mod] of Object.entries(nativeModules)) {
for (const [key, value] of Object.entries(mod.default)) {
if (typeof value === 'string' && DASH.test(value)) offenders.push(`${file} ${key}: ${value}`);
}
}
expect(offenders).toEqual([]);
});
});
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'Deze app is verbonden met {server}.',
'native.welcome.headline': 'Jouw reizen.\nJouw plan.',
'native.welcome.sub': 'Plan samen in realtime: tours, budgetten, dagboek, fotoboek — met AI.',
'native.welcome.sub': 'Plan samen in realtime: tours, budgetten, dagboek en fotoboek, met hulp van AI.',
'native.welcome.connect': 'Verbind je TREK',
'native.welcome.connectSub': 'Open het adres dat je al gebruikt',
'native.welcome.getCloud': 'Neem TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Serwer',
'native.settings.serverHint': 'Ta aplikacja jest połączona z {server}.',
'native.welcome.headline': 'Twoje podróże.\nTwój plan.',
'native.welcome.sub': 'Planujcie razem w czasie rzeczywistym: trasy, budżety, dziennik, fotoksiążka — z AI.',
'native.welcome.sub': 'Planujcie razem w czasie rzeczywistym: trasy, budżety, dziennik i fotoksiążka, z pomocą AI.',
'native.welcome.connect': 'Połącz swój TREK',
'native.welcome.connectSub': 'Otwórz adres, którego już używasz',
'native.welcome.getCloud': 'Weź TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Сервер',
'native.settings.serverHint': 'Приложение подключено к {server}.',
'native.welcome.headline': 'Ваши поездки.\nВаш план.',
'native.welcome.sub': 'Планируйте вместе в реальном времени: туры, бюджеты, дневник, фотокнига — с ИИ.',
'native.welcome.sub': 'Планируйте вместе в реальном времени: туры, бюджеты, дневник и фотокнига, с помощью ИИ.',
'native.welcome.connect': 'Подключите свой TREK',
'native.welcome.connectSub': 'Откройте адрес, которым уже пользуетесь',
'native.welcome.getCloud': 'Получить TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'Táto aplikácia je pripojená k serveru {server}.',
'native.welcome.headline': 'Vaše cesty.\nVáš plán.',
'native.welcome.sub': 'Plánujte spoločne v reálnom čase: trasy, rozpočty, denníky, fotokniha — s AI.',
'native.welcome.sub': 'Plánujte spoločne v reálnom čase: trasy, rozpočty, denníky a fotokniha, s pomocou AI.',
'native.welcome.connect': 'Pripojte svoj TREK',
'native.welcome.connectSub': 'Otvorte adresu, ktorú už používate',
'native.welcome.getCloud': 'Získať TREK Cloud',
+1 -1
View File
@@ -26,7 +26,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Server', // same-as-en
'native.settings.serverHint': 'Den här appen är ansluten till {server}.',
'native.welcome.headline': 'Dina resor.\nDin plan.',
'native.welcome.sub': 'Planera tillsammans i realtid: turer, budgetar, resejournaler, fotobok — med AI.',
'native.welcome.sub': 'Planera tillsammans i realtid: turer, budgetar, resejournaler och fotobok, med hjälp av AI.',
'native.welcome.connect': 'Anslut din TREK',
'native.welcome.connectSub': 'Öppna adressen du redan använder',
'native.welcome.getCloud': 'Skaffa TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'เซิร์ฟเวอร์',
'native.settings.serverHint': 'แอปนี้เชื่อมต่อกับ {server} อยู่',
'native.welcome.headline': 'การเดินทางของคุณ\nแผนของคุณ',
'native.welcome.sub': 'วางแผนร่วมกันแบบเรียลไทม์: ทัวร์ งบประมาณ บันทึกการเดินทาง โฟโต้บุ๊ก — ด้วย AI',
'native.welcome.sub': 'วางแผนร่วมกันแบบเรียลไทม์: ทัวร์ งบประมาณ บันทึกการเดินทาง และโฟโต้บุ๊ก โดยมี AI ช่วย',
'native.welcome.connect': 'เชื่อมต่อ TREK ของคุณ',
'native.welcome.connectSub': 'เปิดที่อยู่ที่คุณใช้อยู่แล้ว',
'native.welcome.getCloud': 'รับ TREK Cloud',
+1 -1
View File
@@ -26,7 +26,7 @@ const native: TranslationStrings = {
'native.settings.serverHint': 'Bu uygulama {server} adresine bağlı.',
'native.welcome.headline': 'Gezileriniz.\nPlanınız.',
'native.welcome.sub':
'Gerçek zamanlı birlikte planlayın: turlar, bütçeler, günlükler, fotoğraf kitabı — yapay zekâyla.',
'Gerçek zamanlı birlikte planlayın: turlar, bütçeler, günlükler ve fotoğraf kitabı, yapay zekâ desteğiyle.',
'native.welcome.connect': 'TREK’inizi bağlayın',
'native.welcome.connectSub': 'Zaten kullandığınız adresi açın',
'native.welcome.getCloud': 'TREK Cloud’u edinin',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': 'Сервер',
'native.settings.serverHint': 'Застосунок підключено до {server}.',
'native.welcome.headline': 'Ваші подорожі.\nВаш план.',
'native.welcome.sub': 'Плануйте разом у реальному часі: тури, бюджети, щоденники, фотокнига — з ШІ.',
'native.welcome.sub': 'Плануйте разом у реальному часі: тури, бюджети, щоденники та фотокнига, за допомогою ШІ.',
'native.welcome.connect': 'Підключіть свій TREK',
'native.welcome.connectSub': 'Відкрийте адресу, якою вже користуєтеся',
'native.welcome.getCloud': 'Отримати TREK Cloud',
+2 -1
View File
@@ -26,7 +26,8 @@ const native: TranslationStrings = {
'native.settings.server': 'Máy chủ',
'native.settings.serverHint': 'Ứng dụng này đang kết nối với {server}.',
'native.welcome.headline': 'Chuyến đi của bạn.\nKế hoạch của bạn.',
'native.welcome.sub': 'Lập kế hoạch cùng nhau theo thời gian thực: tour, ngân sách, nhật ký, photobook — với AI.',
'native.welcome.sub':
'Lập kế hoạch cùng nhau theo thời gian thực: tour, ngân sách, nhật ký và photobook, với sự hỗ trợ của AI.',
'native.welcome.connect': 'Kết nối TREK của bạn',
'native.welcome.connectSub': 'Mở địa chỉ bạn vẫn dùng',
'native.welcome.getCloud': 'Nhận TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': '伺服器',
'native.settings.serverHint': '此 App 已連線到 {server}。',
'native.welcome.headline': '你的旅行。\n你的計畫。',
'native.welcome.sub': '即時協同規劃:路線、預算、遊記、相簿書——搭配 AI。',
'native.welcome.sub': '即時協同規劃:路線、預算、遊記、相簿書,還有 AI 協助。',
'native.welcome.connect': '連線你的 TREK',
'native.welcome.connectSub': '開啟你已在使用的網址',
'native.welcome.getCloud': '取得 TREK Cloud',
+1 -1
View File
@@ -25,7 +25,7 @@ const native: TranslationStrings = {
'native.settings.server': '服务器',
'native.settings.serverHint': '此应用已连接到 {server}。',
'native.welcome.headline': '你的旅行。\n你的计划。',
'native.welcome.sub': '实时协同规划:路线、预算、游记、相册书——搭配 AI。',
'native.welcome.sub': '实时协同规划:路线、预算、游记、相册书,还有 AI 协助。',
'native.welcome.connect': '连接你的 TREK',
'native.welcome.connectSub': '打开你已在使用的地址',
'native.welcome.getCloud': '获取 TREK Cloud',