<p></p>
<p><b>@tomhughes</b> commented on this pull request.</p>

<hr>

<p>In <a href="https://github.com/openstreetmap/openstreetmap-website/pull/6024#discussion_r2094493685">config/initializers/i18n.rb</a>:</p>
<pre style='color:#555'>> +
+  {
+    :code => code,
+    :native_name => native_name
+  }
+end
+
+AVAILABLE_LANGUAGES.sort_by! do |entry|
+  # https://stackoverflow.com/a/74029319
+  diactrics = [*0x1DC0..0x1DFF, *0x0300..0x036F, *0xFE20..0xFE2F].pack("U*")
+  entry[:native_name]
+    .downcase
+    .unicode_normalize(:nfd)
+    .tr(diactrics, "")
+    .unicode_normalize(:nfc)
+end
</pre>
<p dir="auto">The more correct way to do this is to use a gem like <code class="notranslate">ffi-icu</code> or <code class="notranslate">twitter_cldr</code> that can do proper unicode sorting, for example with <code class="notranslate">ffi-icu</code> you would do something like:</p>
<div class="highlight highlight-source-ruby" dir="auto"><pre class="notranslate"><span class="pl-s1">collator</span> <span class="pl-c1">=</span> <span class="pl-c1">ICU</span>::<span class="pl-v">Collation</span>::<span class="pl-v">Collator</span><span class="pl-kos">.</span><span class="pl-en">new</span><span class="pl-kos">(</span><span class="pl-s">"root"</span><span class="pl-kos">)</span>
<span class="pl-s1">collator</span><span class="pl-kos">.</span><span class="pl-en">strength</span> <span class="pl-c1">=</span> <span class="pl-pds">:primary</span>
<span class="pl-c1">AVAILABLE_LANGUAGES</span><span class="pl-kos">.</span><span class="pl-en">sort!</span> <span class="pl-k">do</span> |<span class="pl-s1">a</span><span class="pl-kos">,</span> <span class="pl-s1">b</span>|
  <span class="pl-s1">collator</span><span class="pl-kos">.</span><span class="pl-en">compare</span><span class="pl-kos">(</span><span class="pl-s1">a</span><span class="pl-kos">,</span> <span class="pl-s1">b</span><span class="pl-kos">)</span>
<span class="pl-k">end</span></pre></div>
<p dir="auto">Reducing strength from the default of <code class="notranslate">:tertiary</code> to <code class="notranslate">:primary</code> makes the sort case and accent insensitive though even at tertiary it still sorts by the base character first and only uses accent (at level secondary) and then case (at level tertiary) to break ties which probably makes little practical difference for the data set here.</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />Reply to this email directly, <a href="https://github.com/openstreetmap/openstreetmap-website/pull/6024#pullrequestreview-2848905847">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AAK2OLMTN3KZSCDVUPKBFSD27BUTPAVCNFSM6AAAAAB5K2O7PGVHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMZDQNBYHEYDKOBUG4">unsubscribe</a>.<br />You are receiving this because you are subscribed to this thread.<img src="https://github.com/notifications/beacon/AAK2OLIDZN2CQJNRYVONRZL27BUTPA5CNFSM6AAAAAB5K2O7PGWGG33NNVSW45C7OR4XAZNRKB2WY3CSMVYXKZLTORJGK5TJMV32UY3PNVWWK3TUL5UWJTVJZ3NHO.gif" height="1" width="1" alt="" /><span style="color: transparent; font-size: 0; display: none; visibility: hidden; overflow: hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0; mso-hide: all">Message ID: <span><openstreetmap/openstreetmap-website/pull/6024/review/2848905847</span><span>@</span><span>github</span><span>.</span><span>com></span></span></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/openstreetmap/openstreetmap-website/pull/6024#pullrequestreview-2848905847",
"url": "https://github.com/openstreetmap/openstreetmap-website/pull/6024#pullrequestreview-2848905847",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>