mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-20 13:51:45 +00:00
Various fixes: 2FA autofocus, viewer-timezone times, duplicate place guard (#1159)
* fix(auth): autofocus the 2FA code input when the MFA step appears (#767) * fix(notifications): show notification and admin times in the viewer timezone (#1149) SQLite CURRENT_TIMESTAMP is UTC but the string has no Z, so the client parsed it as local time. Normalize in-app notification created_at to ISO-UTC, and stop forcing the admin user table to render in the server timezone. * fix(places): warn before adding a duplicate place (#1152) Manually adding a place did not check the existing pool, so the same POI could land in Unplanned twice. Flag a likely duplicate by Google Place ID, name or near-identical coordinates and require a confirming second click to add anyway.
This commit is contained in:
@@ -86,5 +86,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'فشل إنشاء الفئة',
|
||||
'places.nameRequired': 'يرجى إدخال اسم',
|
||||
'places.saveError': 'فشل الحفظ',
|
||||
'places.duplicateExists': "'{name}' موجود بالفعل في هذه الرحلة.",
|
||||
'places.addAnyway': 'الإضافة على أي حال',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -88,5 +88,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Falha ao criar categoria',
|
||||
'places.nameRequired': 'Digite um nome',
|
||||
'places.saveError': 'Falha ao salvar',
|
||||
'places.duplicateExists': "'{name}' já está nesta viagem.",
|
||||
'places.addAnyway': 'Adicionar mesmo assim',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -87,5 +87,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Nepodařilo se vytvořit kategorii',
|
||||
'places.nameRequired': 'Prosím zadejte název',
|
||||
'places.saveError': 'Uložení se nezdařilo',
|
||||
'places.duplicateExists': "'{name}' už v tomto výletu existuje.",
|
||||
'places.addAnyway': 'Přesto přidat',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -88,5 +88,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Fehler beim Erstellen der Kategorie',
|
||||
'places.nameRequired': 'Bitte einen Namen eingeben',
|
||||
'places.saveError': 'Fehler beim Speichern',
|
||||
'places.duplicateExists': "'{name}' ist bereits in dieser Reise.",
|
||||
'places.addAnyway': 'Trotzdem hinzufügen',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -87,5 +87,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Failed to create category',
|
||||
'places.nameRequired': 'Please enter a name',
|
||||
'places.saveError': 'Failed to save',
|
||||
'places.duplicateExists': "'{name}' is already in this trip.",
|
||||
'places.addAnyway': 'Add anyway',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -88,5 +88,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'No se pudo crear la categoría',
|
||||
'places.nameRequired': 'Introduce un nombre',
|
||||
'places.saveError': 'No se pudo guardar',
|
||||
'places.duplicateExists': "'{name}' ya está en este viaje.",
|
||||
'places.addAnyway': 'Añadir de todos modos',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -89,5 +89,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Impossible de créer la catégorie',
|
||||
'places.nameRequired': 'Veuillez saisir un nom',
|
||||
'places.saveError': "Échec de l'enregistrement",
|
||||
'places.duplicateExists': "'{name}' est déjà dans ce voyage.",
|
||||
'places.addAnyway': 'Ajouter quand même',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -90,5 +90,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Αποτυχία δημιουργίας κατηγορίας',
|
||||
'places.nameRequired': 'Παρακαλώ εισαγάγετε ένα όνομα',
|
||||
'places.saveError': 'Αποτυχία αποθήκευσης',
|
||||
'places.duplicateExists': "Το '{name}' υπάρχει ήδη σε αυτό το ταξίδι.",
|
||||
'places.addAnyway': 'Προσθήκη ούτως ή άλλως',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -89,5 +89,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Nem sikerült létrehozni a kategóriát',
|
||||
'places.nameRequired': 'Kérjük, adj meg egy nevet',
|
||||
'places.saveError': 'Nem sikerült menteni',
|
||||
'places.duplicateExists': "A(z) '{name}' már szerepel ebben az utazásban.",
|
||||
'places.addAnyway': 'Hozzáadás mindenképp',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -88,5 +88,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Gagal membuat kategori',
|
||||
'places.nameRequired': 'Harap masukkan nama',
|
||||
'places.saveError': 'Gagal menyimpan',
|
||||
'places.duplicateExists': "'{name}' sudah ada di perjalanan ini.",
|
||||
'places.addAnyway': 'Tetap tambahkan',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -88,5 +88,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Impossibile creare la categoria',
|
||||
'places.nameRequired': 'Inserisci un nome',
|
||||
'places.saveError': 'Impossibile salvare',
|
||||
'places.duplicateExists': "'{name}' è già in questo viaggio.",
|
||||
'places.addAnyway': 'Aggiungi comunque',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -89,5 +89,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'カテゴリの作成に失敗しました',
|
||||
'places.nameRequired': '名前を入力してください',
|
||||
'places.saveError': '保存に失敗しました',
|
||||
'places.duplicateExists': '「{name}」はすでにこの旅程に含まれています。',
|
||||
'places.addAnyway': 'それでも追加',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -86,5 +86,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': '카테고리 생성 실패',
|
||||
'places.nameRequired': '이름을 입력하세요',
|
||||
'places.saveError': '저장 실패',
|
||||
'places.duplicateExists': "'{name}'은(는) 이미 이 여행에 있습니다.",
|
||||
'places.addAnyway': '그래도 추가',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -89,5 +89,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Categorie aanmaken mislukt',
|
||||
'places.nameRequired': 'Voer een naam in',
|
||||
'places.saveError': 'Opslaan mislukt',
|
||||
'places.duplicateExists': "'{name}' staat al in deze reis.",
|
||||
'places.addAnyway': 'Toch toevoegen',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -78,6 +78,8 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Nie udało się utworzyć kategorii',
|
||||
'places.nameRequired': 'Proszę podać nazwę',
|
||||
'places.saveError': 'Nie udało się zapisać',
|
||||
'places.duplicateExists': "'{name}' jest już w tej podróży.",
|
||||
'places.addAnyway': 'Dodaj mimo to',
|
||||
'places.importNaverList': 'Lista Naver',
|
||||
'places.importList': 'Import listy',
|
||||
'places.googleListHint': 'Wklej link do listy Google Maps.',
|
||||
|
||||
@@ -88,5 +88,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Не удалось создать категорию',
|
||||
'places.nameRequired': 'Введите название',
|
||||
'places.saveError': 'Ошибка сохранения',
|
||||
'places.duplicateExists': "'{name}' уже есть в этой поездке.",
|
||||
'places.addAnyway': 'Всё равно добавить',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -87,5 +87,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Kategori oluşturulamadı',
|
||||
'places.nameRequired': 'Lütfen bir ad girin',
|
||||
'places.saveError': 'Kaydedilemedi',
|
||||
'places.duplicateExists': "'{name}' zaten bu gezide var.",
|
||||
'places.addAnyway': 'Yine de ekle',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -88,5 +88,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': 'Не вдалося створити категорію',
|
||||
'places.nameRequired': 'Введіть назву',
|
||||
'places.saveError': 'Помилка збереження',
|
||||
'places.duplicateExists': "'{name}' вже є в цій подорожі.",
|
||||
'places.addAnyway': 'Все одно додати',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -83,5 +83,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': '建立分類失敗',
|
||||
'places.nameRequired': '請輸入名稱',
|
||||
'places.saveError': '儲存失敗',
|
||||
'places.duplicateExists': "'{name}' 已在此行程中。",
|
||||
'places.addAnyway': '仍要新增',
|
||||
};
|
||||
export default places;
|
||||
|
||||
@@ -83,5 +83,7 @@ const places: TranslationStrings = {
|
||||
'places.categoryCreateError': '创建分类失败',
|
||||
'places.nameRequired': '请输入名称',
|
||||
'places.saveError': '保存失败',
|
||||
'places.duplicateExists': "'{name}' 已在此行程中。",
|
||||
'places.addAnyway': '仍然添加',
|
||||
};
|
||||
export default places;
|
||||
|
||||
Reference in New Issue
Block a user