mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2024-11-19 18:11:36 +01:00
d8c1c51a21
* 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>
53 lines
2.5 KiB
C#
53 lines
2.5 KiB
C#
using System.Threading.Tasks;
|
|
using BTCPayServer.Services;
|
|
using BTCPayServer.Tests.Logging;
|
|
using Xunit;
|
|
using Xunit.Abstractions;
|
|
|
|
namespace BTCPayServer.Tests
|
|
{
|
|
public class LanguageServiceTests
|
|
{
|
|
public const int TestTimeout = TestUtils.TestTimeout;
|
|
public LanguageServiceTests(ITestOutputHelper helper)
|
|
{
|
|
Logs.Tester = new XUnitLog(helper) { Name = "Tests" };
|
|
Logs.LogProvider = new XUnitLogProvider(helper);
|
|
}
|
|
|
|
[Fact(Timeout = TestTimeout)]
|
|
[Trait("Integration", "Integration")]
|
|
public async Task CanAutoDetectLanguage()
|
|
{
|
|
using (var tester = ServerTester.Create())
|
|
{
|
|
await tester.StartAsync();
|
|
var languageService = tester.PayTester.GetService<LanguageService>();
|
|
|
|
// Most common format. First option does not have a quality score. Others do in descending order.
|
|
// Result should be nl-NL (because the default weight is 1 for nl)
|
|
var lang1 = languageService.FindLanguageInAcceptLanguageHeader("nl,fr;q=0.7,en;q=0.5");
|
|
Assert.NotNull(lang1);
|
|
Assert.Equal("nl-NL", lang1?.Code);
|
|
|
|
// Most common format. First option does not have a quality score. Others do in descending order. This time the first option includes a country.
|
|
// Result should be nl-NL (because the default weight is 1 for nl-BE and it does not exist in BTCPay Server, but nl-NL does and applies too for language "nl")
|
|
var lang2 = languageService.FindLanguageInAcceptLanguageHeader("nl-BE,fr;q=0.7,en;q=0.5");
|
|
Assert.NotNull(lang2);
|
|
Assert.Equal("nl-NL", lang2?.Code);
|
|
|
|
// Unusual format, but still valid. All values have a quality score and not ordered.
|
|
// Result should be fr-FR (because 0.7 is the highest quality score)
|
|
var lang3 = languageService.FindLanguageInAcceptLanguageHeader("nl;q=0.1,fr;q=0.7,en;q=0.5");
|
|
Assert.NotNull(lang3);
|
|
Assert.Equal("fr-FR", lang3?.Code);
|
|
|
|
// Unusual format, but still valid. Some language is given that we don't have and a wildcard for everything else.
|
|
// Result should be NULL, because "xx" does not exist and * is a wildcard and has no meaning.
|
|
var lang4 = languageService.FindLanguageInAcceptLanguageHeader("xx,*;q=0.5");
|
|
Assert.Null(lang4);
|
|
}
|
|
}
|
|
}
|
|
}
|