HangfireIO / Hangfire

An easy way to perform background job processing in .NET and .NET Core applications. No Windows Service or separate process required
https://www.hangfire.io
Other
9.31k stars 1.69k forks source link

The Turkish i Problem #807

Open CoskunSunali opened 7 years ago

CoskunSunali commented 7 years ago

Hello,

I am running Hangfire on top of an ASP.NET app which has the following globalization setting:

<globalization culture="tr-TR" uiCulture="tr" />

And Hangfire fails lowercasing and uppercasing the code/words/etc.

For instance, when I look at the details of a job, a class named as ImportSomethingJob is displayed as:

var ımportSomethingJob = Activate<ImportSomethingJob>();
ımportSomethingJob.Run()

As you can see the first letter of the variable is an i without a dot, which is "ı" in Turkish and is not a valid variable name for C#.

The other issue is when you are displaying the queue names. Consider a queue named as import_something, the "Enqueued" block display it as:

Queue: İMPORT_SOMETHİNG

As you can see, the letter i becomes "İ" which is an uppercase i. This one rather seems a CSS issue than a C# issue, since you are displaying the queue names in uppercase using CSS.

None of these are breaking issues but just wanted to provide some feedback.

Further reading:

http://haacked.com/archive/2012/07/05/turkish-i-problem-and-why-you-should-care.aspx/ https://blog.codinghorror.com/whats-wrong-with-turkey/ https://en.wikipedia.org/wiki/Dotted_and_dotless_I http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html http://mattryall.net/blog/2009/02/the-infamous-turkish-locale-bug https://msdn.microsoft.com/en-us/library/dd465121 https://msdn.microsoft.com/en-us/library/ms973919.aspx https://blogs.msdn.microsoft.com/anutthara/2005/12/05/avoiding-the-turkish-i-issue/ https://blogs.msdn.microsoft.com/qingsongyao/2009/02/13/introduce-the-turkish-i-issue/ https://msdn.microsoft.com/en-us/library/ms994325.aspx#cltsafcode_topic4

burningice2866 commented 7 years ago

A quick search through the source code reveals this line to be the issue, it's missing a InvariantCulture argument when calling ToLower

https://github.com/HangfireIO/Hangfire/blob/master/src/Hangfire.Core/Dashboard/JobMethodCallRenderer.cs#L56