mirror of
https://github.com/horizon-rust/horizon.git
synced 2026-11-07 11:06:11 -10:00
Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1fe21fb861 | ||
|
|
68b03b5184 | ||
|
|
00d1e1a46e | ||
|
|
1ee069b6ba | ||
|
|
c30dfd55e5 |
No files matched your search
@@ -47,6 +47,13 @@ All requests use HTTPS and JSON except the two OAuth calls (form-encoded):
|
||||
1. **Device code**: `POST https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode`
|
||||
(`client_id`, `scope=XboxLive.signin offline_access`). The launcher shows the `user_code` and
|
||||
`verification_uri` (https://www.microsoft.com/link) with a copy button and opens the browser.
|
||||
The device code page takes whatever Microsoft account the browser is signed in to, and the flow has
|
||||
no option for an account picker (no `prompt`, no `login_hint`). To add a different account without any
|
||||
change to the Azure app (#3786), the sign-in panel offers **Open in private window**: the default
|
||||
browser's private window (`launcher/src/private_window.rs`: the `https` ProgId on Windows, LaunchServices
|
||||
on macOS, `xdg-settings` on Linux; `--incognito`, `--inprivate`, `--private`, `--private-window`) has no
|
||||
Microsoft session. Safari and unknown browsers get **Copy link** and a hint instead. **Use a different
|
||||
Microsoft account** opens `login.live.com/logout.srf` and then the code page.
|
||||
2. **Poll** `POST …/consumers/oauth2/v2.0/token` (`grant_type=urn:ietf:params:oauth:grant-type:device_code`)
|
||||
every `interval` seconds; `authorization_pending` waits, `slow_down` adds 5 s, `authorization_declined`,
|
||||
`expired_token` and `bad_verification_code` end the sign-in with a message. Result: the Microsoft
|
||||
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Maak oop in privaat venster",
|
||||
"Open this link in a private window to pick another account.": "Maak hierdie skakel in 'n privaat venster oop om 'n ander rekening te kies.",
|
||||
"Use a different Microsoft account": "Gebruik 'n ander Microsoft-rekening"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "فتح في نافذة خاصة",
|
||||
"Open this link in a private window to pick another account.": "افتح هذا الرابط في نافذة خاصة لاختيار حساب آخر.",
|
||||
"Use a different Microsoft account": "استخدام حساب Microsoft مختلف"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Gizli pəncərədə açın",
|
||||
"Open this link in a private window to pick another account.": "Başqa hesab seçmək üçün bu linki gizli pəncərədə açın.",
|
||||
"Use a different Microsoft account": "Başqa Microsoft hesabından istifadə edin"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Шәхси тәҙрәлә асыу",
|
||||
"Open this link in a private window to pick another account.": "Башҡа иҫәп яҙмаһын һайлау өсөн был һылтанманы шәхси тәҙрәлә асығыҙ.",
|
||||
"Use a different Microsoft account": "Башҡа Microsoft иҫәп яҙмаһын ҡулланыу"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Адкрыць у прыватным акне",
|
||||
"Open this link in a private window to pick another account.": "Адкрыйце гэту спасылку ў прыватным акне, каб выбраць іншы ўліковы запіс.",
|
||||
"Use a different Microsoft account": "Выкарыстаць іншы ўліковы запіс Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Отваряне в поверителен прозорец",
|
||||
"Open this link in a private window to pick another account.": "Отворете тази връзка в поверителен прозорец, за да изберете друг акаунт.",
|
||||
"Use a different Microsoft account": "Използвайте друг акаунт в Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Digeriñ en ur prenestr prevez",
|
||||
"Open this link in a private window to pick another account.": "Digorit al liamm-mañ en ur prenestr prevez evit dibab ur gont all.",
|
||||
"Use a different Microsoft account": "Implijout ur gont Microsoft all"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Otvori u privatnom prozoru",
|
||||
"Open this link in a private window to pick another account.": "Otvori ovaj link u privatnom prozoru da odabereš drugi nalog.",
|
||||
"Use a different Microsoft account": "Koristi drugi Microsoft nalog"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Obre en una finestra privada",
|
||||
"Open this link in a private window to pick another account.": "Obriu aquest enllaç en una finestra privada per triar un altre compte.",
|
||||
"Use a different Microsoft account": "Utilitza un altre compte de Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Otevřít v anonymním okně",
|
||||
"Open this link in a private window to pick another account.": "Otevřete tento odkaz v anonymním okně a vyberte jiný účet.",
|
||||
"Use a different Microsoft account": "Použít jiný účet Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Вӑрттӑн чӳречере уҫӑр",
|
||||
"Open this link in a private window to pick another account.": "Урӑх аккаунт суйлама ку ссылкӑна вӑрттӑн чӳречере уҫӑр.",
|
||||
"Use a different Microsoft account": "Урӑх Microsoft аккаунтне усӑ курӑр"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Agor mewn ffenestr breifat",
|
||||
"Open this link in a private window to pick another account.": "Agorwch y ddolen hon mewn ffenestr breifat i ddewis cyfrif arall.",
|
||||
"Use a different Microsoft account": "Defnyddio cyfrif Microsoft gwahanol"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Åbn i privat vindue",
|
||||
"Open this link in a private window to pick another account.": "Åbn dette link i et privat vindue for at vælge en anden konto.",
|
||||
"Use a different Microsoft account": "Brug en anden Microsoft-konto"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "In privatem Fenster öffnen",
|
||||
"Open this link in a private window to pick another account.": "Öffne diesen Link in einem privaten Fenster, um ein anderes Konto auszuwählen.",
|
||||
"Use a different Microsoft account": "Anderes Microsoft-Konto verwenden"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Άνοιγμα σε ιδιωτικό παράθυρο",
|
||||
"Open this link in a private window to pick another account.": "Ανοίξτε αυτόν τον σύνδεσμο σε ιδιωτικό παράθυρο για να επιλέξετε άλλον λογαριασμό.",
|
||||
"Use a different Microsoft account": "Χρήση διαφορετικού λογαριασμού Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Malfermi en privata fenestro",
|
||||
"Open this link in a private window to pick another account.": "Malfermu ĉi tiun ligilon en privata fenestro por elekti alian konton.",
|
||||
"Use a different Microsoft account": "Uzi alian Microsoft-konton"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Abrir en ventana privada",
|
||||
"Open this link in a private window to pick another account.": "Abre este enlace en una ventana privada para elegir otra cuenta.",
|
||||
"Use a different Microsoft account": "Usar otra cuenta de Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Ava privaatses aknas",
|
||||
"Open this link in a private window to pick another account.": "Ava see link privaatses aknas, et valida teine konto.",
|
||||
"Use a different Microsoft account": "Kasuta teist Microsofti kontot"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Ireki leiho pribatuan",
|
||||
"Open this link in a private window to pick another account.": "Ireki esteka hau leiho pribatu batean beste kontu bat aukeratzeko.",
|
||||
"Use a different Microsoft account": "Erabili beste Microsoft kontu bat"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "باز کردن در پنجره ناشناس",
|
||||
"Open this link in a private window to pick another account.": "برای انتخاب حساب دیگر، این پیوند را در یک پنجره ناشناس باز کنید.",
|
||||
"Use a different Microsoft account": "استفاده از حساب مایکروسافت دیگر"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Avaa yksityisessä ikkunassa",
|
||||
"Open this link in a private window to pick another account.": "Avaa tämä linkki yksityisessä ikkunassa valitaksesi toisen tilin.",
|
||||
"Use a different Microsoft account": "Käytä toista Microsoft-tiliä"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Buksan sa private window",
|
||||
"Open this link in a private window to pick another account.": "Buksan ang link na ito sa private window para pumili ng ibang account.",
|
||||
"Use a different Microsoft account": "Gumamit ng ibang Microsoft account"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Opna í privatum glugga",
|
||||
"Open this link in a private window to pick another account.": "Opna hesa leinkju í privatum glugga fyri at velja eina aðra kontu.",
|
||||
"Use a different Microsoft account": "Brúka eina aðra Microsoft kontu"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Ouvrir dans une fenêtre de navigation privée",
|
||||
"Open this link in a private window to pick another account.": "Ouvrez ce lien dans une fenêtre de navigation privée pour choisir un autre compte.",
|
||||
"Use a different Microsoft account": "Utiliser un autre compte Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Vierç intun barcon privât",
|
||||
"Open this link in a private window to pick another account.": "Vierç chest leam intun barcon privât par sielzi un altri conto.",
|
||||
"Use a different Microsoft account": "Dopre un altri conto Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Iepenje yn in priveefinster",
|
||||
"Open this link in a private window to pick another account.": "Iepenje dizze keppeling yn in priveefinster om in oar akkount te kiezen.",
|
||||
"Use a different Microsoft account": "Brûk in oar Microsoft akkount"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Oscail i bhfuinneog phríobháideach",
|
||||
"Open this link in a private window to pick another account.": "Oscail an nasc seo i bhfuinneog phríobháideach chun cuntas eile a roghnú.",
|
||||
"Use a different Microsoft account": "Úsáid cuntas Microsoft eile"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Fosgail ann an uinneag phrìobhaideach",
|
||||
"Open this link in a private window to pick another account.": "Fosgail an ceangal seo ann an uinneag phrìobhaideach gus cunntas eile a thaghadh.",
|
||||
"Use a different Microsoft account": "Cleachd cunntas Microsoft eile"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Abrir nunha xanela privada",
|
||||
"Open this link in a private window to pick another account.": "Abre esta ligazón nunha xanela privada para escoller outra conta.",
|
||||
"Use a different Microsoft account": "Usar outra conta de Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "E wehe i loko o ka puka makani pilikino",
|
||||
"Open this link in a private window to pick another account.": "E wehe i kēia loulou ma kahi puka makani pilikino e koho ai i kekahi moʻokāki ʻē aʻe.",
|
||||
"Use a different Microsoft account": "E hoʻohana i kahi moʻokāki Microsoft ʻē aʻe"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "פתח בחלון פרטי",
|
||||
"Open this link in a private window to pick another account.": "פתח את הקישור הזה בחלון פרטי כדי לבחור חשבון אחר.",
|
||||
"Use a different Microsoft account": "השתמש בחשבון Microsoft אחר"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "निजी विंडो में खोलें",
|
||||
"Open this link in a private window to pick another account.": "दूसरा खाता चुनने के लिए इस लिंक को निजी विंडो में खोलें।",
|
||||
"Use a different Microsoft account": "दूसरे Microsoft खाते का उपयोग करें"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Otvori u privatnom prozoru",
|
||||
"Open this link in a private window to pick another account.": "Otvorite ovu poveznicu u privatnom prozoru da biste odabrali drugi račun.",
|
||||
"Use a different Microsoft account": "Koristi drugi Microsoft račun"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Megnyitás privát ablakban",
|
||||
"Open this link in a private window to pick another account.": "Nyisd meg ezt a linket privát ablakban, hogy másik fiókot válassz.",
|
||||
"Use a different Microsoft account": "Másik Microsoft-fiók használata"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Բացել մասնավոր պատուհանում",
|
||||
"Open this link in a private window to pick another account.": "Բացեք այս հղումը մասնավոր պատուհանում՝ մեկ այլ հաշիվ ընտրելու համար:",
|
||||
"Use a different Microsoft account": "Օգտագործել այլ Microsoft-ի հաշիվ"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Buka di jendela pribadi",
|
||||
"Open this link in a private window to pick another account.": "Buka tautan ini di jendela pribadi untuk memilih akun lain.",
|
||||
"Use a different Microsoft account": "Gunakan akun Microsoft lain"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Mepee na windo nzuzo",
|
||||
"Open this link in a private window to pick another account.": "Mepee njikọ a na windo nzuzo ka ịhọrọ akaụntụ ọzọ.",
|
||||
"Use a different Microsoft account": "Jiri akaụntụ Microsoft ọzọ"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Opna í huliðsglugga",
|
||||
"Open this link in a private window to pick another account.": "Opnaðu þennan tengil í huliðsglugga til að velja annan reikning.",
|
||||
"Use a different Microsoft account": "Nota annan Microsoft reikning"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Apri in una finestra anonima",
|
||||
"Open this link in a private window to pick another account.": "Apri questo collegamento in una finestra anonima per scegliere un altro account.",
|
||||
"Use a different Microsoft account": "Usa un altro account Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "プライベートウィンドウで開く",
|
||||
"Open this link in a private window to pick another account.": "別のアカウントを選ぶには、このリンクをプライベートウィンドウで開いてください。",
|
||||
"Use a different Microsoft account": "別の Microsoft アカウントを使用"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "გახსნა პირად ფანჯარაში",
|
||||
"Open this link in a private window to pick another account.": "სხვა ანგარიშის ასარჩევად გახსენით ეს ბმული პირად ფანჯარაში.",
|
||||
"Use a different Microsoft account": "გამოიყენეთ სხვა Microsoft-ის ანგარიში"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Жеке терезеде ашу",
|
||||
"Open this link in a private window to pick another account.": "Басқа тіркелгіні таңдау үшін бұл сілтемені жеке терезеде ашыңыз.",
|
||||
"Use a different Microsoft account": "Басқа Microsoft тіркелгісін пайдалану"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "ಖಾಸಗಿ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ",
|
||||
"Open this link in a private window to pick another account.": "ಬೇರೆ ಖಾತೆಯನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಈ ಲಿಂಕ್ ಅನ್ನು ಖಾಸಗಿ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ.",
|
||||
"Use a different Microsoft account": "ಬೇರೆ Microsoft ಖಾತೆಯನ್ನು ಬಳಸಿ"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "시크릿 창에서 열기",
|
||||
"Open this link in a private window to pick another account.": "다른 계정을 선택하려면 이 링크를 시크릿 창에서 여세요.",
|
||||
"Use a different Microsoft account": "다른 Microsoft 계정 사용"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Купуя терезеде ачуу",
|
||||
"Open this link in a private window to pick another account.": "Башка эсепти тандоо үчүн бул шилтемени купуя терезеде ачыңыз.",
|
||||
"Use a different Microsoft account": "Башка Microsoft эсебин колдонуу"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Aperi in fenestra privata",
|
||||
"Open this link in a private window to pick another account.": "Aperi hoc link in fenestra privata ut aliam rationem eligas.",
|
||||
"Use a different Microsoft account": "Aliam Microsoft rationem adhibe"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "An engem privaten Fënster opmaachen",
|
||||
"Open this link in a private window to pick another account.": "Maach dëse Link an engem privaten Fënster op, fir en anere Kont ze wielen.",
|
||||
"Use a different Microsoft account": "Aneren Microsoft Kont notzen"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Open in e privévinster",
|
||||
"Open this link in a private window to pick another account.": "Open dees link in e privévinster om un angere account te kieze.",
|
||||
"Use a different Microsoft account": "Gebruuk un angere Microsoft account"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Vèrt in d'una finestra privada",
|
||||
"Open this link in a private window to pick another account.": "Vèrt chèsto link in d'una finestra privada per sceglier un alter cunt.",
|
||||
"Use a different Microsoft account": "Dopera un alter cunt Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "ເປີດໃນໜ້າຕ່າງສ່ວນຕົວ",
|
||||
"Open this link in a private window to pick another account.": "ເປີດລິ້ງນີ້ໃນໜ້າຕ່າງສ່ວນຕົວເພື່ອເລືອກບັນຊີອື່ນ.",
|
||||
"Use a different Microsoft account": "ໃຊ້ບັນຊີ Microsoft ອື່ນ"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Atidaryti privačiame lange",
|
||||
"Open this link in a private window to pick another account.": "Atidarykite šią nuorodą privačiame lange, kad pasirinktumėte kitą paskyrą.",
|
||||
"Use a different Microsoft account": "Naudoti kitą „Microsoft“ paskyrą"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Atvērt privātajā logā",
|
||||
"Open this link in a private window to pick another account.": "Atveriet šo saiti privātajā logā, lai izvēlētos citu kontu.",
|
||||
"Use a different Microsoft account": "Izmantot citu Microsoft kontu"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Отвори во приватен прозорец",
|
||||
"Open this link in a private window to pick another account.": "Отворете ја оваа врска во приватен прозорец за да изберете друга сметка.",
|
||||
"Use a different Microsoft account": "Користи друга сметка на Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Хувийн цонхонд нээх",
|
||||
"Open this link in a private window to pick another account.": "Өөр данс сонгохын тулд энэ холбоосыг хувийн цонхонд нээнэ үү.",
|
||||
"Use a different Microsoft account": "Өөр Microsoft данс ашиглах"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Buka dalam tetingkap peribadi",
|
||||
"Open this link in a private window to pick another account.": "Buka pautan ini dalam tetingkap peribadi untuk memilih akaun lain.",
|
||||
"Use a different Microsoft account": "Gunakan akaun Microsoft lain"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Iftaħ f'tieqa privata",
|
||||
"Open this link in a private window to pick another account.": "Iftaħ dan il-link f'tieqa privata biex tagħżel kont ieħor.",
|
||||
"Use a different Microsoft account": "Uża kont Microsoft differenti"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Openen in privévenster",
|
||||
"Open this link in a private window to pick another account.": "Open deze link in een privévenster om een ander account te kiezen.",
|
||||
"Use a different Microsoft account": "Een ander Microsoft-account gebruiken"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Åpne i et privat vindu",
|
||||
"Open this link in a private window to pick another account.": "Åpne denne lenken i et privat vindu for å velge en annen konto.",
|
||||
"Use a different Microsoft account": "Bruk en annen Microsoft-konto"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Dobrir dins una fenèstra privada",
|
||||
"Open this link in a private window to pick another account.": "Dobrissètz aqueste ligam dins una fenèstra privada per causir un autre compte.",
|
||||
"Use a different Microsoft account": "Utilizar un autre compte Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Otwórz w oknie prywatnym",
|
||||
"Open this link in a private window to pick another account.": "Otwórz ten link w oknie prywatnym, aby wybrać inne konto.",
|
||||
"Use a different Microsoft account": "Użyj innego konta Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Abrir em janela anônima",
|
||||
"Open this link in a private window to pick another account.": "Abra este link em uma janela anônima para escolher outra conta.",
|
||||
"Use a different Microsoft account": "Usar outra conta Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Abrir numa janela anónima",
|
||||
"Open this link in a private window to pick another account.": "Abra esta ligação numa janela anónima para escolher outra conta.",
|
||||
"Use a different Microsoft account": "Usar outra conta Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Deschide într-o fereastră privată",
|
||||
"Open this link in a private window to pick another account.": "Deschideți acest link într-o fereastră privată pentru a alege alt cont.",
|
||||
"Use a different Microsoft account": "Folosiți alt cont Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Открыть в приватном окне",
|
||||
"Open this link in a private window to pick another account.": "Откройте эту ссылку в приватном окне, чтобы выбрать другой аккаунт.",
|
||||
"Use a different Microsoft account": "Использовать другой аккаунт Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Кистэлэҥ түннүкка арыйыы",
|
||||
"Open this link in a private window to pick another account.": "Атын учуоту талар туһуттан бу ссылканы кистэлэҥ түннүккэ арыйыҥ.",
|
||||
"Use a different Microsoft account": "Атын Microsoft учуоту туттуу"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Raba priváhta láseš",
|
||||
"Open this link in a private window to pick another account.": "Raba dán liŋkka priváhta láseš válljen dihte eará konto.",
|
||||
"Use a different Microsoft account": "Geavat eará Microsoft konto"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Otvoriť v súkromnom okne",
|
||||
"Open this link in a private window to pick another account.": "Otvorte tento odkaz v súkromnom okne a vyberte iné konto.",
|
||||
"Use a different Microsoft account": "Použiť iné konto Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Odpri v zasebnem oknu",
|
||||
"Open this link in a private window to pick another account.": "Odprite to povezavo v zasebnem oknu, da izberete drug račun.",
|
||||
"Use a different Microsoft account": "Uporabi drug Microsoftov račun"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Ku fur daaqad gaar ah",
|
||||
"Open this link in a private window to pick another account.": "Ku fur isku xirkan daaqad gaar ah si aad u doorato xisaab kale.",
|
||||
"Use a different Microsoft account": "Isticmaal xisaab Microsoft oo kale"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Hape në dritare private",
|
||||
"Open this link in a private window to pick another account.": "Hape këtë lidhje në një dritare private për të zgjedhur një llogari tjetër.",
|
||||
"Use a different Microsoft account": "Përdor një llogari tjetër të Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Отвори у приватном прозору",
|
||||
"Open this link in a private window to pick another account.": "Отворите ову везу у приватном прозору да бисте изабрали други налог.",
|
||||
"Use a different Microsoft account": "Користи други Microsoft налог"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Öppna i privat fönster",
|
||||
"Open this link in a private window to pick another account.": "Öppna den här länken i ett privat fönster för att välja ett annat konto.",
|
||||
"Use a different Microsoft account": "Använd ett annat Microsoft-konto"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Ôtworz w prywatnym ôknie",
|
||||
"Open this link in a private window to pick another account.": "Ôtworz ten link w prywatnym ôknie, żeby wybrać inksze kōnto.",
|
||||
"Use a different Microsoft account": "Użyj inkszego kōnta Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "தனிப்பட்ட சாளரத்தில் திற",
|
||||
"Open this link in a private window to pick another account.": "வேறொரு கணக்கைத் தேர்ந்தெடுக்க, இந்த இணைப்பைத் தனிப்பட்ட சாளரத்தில் திறக்கவும்.",
|
||||
"Use a different Microsoft account": "வேறு Microsoft கணக்கைப் பயன்படுத்தவும்"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "เปิดในหน้าต่างส่วนตัว",
|
||||
"Open this link in a private window to pick another account.": "เปิดลิงก์นี้ในหน้าต่างส่วนตัวเพื่อเลือกบัญชีอื่น",
|
||||
"Use a different Microsoft account": "ใช้บัญชี Microsoft อื่น"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Gizli pencerede aç",
|
||||
"Open this link in a private window to pick another account.": "Başka bir hesap seçmek için bu bağlantıyı gizli pencerede açın.",
|
||||
"Use a different Microsoft account": "Farklı bir Microsoft hesabı kullan"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Шәхси тәрәзәдә ачу",
|
||||
"Open this link in a private window to pick another account.": "Икенче счет сайлау өчен бу сылтаманы шәхси тәрәзәдә ачыгыз.",
|
||||
"Use a different Microsoft account": "Башка Microsoft счетын куллану"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Відкрити в анонімному вікні",
|
||||
"Open this link in a private window to pick another account.": "Відкрийте це посилання в анонімному вікні, щоб вибрати інший обліковий запис.",
|
||||
"Use a different Microsoft account": "Використати інший обліковий запис Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "نجی ونڈو میں کھولیں۔",
|
||||
"Open this link in a private window to pick another account.": "دوسرا اکاؤنٹ منتخب کرنے کے لیے اس لنک کو نجی ونڈو میں کھولیں۔",
|
||||
"Use a different Microsoft account": "دوسرا Microsoft اکاؤنٹ استعمال کریں۔"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Maxfiy oynada ochish",
|
||||
"Open this link in a private window to pick another account.": "Boshqa hisobni tanlash uchun bu havolani maxfiy oynada oching.",
|
||||
"Use a different Microsoft account": "Boshqa Microsoft hisob qaydnomasidan foydalanish"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Vèrxi in na finestra privada",
|
||||
"Open this link in a private window to pick another account.": "Vèrxi sto link in na finestra privada par scoeger on altro conto.",
|
||||
"Use a different Microsoft account": "Dòpara on altro conto Microsoft"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Mở trong cửa sổ ẩn danh",
|
||||
"Open this link in a private window to pick another account.": "Mở liên kết này trong cửa sổ ẩn danh để chọn tài khoản khác.",
|
||||
"Use a different Microsoft account": "Dùng tài khoản Microsoft khác"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "עפענען אין אַ פּריוואַטן פֿענצטער",
|
||||
"Open this link in a private window to pick another account.": "עפֿן דעם לינק אין אַ פּריוואַטן פֿענצטער צו קלייַבן אַן אַנדער חשבון.",
|
||||
"Use a different Microsoft account": "נוצן אַן אַנדער Microsoft חשבון"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Ṣii ninu ferese aladani",
|
||||
"Open this link in a private window to pick another account.": "Ṣii ọna asopọ yii ninu ferese aladani lati yan akọọlẹ miiran.",
|
||||
"Use a different Microsoft account": "Lo akọọlẹ Microsoft miiran"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "在无痕窗口中打开",
|
||||
"Open this link in a private window to pick another account.": "在无痕窗口中打开此链接,即可选择其他账户。",
|
||||
"Use a different Microsoft account": "使用其他 Microsoft 账户"
|
||||
}
|
||||
@@ -1253,5 +1253,8 @@
|
||||
"{host} has no horizon-server. Install it there first, as the hosting guide says.": "{host} has no horizon-server. Install it there first, as the hosting guide says.",
|
||||
"Couldn't connect to {host}: {reason}": "Couldn't connect to {host}: {reason}",
|
||||
"Couldn't connect to {host}.": "Couldn't connect to {host}.",
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}."
|
||||
"horizon-server on {host} failed in {dir}.": "horizon-server on {host} failed in {dir}.",
|
||||
"Open in private window": "Vula efasiteleni eliyimfihlo",
|
||||
"Open this link in a private window to pick another account.": "Vula lesi sixhumanisi efasiteleni eliyimfihlo ukuze ukhethe elinye i-akhawunti.",
|
||||
"Use a different Microsoft account": "Sebenzisa enye i-akhawunti ye-Microsoft"
|
||||
}
|
||||
@@ -141,7 +141,7 @@ pub struct Found {
|
||||
/// installed, on any system (for tests and screenshots).
|
||||
pub const TOOLS_ENV: &str = "HORIZON_LAUNCHER_LINUX_TOOLS";
|
||||
|
||||
fn on_path(program: &str) -> bool {
|
||||
pub(crate) fn on_path(program: &str) -> bool {
|
||||
std::env::var_os("PATH").is_some_and(|path| {
|
||||
std::env::split_paths(&path).any(|dir| {
|
||||
let file = dir.join(program);
|
||||
|
||||
@@ -38,6 +38,7 @@ pub mod nightly;
|
||||
pub mod other_launchers;
|
||||
pub mod packs;
|
||||
pub mod pictures;
|
||||
pub mod private_window;
|
||||
pub mod process;
|
||||
pub mod proxy;
|
||||
pub mod relocation;
|
||||
|
||||
+38
-1
@@ -2008,6 +2008,10 @@ impl Launcher {
|
||||
|
||||
fn begin_sign_in(&mut self, target: Option<account::Account>) {
|
||||
self.cancel_sign_in();
|
||||
// The code page offers a private window: find the default browser meanwhile.
|
||||
std::thread::spawn(|| {
|
||||
horizon_launcher::private_window::detected();
|
||||
});
|
||||
self.sign_in = Some(match &target {
|
||||
Some(account) => SignIn::start_for(account.clone()),
|
||||
None => SignIn::start(),
|
||||
@@ -4561,7 +4565,22 @@ impl Launcher {
|
||||
.font_family(theme::MONO)
|
||||
.text_color(t.ink)
|
||||
.child(code.user_code.clone()),
|
||||
),
|
||||
)
|
||||
.when(!microsoft::has_private_window(), |col| {
|
||||
col.child(tr("Open this link in a private window to pick another account."))
|
||||
})
|
||||
.child({
|
||||
let uri = code.verification_uri.clone();
|
||||
div().flex().child(
|
||||
button(
|
||||
"sign-in-other",
|
||||
"Use a different Microsoft account",
|
||||
Kind::Ghost,
|
||||
&t,
|
||||
)
|
||||
.on_click(move |_, _, cx| microsoft::use_different_account(&uri, cx)),
|
||||
)
|
||||
}),
|
||||
Some(SignInState::Done(Ok(a))) => {
|
||||
div().child(trf("Signed in as {name}.", &[("name", &a.name)]))
|
||||
}
|
||||
@@ -4597,6 +4616,23 @@ impl Launcher {
|
||||
None
|
||||
} else if let Some(SignInState::Code(code)) = &self.sign_in_state {
|
||||
let (uri, user_code) = (code.verification_uri.clone(), code.user_code.clone());
|
||||
let (private_uri, link_uri) = (uri.clone(), uri.clone());
|
||||
// A private window picks the account; without one the link is for the player to carry over.
|
||||
let private = if microsoft::has_private_window() {
|
||||
button(
|
||||
"sign-in-private",
|
||||
"Open in private window",
|
||||
Kind::Secondary,
|
||||
&t,
|
||||
)
|
||||
.on_click(move |_, _, cx| microsoft::open_private(&private_uri, cx))
|
||||
} else {
|
||||
button("sign-in-copy-link", "Copy link", Kind::Secondary, &t).on_click(
|
||||
move |_, _, cx| {
|
||||
copy_to_clipboard(cx, gpui::ClipboardItem::new_string(link_uri.clone()))
|
||||
},
|
||||
)
|
||||
};
|
||||
Some(
|
||||
div()
|
||||
.flex()
|
||||
@@ -4611,6 +4647,7 @@ impl Launcher {
|
||||
},
|
||||
),
|
||||
)
|
||||
.child(private)
|
||||
.child(
|
||||
button("sign-in-open", "Open link", Kind::Secondary, &t)
|
||||
.on_click(move |_, _, cx| cx.open_url(&uri)),
|
||||
|
||||
@@ -79,3 +79,32 @@ pub(super) fn sign_in_button(id: &'static str, t: &Theme) -> Stateful<Div> {
|
||||
.child(tr("Sign in with Microsoft").to_string()),
|
||||
)
|
||||
}
|
||||
|
||||
/// How long the logout page gets before the code page opens after it.
|
||||
const LOGOUT_WAIT: Duration = Duration::from_millis(2500);
|
||||
|
||||
/// Whether the player's default browser has a private window to open the code page in. The
|
||||
/// first call asks the system (`begin_sign_in` warms it).
|
||||
pub(super) fn has_private_window() -> bool {
|
||||
horizon_launcher::private_window::detected().is_some()
|
||||
}
|
||||
|
||||
/// Opens the code page in the default browser's private window, where no Microsoft account is
|
||||
/// signed in; in the normal window if the browser can't be started.
|
||||
pub(super) fn open_private(uri: &str, cx: &mut App) {
|
||||
if horizon_launcher::private_window::open(uri).is_err() {
|
||||
cx.open_url(uri);
|
||||
}
|
||||
}
|
||||
|
||||
/// "Use a different Microsoft account": Microsoft's logout page first, then the code page, in
|
||||
/// the player's normal browser.
|
||||
pub(super) fn use_different_account(uri: &str, cx: &mut App) {
|
||||
cx.open_url(horizon_launcher::private_window::LOGOUT_URL);
|
||||
let uri = uri.to_owned();
|
||||
cx.spawn(async move |cx| {
|
||||
cx.background_executor().timer(LOGOUT_WAIT).await;
|
||||
cx.update(|cx| cx.open_url(&uri));
|
||||
})
|
||||
.detach();
|
||||
}
|
||||
@@ -101,6 +101,8 @@ impl Launcher {
|
||||
body = match state {
|
||||
Shown::Code(uri, user_code) => {
|
||||
let copy = user_code.to_string();
|
||||
let (private_uri, link_uri, other_uri) =
|
||||
(uri.to_string(), uri.to_string(), uri.to_string());
|
||||
body.child(
|
||||
raised()
|
||||
.flex()
|
||||
@@ -144,6 +146,49 @@ impl Launcher {
|
||||
}),
|
||||
),
|
||||
)
|
||||
.child(
|
||||
div()
|
||||
.mt(px(8.))
|
||||
.flex()
|
||||
.flex_col()
|
||||
.items_start()
|
||||
.gap(px(4.))
|
||||
.when(!microsoft::has_private_window(), |col| {
|
||||
col.child(shell::text(theme::night::CAPTION, shell::c(n.muted)).child(
|
||||
tr("Open this link in a private window to pick another account."),
|
||||
))
|
||||
})
|
||||
.child(
|
||||
div()
|
||||
.flex()
|
||||
.gap(px(8.))
|
||||
.child(if microsoft::has_private_window() {
|
||||
shell::action("owner-private", shell::Action::Quiet, &t)
|
||||
.child(shell::label(tr("Open in private window")))
|
||||
.on_click(move |_, _, cx| {
|
||||
microsoft::open_private(&private_uri, cx)
|
||||
})
|
||||
} else {
|
||||
shell::action("owner-copy-link", shell::Action::Quiet, &t)
|
||||
.child(shell::label(tr("Copy link")))
|
||||
.on_click(move |_, _, cx| {
|
||||
copy_to_clipboard(
|
||||
cx,
|
||||
gpui::ClipboardItem::new_string(link_uri.clone()),
|
||||
)
|
||||
})
|
||||
})
|
||||
.child(
|
||||
shell::action("owner-other", shell::Action::Quiet, &t)
|
||||
.child(shell::label(tr(
|
||||
"Use a different Microsoft account",
|
||||
)))
|
||||
.on_click(move |_, _, cx| {
|
||||
microsoft::use_different_account(&other_uri, cx)
|
||||
}),
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
Shown::Starting(what) => body.child(raised().child(
|
||||
shell::text(theme::night::UI, shell::c(n.ink_soft)).child(tr(what).to_string()),
|
||||
@@ -288,6 +333,8 @@ impl Launcher {
|
||||
card = match state {
|
||||
Shown::Code(uri, user_code) => {
|
||||
let copy = user_code.to_string();
|
||||
let (private_uri, link_uri, other_uri) =
|
||||
(uri.to_string(), uri.to_string(), uri.to_string());
|
||||
card.child(
|
||||
panel()
|
||||
.flex()
|
||||
@@ -321,6 +368,57 @@ impl Launcher {
|
||||
},
|
||||
)),
|
||||
)
|
||||
.child(
|
||||
div()
|
||||
.mt(px(8.))
|
||||
.flex()
|
||||
.flex_col()
|
||||
.items_start()
|
||||
.gap(px(4.))
|
||||
.when(!microsoft::has_private_window(), |col| {
|
||||
col.child(ui::text(13., FontWeight::NORMAL, ink::QUIET).child(tr(
|
||||
"Open this link in a private window to pick another account.",
|
||||
)))
|
||||
})
|
||||
.child(
|
||||
div()
|
||||
.flex()
|
||||
.gap(px(8.))
|
||||
.child(if microsoft::has_private_window() {
|
||||
ui::quiet(
|
||||
"owner-private",
|
||||
tr("Open in private window"),
|
||||
32.,
|
||||
&t,
|
||||
)
|
||||
.on_click(
|
||||
move |_, _, cx| microsoft::open_private(&private_uri, cx),
|
||||
)
|
||||
} else {
|
||||
ui::quiet("owner-copy-link", tr("Copy link"), 32., &t).on_click(
|
||||
move |_, _, cx| {
|
||||
copy_to_clipboard(
|
||||
cx,
|
||||
gpui::ClipboardItem::new_string(link_uri.clone()),
|
||||
)
|
||||
},
|
||||
)
|
||||
})
|
||||
.child(
|
||||
ui::quiet(
|
||||
"owner-other",
|
||||
tr("Use a different Microsoft account"),
|
||||
32.,
|
||||
&t,
|
||||
)
|
||||
.on_click(
|
||||
move |_, _, cx| {
|
||||
microsoft::use_different_account(&other_uri, cx)
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
Shown::Starting(what) => card
|
||||
.child(panel().child(ui::text(14., FontWeight::NORMAL, ink::BODY).child(tr(what)))),
|
||||
|
||||
@@ -0,0 +1,401 @@
|
||||
//! Add another Microsoft account: the device code page (microsoft.com/link) goes ahead with the
|
||||
//! account the browser is signed in to, and the device code flow has no way to ask for a picker.
|
||||
//! A private window has no Microsoft session, so the player signs in with the account they choose.
|
||||
//! This finds the player's default browser and opens a URL in its private window. No Azure app
|
||||
//! change is involved (#3786).
|
||||
//!
|
||||
//! Windows reads the `https` ProgId, macOS LaunchServices' handler for `https`, Linux
|
||||
//! `xdg-settings`. Safari has no private-window flag, so it counts as unsupported, like any
|
||||
//! browser not listed in [`Browser`]: the caller shows the link to copy instead.
|
||||
use std::io;
|
||||
use std::path::PathBuf;
|
||||
use std::process::{Command, Stdio};
|
||||
use std::sync::OnceLock;
|
||||
|
||||
/// Signs the player out of Microsoft in their normal browser, for "Use a different Microsoft account".
|
||||
pub const LOGOUT_URL: &str = "https://login.live.com/logout.srf";
|
||||
|
||||
/// A browser that has a private-window flag.
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
|
||||
pub enum Browser {
|
||||
Chrome,
|
||||
Chromium,
|
||||
Edge,
|
||||
Brave,
|
||||
Vivaldi,
|
||||
Opera,
|
||||
Firefox,
|
||||
}
|
||||
|
||||
impl Browser {
|
||||
/// Which browser a system's name for it is: a Windows ProgId (`MSEdgeHTM`), a macOS bundle
|
||||
/// id (`com.google.chrome`) or a Linux desktop file (`firefox.desktop`). `None` for Safari and
|
||||
/// anything unknown.
|
||||
pub fn from_id(id: &str) -> Option<Browser> {
|
||||
let id = id.to_ascii_lowercase();
|
||||
// Order matters: Edge's and Opera's ids are not Chrome's, but Chromium's contains it.
|
||||
[
|
||||
("edge", Browser::Edge),
|
||||
("brave", Browser::Brave),
|
||||
("vivaldi", Browser::Vivaldi),
|
||||
("opera", Browser::Opera),
|
||||
("firefox", Browser::Firefox),
|
||||
("chromium", Browser::Chromium),
|
||||
("chrome", Browser::Chrome),
|
||||
]
|
||||
.into_iter()
|
||||
.find(|(name, _)| id.contains(name))
|
||||
.map(|(_, browser)| browser)
|
||||
}
|
||||
|
||||
/// The flag that opens the page in a private window.
|
||||
pub fn private_flag(self) -> &'static str {
|
||||
match self {
|
||||
Browser::Edge => "--inprivate",
|
||||
Browser::Firefox => "--private-window",
|
||||
Browser::Opera => "--private",
|
||||
Browser::Chrome | Browser::Chromium | Browser::Brave | Browser::Vivaldi => {
|
||||
"--incognito"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The programs a Linux install puts on the PATH, most common first.
|
||||
#[cfg(all(unix, not(target_os = "macos")))]
|
||||
fn linux_programs(self) -> &'static [&'static str] {
|
||||
match self {
|
||||
Browser::Chrome => &["google-chrome-stable", "google-chrome"],
|
||||
Browser::Chromium => &["chromium", "chromium-browser"],
|
||||
Browser::Edge => &["microsoft-edge-stable", "microsoft-edge"],
|
||||
Browser::Brave => &["brave-browser", "brave", "brave-browser-stable"],
|
||||
Browser::Vivaldi => &["vivaldi-stable", "vivaldi"],
|
||||
Browser::Opera => &["opera"],
|
||||
Browser::Firefox => &["firefox", "firefox-esr"],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// How to start the browser.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub enum Target {
|
||||
/// An executable (a path, or a name on the PATH).
|
||||
Program(String),
|
||||
/// A macOS application, by bundle id.
|
||||
Bundle(String),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct Detected {
|
||||
pub browser: Browser,
|
||||
pub target: Target,
|
||||
}
|
||||
|
||||
/// A program and its arguments.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct Launch {
|
||||
pub program: String,
|
||||
pub args: Vec<String>,
|
||||
}
|
||||
|
||||
/// The command that opens `url` in `browser`'s private window.
|
||||
pub fn launch(detected: &Detected, url: &str) -> Launch {
|
||||
let flag = detected.browser.private_flag().to_owned();
|
||||
match &detected.target {
|
||||
Target::Program(program) => Launch {
|
||||
program: program.clone(),
|
||||
args: vec![flag, url.to_owned()],
|
||||
},
|
||||
// `open --args` only reaches a browser that starts: Chromium-based ones need a new
|
||||
// instance (-n) to take the flag while running; Firefox forwards it to the running one.
|
||||
Target::Bundle(id) => {
|
||||
let mut args = vec!["-b".to_owned(), id.clone()];
|
||||
if detected.browser != Browser::Firefox {
|
||||
args.insert(0, "-n".to_owned());
|
||||
}
|
||||
args.extend(["--args".to_owned(), flag, url.to_owned()]);
|
||||
Launch {
|
||||
program: "open".to_owned(),
|
||||
args,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// The program in a Windows `shell\open\command` value:
|
||||
/// `"C:\Program Files\Mozilla Firefox\firefox.exe" -osint -url "%1"` → the path.
|
||||
pub fn windows_program(command: &str) -> Option<String> {
|
||||
let command = command.trim();
|
||||
let program = match command.strip_prefix('"') {
|
||||
Some(rest) => rest.split('"').next()?,
|
||||
None => {
|
||||
let end = command.to_ascii_lowercase().find(".exe")? + ".exe".len();
|
||||
&command[..end]
|
||||
}
|
||||
};
|
||||
(!program.is_empty()).then(|| program.to_owned())
|
||||
}
|
||||
|
||||
/// The bundle id LaunchServices (the `com.apple.launchservices.secure` preferences, as JSON) has
|
||||
/// for the `https` scheme. `None` when the player never chose one: that is Safari.
|
||||
pub fn macos_https_handler(preferences: &serde_json::Value) -> Option<String> {
|
||||
let handlers = preferences.get("LSHandlers")?.as_array()?;
|
||||
["https", "http"].into_iter().find_map(|scheme| {
|
||||
handlers.iter().find_map(|handler| {
|
||||
let said = handler.get("LSHandlerURLScheme")?.as_str()?;
|
||||
if !said.eq_ignore_ascii_case(scheme) {
|
||||
return None;
|
||||
}
|
||||
["LSHandlerRoleAll", "LSHandlerRoleViewer"]
|
||||
.into_iter()
|
||||
.find_map(|role| handler.get(role)?.as_str())
|
||||
.map(str::to_owned)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(windows)]
|
||||
fn detect() -> Option<Detected> {
|
||||
use winreg::enums::HKEY_CLASSES_ROOT;
|
||||
use winreg::enums::HKEY_CURRENT_USER;
|
||||
use winreg::RegKey;
|
||||
let choice = RegKey::predef(HKEY_CURRENT_USER)
|
||||
.open_subkey(
|
||||
r"Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice",
|
||||
)
|
||||
.ok()?;
|
||||
let prog_id: String = choice.get_value("ProgId").ok()?;
|
||||
let browser = Browser::from_id(&prog_id)?;
|
||||
let command: String = RegKey::predef(HKEY_CLASSES_ROOT)
|
||||
.open_subkey(format!(r"{prog_id}\shell\open\command"))
|
||||
.ok()?
|
||||
.get_value("")
|
||||
.ok()?;
|
||||
Some(Detected {
|
||||
browser,
|
||||
target: Target::Program(windows_program(&command)?),
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
fn detect() -> Option<Detected> {
|
||||
let plist = dirs::home_dir()?
|
||||
.join("Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist");
|
||||
let json = Command::new("plutil")
|
||||
.args(["-convert", "json", "-o", "-"])
|
||||
.arg(plist)
|
||||
.stderr(Stdio::null())
|
||||
.output()
|
||||
.ok()?;
|
||||
let id = macos_https_handler(&serde_json::from_slice(&json.stdout).ok()?)?;
|
||||
Some(Detected {
|
||||
browser: Browser::from_id(&id)?,
|
||||
target: Target::Bundle(id),
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(all(unix, not(target_os = "macos")))]
|
||||
fn detect() -> Option<Detected> {
|
||||
let said = Command::new("xdg-settings")
|
||||
.args(["get", "default-web-browser"])
|
||||
.stderr(Stdio::null())
|
||||
.output()
|
||||
.ok()?;
|
||||
let browser = Browser::from_id(String::from_utf8_lossy(&said.stdout).trim())?;
|
||||
let program = browser
|
||||
.linux_programs()
|
||||
.iter()
|
||||
.find(|program| crate::launch::on_path(program))?;
|
||||
Some(Detected {
|
||||
browser,
|
||||
target: Target::Program((*program).to_owned()),
|
||||
})
|
||||
}
|
||||
|
||||
#[cfg(not(any(windows, unix)))]
|
||||
fn detect() -> Option<Detected> {
|
||||
None
|
||||
}
|
||||
|
||||
/// The default browser, if it has a private window; asked once.
|
||||
pub fn detected() -> Option<&'static Detected> {
|
||||
static DETECTED: OnceLock<Option<Detected>> = OnceLock::new();
|
||||
DETECTED.get_or_init(detect).as_ref()
|
||||
}
|
||||
|
||||
/// Opens `url` (https only) in the default browser's private window.
|
||||
pub fn open(url: &str) -> io::Result<()> {
|
||||
if !url.starts_with("https://") {
|
||||
return Err(io::Error::new(
|
||||
io::ErrorKind::InvalidInput,
|
||||
"not an https link",
|
||||
));
|
||||
}
|
||||
let detected =
|
||||
detected().ok_or_else(|| io::Error::new(io::ErrorKind::NotFound, "no browser"))?;
|
||||
let launch = launch(detected, url);
|
||||
let mut child = Command::new(PathBuf::from(&launch.program))
|
||||
.args(&launch.args)
|
||||
.stdin(Stdio::null())
|
||||
.stdout(Stdio::null())
|
||||
.stderr(Stdio::null())
|
||||
.spawn()?;
|
||||
// Some browsers stay as this process for as long as they run: reap it without waiting here.
|
||||
std::thread::spawn(move || {
|
||||
let _ = child.wait();
|
||||
});
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use serde_json::json;
|
||||
|
||||
#[test]
|
||||
fn systems_name_the_same_browsers_differently() {
|
||||
for (id, browser) in [
|
||||
("ChromeHTML", Browser::Chrome),
|
||||
("com.google.chrome", Browser::Chrome),
|
||||
("google-chrome.desktop", Browser::Chrome),
|
||||
("com.google.Chrome.desktop", Browser::Chrome),
|
||||
("chromium.desktop", Browser::Chromium),
|
||||
("chromium-browser.desktop", Browser::Chromium),
|
||||
("org.chromium.Chromium", Browser::Chromium),
|
||||
("MSEdgeHTM", Browser::Edge),
|
||||
("com.microsoft.edgemac", Browser::Edge),
|
||||
("microsoft-edge.desktop", Browser::Edge),
|
||||
("BraveHTML", Browser::Brave),
|
||||
("com.brave.Browser", Browser::Brave),
|
||||
("brave-browser.desktop", Browser::Brave),
|
||||
("VivaldiHTM.Q1W2E3", Browser::Vivaldi),
|
||||
("vivaldi-stable.desktop", Browser::Vivaldi),
|
||||
("OperaStable", Browser::Opera),
|
||||
("com.operasoftware.Opera", Browser::Opera),
|
||||
("FirefoxURL-308046B0AF4A39CB", Browser::Firefox),
|
||||
("org.mozilla.firefox", Browser::Firefox),
|
||||
("firefox-esr.desktop", Browser::Firefox),
|
||||
] {
|
||||
assert_eq!(Browser::from_id(id), Some(browser), "{id}");
|
||||
}
|
||||
for id in [
|
||||
"",
|
||||
"AppX4hxtad77fbk3jkkeerkrm0ze94wjf3s9",
|
||||
"com.apple.safari",
|
||||
"epiphany.desktop",
|
||||
] {
|
||||
assert_eq!(Browser::from_id(id), None, "{id}");
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn each_family_gets_its_own_private_flag() {
|
||||
assert_eq!(Browser::Edge.private_flag(), "--inprivate");
|
||||
assert_eq!(Browser::Firefox.private_flag(), "--private-window");
|
||||
for browser in [
|
||||
Browser::Chrome,
|
||||
Browser::Chromium,
|
||||
Browser::Brave,
|
||||
Browser::Vivaldi,
|
||||
] {
|
||||
assert_eq!(browser.private_flag(), "--incognito");
|
||||
}
|
||||
}
|
||||
|
||||
fn found(browser: Browser, target: Target) -> Detected {
|
||||
Detected { browser, target }
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_program_gets_the_flag_then_the_page() {
|
||||
let url = "https://www.microsoft.com/link";
|
||||
let edge = found(Browser::Edge, Target::Program("msedge.exe".into()));
|
||||
assert_eq!(
|
||||
launch(&edge, url),
|
||||
Launch {
|
||||
program: "msedge.exe".into(),
|
||||
args: vec!["--inprivate".into(), url.into()],
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_mac_app_starts_through_open_by_bundle_id() {
|
||||
let url = "https://www.microsoft.com/link";
|
||||
let chrome = found(Browser::Chrome, Target::Bundle("com.google.chrome".into()));
|
||||
let words = |l: Launch| l.args.join(" ");
|
||||
let l = launch(&chrome, url);
|
||||
assert_eq!(l.program, "open");
|
||||
// A new instance, so a running Chrome takes the flag.
|
||||
assert_eq!(
|
||||
words(l),
|
||||
"-n -b com.google.chrome --args --incognito https://www.microsoft.com/link"
|
||||
);
|
||||
let firefox = found(
|
||||
Browser::Firefox,
|
||||
Target::Bundle("org.mozilla.firefox".into()),
|
||||
);
|
||||
assert_eq!(
|
||||
words(launch(&firefox, url)),
|
||||
"-b org.mozilla.firefox --args --private-window https://www.microsoft.com/link"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn windows_commands_give_their_program() {
|
||||
assert_eq!(
|
||||
windows_program(r#""C:\Program Files\Mozilla Firefox\firefox.exe" -osint -url "%1""#),
|
||||
Some(r"C:\Program Files\Mozilla Firefox\firefox.exe".into())
|
||||
);
|
||||
assert_eq!(
|
||||
windows_program(
|
||||
r#" "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --single-argument %1"#
|
||||
),
|
||||
Some(r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe".into())
|
||||
);
|
||||
assert_eq!(
|
||||
windows_program(r"C:\Chrome\chrome.EXE --single-argument %1"),
|
||||
Some(r"C:\Chrome\chrome.EXE".into())
|
||||
);
|
||||
assert_eq!(windows_program(""), None);
|
||||
assert_eq!(windows_program(r#""""#), None);
|
||||
assert_eq!(windows_program("rundll32 something"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn launchservices_names_the_https_handler() {
|
||||
let prefs = json!({ "LSHandlers": [
|
||||
{ "LSHandlerContentType": "public.html", "LSHandlerRoleAll": "com.apple.safari" },
|
||||
{ "LSHandlerURLScheme": "mailto", "LSHandlerRoleAll": "com.apple.mail" },
|
||||
{ "LSHandlerURLScheme": "http", "LSHandlerRoleAll": "com.brave.browser" },
|
||||
{ "LSHandlerURLScheme": "https", "LSHandlerRoleAll": "com.google.chrome" },
|
||||
]});
|
||||
assert_eq!(
|
||||
macos_https_handler(&prefs).as_deref(),
|
||||
Some("com.google.chrome")
|
||||
);
|
||||
// http alone is enough when https was never set.
|
||||
let http_only = json!({ "LSHandlers": [
|
||||
{ "LSHandlerURLScheme": "HTTP", "LSHandlerRoleViewer": "org.mozilla.firefox" },
|
||||
]});
|
||||
assert_eq!(
|
||||
macos_https_handler(&http_only).as_deref(),
|
||||
Some("org.mozilla.firefox")
|
||||
);
|
||||
// Never chosen: the system default.
|
||||
assert_eq!(macos_https_handler(&json!({ "LSHandlers": [] })), None);
|
||||
assert_eq!(macos_https_handler(&json!({})), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn only_https_pages_are_opened() {
|
||||
for url in [
|
||||
"http://example.com",
|
||||
"file:///etc/passwd",
|
||||
"javascript:alert(1)",
|
||||
"",
|
||||
] {
|
||||
let err = open(url).unwrap_err();
|
||||
assert_eq!(err.kind(), io::ErrorKind::InvalidInput, "{url}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user