diff --git a/src/Lua/Standard/StringLibrary.cs b/src/Lua/Standard/StringLibrary.cs index 996adf82..e92702c7 100644 --- a/src/Lua/Standard/StringLibrary.cs +++ b/src/Lua/Standard/StringLibrary.cs @@ -2,6 +2,7 @@ using System.Text.RegularExpressions; using Lua.Internal; using Lua.Runtime; +using System.Globalization; namespace Lua.Standard; @@ -259,23 +260,23 @@ public async ValueTask Format(LuaFunctionExecutionContext context, Memory Format(LuaFunctionExecutionContext context, Memory().ToString(); + formattedValue = parameter.Read().ToString(CultureInfo.InvariantCulture); break; default: using (var strBuffer = new PooledArray(1)) diff --git a/tests/Lua.Tests/StringTests.cs b/tests/Lua.Tests/StringTests.cs index 921205d0..93bea036 100644 --- a/tests/Lua.Tests/StringTests.cs +++ b/tests/Lua.Tests/StringTests.cs @@ -1,5 +1,7 @@ using Lua.CodeAnalysis.Syntax; using Lua.CodeAnalysis.Syntax.Nodes; +using Lua.Standard; +using System.Globalization; namespace Lua.Tests; @@ -14,4 +16,16 @@ public async Task Test_ShortString_RealNewLine(string newLine) Assert.That(result, Has.Length.EqualTo(1)); Assert.That(result[0], Is.EqualTo(new LuaValue("\n"))); } + + [TestCase("fr-FR")] + public async Task Test_StringFormat_Culture(string newLine) + { + var state = LuaState.Create(); + state.OpenBasicLibrary(); + state.OpenStringLibrary(); + var culture = CultureInfo.CurrentCulture; + CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo(newLine); + await state.DoStringAsync($"""assert(tonumber(string.format("%f", 10.3)) == 10.3)"""); + CultureInfo.CurrentCulture = culture; + } } \ No newline at end of file