mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 14:04:26 +01:00
Auto-detect language on payment page (#2552)
* Auto-detect language on payment page based on the requst Accept-Language header, which is the language you configured in your browser/OS and this 99.99% accurate * Update BTCPayServer/Services/LanguageService.cs Co-authored-by: britttttk <39231115+britttttk@users.noreply.github.com> * Update BTCPayServer/Services/LanguageService.cs Co-authored-by: Andrew Camilleri <evilkukka@gmail.com> * Update BTCPayServer/Services/LanguageService.cs Co-authored-by: Andrew Camilleri <evilkukka@gmail.com> * Update BTCPayServer/Services/LanguageService.cs Co-authored-by: Andrew Camilleri <evilkukka@gmail.com> * Added loop for all locales in Accept-Language sorted by weight + check if know this language * New public method so a unit test can be created for it * Unit test for language detection * Fix language service when not in browser context * fall back to default lang * Auto-detect setting + ?lang=auto support * Added invoice param "?lang=auto" info to docs * Using null-coalescing assignment operator * Reduce complexity and http dependency in language service Co-authored-by: britttttk <39231115+britttttk@users.noreply.github.com> Co-authored-by: Andrew Camilleri <evilkukka@gmail.com>
This commit is contained in:
@@ -482,7 +482,7 @@ namespace BTCPayServer.Controllers
|
||||
return View(model);
|
||||
}
|
||||
|
||||
private async Task<PaymentModel?> GetInvoiceModel(string invoiceId, PaymentMethodId paymentMethodId, string lang)
|
||||
private async Task<PaymentModel?> GetInvoiceModel(string invoiceId, PaymentMethodId paymentMethodId, string? lang)
|
||||
{
|
||||
var invoice = await _InvoiceRepository.GetInvoice(invoiceId);
|
||||
if (invoice == null)
|
||||
@@ -531,6 +531,21 @@ namespace BTCPayServer.Controllers
|
||||
var paymentMethodHandler = _paymentMethodHandlerDictionary[paymentMethodId];
|
||||
|
||||
var divisibility = _CurrencyNameTable.GetNumberFormatInfo(paymentMethod.GetId().CryptoCode, false)?.CurrencyDecimalDigits;
|
||||
|
||||
switch (lang?.ToLowerInvariant())
|
||||
{
|
||||
case "auto":
|
||||
case null when storeBlob.AutoDetectLanguage:
|
||||
lang = _languageService.AutoDetectLanguageUsingHeader(HttpContext.Request.Headers, null).Code;
|
||||
break;
|
||||
case { } langs when !string.IsNullOrEmpty(langs):
|
||||
{
|
||||
lang = _languageService.FindLanguage(langs)?.Code;
|
||||
break;
|
||||
}
|
||||
}
|
||||
lang ??= storeBlob.DefaultLang;
|
||||
|
||||
var model = new PaymentModel()
|
||||
{
|
||||
Activated = paymentMethodDetails.Activated,
|
||||
|
||||
Reference in New Issue
Block a user